Seedance 2.0 Mini API
Seedance 2.0 Mini 的全部输入字段、字段之间的规则、价格,以及完整的请求和响应示例。
"model": "seedance-2-0-mini"Generates a video from text, image frames, reference images, videos and audio.
What it does
Seedance 2.0 Mini makes a video of 4 to 15 seconds, with a synchronized soundtrack by default, from a prompt and optional media, at 480p or 720p. Everything goes in one list, input.content: text items carry the prompt, and each image_url, video_url and audio_url item names its role. The items you send choose the mode:
| Mode | content items | Other fields to set |
|---|---|---|
| [Text to video](#text-to-video) | text | — |
| [First frame](#first-frame) | text (optional), one image_url with role first_frame | ratio adaptive (recommended) |
| [First and last frame](#first-and-last-frame) | text (optional), first_frame and last_frame images | ratio adaptive (recommended) |
| [Reference images](#reference-images) | text, 1 to 9 image_url with role reference_image | — |
| [Reference video and audio](#reference-video-and-audio) | text, any mix of reference images, up to 3 video_url with role reference_video and up to 3 audio_url with role reference_audio | — |
This model does not edit or extend a video and has no draft mode: omni_reference_task_type, draft and draft_task are refused. For those, use Seedance 2.5; for 1080p or 4K, use Seedance 2.0 Pro.
Every example below is a complete body for POST /v1/generations. Send the same body to POST /v1/estimates first: it is free, creates no task, holds no Credits, and refuses an invalid body with the same 422 as a create. The https://media.vizoapi.com/... files are public samples, so the examples run as they are; replace https://example.com/... with your own file or an uploaded ast_... asset ID.
Modes
Text to video
Only text items. Set ratio to one of 16:9, 4:3, 1:1, 3:4, 9:16 or 21:9; with adaptive (the default) the model picks one. duration is 4 to 15 seconds, default 5, or -1 to let the model choose. resolution is 480p or 720p (default); 1080p and 4k are refused (value_not_allowed).
{
"model": "seedance-2-0-mini",
"input": {
"content": [
{ "type": "text", "text": "A paper boat drifts across a still pond at dawn, mist on the water, slow push-in, soft natural light" }
],
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"generate_audio": true
}
}First frame
The video starts on your image. Send one image_url with role first_frame; a second one is refused (rule first_frame_repeated). With ratio adaptive the output takes the image's aspect ratio; other ratios are accepted too. The prompt describes what happens next.
{
"model": "seedance-2-0-mini",
"input": {
"content": [
{ "type": "text", "text": "The hominids step back as the sun rises behind the monolith, slow push-in" },
{ "type": "image_url", "role": "first_frame", "image_url": { "url": "https://media.vizoapi.com/samples/seedance-2-5/odyssey-v1/keyframes/monolith.jpg" } }
],
"resolution": "720p",
"ratio": "adaptive",
"duration": 5
}
}First and last frame
The video moves from the first image to the last. Send at most one first_frame and one last_frame; a last_frame without a first_frame is refused (rule last_frame_needs_first_frame). Frames cannot be combined with any reference image, video or audio (rule frames_with_references).
{
"model": "seedance-2-0-mini",
"input": {
"content": [
{ "type": "text", "text": "The ring-shaped station slowly turns to face the camera as an amber planet rises behind it" },
{ "type": "image_url", "role": "first_frame", "image_url": { "url": "https://media.vizoapi.com/samples/seedance-2-5/odyssey-v1/keyframes/station.jpg" } },
{ "type": "image_url", "role": "last_frame", "image_url": { "url": "https://media.vizoapi.com/samples/seedance-2-5/odyssey-v1/keyframes/ending.jpg" } }
],
"resolution": "720p",
"ratio": "adaptive",
"duration": 6
}
}Reference images
Up to 9 images with role reference_image give the model characters, objects, places or a style to reuse; a tenth is refused (rule too_many_images). Unlike frames, they do not fix the first or last picture, so any ratio works. Name them in the prompt by their order (see [Prompting tips](#prompting-tips)).
{
"model": "seedance-2-0-mini",
"input": {
"content": [
{ "type": "text", "text": "Shot 1: the black monolith from image 1 stands on a savanna at dawn. Shot 2: match cut to the ring-shaped space station from image 2, tumbling slowly in black space." },
{ "type": "image_url", "role": "reference_image", "image_url": { "url": "https://media.vizoapi.com/samples/seedance-2-5/odyssey-v1/keyframes/monolith.jpg" } },
{ "type": "image_url", "role": "reference_image", "image_url": { "url": "https://media.vizoapi.com/samples/seedance-2-5/odyssey-v1/keyframes/station.jpg" } }
],
"resolution": "720p",
"ratio": "16:9",
"duration": 8
}
}Reference video and audio
Reference videos (motion, camera, pacing) and reference audio (rhythm, voice, sound) can be mixed with reference images: up to 3 videos and 3 audio items, each 2 to 15 seconds, with the videos together and the audio together at most 15 seconds each. Audio needs at least one image or video in content (rule audio_needs_visual). The output is always a new video; the source video is not edited or extended.
Any video_url item moves the task to the -video tier of its resolution, which bills the input video's seconds too (see [How it is billed](#how-it-is-billed)).
{
"model": "seedance-2-0-mini",
"input": {
"content": [
{ "type": "text", "text": "Follow the camera movement and pacing of video 1, set on the space station from image 1, cut to the beat of audio 1" },
{ "type": "image_url", "role": "reference_image", "image_url": { "url": "https://media.vizoapi.com/samples/seedance-2-5/odyssey-v1/keyframes/station.jpg" } },
{ "type": "video_url", "role": "reference_video", "video_url": { "url": "https://media.vizoapi.com/samples/seedance-2-5/odyssey-v1/1.mp4" } },
{ "type": "audio_url", "role": "reference_audio", "audio_url": { "url": "https://example.com/beat.mp3" } }
],
"resolution": "720p",
"ratio": "16:9",
"duration": 8
}
}Input limits
| Limit | Value | Checked |
|---|---|---|
content items | At least 1. Up to 9 images, 3 videos and 3 audio items; no other limit on the total | At create, 422 invalid_input (too_many_images, too_many_videos, too_many_audios) |
| Prompt | Up to 4,000 characters per text item | At create (out_of_range) |
| Roles | Every image, video and audio item needs role: first_frame, last_frame or reference_image for images, reference_video for video, reference_audio for audio | At create (required at /content/N/role, role_not_allowed) |
| Each video or audio item | 2 to 15 seconds | At create when the file's length can be read, 422 input_duration_out_of_range (media_length); otherwise when the task runs |
| All videos together | At most 15 seconds | Same, rule video_total_too_long |
| All audio together | At most 15 seconds | Same, rule audio_total_too_long |
| Image file | PNG, JPEG, WebP, BMP, TIFF, GIF, HEIC; up to 30 MB | At create when readable: 422 input_media_invalid (format) or input_media_too_large (size) |
| Video file | MP4, MOV; up to 200 MB | Same |
| Audio file | MP3, WAV; up to 15 MB | Same |
| Uploaded asset | image/png, image/jpeg, image/webp, video/mp4, audio/mpeg, audio/wav; up to 20,000,000 bytes | When you request the upload, 422 |
| Image pixel size and aspect ratio, video resolution and frame rate | Checked by the model only | When the task runs: the task fails with input_media_invalid (sometimes generation_failed) and is not charged |
A media value is a public https URL (up to 4,000 characters) or an ast_... asset ID from your project. Plain http, private or local addresses, URLs with a user name or #fragment, and Base64 data are refused with 422 (rule bad_format). The model fetches a linked file itself, possibly some time after acceptance, so keep it reachable until the task closes; if it cannot, the task fails with input_media_unreachable. See Model inputs and media.
Output
| Setting | Values |
|---|---|
resolution | 480p or 720p (default) |
ratio | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 or adaptive (default). adaptive follows the input media, or lets the model choose for text only |
duration | 4 to 15 seconds (default 5), or -1 for the model to choose |
generate_audio | true (default) adds a synchronized soundtrack; false gives a silent video |
seed | -1 (or omitted) for random, or 0 to 4294967295 to repeat a result more closely |
return_last_frame | true also returns the video's last frame as a PNG |
watermark | false (default) or true for a visible watermark |
output_format, bitrate_mode | Only mp4 and standard; you can leave them out |
A succeeded task lists one MP4 in result.outputs: take its asset_id and get a download URL with download an asset. With return_last_frame, result.last_frame_asset_id is the PNG. result.metadata reports what was made when the model returns it, such as duration, resolution, ratio and seed. Outputs are kept for 7 days. See Get results.
How it is billed
The input selects the tier: resolution alone, or resolution plus -video when content has any video_url. Images and audio never change the tier or the price, and neither do ratio, generate_audio, seed or watermark.
| Tier | Credits per second | Seconds billed |
|---|---|---|
480p, 720p | 8.4, 18.4 | Output seconds |
480p-video, 720p-video | 5, 11 | The larger of output + input seconds and output × 5/3 rounded up |
Input seconds are the length of all input videos together, rounded down, at most 15. When a video's length cannot be read at create, the hold counts 15 input seconds. When the model chooses the length (duration: -1), the hold counts 15 output seconds.
Holds at 720p:
| Request | Output | Input | Billed | Held (Credits) |
|---|---|---|---|---|
Text, frames or images, duration: 5 | 5 | — | 5 | 92.000 |
Text, frames or images, duration: -1 | 15 | — | 15 | 276.000 |
Reference video of 10 s, duration: 5 | 5 | 10 | max(15, 9) = 15 | 165.000 |
| The same, video length not readable | 5 | 15 | max(20, 9) = 20 | 220.000 |
Reference video of 3 s, duration: 10 | 10 | 3 | max(13, 17) = 17 | 187.000 |
Reference video of 10 s, duration: -1 | 15 | 10 | max(25, 25) = 25 | 275.000 |
A 5-second text video holds 42.000 Credits at 480p, and the same with a 10-second reference video holds 75.000 Credits.
The hold is only the estimate. A succeeded task is charged from the usage the model reports, at the tier's rate, so price.charged can be below the hold (the rest is released) or above it, with no cap. Usage above the hold comes from your available balance; what it cannot cover is owed, and new creates get 402 balance_negative until a top-up. A failed, canceled or unresolved task is not charged. Send the body to POST /v1/estimates to see the exact hold and its basis (output_seconds, input_seconds, billed_seconds, auto). See Billing.
Errors and behaviors
| When | Response | What to do |
|---|---|---|
A field the schema does not list (such as omni_reference_task_type or draft), a wrong value or type | 422 invalid_input, errors[].rule such as field_not_allowed, value_not_allowed, out_of_range | Send only the fields in the reference below |
| A mode rule is broken | 422 invalid_input with the rule: frames_with_references, last_frame_needs_first_frame, first_frame_repeated, last_frame_repeated, content_needs_text_or_visual, audio_needs_visual | Fix the field at errors[].path |
| Too many images, videos or audio items | 422 invalid_input, rule too_many_images, too_many_videos or too_many_audios | Send at most 9 images, 3 videos and 3 audio items |
The prompt has inline --flag parameters, such as --duration 10 | 422 invalid_input, rule prompt_flag_syntax | Use the input fields instead |
| A measured video or audio is too short or too long, alone or in total | 422 input_duration_out_of_range; errors[] names the item (/content/N/video_url/url or /content/N/audio_url/url, rule media_length) or the total (/content, rule video_total_too_long or audio_total_too_long) | Trim the media |
| A linked file has the wrong format or is too large | 422 input_media_invalid or input_media_too_large | Convert or shrink it |
| The model refuses a file when it fetches it (pixel size, aspect ratio, frame rate) | Task fails with input_media_invalid, sometimes generation_failed | Check the file; nothing is charged |
| The model cannot fetch a URL | Task fails with input_media_unreachable | Keep the URL public until the task closes, or upload the file |
| Content safety refuses the prompt or media | Task fails with input_moderated | Change the prompt or media; nothing is charged |
| Content safety refuses the result | Task fails with output_moderated, no result | Change the prompt; nothing is charged |
Moderation is always on; no field turns it off. Each task has a deadline, execution_expires_after: 3600 to 259200 seconds (1 to 72 hours) from acceptance, default 86400. A task still unfinished then closes as unresolved, releases its hold and is not charged; if its result arrives later, it is added at no charge and late_result_available becomes true. See Errors and Get results.
Prompting tips
- Name reference media by kind and order in
content: "image 1", "image 2", "video 1", "audio 1". Say what to take from each: "the character from image 1", "the camera movement of video 1", "the rhythm of audio 1". - Write the shot, not just the subject: subject, action, setting, camera movement, light and style, in that order. For several shots, number them ("Shot 1: …, Shot 2: …") and give each its own camera move.
- Describe the sound you want when
generate_audiois on: ambience, effects, music or none, and any spoken line in quotes. - With first and last frames, describe the motion between them; the frames already fix the start and end.
- Put settings in fields, never in the prompt:
--ratio 16:9style flags are refused. - Settle the prompt at
480p, then render the version you keep at720p.
价格
输入决定价格档位。视频按输出秒数计费;含输入视频的档位同时计入输入秒数。
| 档位 | 选择条件 | 价格 | 时长 |
|---|---|---|---|
480p | resolution = 480p | 8.4 积分/秒 | 4–15 秒 |
720p | resolution = 720p | 18.4 积分/秒 | 4–15 秒 |
480p-video | resolution = 480p, 含输入视频 | 5 积分/秒 | 4–15 秒 |
720p-video | resolution = 720p, 含输入视频 | 11 积分/秒 | 4–15 秒 |
规则
contentneeds at least one text, image or video item.- Every image, video and audio item in
contentnames itsrole. - Input limits: up to 9 images, 3 videos and 3 audio items in
content, with no limit on the total. Each video and audio item runs 2 to 15 seconds. Videos add up to at most 15 seconds, and audio to at most 15 seconds. Lengths are checked before the task is created when the file can be measured (422input_duration_out_of_range). Task type and drafts are not supported. - Image pixel size and aspect ratio, and video resolution and frame rate, are not checked when the request is made: the model checks them when the task runs, and a file it refuses usually fails the task with
input_media_invalid(otherwisegeneration_failed); the task is not charged. first_frameandlast_frameimages (at most one each) cannot be combined with reference images, videos or audio, and alast_frameneeds afirst_frame.- Audio items need at least one image or video in
content. - Prompt text must not contain inline
--flagparameters.
输入字段
在 input 中发送这些字段。表中没有的字段会被拒绝,返回 HTTP 422 invalid_input。
| 字段 | 说明 |
|---|---|
| Encoding quality. Only standard. 固定值 |
| Prompt text and media items. Each image, video and audio item names its role. 至少 1 项 |
content[]. | Item kind. 可选值 textimage_urlvideo_urlaudio_url |
type 为 text 的项 | |
content[]. | Prompt text, up to 4000 characters per item. 最多 4000 个字符 |
type 为 image_url 的项 | |
content[]. | |
content[]. | An https URL or an uploaded asset id (ast_...). 最多 4000 个字符 · 格式 |
content[]. | Image roles: first_frame, last_frame, reference_image. Video: reference_video. Audio: reference_audio. |
type 为 video_url 的项 | |
content[]. | Image roles: first_frame, last_frame, reference_image. Video: reference_video. Audio: reference_audio. |
content[]. | |
content[]. | An https URL or an uploaded asset id (ast_...). 最多 4000 个字符 · 格式 |
type 为 audio_url 的项 | |
content[]. | |
content[]. | An https URL or an uploaded asset id (ast_...). 最多 4000 个字符 · 格式 |
content[]. | Image roles: first_frame, last_frame, reference_image. Video: reference_video. Audio: reference_audio. |
| Output length in seconds, 4 to 15, or -1 to let the model choose. Defaults to 5. 默认值 4 到 15,或 |
| Execution and delivery deadline in seconds from acceptance. Defaults to 86400. Credits remain held until completion or this deadline. 默认值 最小 3600 · 最大 259,200 |
| Adds a synchronized soundtrack. Defaults to true. 默认值 |
| Container format. Only mp4. 固定值 |
| Output aspect ratio. Defaults to adaptive. 可选值 16:94:31:13:49:1621:9adaptive默认值 |
| Output resolution. Defaults to 720p. 可选值 480p720p默认值 |
| Also returns the last frame of the video as an image. |
| Random seed. -1 or omitted picks one at random. 最小 -1 · 最大 4,294,967,295 |
| Add a visible watermark. Defaults to false; the tier price is unchanged. 默认值 |
示例
完整的创建请求、202 响应,以及任务成功后的状态。
请求
cURL
curl https://api.vizoapi.com/v1/generations \
-H "Authorization: Bearer $VIZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0-mini",
"input": {
"content": [
{
"type": "text",
"text": "A paper boat drifting on a pond at dawn, slow dolly in"
}
],
"resolution": "720p",
"ratio": "16:9",
"duration": 5
},
"metadata": {
"client_reference": "my-unique-reference-1"
}
}'Python
import os, requests
# Send once: do not retry this request automatically.
task = requests.post(
"https://api.vizoapi.com/v1/generations",
headers={"Authorization": f"Bearer {os.environ['VIZO_API_KEY']}"},
json={
"model": "seedance-2-0-mini",
"input": {
"content": [
{
"type": "text",
"text": "A paper boat drifting on a pond at dawn, slow dolly in"
}
],
"resolution": "720p",
"ratio": "16:9",
"duration": 5
},
"metadata": {
"client_reference": "my-unique-reference-1"
}
},
timeout=60,
).json()
print(task["id"], task["status"])Node.js
// Send once: do not retry this request automatically.
const res = await fetch("https://api.vizoapi.com/v1/generations", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.VIZO_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"model": "seedance-2-0-mini",
"input": {
"content": [
{
"type": "text",
"text": "A paper boat drifting on a pond at dawn, slow dolly in"
}
],
"resolution": "720p",
"ratio": "16:9",
"duration": 5
},
"metadata": {
"client_reference": "my-unique-reference-1"
}
}),
});
const task = await res.json();
console.log(task.id, task.status);此输入选择 720p 档位,每秒 18.4 积分。5 秒共冻结 92.000 积分。
响应
202 已受理
{
"id": "gen_01JD8Z5QW3XR",
"model": "seedance-2-0-mini",
"source": "api",
"created_at": "2026-11-08T09:00:00Z",
"customer_resolution_deadline": "2026-11-09T09:00:00Z",
"late_result_available": false,
"metadata": {
"client_reference": "my-unique-reference-1"
},
"status": "processing",
"execution_status": "processing",
"delivery_status": "pending",
"billing_status": "pending",
"version": 1,
"price": {
"unit": "credit",
"estimated": "92.000",
"reserved": "0.000",
"charged": "0.000",
"refunded": "0.000"
},
"allowed_actions": [],
"closed_at": null,
"error": null,
"result": null
}200 已成功
{
"id": "gen_01JD8Z5QW3XR",
"model": "seedance-2-0-mini",
"source": "api",
"created_at": "2026-11-08T09:00:00Z",
"customer_resolution_deadline": "2026-11-09T09:00:00Z",
"late_result_available": false,
"metadata": {
"client_reference": "my-unique-reference-1"
},
"status": "succeeded",
"execution_status": "succeeded",
"delivery_status": "ready",
"billing_status": "settled",
"version": 4,
"price": {
"unit": "credit",
"estimated": "92.000",
"reserved": "0.000",
"charged": "92.000",
"refunded": "0.000"
},
"allowed_actions": [],
"closed_at": "2026-11-08T09:01:31Z",
"error": null,
"result": {
"asset_id": "ast_01JD8Z9M2C4V",
"outputs": [
{
"index": 0,
"asset_id": "ast_01JD8Z9M2C4V",
"content_type": "video/mp4"
}
]
}
}