Seedance 2.5 Video
Seedance 2.5 uses an asynchronous video task API: create a task first, then poll the retrieve endpoint for its status and final video URL. It uses the dedicated model name doubao-seedance-2.5, and its parameter ranges differ from Seedance 2.0.
Model selection
Use doubao-seedance-2.5 with both the unified and official-compatible video APIs.
For the Pro/Fast 2.0 models, see the separate Seedance 2.0 guide.
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} |
Capabilities
| Capability | Input |
|---|---|
| Text to video | Send only text items in content |
| Single-image video | Send one image_url; use first_frame or reference_image |
| First-and-last-frame video | Send two image_url items with first_frame and last_frame |
| Multiple reference images | Send multiple reference_image items and refer to them as “image 1”, “image 2”, and so on |
| Video reference | Use video_url with role: "reference_video" |
| Audio reference | Use audio_url with role: "reference_audio" together with text, an image, or a video |
| Image moderation | Moderate images first, then use the returned asset://<asset ID> in the generation request |
Seedance 2.5 Parameters
| Parameter | Required | Description |
|---|---|---|
model | Yes | Use doubao-seedance-2.5 with both the unified and official-compatible APIs |
content | Yes | Array of text, image, video, and audio items; include at least text, an image, or a video |
duration | No | 4 to 30 seconds; -1 selects duration intelligently; usually defaults to 5 |
resolution | No | Only 480p and 720p are supported |
ratio | No | adaptive, 21:9, 16:9, 4:3, 1:1, 3:4, or 9:16 |
generate_audio | No | Whether to generate synchronized audio |
watermark | No | Whether to add a watermark |
seed | No | Random seed; omit it to let the model select one |
return_last_frame | No | When true, a successful result may include a final-frame image URL |
execution_expires_after | No | Task execution timeout from 3600 to 259200 seconds |
tools | No | Use [ { "type": "web_search" } ] to enable web search when available for the account |
safety_identifier | No | Unique end-user identifier, up to 64 characters |
For first-frame and first-and-last-frame tasks, use ratio: "adaptive". This preserves the input image ratio and keeps parameter validation consistent.
Output Pixel Sizes
| Resolution | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 |
|---|---|---|---|---|---|---|
480p | 854×480 | 752×560 | 640×640 | 560×752 | 480×854 | 992×432 |
720p | 1280×720 | 1112×834 | 960×960 | 834×1112 | 720×1280 | 1470×630 |
With adaptive, the model selects an appropriate ratio from the input media and task. Read the final dimensions from the completed task.
content Items
content is an array whose items are selected by type. Image, video, and audio URLs must be nested inside the corresponding { "url": "..." } object; do not pass them as plain strings.
type | Required field | Optional role | Description |
|---|---|---|---|
text | text | None | Text prompt; multiple text items are used in order |
image_url | image_url.url | reference_image, first_frame, last_frame | Public image URL or an approved asset://<asset ID> |
video_url | video_url.url | reference_video | Directly downloadable video URL; defaults to a reference video when role is omitted |
audio_url | audio_url.url | reference_audio | Directly downloadable audio URL; defaults to reference audio when role is omitted |
[
{ "type": "text", "text": "Describe the video to generate" },
{ "type": "image_url", "role": "reference_image", "image_url": { "url": "asset://reviewed-image-id" } },
{ "type": "video_url", "role": "reference_video", "video_url": { "url": "https://example.com/reference.mp4" } },
{ "type": "audio_url", "role": "reference_audio", "audio_url": { "url": "https://example.com/reference.mp3" } }
]Common combinations include text only, text plus image, text plus video, text plus audio, and multimodal combinations of images, videos, and audio. Audio cannot be the only input; content must contain at least one text, image_url, or video_url item.
The platform accepts up to 30 reference images, 10 reference videos, and 10 reference audio files. Practical limits can also depend on file size, total media duration, and account permissions.
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.5",
"content": [
{
"type": "text",
"text": "A cinematic aerial shot of a futuristic city waking at sunrise, with a smooth forward camera movement"
}
],
"duration": 5,
"resolution": "720p",
"ratio": "16:9",
"generate_audio": true,
"watermark": false
}'A successful create request returns a public task ID:
{
"id": "task_xxx",
"task_id": "task_xxx",
"object": "video",
"model": "doubao-seedance-2.5",
"status": "queued",
"progress": 0,
"created_at": 1780000000
}Image Moderation
For people, products, or other library-managed reference images, submit public URLs to the image moderation API first. After approval, pass the returned items[].asset_url unchanged as content[].image_url.url.
All images used by the same generation request must be submitted together in one asynchronous moderation task. Do not split them across separate moderation batches.
Asynchronous Moderation
Use an asynchronous task for single images, multiple images, batches, and high concurrency:
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.5",
"images": [
"https://example.com/person.png",
"https://example.com/product.png"
],
"client_request_id": "seedance-25-batch-001"
}'The create call immediately returns a task ID with status: "queued". One moderation task accepts up to 20 images.
{
"code": "success",
"message": "",
"data": {
"id": "amt_xxx",
"model": "doubao-seedance-2.5",
"status": "queued",
"total": 2,
"completed": 0,
"approved": 0,
"rejected": 0,
"failed": 0
}
}Retrieve the moderation task:
curl https://cubicspaces.cloud/v1/images/moderations/tasks/amt_xxx \
-H "Authorization: Bearer YOUR_API_KEY"Poll every 2 to 5 seconds. Processing statuses are queued and running; terminal statuses are succeeded, partial_succeeded, failed, and expired. Only image items with status: "approved" can use their asset_url in a generation request.
Image-to-Video
This example uses an asset_url returned by image moderation:
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.5",
"content": [
{
"type": "text",
"text": "Preserve the appearance of the person in image 1. Show them playing with a small dog in a sunny meadow while keeping facial features consistent."
},
{
"type": "image_url",
"role": "reference_image",
"image_url": {
"url": "asset://reviewed-person-asset-id"
}
}
],
"duration": 5,
"resolution": "720p",
"ratio": "16:9",
"generate_audio": true
}'First and Last Frame
{
"model": "doubao-seedance-2.5",
"content": [
{
"type": "text",
"text": "Transition smoothly from image 1 to image 2 while keeping the subject and camera motion coherent."
},
{
"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": "adaptive"
}Video and Audio References
{
"model": "doubao-seedance-2.5",
"content": [
{
"type": "text",
"text": "Use the camera motion from video 1 and the rhythm from audio 1 to create a new scene in the same style."
},
{
"type": "video_url",
"role": "reference_video",
"video_url": { "url": "https://example.com/reference.mp4" }
},
{
"type": "audio_url",
"role": "reference_audio",
"audio_url": { "url": "https://example.com/reference.wav" }
}
],
"duration": 10,
"resolution": "720p",
"ratio": "16:9"
}Official-Compatible API
Existing official-style clients can use these paths directly:
POST /api/v3/contents/generations/tasks
GET /api/v3/contents/generations/tasks/{task_id}Create a 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.5",
"content": [
{
"type": "text",
"text": "A cinematic tracking shot of an orange cat running through a city street after the rain"
}
],
"duration": 5,
"resolution": "720p",
"ratio": "16:9",
"generate_audio": true
}'The create response is an unwrapped official-compatible object:
{
"id": "task_xxx",
"model": "doubao-seedance-2.5",
"status": "queued",
"created_at": 1780000000
}Retrieve the task:
curl https://cubicspaces.cloud/api/v3/contents/generations/tasks/task_xxx \
-H "Authorization: Bearer YOUR_API_KEY"Example successful response:
{
"id": "task_xxx",
"model": "doubao-seedance-2.5",
"status": "succeeded",
"content": {
"video_url": "https://example.com/generated-video.mp4"
},
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"usage": {
"completion_tokens": 108900,
"total_tokens": 108900
}
}Retrieve a Unified Video 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.
{
"code": "success",
"message": "",
"data": {
"task_id": "task_xxx",
"status": "SUCCESS",
"progress": "100%",
"result_url": "https://example.com/generated-video.mp4",
"properties": {
"origin_model_name": "doubao-seedance-2.5"
},
"usage": {
"prompt_tokens": 0,
"completion_tokens": 108900,
"total_tokens": 108900
}
}
}data.usage.completion_tokens and data.usage.total_tokens are the final effective usage after the task completes. Before completion, data.usage may be omitted.
Status Values
| API | Processing | Success | Failure or termination |
|---|---|---|---|
| Official-compatible | queued, running | succeeded | failed, expired, cancelled |
| Unified video | NOT_START, SUBMITTED, QUEUED, IN_PROGRESS | SUCCESS | FAILURE |
Notes
- Image, video, and audio URLs must be directly downloadable by the platform server. Do not use URLs that return login or HTML pages.
- Images can use public URLs or
asset://<asset ID>values returned by image moderation. - Submit all images for the same generation task in the same moderation batch.
- Refer to media by order in the prompt, such as “image 1”, “video 1”, or “audio 1”. Do not place Asset IDs in the prompt.
content.video_urlanddata.result_urlcan expire. Download and retain the result promptly.- Model and extended-feature availability can vary by account permissions and current platform capabilities.