Amux

Create Seedance task

Last updated September 7, 2026

Submit a video task in Volcengine Ark's native shape. The prompt is optional and billing is per token.

Submit a video task in the shape of Volcengine Ark's v3 API. If you already have Ark code, point base_url at Amux — request and response shapes match what you send today.

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

Authorization

header
AuthorizationstringRequired

Bearer <your Amux key> An Amux key created in the console. If you lose it, you can view it again on the keys page.

Request

application/json
modelstringRequired

The Amux model ID. Four models serve this endpoint today, and they

differ item by item:

ModelResolutionDurationOther
bytedance/doubao-seedance-2-5480p 720p 1080p-1 or 4-30s30/10/10 reference material; has output_format and omni_reference_task_type
bytedance/doubao-seedance-2-0480p 720p 1080p 4k-1 or 4-15s9/3/3 reference material
bytedance/doubao-seedance-2-0-fast480p 720p-1 or 4-15ssame as above
bytedance/doubao-seedance-2-0-mini480p 720p-1 or 4-15ssame as above

Asking for a tier a model does not have is **rejected, not quietly

downgraded**: getting 720p when you asked for 1080p, and being billed

for 720p, is worse than a clear error.

You can also point this at an endpoint ID (ep-…) from your own

account — the upstream accepts either, and the mapping is per channel.

contentarray<object>Required

The prompt and the input material live in the same array.

Unlike the MiniMax shape, a text item is not required — a first

frame, or reference material on its own, is a valid request. What is

required is that the array is not empty.

contentarray<object>
type"text" | "image_url" | "video_url" | "audio_url"Required

What kind of item this is.

This is not the role — the role lives on role. They are two

separate fields.

textstring

The prompt, when type is text.

