Video Generation
Video generation is asynchronous: create a task to get a task ID, then poll for the result. All video models share the same POST /v1/videos endpoint — just change the model parameter.
Supported Models
| Model Family | Notes | Docs |
|---|---|---|
| Seedance_sup | ByteDance video model, 720p/1080p/4K, /v1/assets library | Seedance_sup · Asset Library |
| Seedance V3 (Native) | Volcengine-native protocol /v3/video/tasks, /v3/assets library | Seedance V3 · Asset Library V3 |
| Kling | Kuaishou video model | Kling |
| Vidu | Shengshu Vidu Q3 series (viduq3-pro / viduq3-turbo), 1–16 s, audio-video co-generation by default | Vidu |
| Grok Imagine | xAI grok-imagine-video series, 1–15 s (default 8 s), native audio and 1080p on 1.5 | Grok Imagine |
Endpoint Overview
| Operation | Method & Path | Applies to |
|---|---|---|
| Create video task (unified) | POST $URL/v1/videos | Seedance_sup / Kling |
| Query task status | GET $URL/v1/videos/{task_id} | Seedance_sup / Kling |
| Create task (native) | POST $URL/v3/video/tasks | Seedance V3 (Native) |
| Query/Cancel task (native) | GET / DELETE $URL/v3/video/tasks/{task_id} | Seedance V3 (Native) |
| Asset library (Seedance_sup) | POST/GET $URL/v1/assets* | Seedance_sup |
| Asset library (Native V3) | POST/GET $URL/v3/assets* | Seedance V3 (Native) |
Two interface styles
- Unified
/v1/videos: shared by all models, OpenAI Video style responses (id/status/video_url) — described on this page; - Native passthrough: native Seedance V3 uses the Volcengine-native protocol
/v3/video/tasksand the asset library/v3/assets*— see Asset Library V3.
1. Create Task
bash
curl $URL/v1/videos \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"prompt": "A cat wearing sunglasses walking on a neon street",
"seconds": "5",
"size": "720p"
}'Response:
json
{ "id": "task_xxxxxxxx", "model": "seedance-2-0", "status": "in_progress", "created_at": 1785000000 }2. Query Task
Poll with the id from step 1 (every 5-10 seconds):
bash
curl $URL/v1/videos/task_xxxxxxxx \
-H "Authorization: Bearer $YOUR_API_KEY"When finished:
json
{ "id": "task_xxxxxxxx", "model": "seedance-2-0", "status": "completed", "video_url": "https://..." }Task Status
| Status | Meaning | Action |
|---|---|---|
queued | Queued | Keep polling |
in_progress | Generating | Keep polling |
completed | Success | Get the video URL from the response; download it soon |
failed | Failed | Check error.message |
Idempotency
If you send a custom client_request_id (idempotency key), use a fresh unique value for each new task (e.g. UUID). Reusing an old value hits the upstream idempotency cache and returns the historical result.
Timeout
- Tasks stuck over 20 minutes are auto-failed and won't be retried indefinitely; poll to get the final status.
New Models
We keep onboarding new video models. Each new model gets its own doc page; the calling convention stays the same — only model and a few parameters differ.
