▥ Seedance 2.5 is here! ›
Video API

Generate video asynchronously

Run Seedance 2.5, Seedance 2.0, Seedance 2.0 Fast, and Seedance 2.0 Mini with four pre-release workflows and one task lifecycle.

Get started

01

Choose a workflow

Generate from text, one image, first and last frames, or multimodal references.

02

Create a task

Send the model, route, prompt, output settings, and conditional reference fields.

03

Poll or use webhooks

Use the returned poll_url until the task succeeds. Pre-release webhook endpoints are configured during onboarding.

Create endpoint

POSThttps://api.mlmux.com/v1/videos/generations

Generation modes

Request example

curl https://api.mlmux.com/v1/videos/generations \
  -H "Authorization: Bearer $MLMUX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "seedance-2.5",
  "route_mode": "official-cheap",
  "prompt": "A cinematic tracking shot at sunrise, natural motion and warm backlight",
  "mode": "text_to_video",
  "ratio": "16:9",
  "resolution": "1080p",
  "duration": 10,
  "generate_audio": true
}'

Parameters

FieldTypeRequiredDescription
modelstringYesOne of the four Seedance model IDs below.
promptstringYesScene, motion, camera, lighting, timing, and audio direction.
route_modestringNoofficial, official-cheap (default), or mix.
modestringNoDefaults to text_to_video; use an exact mode shown above.
ratiostringYes1:1, 3:4, 4:3, 9:16, 16:9, 21:9, or supported adaptive.
resolutionstringYesMust be supported by the selected model.
durationintegerYesClip length from 4 through 30 seconds.
generate_audiobooleanNoGenerate synchronized audio with the clip.
image_url / image_urlsstring / string[]ConditionalOne image for image mode; up to 9 images for multimodal reference.
first_frame_url + last_frame_urlstringConditionalBoth are required for first_last_frame; two ordered image_urls also work.
video_urls / audio_urlsstring[]ConditionalUp to 3 of each in multi_ref; 12 references combined.

Model capabilities

ModelResolutionRatioDuration
seedance-2.5480p · 720p · 1080padaptive + 6 ratios4–30s
seedance-2.0480p · 720p · 1080p · 4K6 fixed ratios4–30s
seedance-2.0-fast480p · 720p6 fixed ratios4–30s
seedance-2.0-mini480p · 720padaptive + 6 ratios4–30s

All four models support all four generation modes, synchronized audio, and the three MLMux routing tiers.

Route mode

officialDirect official-provider route
official-cheapLower-cost official route · default
mixMixed upstream pool for price and capacity

Task lifecycle

GEThttps://api.mlmux.com/v1/videos/generations/{task_id}
curl https://api.mlmux.com/v1/videos/generations/task_01J... \
  -H "Authorization: Bearer $MLMUX_API_KEY"

Accepted

{
  "id": "task_01J...",
  "object": "video.generation.task",
  "status": "queued",
  "model": "seedance-2.5",
  "poll_url": "/v1/videos/generations/task_01J...",
  "progress": 0,
  "estimated_charge_credits": 1.84
}

Completed

{
  "id": "task_01J...",
  "status": "succeeded",
  "progress": 100,
  "video": "https://cdn.mlmux.com/assets/...mp4",
  "result_payload_url": "https://cdn.mlmux.com/assets/...json"
}

Webhooks

Configure once in Console

Create a signed webhook endpoint in Console → Webhooks, save its one-time signing secret, and subscribe to request.succeeded and/or request.failed.

Common errors

HTTPCodeMeaning
400invalid_video_requestA mode, reference count, ratio, resolution, or duration is invalid.
401unauthorizedThe bearer token is missing or invalid.
402insufficient_creditsAdd credits before creating another task.
403forbidden_asset_referenceAn asset:// reference is not owned by this account.
404task_not_foundThe task does not exist or belongs to another account.
502model_unavailableThe selected route has no healthy upstream capacity.