Create video
Last updated September 8, 2026
Generate with bytedance/doubao-seedance-2-0 in Volcengine Ark's native shape; existing Ark clients work as-is.
Generate with bytedance/doubao-seedance-2-0 in the Volcengine Ark native shape: prompt and material live in
one content[] array. If you already have Ark code, point base_url at this site.
https://gateway.amux.ai/api/v3/contents/generations/tasksAuthorization
headerAuthorizationstringRequiredBearer <your Amux key> Your Amux API key.
Request
application/jsonmodelstringRequiredAlways bytedance/doubao-seedance-2-0. The bare doubao-seedance-2-0 works too, and it is case-insensitive.
contentarray<object>RequiredPrompt and input material live in one array.
The text item is not required -- a single first frame, or reference material alone,
is a valid request. The only requirement is that the array is not empty. This is the
opposite of the MiniMax shape.
›contentarray<object>
type"text" | "image_url" | "video_url" | "audio_url"RequiredWhat kind this item is. Required: it is not the role -- the role is on role.
textstringThe prompt, when type is text. Refer to material in plain language
("the person in reference image 1"); this model has no [Image 1] style markers.
role"first_frame" | "last_frame" | "reference_image" | "reference_video" | "reference_audio"What this material is for. Limits: one first frame, one last frame, 9 reference images, 3 reference videos and 3 reference audio clips (video and audio clips run 2-15s each and cap at 15s combined).
⚠️ Audio alone is not accepted — at least one reference video or image is required.
⚠️ Frames and reference material are mutually exclusive — the vendor defines first frame, first-and-last frame and omni reference as three separate modes; mixing them is rejected.
image_urlobjectRequired: the URL is nested in an object named after type (image_url /
video_url / audio_url), not a flat url. Only publicly reachable https URLs.
›image_urlobject
urlstringA publicly reachable https URL. The model fetches it itself; we never do.
resolution"480p" | "720p" | "1080p" | "4k"Default "720p"Output resolution tier. This model offers 480p / 720p / 1080p / 4k.
A higher tier mostly costs more because it produces more tokens, not because it carries a different unit price — the exceptions are 1080p and 4k, which each sit on their own token rate.
Required: output at those tiers is 10-bit H.265/HEVC, which a few players cannot open.
durationintegerDefault -1Output length in seconds: -1 or an integer from 4 to 15. -1 lets the model pick within that range.
⚠️ Length drives the token count, which is what you are billed on.
ratio"adaptive" | "21:9" | "16:9" | "4:3" | "1:1" | "3:4" | "9:16"Default "adaptive"Aspect ratio. adaptive follows the input material.
This model can be given a concrete ratio, first-frame scenes included — that restriction belongs to Seedance 2.5 only.
generate_audiobooleanDefault trueWhether the output carries a soundtrack. On by default — the model
generates matching dialogue, effects and score from the prompt and the
visuals. Pass false explicitly for a silent video.
watermarkbooleanDefault falseWhether to stamp an "AI generated" watermark in the bottom-right corner.
return_last_framebooleanDefault falseWhether to also return the last frame as a PNG (no watermark, same
dimensions as the video). Feed it back as the next segment's first frame
to chain continuous video.
toolsarray<object>Tool configuration; web search is the only one today. With it on, the model
decides for itself whether to search the web (products, weather and the
like) — better currency, some added latency.
›toolsarray<object>
type"web_search"RequiredAlways web_search; it is the only tool today.
priorityintegerDefault 0Queue priority; higher goes first. It reorders the queue within one
endpoint only and never interrupts a task already running.
execution_expires_afterintegerDefault 172800Task timeout in seconds, counted from creation; 48 hours by default. Past
it the task is terminated and marked expired.
safety_identifierstringA stable, unique identifier for your end user, used for abuse attribution.
Send a hash rather than a plaintext username or email.
callback_urlstringWhere to POST the result once the task is terminal. **This is the site's
webhook_url** under the vendor's field name; the payload is identical to the unified
entry point. Must be a deliverable public https URL.
Response
200responseAccepted. The body carries only id, matching the vendor.
400responseInvalid parameters, an impossible material combination, or a 1.x parameter this generation does not accept.
402responseThe available balance does not cover the reservation upper bound.
503responseNo provider is currently available for this model.
Three things that catch people out
1. The prompt is optional
content may carry no text item at all — a first frame alone, first-and-last frames, reference images or reference video
are all combinations the vendor supports. The only requirement is a non-empty array.
This is the opposite of the MiniMax shape, where the prompt is always required.
2. type is not the role, and the URL is not flat
{
"content": [
{ "type": "text", "text": "the person walks toward the camera" },
{ "type": "image_url", "role": "first_frame", "image_url": { "url": "https://…/a.png" } }
]
}| Field | What it is |
|---|---|
type | The media kind: text / image_url / video_url / audio_url |
role | The purpose: first frame, last frame, reference image / video / audio |
<type>.url | The URL, nested in an object named after type |
role cannot be omitted — leaving it out returns a 400 rather than being guessed as a
first frame.
3. The three modes are mutually exclusive
First frame, first-and-last frame and omni reference are three separate modes, and mixing them is rejected upstream. Coming from MiniMax this is the easiest one to hit, since that shape lets you combine frames and reference material.
Value ranges
| Parameter | This model |
|---|---|
resolution | 480p / 720p / 1080p / 4k |
duration | -1 or an integer from 4 to 15 |
ratio / aspect_ratio | adaptive or one of six ratios; a first-frame scene may also name one |
| Material limits | 1 first frame, 1 last frame, 9 reference images, 3 reference videos, 3 reference audio clips (2-15s each, 15s combined) |
| Audio alone | not allowed — at least one reference video or image |
output_format | not available |
omni_reference_task_type | not available |
This model can be given a concrete ratio in first-frame scenes — the "adaptive only" restriction belongs to Seedance 2.5, so do not copy it from that page.
Seedance 1.x parameters are rejected
seed, camera_fixed, frames, draft and service_tier=flex are valid on 1.x and
no Seedance 2.x model accepts them. Sending one is rejected at submit time rather than
dropped silently — dropping it silently means you think seed applied and get a random
result back.
Billing is per token
Every other video model here bills output seconds. Seedance does not:
tokens = width x height x frames / 1024 frames = seconds x 24 fps
So a higher resolution or a longer clip mostly costs more because it produces more tokens. Reference images and audio are free; reference video's cost is already inside that token count, and a request carrying reference video moves the whole task to a lower rate.
On retrieval, usage.output_video_tokens is what the charge is computed from (see
the unified shape).
curl https://gateway.amux.ai/api/v3/contents/generations/tasks \
-H "Authorization: Bearer $AMUX_API_KEY" \
-d '{
"model": "bytedance/doubao-seedance-2-0",
"content": [
{
"type": "text",
"text": "A ginger cat running through fresh snow, slow motion"
}
],
"resolution": "720p",
"duration": -1
}'{
"id": "<string>"
}