Skip to main content
GET
https://api.tornadoapi.io
/
dashboard
/
jobs
Dashboard Jobs
curl --request GET \
  --url https://api.tornadoapi.io/dashboard/jobs \
  --header 'x-api-key: <x-api-key>'
{
  "jobs": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "url": "https://youtube.com/watch?v=dQw4w9WgXcQ",
      "status": "Completed",
      "error": null,
      "s3_key": "videos/never-gonna-give-you-up.mp4",
      "created_at": 1705000000000
    }
  ],
  "total": 1523,
  "limit": 50,
  "offset": 0
}

Overview

Returns a paginated list of jobs for your API key, with optional status filtering.

Header Parameters

x-api-key
string
required
Your API key for authentication

Query Parameters

limit
integer
default:"50"
Number of jobs to return (max 100)
offset
integer
default:"0"
Number of jobs to skip for pagination
status
string
Filter by status: pending, processing, completed, or failed

Response

jobs
array
Array of job objects
jobs[].id
string
Job UUID
jobs[].url
string
Source URL
jobs[].status
string
Job status: Pending, Processing, Completed, or Failed
jobs[].error
string
Error message (for failed jobs)
jobs[].s3_key
string
S3 key where file was uploaded (for completed jobs)
jobs[].created_at
integer
Unix timestamp in milliseconds when the job was created
total
integer
Total number of jobs matching the filter
limit
integer
Number of jobs returned
offset
integer
Offset used for pagination

Examples

curl -X GET "https://api.tornadoapi.io/dashboard/jobs?limit=50&offset=0" \
  -H "x-api-key: sk_your_api_key"

Success Response

{
  "jobs": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "url": "https://youtube.com/watch?v=dQw4w9WgXcQ",
      "status": "Completed",
      "error": null,
      "s3_key": "videos/never-gonna-give-you-up.mp4",
      "created_at": 1705000000000
    }
  ],
  "total": 1523,
  "limit": 50,
  "offset": 0
}

Error Responses

{
  "error": "Invalid API Key"
}

Pagination Example

let currentPage = 0;
const pageSize = 50;

async function loadJobs(page = 0) {
  const response = await fetch(
    `/dashboard/jobs?limit=${pageSize}&offset=${page * pageSize}`,
    { headers: { 'x-api-key': apiKey } }
  );
  const data = await response.json();

  // Render jobs
  renderJobsTable(data.jobs);

  // Update pagination
  const totalPages = Math.ceil(data.total / pageSize);
  updatePagination(page, totalPages, data.total);
}

function nextPage() {
  currentPage++;
  loadJobs(currentPage);
}

function prevPage() {
  if (currentPage > 0) {
    currentPage--;
    loadJobs(currentPage);
  }
}

Error Sanitization

Error messages are automatically sanitized to remove internal tool names:
  • yt-dlpdownloader
  • YT-DLPdownloader
  • yt_dlpdownloader
This provides cleaner error messages for end users.