State of an AI job: QUEUE, RUNNING, FINISHED, ERROR or SKIPPED.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
GET /aiworkflow/{work_id}
{work_id}Returns the state of an AI job created by POST /aiworkflow. This is the tracking endpoint: generation is asynchronous and the creation call returns before the content exists.
AuthorizationRequires the account API key in the
Authorizationheader, without theBearerprefix.
HTTP Method & Path
GET /aiworkflow/{work_id}
Base URL: https://api-v2.pandavideo.com.br
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
work_id | string (uuid) | Yes | Job identifier returned by POST /aiworkflow |
Response
Response Schema
| Field | Type | Content |
|---|---|---|
id | string (uuid) | Job ID — the same work_id |
organization_id | string (uuid) | Organization that owns the job |
video_id | string (uuid) | Video being processed |
status | string | QUEUE, RUNNING, FINISHED, ERROR or SKIPPED. Starts at QUEUE |
type | string | Job type — see The type vocabulary below |
metadata | object | Job data, varies per type |
metadata.from_lang | string | Source language |
metadata.to_lang | string | Target language (translation and dubbing jobs) |
metadata.dependent_works | array | IDs of the jobs derived from this one (e.g. a transcription that triggers translations) |
metadata.dependent_work | string or null | ID of the job this one depends on |
created_at | string (ISO 8601) | Creation |
updated_at | string (ISO 8601) | Last state change |
The status lifecycle
status lifecycle| Status | Meaning |
|---|---|
QUEUE | Queued, not started. This is the initial state |
RUNNING | Being processed |
FINISHED | Done — the content is available |
ERROR | Failed |
SKIPPED | Skipped (e.g. the resource already existed in that language) |
QUEUE → RUNNING → FINISHED, or ERROR / SKIPPED.
The type vocabulary
type vocabulary
The jobtypeis not the sametypeyou send in the request.
type sent to POST /aiworkflow | type stored on the job |
|---|---|
ABSTRACT | ABSTRACT |
MINDMAP | MINDMAP |
QUESTIONS | QUESTIONS |
TRANSCRIPTION | TRANSCRIPTION |
TRANSLATION | TRANSLATE |
DUBBING | DUBBING |
ALL_TEXT_ITEMS | Creates several jobs (ABSTRACT, MINDMAP, QUESTIONS) linked by dependent_works |
There is also a LIPSYNC type, produced internally and not accepted in the request.
All jobs of a video
To list every job of a video instead of checking them one by one:
GET /aiworkflow?video_id={video_id}
Returns an array of jobs in the same format above. Real response of a video whose pt-BR transcription triggered two translations:
[
{
"id": "{work_id}",
"organization_id": "{organization_id}",
"video_id": "{video_id}",
"status": "FINISHED",
"type": "TRANSCRIPTION",
"metadata": {
"from_lang": "pt-BR",
"dependent_works": ["{work_id_2}", "{work_id_3}"]
},
"created_at": "2026-07-08T18:41:54.450Z",
"updated_at": "2026-07-08T18:42:03.892Z"
},
{
"id": "{work_id_2}",
"organization_id": "{organization_id}",
"video_id": "{video_id}",
"status": "FINISHED",
"type": "TRANSLATE",
"metadata": {
"from_lang": "pt-BR",
"to_lang": "es",
"dependent_work": null
},
"created_at": "2026-07-08T18:41:54.445Z",
"updated_at": "2026-07-08T20:14:26.665Z"
}
]
Important
status: FINISHEDtells you the job finished. To know what became available and in which languages, readconfig.ai.resources[]inGET /videos/{video_id}.- A few seconds between checks is enough. Aggressive polling does not move the queue faster.
dependent_worksexplains why a single call may show up as several jobs.
Error Responses
401: missing or invalid API key.404: job not found (or it belongs to another organization).500: internal error.
Example Usage
cURL
# One job
curl -X GET "https://api-v2.pandavideo.com.br/aiworkflow/{work_id}" \
-H "Authorization: {api_key}"
# Every job of a video
curl -X GET "https://api-v2.pandavideo.com.br/aiworkflow?video_id={video_id}" \
-H "Authorization: {api_key}" 401Missing or invalid API key.
404Job not found.
