Videos · Concepts
Jobs
A job is one request to generate one prompt's worth of video. It moves through a queue to a GPU worker and ends with a file you can download.
Lifecycle
POST /v1/videos validates the request and, only if it is valid, puts a job in the queue and returns its id. A GPU worker for the right model claims the job, runs it, uploads the result to object storage, and marks the job finished. You find out by checking its status.
| Status | Meaning |
|---|---|
queued | Accepted and waiting for a worker. No GPU time has been used yet. |
processing | A worker claimed it and is generating. |
completed | The video is ready. Fetch it from /content. |
failed | The job could not be completed. |
canceled | The job was canceled before it finished. |
Checking status
- Poll
GET /v1/videos/{id}every 3 to 5 seconds. Generation takes a minute or two, so faster polling only adds load. - There is no progress percentage:
progressis alwaysnull. The underlying engine does not report progress mid-generation in a way worth showing. - The submit response includes
eta_seconds, a rough estimate. Use it to decide when to start polling, not as a deadline. - A job that has not reached
processingcan sit inqueuedwhen every worker is busy. That is normal under load.
Webhooks (a callback_url on submit) are planned as a later addition so well-behaved clients do not need to poll. They are not part of the first release.
Results
Finished videos are stored in object storage and served through a short-lived signed URL. GET /v1/videos/{id}/content redirects (302) to it, and returns 404 if the job is not completed. A job that asked for several outputs has one variant per output (see Quality and output).
Who can see a job
Jobs belong to the API key that created them. Reading or downloading another key's job returns 404.