Create video generation
Last updated September 6, 2026
Submit a video task in MiniMax's native shape. Prompt and material share one content array.
Submit a video task in the shape of MiniMax's video generation v2 API. If you already
have MiniMax code, point base_url at RouterOne — request and response shapes match what
you send today.
https://gateway.routerone.ai/v2/video_generationAuthorization
headerAuthorizationstringRequiredBearer <your RouterOne key> A RouterOne key created in the console. If you lose it, you can view it again on the keys page.
Request
application/jsonmodelstringRequiredThe RouterOne model ID. Two models serve this endpoint today:
| Model | Resolution | Duration | Material |
|---|---|---|---|
minimax/minimax-h3 | 768P 2K | 4-15s | Frames + reference |
minimax/minimax-h3-max | 480P 768P | 5-15s | Frames only |
contentarray<object>RequiredThe prompt and the input material live in the same array.
It must contain one non-empty text item — the prompt is required
for this model, and a first frame on its own is not a valid request.
›contentarray<object>
type"text" | "image_url" | "video_url" | "audio_url"RequiredWhat kind of item this is.
This is not the role — the role lives on role. They are two
separate fields.
textstringThe prompt, when type is text. Up to 7000 characters.
Refer to input material in plain language ("match the motion
in the first reference video"); this model has no [Image 1]
style markers.
urlstringWhere the material lives. Public https URLs only — the model
fetches it, RouterOne never does.
role"first_frame" | "last_frame" | "reference_image" | "reference_video" | "reference_audio"What this material is for. Limits: one first frame, one last
frame, nine reference images, three reference videos and three
reference audio clips.
Frames and reference material can be given together — this is
the easiest thing to get wrong when coming from the Model Studio
shape.
resolution"768P" | "2K"Default "768P"Output resolution tier. This field is a pricing dimension: both the
generated video and any input video are billed at the chosen tier's rate.
durationintegerDefault 5Output length in seconds, an integer from 4 to 15. This model has no automatic duration (-1).
ratio"adaptive" | "21:9" | "16:9" | "4:3" | "1:1" | "3:4" | "9:16"Default "adaptive"Aspect ratio. adaptive follows the input material.
aigc_watermarkbooleanDefault falseWhether to stamp an AIGC watermark on the output.
callback_urlstringCalled back when the task reaches a terminal state. **This is RouterOne'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
200responseAccepted. The body carries only task_id — take it to GET /v1/tasks/{id}
(or the alias below) and poll.
400responseInvalid parameters, a missing prompt, or more material than the model accepts.
402responseAvailable balance does not cover the reservation. It is taken for 15 seconds of
output, plus another 15 seconds of input when a reference video is present.
503responseNo provider can currently serve this model.
Models on this endpoint
| Model | Resolution | Duration | Capabilities | Bills input material |
|---|---|---|---|---|
minimax/minimax-h3 | 768P 2K | 4-15s | Text / image / first-last frame / reference | Yes |
minimax/minimax-h3-max | 480P 768P | 5-15s | Text / image (first-last frame) | No |
Each model's exact domains, billing and pitfalls live on its own page: MiniMax H3 · MiniMax H3 Max.
The two differ by more than tiers. h3-max accepts no reference material at all
(the vendor's words: "multimodal reference is not supported"); sending some is rejected
at submit time. Its minimum duration is 5, not 4 — the easiest thing to trip over
when switching from H3.
Three things that differ from the Model Studio shape
Coming from POST /api/v1/services/aigc/video-generation/video-synthesis,
each of the following will earn you either a 400 or a video that is not what you asked
for:
1. The prompt is required
The Model Studio shape lets you submit a first frame with no prompt. This one does
not. content must carry one non-empty text item, even when you also supply a
first frame.
2. type is not the role
This is the largest difference between the two:
| Model Studio shape | This one | |
|---|---|---|
| Where material goes | input.media[] | content[], alongside the prompt |
| Where the role goes | the type field | the role field |
What type means | the role | the media kind (image_url / video_url / audio_url) |
{
"content": [
{ "type": "text", "text": "Have the person walk toward the camera" },
{ "type": "image_url", "role": "first_frame", "url": "https://…/a.png" },
{ "type": "video_url", "role": "reference_video", "url": "https://…/b.mp4" }
]
}role cannot be omitted. Leaving it out returns a 400 rather than being guessed as
a first frame — a wrong guess costs you ten-odd minutes and the price of the call
before you see that the result is not what you wanted.
3. Frames and reference material can be combined
The Model Studio shape treats them as mutually exclusive; this one does not — combining them is the whole point of reference generation. Per-role limits:
| Role | Limit |
|---|---|
first_frame / last_frame | 1 each |
reference_image | 9 |
reference_video | 3 clips (2-15s each, 15s combined) |
reference_audio | 3 clips |
Refer to material in plain language
This model has no [Image 1] style markers. To point it at a particular piece of
material, just say so in the prompt: "match the motion in the first reference video".
Billing: input material costs money here
Every other video model on RouterOne bills output seconds only. This one does not:
| Item | h3 | h3-max |
|---|---|---|
| Generated video | Per second × output resolution tier | Same |
| Reference video | Per second of the input clip × output tier | N/A (it takes none) |
| Reference image | Per image | Not billed (vendor: input material is not billed for now) |
| Reference audio | Free | Free |
Note that the reference-video row is tiered by the output resolution, not by the material's own resolution.
The reservation taken at submit time is an upper bound: 15 seconds of output, plus
another 15 seconds of input when a reference video is present, plus the actual number
of reference images. Settlement uses the usage the upstream reports and releases the
difference. To freeze less, send less material — the 15-second output bound does not
follow the duration you asked for.
The task ID is ours
The task_id you get back is the RouterOne task ID. Take it to
GET /v1/tasks/{id} or to the
MiniMax-shaped alias; both read the
same task.
curl https://gateway.routerone.ai/v2/video_generation \
-H "Authorization: Bearer $ROUTERONE_API_KEY" \
-d '{
"model": "minimax/minimax-h3",
"content": [
{
"type": "text",
"text": "A ginger cat running through fresh snow, slow motion"
}
],
"resolution": "768P",
"duration": 5
}'{
"task_id": "<string>"
}