Skip to main content
Generation is asynchronous. POST /videos/generation returns a job immediately, and the video becomes available later on the same job.

Job statuses

Poll a single job

Call GET /jobs/{jobId}. While the job is not final, the response includes a Retry-After header with the number of seconds to wait, currently 10. Final jobs do not include the header.

Poll many jobs

To track many jobs at once, list the unfinished jobs instead of polling each one:
GET /jobs supports these query parameters: The response is a page of jobs. Continue with next_cursor while has_more is true.

Outputs and retention

  • output.files[].url is a signed URL that expires after about one hour. Fetch the job again to get a fresh URL.
  • expires_at is 48 hours after completed_at. After that time, output.files is empty, but the rest of the job stays available.
Download outputs to your own storage as soon as a job succeeds. CreatOK cannot recover outputs after 48 hours.

Metadata

Pass your own identifiers in metadata when you submit a job, for example an order ID. The job returns the same object, so you can match results to your records.

Cost

cost.amount_usd is the amount charged when the job was accepted. When a job fails or is canceled, the full amount is refunded to your API wallet. Amounts are decimal strings with six decimal places.