POST /v1/videos/generations returns a job id immediately and queues the render; you poll GET /v1/videos/generations/{id} until status is completed, at which point the MP4 is in data[0].b64_json.
A 2-second clip typically takes 50–90 seconds end-to-end. Jobs are retained for 24 hours after completion. Find video-capable models with supports containing video_generation — see model discovery.
Submit a job
202 Accepted with { "id": "...", "status": "queued", "created": 1748902000 }.
Poll for the result
Status values
status | Meaning |
|---|---|
queued | Accepted but not yet on a GPU. |
processing | Render in progress. |
completed | data[0].b64_json holds the MP4 bytes. |
failed | error is populated with details. |
Request fields
| Field | Required | Notes |
|---|---|---|
model | Yes | Must have video_generation in supports. |
prompt | Yes | 1–2000 characters; must not be blank. |
duration_seconds | No | 1–5, default 2. Longer clips proportionally extend render time. |
Polling cadence
Poll every 5–10 seconds; faster polling won’t speed up the render and counts against your rate limit. The poll endpoint is cheap (no GPU cost) but still rate-limited per key.Billing
Video models bill per output second — seepricing[] on GET /api/models for the active rate, or the billing reference.