Generate videos
Run Seedance 2.5, Seedance 2.0, Seedance 2.0 Fast, Seedance 2.0 Mini, Wan 3.0, Wan 3.0 Prime, HappyHorse 1.1, HappyHorse 1.0, HappyHorse 1.0 Video Edit, Grok Imagine Video 1.5, Grok Imagine Video 1.5 Lite, Kling 4.0, MiniMax H3, MiniMax H3 Max, MiniMax H3 Max Turbo, Video Upscale, Video Frame Interpolation. Every video request creates a task that you poll or receive by webhook.
Generation modes
Set mode to choose a workflow. It defaults to text_to_video. Select a mode to update the example below.
Request example
https://api.mlmux.com/v1/videos/generationscurl https://api.mlmux.com/v1/videos/generations \
-H "Authorization: Bearer $MLMUX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "bytedance/seedance-2.5",
"prompt": "A cinematic tracking shot along a coastal road at sunrise, warm backlight, gentle camera drift",
"mode": "text_to_video",
"ratio": "16:9",
"resolution": "720p",
"duration": 8,
"generate_audio": true,
"route_mode": "official-cheap"
}'Parameters
| Field | Type | Required | Description |
|---|---|---|---|
model | string | Yes | A model ID from the table below. |
prompt | string | Yes | Scene, subject, motion, camera, lighting, and sound direction. |
mode | string | No | text_to_video (default), image_to_video, first_last_frame, or multi_ref. |
ratio | string | No | 16:9, 9:16, 4:3, 3:4, 1:1, 21:9, or adaptive where listed. Defaults to adaptive. |
resolution | string | No | 480p, 720p, 1080p, or 4K, as listed for the model. Defaults to 720p. |
duration | integer | No | Clip length in seconds, within the model's range. Defaults to 5. Use -1 to let the model choose. |
generate_audio | boolean | No | Generate synchronized audio with the clip. |
route_mode | string | No | official or official-cheap. Defaults to the key's route mode, then official-cheap. |
image_url | string | Conditional | Required for image_to_video: the start frame. |
first_frame_urllast_frame_url | string | Conditional | Required for first_last_frame. You can send two ordered image_urls instead. |
image_urls | string[] | Conditional | Reference images for multi_ref. |
video_urlsaudio_urls | string[] | Conditional | Reference videos and audio for multi_ref. |
multi_ref needs at least one reference. Seedance 2.5 accepts up to 30 images, 10 videos, and 10 audio files (50 in total); the other models accept up to 9 images, 3 videos, and 3 audio files (12 in total). Use public https URLs, or upload files first with POST /v1/uploads.
Models
| Model | Model ID | Resolution | Ratio | Duration |
|---|---|---|---|---|
| Seedance 2.5 | bytedance/seedance-2.5 | 480p · 720p · 1080p | adaptive · 16:9 · 21:9 · 4:3 · 1:1 · 3:4 · 9:16 | 4–30 s |
| Seedance 2.0 | bytedance/seedance-2.0 | 480p · 720p · 1080p · 4K | adaptive · 16:9 · 21:9 · 4:3 · 1:1 · 3:4 · 9:16 | 4–15 s |
| Seedance 2.0 Fast | bytedance/seedance-2.0-fast | 480p · 720p | adaptive · 16:9 · 21:9 · 4:3 · 1:1 · 3:4 · 9:16 | 4–15 s |
| Seedance 2.0 Mini | bytedance/seedance-2.0-mini | 480p · 720p | adaptive · 16:9 · 21:9 · 4:3 · 1:1 · 3:4 · 9:16 | 4–15 s |
| Wan 3.0 | alibaba/wan-3.0 | 480p · 720p · 1080p | adaptive · 16:9 · 9:16 · 1:1 · 4:3 · 3:4 | 2–15 s |
| Wan 3.0 Prime | alibaba/wan-3.0-prime | 480p · 720p · 1080p | adaptive · 16:9 · 9:16 · 1:1 · 4:3 · 3:4 | 2–15 s |
| HappyHorse 1.1 | alibaba/happyhorse-1.1 | 480p · 720p · 1080p | 16:9 · 9:16 · 1:1 · 4:3 · 3:4 | 3–15 s |
| HappyHorse 1.0 | alibaba/happyhorse-1.0 | 720p · 1080p | 16:9 · 9:16 · 1:1 · 4:3 · 3:4 | 3–15 s |
| HappyHorse 1.0 Video Edit | alibaba/happyhorse-1.0-video-edit | 720p · 1080p | — | Same as the source |
| Grok Imagine Video 1.5 | xai/grok-imagine-video-1.5 | 480p · 720p · 1080p | 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 3:2 · 2:3 · 21:9 | 1–15 s |
| Grok Imagine Video 1.5 Lite | xai/grok-imagine-video-1.5-lite | 480p · 720p · 1080p | 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 3:2 · 2:3 · 21:9 | 1–15 s |
| Kling 4.0 | kwaivgi/kling-4.0 | 720p · 1080p | 16:9 · 9:16 · 1:1 · 21:9 | 3–30 s |
| MiniMax H3 | minimax/h3 | 480p · 768p · 2K | 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9 | 5–15 s |
| MiniMax H3 Max | minimax/h3-max | 480p · 768p | 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9 | 5–15 s |
| MiniMax H3 Max Turbo | minimax/h3-max-turbo | 480p · 768p | 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9 | 5–15 s |
| Video Upscale | mlmux/video-upscale | 720p · 1080p · 2K · 4K | — | Same as the source |
| Video Frame Interpolation | mlmux/video-fps-increase | — | Same as the source |
For Seedance, ratio, resolution, and duration are optional and fall back to each model's defaults.
Wan, HappyHorse, Grok Imagine, Kling, and MiniMax read the inputs rather than mode: send a start image as image_url, keyframes as first_frame_url and last_frame_url, and reference images, videos, and audio as image_urls, video_urls, and audio_urls. They are billed per second of output at the chosen resolution; Wan and MiniMax also bill the seconds of reference videos.
HappyHorse 1.0 Video Edit, Video Upscale, and Video Frame Interpolation take a source video as video_url, and the output is as long as the source. Video Upscale takes a target resolution; the two tools need no prompt.
Task lifecycle
Creating a video always returns HTTP 202 with a task. Save its id and poll poll_url. When status is succeeded, the response includes video, usage, and actual_charge_credits.
https://api.mlmux.com/v1/videos/generations/{task_id}{
"id": "task_01a9...",
"object": "video.generation.task",
"status": "queued",
"created": 1767225600,
"model": "bytedance/seedance-2.5",
"api_method": "videos.generations.create",
"poll_url": "/v1/videos/generations/task_01a9...",
"progress": 0,
"message": "queued",
"estimated_charge_credits": 1.84
}{
"id": "task_01a9...",
"object": "video.generation.task",
"status": "succeeded",
"progress": 100,
"message": "completed",
"video": "https://.../generated/01a9....mp4",
"last_frame_image": "https://.../generated/01a9....jpg",
"usage": {
"output_tokens": 172800,
"video_seconds": 8,
"video_resolution": "720p"
},
"estimated_charge_credits": 1.84,
"actual_charge_credits": 1.79
}A failed task has status failed and the reason in message. Output URLs are hosted by MLMux; download the files you want to keep.
Webhooks
Instead of polling, subscribe to request.succeeded and request.failed. See Webhooks for the payload and signature check.