Skip to main content

Jobs

GET /v1/jobs/:id

Check the status and progress of an asynchronous job.

Lost a job ID?

GET /v1/jobs lists recent jobs for your workspace, newest first.

Several operations (analyze, export, translate, voiceover) run asynchronously and return a jobId. Use this endpoint to poll for progress and results.

Path parameters​

ParameterTypeRequiredDescription
idstringYesJob ID (e.g. analysis_..., export_..., translation_..., tool_...)

Example​

curl https://api.vidocu.ai/v1/jobs/analysis_1708300000000_abc1234 \
-H "Authorization: Bearer vdo_live_your_key_here"

Response 200 OK​

{
"jobId": "analysis_1708300000000_abc1234",
"type": "analysis",
"status": "processing",
"progress": {
"step": "transcribing",
"message": "Creating video script...",
"percentage": 45
},
"result": null,
"error": null,
"createdAt": "2024-02-19T10:00:00.000Z",
"updatedAt": "2024-02-19T10:01:30.000Z"
}

Response fields​

FieldTypeDescription
jobIdstringUnique job identifier
typestringanalysis, export, translation, or tool
statusstringpending, processing, completed, or failed
progressobject | nullCurrent progress (when processing)
progress.stepstringCurrent processing step
progress.messagestringHuman-readable progress message
progress.percentagenumber | undefinedCompletion percentage (0–100)
resultobject | nullResult data (when completed)
errorstring | nullError message (when failed)
errorCodestring | nullMachine-readable reason when failed and the caller can act on it. Today: no_speech, transcription_failed (analysis jobs with scriptSource: "transcript").
createdAtstringJob creation timestamp
updatedAtstringLast status update timestamp

Job statuses​

StatusDescription
pendingJob created, waiting to start
processingJob is running
completedJob finished successfully
failedJob encountered an error

Polling pattern​

Poll the job endpoint until status is completed or failed:

async function waitForJob(jobId: string, apiKey: string): Promise<any> {
while (true) {
const res = await fetch(`https://api.vidocu.ai/v1/jobs/${jobId}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const job = await res.json();

if (job.status === "completed") return job.result;
if (job.status === "failed") throw new Error(job.error);

// Wait 2 seconds between polls
await new Promise((r) => setTimeout(r, 2000));
}
}

For a better approach, use webhooks to receive notifications when jobs complete.

Errors​

StatusCodeCause
401authentication_errorInvalid or missing API key
404not_foundJob not found or belongs to a different workspace

List jobs​

GET /v1/jobs

List recent jobs for your workspace, newest first. Useful when you've lost a jobId, or to check whether anything is still running before you start more work.

Query parameters​

ParameterTypeDefaultDescription
statusstring-pending, processing, completed, or failed
typestring-export, analysis, translation, tool, or process
pagenumber1Page number
limitnumber20Jobs per page, max 100
cursorstring-nextCursor from a previous response. Overrides page.

Example​

curl "https://api.vidocu.ai/v1/jobs?status=processing&limit=10" \
-H "Authorization: Bearer vdo_live_your_key_here"

Response 200 OK​

{
"jobs": [
{
"jobId": "export_1754739600000_a1b2c3",
"type": "export",
"status": "processing",
"progress": { "step": "rendering", "percent": 42 },
"error": null,
"createdAt": "2026-08-09T10:20:00.000Z",
"updatedAt": "2026-08-09T10:21:30.000Z"
}
],
"pagination": { "total": 37, "page": 1, "limit": 10, "totalPages": 4, "nextCursor": "eyJ0Ijoi..." }
}

The list omits result - fetch the single job to get it, so a page of completed jobs doesn't carry every payload.

Errors​

StatusCodeCause
400validation_errorUnknown status or type, or limit out of range
401authentication_errorInvalid or missing API key