Seedance 2.0 Series Guide
Updated: 2026-07-29
Use the Seedance 2.0 series through UniAll. New integrations should use one of the three stable public model IDs and select the resolution and generation capability through request parameters.
1. Choose a Model
| Public Model | Supported Resolutions | Recommended Use |
|---|---|---|
seedance2.0 | 480p, 720p, 1080p, 4k | Full capabilities with quality prioritized |
seedance2.0-fast | 480p, 720p | Faster generation |
seedance2.0-mini | 480p, 720p | Lightweight and speed-focused tasks |
All three models support:
- text-to-video;
- single-image-to-video;
- first-and-last-frame generation;
- multimodal image, video, and audio references;
- video editing and extension;
- generated audio, watermarks, and random seeds;
- web search for text-only requests;
- returning the generated video's last frame;
- existing
asset://asset IDs.
2. Endpoints and Authentication
Use the OpenAI-compatible video task endpoints:
POST /v1/videos
GET /v1/videos/{task_id}
GET /v1/videos/{task_id}/content
Request headers:
Authorization: Bearer sk-***
Content-Type: application/json
Use this value for {BASE_URL} in the examples:
https:
The following compatibility endpoints remain available:
POST /v1/videos/generations
GET /v1/videos/generations/{task_id}
POST /v1/video/generations
GET /v1/video/generations/{task_id}
New integrations should use /v1/videos consistently.
3. Common Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | Yes | One of the three public models, or a fixed-resolution model ID during the compatibility period. |
prompt | string | Conditional | Video prompt. When using content[], include at least one type=text item instead. |
resolution | string | Yes for new public models | Output resolution from the selected model's supported values. |
size | string | No | Compatibility alias for resolution. |
duration | integer/string | Yes | Output duration from 4 to 15 seconds. The compatible value auto is accepted, but an explicit integer is recommended. |
aspect_ratio | string | No | auto, 21:9, 16:9, 4:3, 3:2, 2:3, 1:1, 3:4, or 9:16. |
ratio | string | No | Compatibility alias for aspect_ratio; adaptive is equivalent to auto. |
content | object[] | No | Recommended multimodal input format described in the next section. |
operation | string | Required for specific capabilities | reference_to_video, edit_video, or extend_video. |
generate_audio | boolean | No | Whether to generate a video with audio. |
watermark | boolean | No | Whether to add a watermark. |
seed | integer | No | Random seed. |
return_last_frame | boolean | No | Whether to return a last-frame URL in the completed result. |
tools | object[] | No | Currently supports only [{"type":"web_search"}]. |
Compatibility rules:
resolutionandsizemust match when both are present.aspect_ratioandratiomust express the same ratio when both are present.ratio: "adaptive"is equivalent toaspect_ratio: "auto".operation,generate_audio,watermark,seed,return_last_frame, andtoolsmay also be placed insideextra_body. Do not repeat the same parameter at the top level and inextra_body.draft,frames,camera_fixed, andservice_tier: "flex"are outside the current public contract.
4. Multimodal content[] Format
Use content[] for complex inputs:
{
"content": [
{
"type": "text",
"text": "Video prompt"
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.png"
},
"role": "reference_image"
},
{
"type": "video_url",
"video_url": {
"url": "https://example.com/video.mp4"
},
"role": "reference_video"
},
{
"type": "audio_url",
"audio_url": {
"url": "https://example.com/audio.mp3"
},
"role": "reference_audio"
}
]
}
Supported types and roles:
type | role | Meaning |
|---|---|---|
text | None | One or more prompt items. |
image_url | image | Input image for single-image-to-video. |
image_url | reference_image | Reference image. |
image_url | first_frame | First-frame image. |
image_url | last_frame | Last-frame image. |
video_url | source_video | Source video for editing or extension. |
video_url | reference_video | Reference video. |
audio_url | reference_audio | Reference audio. |
Input constraints:
content[]must contain at least one non-empty text item.- Use no more than 9 images, 3 videos, and 3 audio files.
first_frameandlast_framemust be provided together, with one image for each role.- First-and-last-frame mode cannot include videos, audio, or other images.
- Do not mix the
imageandreference_imageroles in one request. - Use no more than one
source_video. - Reference audio requires at least one image or video. Audio-only and text-plus-audio requests are not accepted.
- With multiple reference assets, use
@Image1,@Video1, and@Audio1in the prompt to identify assets by order.
Simple requests remain compatible with image, images, last_image, video, videos, and audios. Use content[] for new capabilities and multimodal combinations so each input role is explicit.
5. Request Examples
5.1 Text-to-Video
curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance2.0",
"prompt": "A futuristic city street after rain, neon reflections, and a slow cinematic camera push forward.",
"resolution": "1080p",
"duration": 5,
"ratio": "16:9",
"generate_audio": true
}'
5.2 Single-Image-to-Video
curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance2.0-fast",
"resolution": "720p",
"duration": 6,
"content": [
{
"type": "text",
"text": "The person turns naturally toward the camera, clothing moves gently in the wind, and identity remains consistent."
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/person.png"
},
"role": "image"
}
]
}'
5.3 First-and-Last-Frame Video
curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance2.0",
"resolution": "720p",
"duration": 6,
"content": [
{
"type": "text",
"text": "Transition naturally from day to night with continuous motion and stable building structure."
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/first.png"
},
"role": "first_frame"
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/last.png"
},
"role": "last_frame"
}
]
}'
5.4 Multimodal Reference-to-Video
curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance2.0-mini",
"resolution": "720p",
"duration": 8,
"operation": "reference_to_video",
"content": [
{
"type": "text",
"text": "Show the product from @Image1 with the camera motion from @Video1 and the rhythm from @Audio1."
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/product.png"
},
"role": "reference_image"
},
{
"type": "video_url",
"video_url": {
"url": "https://example.com/motion.mp4"
},
"role": "reference_video"
},
{
"type": "audio_url",
"audio_url": {
"url": "https://example.com/music.mp3"
},
"role": "reference_audio"
}
]
}'
5.5 Video Editing
curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance2.0",
"resolution": "720p",
"duration": 6,
"operation": "edit_video",
"content": [
{
"type": "text",
"text": "Replace the background with a neon street at night while preserving the person's motion and identity."
},
{
"type": "video_url",
"video_url": {
"url": "https://example.com/source.mp4"
},
"role": "source_video"
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/style.png"
},
"role": "reference_image"
}
]
}'
5.6 Video Extension
curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance2.0-fast",
"resolution": "720p",
"duration": 5,
"operation": "extend_video",
"content": [
{
"type": "text",
"text": "Continue the camera motion as the person walks forward, preserving the lighting and scene."
},
{
"type": "video_url",
"video_url": {
"url": "https://example.com/source.mp4"
},
"role": "source_video"
}
]
}'
5.7 Text-Only Web Search
Web search works only with text input. Do not include images, video, or audio in the same request.
curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance2.0-mini",
"prompt": "Create a concise news video from today's publicly available technology news without showing brand logos.",
"resolution": "720p",
"duration": 5,
"tools": [
{
"type": "web_search"
}
]
}'
web_search allows the model to retrieve public information, but it does not guarantee that every generation will perform a search.
5.8 Return the Last Frame
curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance2.0",
"prompt": "A paper boat slowly stops beside a stone bridge, with a stable final frame.",
"resolution": "720p",
"duration": 5,
"return_last_frame": true
}'
When the task completes, the last frame is returned as result.last_frame_url and is not mixed into the video outputs array.
5.9 Use A Managed Material
Create and query reusable inputs through the Seedance 2.0 Material Library. When the material reaches status=available, replace a regular media URL with the returned uri:
{
"type": "video_url",
"video_url": {
"url": "asset://asset-xxxxxxxxxxxxx"
},
"role": "source_video"
}
Use the URI only in the matching structured image, video, or audio field. Do not put it in the prompt. UniAll.ai verifies the current user's ownership, material status, and expiry before creating the video task.
6. Task Status And Result
A successful create request returns an asynchronous task:
{
"id": "task_xxxxxxxxxxxxx",
"task_id": "task_xxxxxxxxxxxxx",
"object": "video.generation.job",
"model": "seedance2.0",
"status": "queued",
"progress": 0,
"created_at": 1784640000
}
After creation, save id or task_id, then poll GET /v1/videos/{task_id} until the task reaches completed or failed. See Video Generation Overview for the shared polling interval, status fields, error contract, result URL, and authenticated download flow.
When a Seedance request produces a last frame, the completed response may also include result.last_frame_url.
7. Fixed-Resolution Model Compatibility
Existing clients may continue using fixed-resolution model IDs:
| Model Series | Compatible Model IDs |
|---|---|
| Standard | seedance2.0-480p, seedance2.0-720p, seedance2.0-1080p, seedance2.0-4k |
| Fast | seedance2.0-fast-480p, seedance2.0-fast-720p |
| Mini | seedance2.0-mini-480p, seedance2.0-mini-720p |
The following earlier IDs also remain compatible:
seedance2.0-video-480pseedance2.0-video-720pseedance2.0-fast-video-480pseedance2.0-fast-video-720p
Fixed-resolution model IDs determine the resolution and do not require an additional resolution field. They support the same parameters and capabilities as the corresponding public model. If resolution or size is still present, its value must match the resolution in the model ID.
New projects should migrate to the three public model IDs so output resolution can be changed through a request parameter.
8. Common Errors
| Scenario | Result | Fix |
|---|---|---|
New public model is missing resolution/size | HTTP 400 | Pass a supported resolution. |
resolution and size differ | HTTP 400 | Pass one field, or make both values identical. |
aspect_ratio and ratio conflict | HTTP 400 | Pass one field, or make both express the same ratio. |
Missing duration | HTTP 400 | Pass an integer from 4 to 15. |
content[] has no text item | HTTP 400 | Add a non-empty type=text item. |
| First and last frames are not paired | HTTP 400 | Pass both first_frame and last_frame. |
| Audio-only or text-plus-audio input | HTTP 400 | Add at least one image or video. |
| Web-search request contains media | HTTP 400 | Keep only text input in a search request. |
| Too many images, videos, or audio files | HTTP 400 | Keep the counts at or below 9, 3, and 3. |
draft, frames, camera_fixed, or service_tier=flex is used | HTTP 400 | Remove the unsupported parameter. |
For safety-review, media-format, or parameter errors, fix the input and create a new task instead of repeatedly submitting the same invalid request.