Amux AI

Create video

Last updated September 8, 2026

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

Generate with bytedance/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 AI key> Your Amux API key.

Request

application/json
modelstringRequired

Always bytedance/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 key request-body conventions

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 may be omitted in exactly three cases, matching the vendor: a single image as the only material is treated as the first frame (first_frame); a video_url as reference_video; an audio_url as reference_audio. First/last frames and reference images need an explicit role — an image without one alongside other material returns a 400 rather than being guessed.

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.

Omni-reference subtasks (bytedance/seedance-2.5 only)

A request qualifies as an omni-reference task when content includes any of the reference_image, reference_video, or reference_audio roles. The model further classifies it into one of three subtasks based on prompt intent, and each subtask enforces different constraints on ratio and duration:

SubtaskTriggerEnforced constraints
Reference-to-video referencePrompt expresses neither editing nor extension intentNone
Video editing editIncludes a reference video, and the prompt expresses editing intent (add, remove, replace, modify)ratio must be adaptive; duration must be -1; the reference video must be 4-30 seconds
Video extension extendIncludes a reference video, and the prompt expresses extension intent (continue, extend forward or backward)ratio must be adaptive

For editing and extension, the output aspect ratio always follows the selected reference video; for editing, the output duration follows it as well. These constraints therefore cannot be overridden.

Validation timing depends on omni_reference_task_type

ValueValidationOn constraint violation
edit / extend (explicit)Synchronous, at submissionImmediate 400
auto or omittedAsynchronous, after the task startsTask ends as failed with InvalidParameter.TaskTypeConstraint

Specifying the subtask explicitly moves validation to submission time and avoids failures that surface only after the task has started. Note that the model still determines the actual subtask from the prompt: if it disagrees with the value you specified, the task fails asynchronously with InvalidParameter.TaskTypeMismatch.

Recommended configuration: when the subtask is not known in advance, use omni_reference_task_type: "auto" together with ratio: "adaptive" and duration: -1. That combination satisfies the constraints of all three subtasks.

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

So a higher resolution or a longer clip usually costs more, driven by token count. 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/seedance-2.5",
    "content": [
      {
        "type": "text",
        "text": "A ginger cat running through fresh snow, slow motion"
      }
    ],
    "resolution": "720p",
    "duration": -1
  }'
{
  "id": "<string>"
}