Seedance Video
Seedance Video uses an asynchronous video task API. Create a task first, then poll the retrieve endpoint for status and the final video URL.
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.
Which Endpoint To Use
| Scenario | Recommended endpoint | Notes |
|---|---|---|
| New integration | /v1/video/generations | Unified video endpoint. It returns OpenAI-style video task objects and works well when you use multiple video models |
| Existing official Seedance / Ark client | /api/v3/contents/generations/tasks | Official-compatible path and task object shape for lower-friction migration |
| Existing simple image-to-video form | /v1/video/generations with simplified fields | You can send prompt, image_url, images, video_url, or audio_url; Cubicspaces converts them into official-style content |
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} |
| Moderate images | POST | /v1/images/moderations |
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 | Submit public image URLs to /v1/images/moderations, then use the returned asset:// URL in content |
All asset://{...} values in this page are placeholders. In real requests, replace them with the full asset:// URL returned by the image moderation endpoint.
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 |
seed | No | Random seed, useful when you want a more repeatable style |
callback_url | No | Task callback URL. You can also poll the retrieve endpoint instead |
Compatible Request Shapes
Cubicspaces supports two request shapes. For long-term integrations, prefer the official-style content array. Existing clients can keep using simplified fields.
Official-style content
content is an ordered array. Text, images, videos, and audio are all represented as content items. In prompts, refer to media by order, such as "image 1", "video 1", or "audio 1".
{
"model": "doubao-seedance-2.0",
"content": [
{
"type": "text",
"text": "Use image 1 as the product reference and video 1 as the camera-motion reference. Generate a 5-second product showcase."
},
{
"type": "image_url",
"role": "reference_image",
"image_url": {
"url": "asset://{product_asset_id}"
}
},
{
"type": "video_url",
"role": "reference_video",
"duration": 5,
"video_url": {
"url": "https://example.com/camera-motion.mp4"
}
}
],
"duration": 5,
"resolution": "720p",
"ratio": "16:9"
}Simplified fields
Simplified fields are useful for ordinary form-based integrations. Cubicspaces converts them into official-style content and appends prompt as a text item.
| Simplified field | Conversion |
|---|---|
prompt | A text item in content |
image_url | One image_url content item |
images | Multiple image_url content items; either string arrays or { "url": "...", "role": "..." } arrays are accepted |
video_url | One video_url content item |
videos | Multiple video_url content items |
audio_url | One audio_url content item |
audios | Multiple audio_url content items |
resolution_name, size | Used as resolution when resolution is empty |
seconds | Used as duration when greater than 0 |
{
"model": "doubao-seedance-2.0",
"prompt": "Generate a smooth first-and-last-frame transition from image 1 to image 2.",
"images": [
{ "url": "asset://{first_frame_asset_id}", "role": "first_frame" },
{ "url": "asset://{last_frame_asset_id}", "role": "last_frame" }
],
"duration": 8,
"resolution": "720p",
"ratio": "16:9"
}metadata passthrough
If you need an official field that is not available as a unified top-level field, put it in metadata. Cubicspaces merges metadata into the upstream request body. metadata.model is ignored; the top-level model and platform model mapping remain authoritative.
{
"model": "doubao-seedance-2.0",
"prompt": "Generate a fixed-camera product showcase video.",
"metadata": {
"camera_fixed": true,
"service_tier": "default",
"return_last_frame": true
},
"duration": 5,
"resolution": "720p"
}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
}'Official-Compatible Endpoint
If your client already uses the official task API shape, call the official-compatible path directly. After creation succeeds, use the response id to retrieve the task.
curl -X POST https://cubicspaces.cloud/api/v3/contents/generations/tasks \
-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
}'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://{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://{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 |
content[].duration | No | Reference duration for this media item, commonly used for video or audio references; unit is seconds |
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.
Submit all images used by the same Seedance generation request together in one image moderation request under the images array. Do not split images from the same generation request across multiple moderation calls; separate moderation batches can lead to inconsistent asset review batches or asset bindings.
POST /v1/images/moderations
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.
Request Example
curl -X POST https://cubicspaces.cloud/v1/images/moderations \
-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"
]
}'Response Example
{
"code": "success",
"message": "",
"data": {
"object": "asset_moderation",
"status": "approved",
"review_batch_id": "review-batch-id",
"task_id": "moderation-task-id",
"items": [
{
"source_url": "https://example.com/person.png",
"asset_url": "asset://{person_asset_id}",
"submit_review_status": 1,
"passed": true
},
{
"source_url": "https://example.com/product.png",
"asset_url": "asset://{product_asset_id}",
"submit_review_status": 1,
"passed": true
}
]
}
}When passed is true and submit_review_status is 1, the image is approved.
Response and Retrieval
A successful create request returns a standard video task object:
{
"id": "video_xxx",
"task_id": "video_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/video_xxx \
-H "Authorization: Bearer YOUR_API_KEY"If you submitted the task through the official-compatible path, you can also use the response id to retrieve it through the official-compatible path:
curl https://cubicspaces.cloud/api/v3/contents/generations/tasks/video_xxx \
-H "Authorization: Bearer YOUR_API_KEY"When the task is completed, read the video URL from data.result_url. If the upstream provider returns token usage, the response also includes data.usage.completion_tokens and data.usage.total_tokens.
Status Values
| Status | Meaning |
|---|---|
queued | Queued |
running | Generating |
succeeded | Completed |
failed | Failed; inspect error.message |
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.