curl --request POST \
--url https://api.apiyi.com/seedance/api/v3/contents/generations/tasks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "doubao-seedance-2-0-fast-260128",
"content": [
{
"type": "text",
"text": "Drone shot flying over an autumn valley, golden forests and a winding river, cinematic"
}
]
}
'{
"id": "cgt-20260606160057-6bbjd"
}Seedance 2.0 Video Generation API Reference
Seedance 2.0 video generation API reference with an interactive Playground: text-to-video, first/last frame, and multi-modal reference on one async endpoint, with full polling and download code.
curl --request POST \
--url https://api.apiyi.com/seedance/api/v3/contents/generations/tasks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "doubao-seedance-2-0-fast-260128",
"content": [
{
"type": "text",
"text": "Drone shot flying over an autumn valley, golden forests and a winding river, cinematic"
}
]
}
'{
"id": "cgt-20260606160057-6bbjd"
}Bearer sk-your-api-key (the Token must have the SeeDance2 group enabled), fill in model / content, and send. A successful submission returns a task id; polling and download flows are covered in the code samples below.content array selects the mode. For model selection, pricing, the resolution/pixel table, and FAQ, see the Seedance 2.0 Overview.- The path prefix is
/seedance/api/v3— do not drop the/apisegment, and do not use/v1/videos - The Token must have the
SeeDance2group enabled, otherwise you get “no available channel for this model” generate_audiodefaults to true (output has sound) — passfalseexplicitly for silent video- Python requests needs the
"Accept-Encoding": "identity"header, or it raises a gzip decoding error - The success status is
succeeded(notcompleted); the video URL lives atcontent.video_urland expires in 24 hours
Code Examples
curl -X POST "https://api.apiyi.com/seedance/api/v3/contents/generations/tasks" \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2-0-fast-260128",
"content": [
{"type": "text", "text": "Drone shot flying over an autumn valley, golden forests and a winding river, cinematic"}
],
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"generate_audio": false
}'
# Returns {"id":"cgt-2026xxxx-xxxxx"} — poll the query endpoint with this id
Parameter Reference
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
model | string | ✓ | — | doubao-seedance-2-0-260128 (standard, 1080p) / doubao-seedance-2-0-fast-260128 (fast, up to 720p). Plain ID, no ep- prefix |
content | array | ✓ | — | Input array — see “Generation modes” below |
resolution | string | 720p | 480p / 720p / 1080p (no 1080p on fast) | |
ratio | string | adaptive | 16:9 / 4:3 / 1:1 / 3:4 / 9:16 / 21:9 / adaptive; every ratio in a tier costs the same | |
duration | int | 5 | Whole seconds 4-15; -1 lets the model choose (billed by actual output) | |
generate_audio | bool | true | Synchronized audio (voice/SFX/music, mono) | |
watermark | bool | false | Adds an AI-generated watermark | |
seed | int | -1 | [-1, 2^32-1]; same seed gives similar (not identical) results | |
return_last_frame | bool | false | Returns a watermark-free last-frame png for clip chaining | |
execution_expires_after | int | 172800 | Task expiry threshold in seconds, range [3600, 259200] |
frames, camera_fixed, or service_tier (online inference only) — those are Seedance 1.x parameters and will be ignored or rejected.Generation modes (content combinations)
| Mode | content items | role values |
|---|---|---|
| Text-to-video | 1 text | — |
| First frame | optional text + 1 image_url | first_frame or omitted |
| First + last frame | optional text + 2 image_url | required: first_frame / last_frame |
| Multi-modal reference | text + 1-9 image_url (+ optional video_url / audio_url) | reference_image / reference_video / reference_audio |
data:image/png;base64,...), and asset IDs (asset://...). Inputs containing real human faces are rejected. Audio must be sent together with at least one image or video.
Response Format
Creation returns only the task ID (not the video):{ "id": "cgt-20260606160057-6bbjd" }
GET /seedance/api/v3/contents/generations/tasks/{id}. A successful task looks like this (real sample from our tests):
{
"id": "cgt-20260606160057-6bbjd",
"model": "doubao-seedance-2-0-fast-260128",
"status": "succeeded",
"content": {
"video_url": "https://ark-acg-cn-beijing.tos-cn-beijing.volces.com/....mp4?X-Tos-Expires=86400&..."
},
"usage": { "completion_tokens": 108900, "total_tokens": 108900 },
"created_at": 1780732857,
"updated_at": 1780732991,
"seed": 97151,
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"framespersecond": 24,
"generate_audio": true,
"draft": false
}
- The video URL is at
content.video_url, not top-level; it is a signed link that expires in 24 hours — download immediately - State machine:
queued → running → succeeded / failed / expired; success issucceeded - Download the link with a plain GET — do not send the
Authorizationheader to the signed URL
usage.completion_tokens is the billed token count and follows tokens ≈ duration × width × height × 24 / 1024 (within 0.1% in our tests). With duration: -1 or ratio: adaptive, the actual length and ratio are reported in the response’s duration / ratio fields.Authorizations
API key from the APIYI console (Token must have the SeeDance2 group enabled)
Body
Model ID (plain ID, no ep- prefix). Standard supports 1080p; fast caps at 720p but generates faster — both bill at the same rate on APIYI
doubao-seedance-2-0-260128, doubao-seedance-2-0-fast-260128 "doubao-seedance-2-0-fast-260128"
Input array. Text-to-video: a single text item. Image-to-video: add image_url items (role: first_frame / last_frame). Multi-modal reference: 1-9 image_url items (role: reference_image) plus optional video_url / audio_url. The three image modes are mutually exclusive
Show child attributes
Show child attributes
Resolution tier (defines pixel area — every ratio in a tier costs the same). 1080p is not available on the fast model
480p, 720p, 1080p Aspect ratio. adaptive auto-fits the input (recommended for image-to-video to avoid cropping); the actual ratio is returned in the task's ratio field
16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive Video length in whole seconds, 4-15; or -1 to let the model choose (billed by actual output). Cost scales linearly with duration
5
Generate synchronized audio (voice, SFX, background music; mono). Note it DEFAULTS TO TRUE — pass false explicitly for silent video
Add an AI-generated watermark in the bottom-right corner
Random seed, [-1, 2^32-1]. The same seed produces similar (not identical) results; -1 means random
Return the last frame as a watermark-free png (same dimensions as the video) — chain it as the first frame of the next task to produce continuous multi-clip videos
Task expiry threshold in seconds; tasks exceeding it are marked expired. Range [3600, 259200]
Response
Task created. Returns the task ID for polling
Creation response. Poll GET /seedance/api/v3/contents/generations/tasks/{id}; on success the video URL is at content.video_url (expires in ~24 h) and billed tokens at usage.completion_tokens
Video generation task ID (kept for 7 days)
"cgt-20260606160057-6bbjd"
Was this page helpful?