Seedance Video
Seedance Video uses the official-compatible video task API. Create a task first, then poll the task endpoint for status and the final video URL.
Endpoints
| Capability | Method | Path |
|---|---|---|
| Unified create video task | POST | /v1/video/generations |
| Unified retrieve video task | GET | /v1/video/generations/{task_id} |
| Official-compatible create video task | POST | /api/v3/contents/generations/tasks |
| Official-compatible retrieve video task | GET | /api/v3/contents/generations/tasks/{task_id} |
| Moderate images | POST | /v1/images/moderations |
Supported Models
| Model | Notes |
|---|---|
doubao-seedance-2.0 | Seedance 2.0 standard model |
The actual model availability depends on account permissions and platform configuration.
Unified Video API
Use the unified video API when you want the same request flow as other video models. Create a task first, then poll the unified retrieve endpoint for status and the final video URL.
POST /v1/video/generations
GET /v1/video/generations/{task_id}Parameters
| Parameter | Required | Description |
|---|---|---|
model | Yes | Seedance model name. Use doubao-seedance-2.0 |
prompt | Yes | Video generation prompt |
seconds | No | Duration as a string, such as "5"; duration is also accepted |
images | No | Image URL array for reference images or first-frame input |
image | No | Single image URL, equivalent to a one-item images array |
input_reference | No | Single reference media URL, equivalent to single-image input |
metadata | No | Seedance-specific options passed through to the task request |
Common metadata fields:
| Field | Description |
|---|---|
resolution | Output resolution, such as 720p or 1080p; pass it only when the selected model supports it |
ratio | Aspect ratio, such as 16:9, 9:16, or 1:1 |
duration | Video duration in seconds |
seed | Random seed |
camera_fixed | Whether to keep the camera fixed |
watermark | Whether to add a watermark |
generate_audio | Whether to generate audio |
content | Official-compatible content array. Use it when you need roles such as first_frame, last_frame, or reference_image |
Text-to-Video Example
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",
"prompt": "A cinematic aerial shot of a futuristic cubic city at sunrise",
"seconds": "5",
"metadata": {
"resolution": "1080p",
"ratio": "16:9",
"watermark": false,
"generate_audio": true
}
}'Reference Image / First Frame Example
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",
"prompt": "Use image 1 as the subject reference. Make the product rotate slowly on a clean studio background while preserving its appearance.",
"seconds": "5",
"metadata": {
"resolution": "720p",
"ratio": "1:1",
"camera_fixed": true,
"watermark": false,
"content": [
{
"type": "image_url",
"image_url": {
"url": "asset://reviewed-image-asset-id"
},
"role": "reference_image"
}
]
}
}'A successful unified 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"When the task is completed, read the video URL from metadata.url.
Official-Compatible API
POST /api/v3/contents/generations/tasks
Authorization: Bearer YOUR_API_KEY
Content-Type: application/jsonParameters
| Parameter | Required | Description |
|---|---|---|
model | Yes | Seedance model name |
content | Yes | Multimodal content array. It usually contains one text item and optional image, video, or audio assets |
content[].type | Yes | Content type, such as text, image_url, video_url, or audio_url |
content[].text | No | Text prompt, used when type is text |
content[].image_url.url | No | Image URL. It can be a public image URL or an approved asset://<asset ID> |
content[].video_url.url | No | Video URL. It can be a public video URL or an approved asset://<asset ID> |
content[].role | No | Asset role, such as reference_image, first_frame, or last_frame |
duration | No | Video duration in seconds |
ratio | No | Aspect ratio, such as 16:9, 9:16, or 1:1 |
seed | No | Random seed |
camera_fixed | No | Whether to keep the camera fixed |
watermark | No | Whether to add a watermark |
generate_audio | No | Whether to generate audio |
Request Example
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": "Use image 1 to generate a 5-second product showcase video."
},
{
"type": "image_url",
"image_url": {
"url": "asset://reviewed-image-asset-id"
},
"role": "reference_image",
"duration": 5
}
],
"ratio": "16:9",
"duration": 5,
"generate_audio": true
}'A successful create request returns an official-compatible task object. id is the task ID. The response may keep additional task-service fields such as service_tier or execution_expires_after:
{
"id": "task_xxx",
"model": "doubao-seedance-2.0",
"status": "running",
"created_at": 1770000000,
"updated_at": 1770000000,
"service_tier": "default",
"execution_expires_after": 172800
}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.
POST /v1/images/moderations
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json/v1/assets/moderations uses the same moderation handler.
Request Parameters
| Parameter | Required | Description |
|---|---|---|
model | Yes | Used to route the request to a Seedance channel. Use doubao-seedance-2.0 |
images | No | Image URL array |
image_urls | No | Image URL array, equivalent to images |
image_url | No | Single image URL |
asset_type | No | Asset type, defaults to Image; keep the default for image moderation |
At least one of images, image_urls, or image_url is required. Images must be public http or https URLs. base64 and inline binary content are not supported.
Moderation Limits
- Submit at most 50 URLs per request. One image per request is recommended because multiple assets may take longer to process.
- Use one asset type per batch. For image moderation, use
asset_type: "Image". - Image URLs need supported file extensions:
.jpeg,.jpg,.png,.webp,.bmp,.tiff,.tif,.gif,.heic,.heif. - Each image should have an aspect ratio between
0.4and2.5, width and height between300and6000px, and file size below30 MB. - This endpoint is a synchronous wrapper. The platform waits for moderation and returns a normalized result; if processing is delayed, it polls briefly before returning a timeout error.
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/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/product.png",
"asset_url": "asset://reviewed-image-asset-id",
"submit_review_status": 1,
"passed": true
}
]
}
}When passed is true and submit_review_status is 1, the image is approved. asset_url is usually in the asset://<asset ID> form. Put it in content, and set a role such as reference_image, first_frame, or last_frame.
In prompts, refer to assets with the “asset type + index” format, such as “image 1” or “video 1”. The index starts from 1 within assets of the same type in the content array. Do not refer to assets by Asset ID in the prompt.
Asset codes from the legacy asset system cannot be used directly with Seedance 2.0. Use the asset_url returned by the current moderation endpoint, or build asset://<asset ID> from the new approved asset ID.
Text-to-Video Example
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,
"ratio": "16:9",
"watermark": false
}'Moderated Image-to-Video Example
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": "Use image 1 as the subject reference. Make the product rotate slowly on a clean studio background while preserving its appearance."
},
{
"type": "image_url",
"image_url": {
"url": "asset://reviewed-image-asset-id"
},
"role": "reference_image"
}
],
"duration": 5,
"ratio": "1:1",
"camera_fixed": true,
"watermark": false
}'First And Last Frame Example
First and last frames use the first_frame and last_frame roles. Each asset can be either a public URL or an approved asset://<asset ID>.
{
"model": "doubao-seedance-2.0",
"content": [
{
"type": "text",
"text": "Generate a smooth transition video from image 1 to image 2."
},
{
"type": "image_url",
"image_url": {
"url": "asset://first-frame-asset-id"
},
"role": "first_frame"
},
{
"type": "image_url",
"image_url": {
"url": "asset://last-frame-asset-id"
},
"role": "last_frame"
}
],
"duration": 8,
"ratio": "16:9",
"generate_audio": true
}Video Reference Input
For Seedance 2.0 video reference input, pass a video_url item in content. Real-person or authorized assets can also use asset://<asset ID>.
{
"model": "doubao-seedance-2.0",
"content": [
{
"type": "text",
"text": "Keep the character style and generate a new action sequence"
},
{
"type": "video_url",
"video_url": {
"url": "https://example.com/reference.mp4"
}
}
],
"duration": 5,
"ratio": "16:9"
}Response And Polling
Save id from the create response and use it to poll the task:
GET /api/v3/contents/generations/tasks/{task_id}
Authorization: Bearer YOUR_API_KEYWhile the task is running, the response usually looks like:
{
"id": "task_xxx",
"model": "doubao-seedance-2.0",
"status": "running",
"created_at": 1770000000,
"updated_at": 1770000030
}When the task completes, the response returns status: "succeeded" and the final video URL in content.video_url:
{
"id": "task_xxx",
"model": "doubao-seedance-2.0",
"status": "succeeded",
"content": {
"video_url": "https://example.com/generated-video.mp4"
},
"created_at": 1770000000,
"updated_at": 1770000600
}If the task fails, the response returns status: "failed" and the failure reason in error.message:
{
"id": "task_xxx",
"model": "doubao-seedance-2.0",
"status": "failed",
"error": {
"code": "task_failed",
"message": "The request failed because the output video may be related to policy restrictions."
},
"created_at": 1770000000,
"updated_at": 1770000300
}Dashboard Log Labels
Seedance video generation is an asynchronous task. In dashboard usage logs, refund-related records are split into two labels:
| Log label | Meaning |
|---|---|
| Failure Refund | The task failed and the quota held for that task was returned |
| Pre-deduction Return | The task succeeded, then the platform settled the final task result and returned the unused held portion |
Pre-deduction Return does not mean the video task failed. Use the task polling response fields status, error.message, and content.video_url to determine the actual generation result.
Status Values
| Status | Meaning |
|---|---|
queued | Queued |
running | Generating |
succeeded | Completed |
failed | Failed; inspect error.message |
Notes
base64images and inline binary assets are not supported. Upload reference or moderation images to public storage first, then pass the URL.- For moderated/ingested assets, use
image_url/video_url/audio_urlincontent; the URL can beasset://<asset ID>. - In prompts, refer to assets as “image 1 / video 1 / audio 1”; do not use Asset IDs directly.
- This documentation lists
doubao-seedance-2.0; actual availability follows account permissions and platform configuration. resolutionis only supported by some models. Omit it unless the selected model supports it.