Refer to input material in plain language ("match the motion in

the first reference video").

urlstring

Where the material lives. Public https URLs only — the model

fetches it, Amux never does.

role"first_frame" | "last_frame" | "reference_image" | "reference_video" | "reference_audio"

What this material is for. **The limits differ between the two

generations**:

2.52.0 / fast / mini
First / last frame1 each1 each
Reference images309
Reference videos10 clips, 2-30s each, 30s total3 clips, 2-15s each, 15s total
Reference audio10 clips, same caps3 clips, same caps
Audio aloneallowednot allowed — at least one reference video or image is required

Frames and reference material are mutually exclusive — this

is the easiest thing to get wrong when coming from the MiniMax

shape, where they can be combined.

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

Output resolution tier. **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 rate.

Which tiers are legal depends on the model; see the table on model.

4k is only available on bytedance/doubao-seedance-2-0.

⚠️ 1080p and 4k output is 10-bit H.265/HEVC, which a few players

cannot open.

durationintegerDefault -1

Output length in seconds. **-1 lets the model pick within the legal

range**, and all four models accept it (it is also the default on 2.5).

The range differs per model: 4-30s on 2.5, 4-15s on all three 2.0

models.

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

⚠️ bytedance/doubao-seedance-2-5 accepts only adaptive when a

first frame is given, or for video edit / extend tasks: the output

ratio always follows that image or the source video. **The 2.0 models

do not carry this restriction** — they can be given an explicit ratio.

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 AIGC watermark on the output.

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

Container format of the generated file. **Only

bytedance/doubao-seedance-2-5 has this parameter.**

mov is the high-colour-fidelity format for post-production

(H.264 + yuv444p + PCM); some players cannot open it.

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 first frame of the next call to chain continuous

segments.

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

Sub-type of an omni-reference task. **Only

bytedance/doubao-seedance-2-5 has this parameter.**

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 already running.

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

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.

On /v1/tasks this is a boolean called web_search.

toolsarray<object>
type"web_search"Required

Always web_search; it is the only tool today.

priorityintegerDefault 0

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

one endpoint 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.

On /v1/tasks this field is called user.

callback_urlstring

Called back when the task reaches a terminal state. **This is Amux's

webhook_url** -- we simply accept it under the vendor's field name; the payload

matches the unified endpoint exactly (the {event, sent_at, task} envelope, an

Amux-Signature header, and backoff retries).

https only, and never a private address. The URL is validated at submit time.

Response

200response

Accepted. The body carries only id — take it to GET /v1/tasks/{id}

(or the alias below) and poll.

400response

Invalid parameters, an empty request, more material than the model accepts,

or a Seedance 1.x parameter (seed, camera_fixed, frames, draft).

Those are rejected rather than dropped: thinking a seed applied and

getting a random result back is far harder to debug than an error.

402response

Available balance does not cover the reservation. It is taken for 15 seconds

of output, plus another 30 seconds when a reference video is present.

503response

No provider can currently serve this model.

Models on this endpoint

ModelResolutionDurationRef. image / video / audioModel-only params
bytedance/doubao-seedance-2-5480p 720p 1080p-1 or 4-30s30 / 10 / 10output_format, omni_reference_task_type
bytedance/doubao-seedance-2-0480p 720p 1080p 4k-1 or 4-15s9 / 3 / 3
bytedance/doubao-seedance-2-0-fast480p 720p-1 or 4-15s9 / 3 / 3
bytedance/doubao-seedance-2-0-mini480p 720p-1 or 4-15s9 / 3 / 3

-1 means the model picks the length within the legal range; all four accept it (it is also the default on 2.5).

Exact value ranges live on each model's own page — this page only answers "which page should I read": Seedance 2.5 · 2.0 · 2.0 Fast · 2.0 Mini. The comparison table belongs here (you need it to choose), but the exact ranges should exist in exactly one place — kept in two, only one of them will ever get updated.

⚠️ Asking for a tier a model does not have is rejected, not quietly downgraded. Getting 720p when you asked for 1080p, and being billed for 720p, is worse than a clear error — with the downgrade you only find out ten-odd minutes and one payment later.

⚠️ 1080p and 4k output is 10-bit H.265/HEVC, which a few players cannot open.

Three things that differ from the MiniMax shape

The two request bodies look almost identical (same flat parameters, same heterogeneous content[]), so coming from POST /v2/video_generation the differences all hide in the details:

1. The prompt is optional

The MiniMax shape requires one non-empty text item in content. This one does not. Frames alone, or even a single reference audio clip, are combinations the vendor supports. The only requirement is that content is not empty.

2. Frames and reference material are mutually exclusive

The MiniMax shape lets you combine them; this one does not. The vendor defines first frame, first-and-last frame, and multimodal reference as three separate modes, and mixing them is rejected upstream. Per-role limits differ between the two generations — do not read the 2.5 column and then call a 2.0 model:

Role2.52.0 / fast / mini
first_frame / last_frame1 each (a last frame requires a first frame)1 each
reference_image309
reference_video10 clips, 2-30s each, 30s combined3 clips, 2-15s each, 15s combined
reference_audio10 clips, same caps3 clips, same caps
Audio alone, no image or videoallowednot allowed — at least one reference video or image is required

⚠️ bytedance/doubao-seedance-2-5 accepts only adaptive for ratio when a first frame is given: the output aspect ratio always follows that image, and a concrete ratio is rejected at submit time. The 2.0 models do not carry this restriction — they can be given an explicit ratio.

3. type is not the role

This part is the same on both, but it is still the easiest thing to get wrong anywhere on this path:

{
  "content": [
    { "type": "text", "text": "Have the person walk toward the camera" },
    { "type": "image_url", "role": "first_frame", "image_url": { "url": "https://…/a.png" } }
  ]
}

type is the media kind (image_url / video_url / audio_url); the role lives on role. role cannot be omitted — leaving it out returns a 400 rather than being guessed as a first frame.

Seedance 1.x parameters are rejected, not dropped

seed, camera_fixed, frames, draft and service_tier=flex are valid on 1.x and supported by none of the four Seedance 2.x models. Sending one is rejected at submit time.

That is deliberate. Dropping them silently means you think seed applied and get a random result back, which costs far more to debug than an error does.

Billing: per token, not per second

Every other video model on Amux bills output seconds. This one does not. The upstream's own conversion is:

tokens = width x height x frames / 1024      frames = seconds x 24 fps

Width and height follow the chosen resolution and the resulting aspect ratio, so a higher resolution costs more because it produces more tokens, not because it carries a different unit price. The exceptions are 1080p and 4k — those two each sit on their own token rate.

ItemHow it is billed
Generated videousage.completion_tokens × the token rate
Reference videoNot billed separately — its cost is already inside that token count
Reference image / audioFree

⚠️ A request that includes reference video moves to a lower token rate, and the discount applies to the whole task, not just the input part.

The reservation taken at submit time is an upper bound: the tokens for 15 seconds of output, or for 45 seconds when a reference video is present. Settlement uses the token count the upstream reports and releases the difference.

The rest of the vendor parameter set

This endpoint accepts the full Volcengine Ark request, apart from the 1.x-only fields listed above:

ParameterWhat it does
return_last_frameAlso return the last frame as a PNG (no watermark, video dimensions). Feed it back as the next segment's first frame to chain continuous video
priorityQueue priority 0-9, higher goes first. Reorders the queue only; never interrupts a running task
execution_expires_afterTask timeout in seconds, 3600-259200, 48 hours by default. Past it the task is marked expired
safety_identifierEnd-user identifier, up to 64 characters. Send a hash, not plaintext
tools: [{"type":"web_search"}]Web search; the model decides for itself whether to use it
output_formatmp4 / mov. 2.5 only
omni_reference_task_typeauto / reference / edit / extend. 2.5 only

⚠️ omni_reference_task_type: "edit" carries two hard constraints: ratio must be adaptive, duration must be -1, and at least one reference video is required. Naming it explicitly moves validation to submit time instead of failing asynchronously once the task is already running.

⚠️ Two fields are renamed on /v1/tasks: safety_identifier is called user, and the tools array flattens to a boolean web_search. Everything else keeps its name.

The task ID is ours

The id you get back is the Amux task ID. Take it to GET /v1/tasks/{id} or to the Ark-shaped alias; both read the same task.

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