Async generations
Poll task status and save signed outputs before expiry.
Generation lifecycle
Create with POST /videos or POST /images. A 202 response means the request is accepted or replayed; it is not a completed file. Poll GET /generations/{id} with the original API key, at most once every 10 seconds while active.
| Status | Meaning |
|---|---|
pending | Accepted or awaiting submission confirmation. |
processing | Generating or preparing retained output. |
success | Download URLs are available. |
failed | Generation failed. |
canceled | Generation was canceled. |
expired | Retained output is no longer available. |
Successful response
{
"id": "api_0000000000000000000000000000000000000000000000000000000000000000",
"model": "seedance-2.5-lite",
"status": "success",
"created_at": "2026-10-03T12:00:00.000Z",
"credits": {
"cost": 80
},
"outputs": [
{
"type": "video",
"url": "https://YOUR_SIGNED_OUTPUT_URL",
"expires_at": "2026-10-03T12:15:00.000Z"
}
],
"error": null
}Use outputs[].url; there is no output.video_url or status_url field. Build the status endpoint from the returned id. Keep signed URLs private.
Download and retention
Each URL expires within 15 minutes and never outlives the asset retention period. Query again for a fresh URL while the asset is retained. Generated media is retained for 14 days. Download and save it in your own storage before expiry.
Uncertain submissions
A connection failure can happen after acceptance. Retry the exact same request and idempotency key. If the original task remains pending, keep its ID and contact support. Do not create a replacement automatically: it can cause another charge. An uncertain task is not automatically refunded solely because time has passed.