Amux

Create video

Last updated September 8, 2026

Generate with bytedance/doubao-seedance-2-5 in Volcengine Ark's native shape; existing Ark clients work as-is.

Generate with bytedance/doubao-seedance-2-5 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.

POSThttps://gateway.amux.ai/api/v3/contents/generations/tasks

Authorization

header
AuthorizationstringRequired

Bearer <your Amux key> Your Amux API key.

Request

application/json
modelstringRequired

Always bytedance/doubao-seedance-2-5. The bare doubao-seedance-2-5 works too, and it is case-insensitive.

contentarray<object>Required

Prompt 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"Required

What kind this item is. Required: it is not the role -- the role is on role.

textstring

The 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, 30 reference images, 10 reference videos and 10 reference audio clips (video and audio clips run 2-30s each and cap at 30s combined).

Reference audio alone, with no image or video, is allowed.

⚠️ 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_urlobject

Required: 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
urlstring

A publicly reachable https URL. The model fetches it itself; we never do.

resolution"480p" | "720p" | "1080p"Default "720p"

Output resolution tier. This model offers 480p / 720p / 1080p.

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 -1

Output length in seconds: -1 or an integer from 4 to 30. -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.

⚠️ Only adaptive is accepted when a first frame is given, or for video edit / extend: the output ratio follows that image or the source video, and a concrete ratio is rejected at submit time.

generate_audiobooleanDefault true

Whether 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 false

Whether to stamp an "AI generated" watermark in the bottom-right corner.

return_last_framebooleanDefault false

Whether 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.

output_format"mp4" | "mov"Default "mp4"

Container format. mov is the high-colour-fidelity format for

post-production (H.264 + yuv444p + PCM); use it for grading, keying and

compositing. Some players cannot open it.

omni_reference_task_type"auto" | "reference" | "edit" | "extend"Default "auto"

Sub-type of an omni-reference task. auto lets the model decide from the

material and the prompt; naming it explicitly moves validation to submit

time instead of failing asynchronously once the task is running.

⚠️ edit carries two hard constraints: ratio must be adaptive,

duration must be -1, and at least one reference video is required.

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"Required

Always web_search; it is the only tool today.

priorityintegerDefault 0

Queue priority; higher goes first. It reorders the queue within one

endpoint only and never interrupts a task already running.

execution_expires_afterintegerDefault 172800

Task timeout in seconds, counted from creation; 48 hours by default. Past

it the task is terminated and marked expired.

safety_identifierstring

A stable, unique identifier for your end user, used for abuse attribution.

Send a hash rather than a plaintext username or email.

callback_urlstring

Where 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

200response

Accepted. The body carries only id, matching the vendor.

400response

Invalid parameters, an impossible material combination, or a 1.x parameter this generation does not accept.

402response

The available balance does not cover the reservation upper bound.

503response

No 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, even reference audio on its own, 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" } }
  ]
}
FieldWhat it is
typeThe media kind: text / image_url / video_url / audio_url
roleThe purpose: first frame, last frame, reference image / video / audio
<type>.urlThe 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

ParameterThis model
resolution480p / 720p / 1080p
duration-1 or an integer from 4 to 30
ratio / aspect_ratioadaptive or one of six ratios. Required: first-frame, edit and extend scenes take only adaptive
Material limits1 first frame, 1 last frame, 30 reference images, 10 reference videos, 10 reference audio clips (2-30s each, 30s combined)
Audio aloneallowed
output_formatmp4 / mov
omni_reference_task_typeauto / reference / edit / extend

Required: with a first frame, ratio accepts only adaptive — the output ratio always follows that image, and a concrete ratio is rejected at submit time.

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
curl https://gateway.amux.ai/api/v3/contents/generations/tasks \
  -H "Authorization: Bearer $AMUX_API_KEY" \
  -d '{
    "model": "bytedance/doubao-seedance-2-5",
    "content": [
      {
        "type": "text",
        "text": "A ginger cat running through fresh snow, slow motion"
      }
    ],
    "resolution": "720p",
    "duration": -1
  }'
{
  "id": "<string>"
}