API reference/Read a job
GET

/v1/{job_id}

Progress, and the rows once every video has settled.

Request

No body. The key must belong to the workspace that created the job; anything else returns 404, including an id that does not exist — this endpoint never confirms that someone else’s job is real.

Response

200 · still running
{
"job_id": "8f2c1e40-91a3-4b7e",
"status": "processing",
"videos": 3,
"counts": {
"queued": 1,
"processing": 1,
"done": 1,
"failed": 0
},
"results": null
}

results is null until every video in the job has settled. Poll counts to watch progress; polling never consumes anything.

200 · settled
{
"job_id": "8f2c1e40-91a3-4b7e",
"status": "partial",
"videos": 3,
"credits_charged": 2,
"counts": {
"queued": 0,
"processing": 0,
"done": 2,
"failed": 1
},
"results": [
{
"video_id": "dQw4w9WgXcQ",
"status": "done",
"rows": {
"results": [
{
"restaurant_name": "Mel's Drive-In",
"food_ordered": "double cheeseburger"
}
]
},
"usage": {
"credits_charged": 1,
"row_count": 1,
"chunk_count": 9
}
},
{
"video_id": "kJQP7kiw5Fk",
"status": "failed",
"error": {
"code": "no_captions",
"message": "no caption track",
"retryable": false
},
"credits_charged": 0
}
]
}

status is done when every video succeeded, failed when every one failed, and partial when it was a mix. A failed video carries an error and is never charged.

Results are returned once

The first read that finds the job settled returns the rows and deletes them here, along with the URLs you submitted. A later read returns the same envelope with rows: null on every video.

Reads while the job is still running are safe: nothing is handed over, so nothing is deleted. The handover happens on one read and one only — the first one that finds nothing left queued or processing.

CAREFUL
Persist in the same code path that reads. If your process dies between the response arriving and your write committing, the rows are gone and the videos have to be run again.
Was this page useful?Tell us what was missing