Seedance 2.0 Video
Seedance 2.0 Video uses an asynchronous video task API. Create a task first, then poll the retrieve endpoint for status and the final video URL.
For doubao-seedance-2.5, see the separate Seedance 2.5 guide.
Recommended integration
For new integrations, use the unified /v1/video/generations endpoint with the official-style top-level content array for text, images, videos, and audio.
Endpoints
| Capability | Method | Path |
|---|---|---|
| Create video task (official-compatible) | POST | /api/v3/contents/generations/tasks |
| Retrieve video task (official-compatible) | GET | /api/v3/contents/generations/tasks/{task_id} |
| Create video task | POST | /v1/video/generations |
| Retrieve video task | GET | /v1/video/generations/{task_id} |
| Create asynchronous image moderation task | POST | /v1/images/moderations/tasks |
| Retrieve asynchronous image moderation task | GET | /v1/images/moderations/tasks/{task_id} |
Supported Models
| Model | Notes |
|---|---|
doubao-seedance-2.0 | Seedance 2.0 standard model |
doubao-seedance-2.0-fast | Seedance 2.0 fast model; availability depends on account permissions and platform configuration |
Supported Modes
| Mode | How to call |
|---|---|
| Text to video | Send text items in the top-level content array |
| Image to video | Send image items in content; use role for first frame, last frame, or reference images |
| Video reference | Send video items in content with role: "reference_video" |
| Audio reference | Send audio items in content with role: "reference_audio" together with image or video media |
| Image moderation | Create an asynchronous moderation task, then use the returned asset:// URL in content |
Top-Level Parameters
| Parameter | Required | Description |
|---|---|---|
model | Yes | Seedance model name, such as doubao-seedance-2.0 |
content | Recommended | Multimodal content array for prompts, media inputs, media types, and roles |
duration | No | Duration in integer seconds. Default is usually 5; Seedance 2.0 commonly supports 4 to 15 |
ratio | No | Output aspect ratio. Supported values include adaptive, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 |
resolution | No | Output resolution. Common values are 480p, 720p, and 1080p; doubao-seedance-2.0-fast does not support 1080p |
generate_audio | No | Whether to generate synchronized audio. Set false for silent video |
watermark | No | Whether to add a watermark |
Examples
Text-to-Video
curl -X POST https://cubicspaces.cloud/v1/video/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "doubao-seedance-2.0",
"content": [
{
"type": "text",
"text": "A cinematic aerial shot of a futuristic cubic city at sunrise"
}
],
"duration": 5,
"resolution": "720p",
"ratio": "16:9",
"generate_audio": false,
"watermark": false
}'Image-to-Video
curl -X POST https://cubicspaces.cloud/v1/video/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "doubao-seedance-2.0",
"content": [
{
"type": "text",
"text": "Use image 1 as the product appearance reference. Generate a clean 5-second studio showcase while preserving the subject."
},
{
"type": "image_url",
"role": "reference_image",
"image_url": {
"url": "asset://reviewed-image-asset-id"
}
}
],
"duration": 5,
"resolution": "720p",
"ratio": "1:1",
"watermark": false
}'First And Last Frame
{
"model": "doubao-seedance-2.0",
"content": [
{
"type": "text",
"text": "Generate a smooth transition video from image 1 to image 2."
},
{
"type": "image_url",
"role": "first_frame",
"image_url": {
"url": "asset://first-frame-asset-id"
}
},
{
"type": "image_url",
"role": "last_frame",
"image_url": {
"url": "asset://last-frame-asset-id"
}
}
],
"duration": 8,
"resolution": "720p",
"ratio": "16:9"
}Video Reference Input
{
"model": "doubao-seedance-2.0",
"content": [
{
"type": "text",
"text": "Use video 1 as the camera-motion and pacing reference, then generate a new scene in the same style."
},
{
"type": "video_url",
"role": "reference_video",
"video_url": {
"url": "https://example.com/reference.mp4"
}
}
],
"duration": 5,
"resolution": "720p",
"ratio": "16:9"
}Image and Audio Reference
{
"model": "doubao-seedance-2.0",
"content": [
{
"type": "text",
"text": "Use image 1 and audio 1 to create a product showcase video."
},
{
"type": "image_url",
"role": "reference_image",
"image_url": {
"url": "asset://reviewed-image-asset-id"
}
},
{
"type": "audio_url",
"role": "reference_audio",
"audio_url": {
"url": "https://example.com/reference.wav"
}
}
],
"duration": 5,
"ratio": "1:1",
"generate_audio": true
}content Items
| Field | Required | Description |
|---|---|---|
content[].type | Yes | text, image_url, video_url, or audio_url |
content[].text | Conditional | Used when type is text |
content[].image_url.url | Conditional | Public image URL, or an approved image asset://<asset ID> |
content[].video_url.url | Conditional | Public video URL. Cubicspaces checks that the URL is downloadable |
content[].audio_url.url | Conditional | Public audio URL, or an upstream-supported audio asset URL |
content[].role | Conditional | Media role; see the combination rules below |
Media Combination Rules
| Scenario | Recommended input | role requirements |
|---|---|---|
| Text-to-video | Text-only content | No media role needed |
| Single image-to-video | One image_url content item | first_frame, or omit the role |
| First-and-last-frame video | Two image_url content items | First image is first_frame; last image is last_frame |
| Multimodal reference video | Send reference images/videos/audios in content | Images use reference_image, videos use reference_video, audio uses reference_audio |
Limits and guidance:
- At most 9 reference images. First-and-last-frame requests should contain exactly 2 images.
- At most 3 reference videos. Each video can be up to 15 seconds, and the total reference-video duration must not exceed 15 seconds.
- At most 3 reference audio files. Each audio file can be up to 15 seconds, and the total reference-audio duration must not exceed 15 seconds.
- Audio cannot be the only media input; provide at least one image or video as well.
- Do not mix first-frame / first-and-last-frame roles with
reference_image,reference_video, orreference_audio. - In prompts, refer to media by order, such as "image 1", "video 1", or "audio 1". Do not write Asset IDs directly in the prompt.
Media File Limits
| Media | Limits |
|---|---|
| Image | Common formats include jpeg, jpg, png, webp, bmp, tiff, and gif; each image should be below 30 MB; recommended aspect ratio is between 0.4 and 2.5; recommended width and height are between 300 and 6000 px |
| Video | mp4 or mov; recommended resolution is 480p or 720p; the standard model may use 1080p when supported by the account and model, while the fast model does not support 1080p; each video should be below 50 MB; recommended frame rate is 4 to 60 FPS; the public URL must download video bytes directly, not an HTML login page |
| Audio | mp3 or wav; each audio file should be below 15 MB |
The current public API does not support base64 or inline binary media. Upload media to a publicly reachable URL first. For images, you can also use the moderation endpoint and pass the returned asset_url.
Moderate Images
When Seedance uses real-person or library-managed image assets, submit public image URLs to the image moderation endpoint first. After approval and ingestion, use the returned items[].asset_url as content[].image_url.url.
Use the asynchronous moderation task API. Task creation immediately returns a task ID, and the caller polls for completion. This flow supports single images, multiple images, batch processing, and high concurrency.
Submit all images used by the same Seedance generation request together in one asynchronous task under the images array. Do not split them across separate moderation batches; separate batches can lead to inconsistent asset review batches or asset bindings.
Asynchronous Moderation Tasks
Create a task:
POST /v1/images/moderations/tasks
Authorization: Bearer YOUR_API_KEY
Content-Type: application/jsonRequest parameters:
| Parameter | Required | Description |
|---|---|---|
model | Yes | Used to select Seedance capability. Use doubao-seedance-2.0 |
images | Yes | Image URL array; all images used by the same generation request must be submitted in the same batch |
asset_type | No | Asset type, defaults to Image; keep the default for image moderation |
Images must be public http or https URLs. Base64 and inline binary content are not supported. One task accepts up to 20 images. You can also provide client_request_id as a caller-defined idempotency key. Retrying with the same key under the same account returns the same task.
curl -X POST https://cubicspaces.cloud/v1/images/moderations/tasks \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "doubao-seedance-2.0",
"images": [
"https://example.com/person.png",
"https://example.com/product.png"
],
"client_request_id": "seedance-batch-001"
}'A successful create request returns HTTP 200:
{
"code": "success",
"message": "",
"data": {
"id": "amt_xxx",
"model": "doubao-seedance-2.0",
"status": "queued",
"total": 2,
"completed": 0,
"approved": 0,
"rejected": 0,
"failed": 0,
"execution_expires_at": 1780000600,
"created_at": 1780000000,
"updated_at": 1780000000
}
}Retrieve the task:
curl https://cubicspaces.cloud/v1/images/moderations/tasks/amt_xxx \
-H "Authorization: Bearer YOUR_API_KEY"Poll every 2 to 5 seconds. Terminal task statuses are succeeded, partial_succeeded, failed, and expired; processing statuses are queued and running. Each image item ends as approved, rejected, failed, or timed_out.
{
"code": "success",
"message": "",
"data": {
"id": "amt_xxx",
"model": "doubao-seedance-2.0",
"status": "partial_succeeded",
"total": 2,
"completed": 2,
"approved": 1,
"rejected": 1,
"failed": 0,
"items": [
{
"index": 0,
"source_url": "https://example.com/person.png",
"status": "approved",
"asset_url": "asset://reviewed-person-asset-id",
"asset_id": "reviewed-person-asset-id"
},
{
"index": 1,
"source_url": "https://example.com/product.png",
"status": "rejected",
"error_message": "image did not pass moderation"
}
]
}
}Only items with status: "approved" can use asset_url in a later video generation request. Asynchronous task query records are retained for 7 days, so save approved asset_url values promptly.
Response and Retrieval
Official-Compatible API
The official-compatible video task endpoints are supported:
POST /api/v3/contents/generations/tasks
GET /api/v3/contents/generations/tasks/{task_id}Full URLs:
POST https://cubicspaces.cloud/api/v3/contents/generations/tasks
GET https://cubicspaces.cloud/api/v3/contents/generations/tasks/{task_id}Unified Video API
A successful create request returns a standard video task object:
{
"id": "task_xxx",
"task_id": "task_xxx",
"object": "video",
"model": "doubao-seedance-2.0",
"status": "queued",
"progress": 0,
"created_at": 1770000000
}Retrieve the task:
curl https://cubicspaces.cloud/v1/video/generations/task_xxx \
-H "Authorization: Bearer YOUR_API_KEY"Use the public task_xxx returned by the create request and the same API key that created the task. A different token receives task_not_exist.
Example response after the task succeeds:
{
"code": "success",
"message": "",
"data": {
"task_id": "task_xxx",
"action": "generate",
"status": "SUCCESS",
"progress": "100%",
"result_url": "https://example.com/generated-video.mp4",
"properties": {
"prompt": "A cat running across a meadow",
"origin_model_name": "doubao-seedance-2.0"
},
"usage": {
"prompt_tokens": 0,
"completion_tokens": 38800,
"total_tokens": 38800
}
}
}- Read the final video URL from
data.result_url. data.usage.completion_tokensanddata.usage.total_tokensare the final effective token counts after settlement and match the final usage shown in the console. They are not the creation-time estimate; if the upstream raw usage differs from the settled usage, these settled values take precedence.- Before completion, the final usage does not exist yet and
data.usagemay be omitted. data.quota, when present, is an internal billing-quota value rather than a token count. Usedata.usagefor usage reporting.
Status Values
The create response uses lowercase queued. Subsequent responses from /v1/video/generations/{task_id} use these values in data.status:
| Query status | Meaning |
|---|---|
NOT_START / SUBMITTED / QUEUED | Waiting or queued |
IN_PROGRESS | Generating |
SUCCESS | Completed; read data.result_url and final data.usage |
FAILURE | Failed; inspect data.fail_reason |
Notes
- Use
ratio: "adaptive"when you are unsure, or omitratioand let upstream defaults apply. - Video reference URLs must be directly downloadable by the platform server. Do not pass URLs that require login, return HTML pages, or block server-side fetching.
- Image references can use public URLs or
asset://<asset ID>returned by the image moderation endpoint. - Actual model, resolution, and tool availability can vary by account permissions and platform configuration.