RouterOne

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.

POSThttps://gateway.routerone.ai/v2/video_generation

Authorization

header
AuthorizationstringRequired

Bearer <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/json
modelstringRequired

The RouterOne model ID. Two models serve this endpoint today:

ModelResolutionDurationMaterial
minimax/minimax-h3768P 2K4-15sFrames + reference
minimax/minimax-h3-max480P 768P5-15sFrames only
contentarray<object>Required

The 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"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. 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.

urlstring

Where 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 5

Output 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 false

Whether to stamp an AIGC watermark on the output.

callback_urlstring

Called 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

200response

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

(or the alias below) and poll.

400response

Invalid parameters, a missing prompt, or more material than the model accepts.

402response

Available 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.

503response

No provider can currently serve this model.

Models on this endpoint

ModelResolutionDurationCapabilitiesBills input material
minimax/minimax-h3768P 2K4-15sText / image / first-last frame / referenceYes
minimax/minimax-h3-max480P 768P5-15sText / 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 shapeThis one
Where material goesinput.media[]content[], alongside the prompt
Where the role goesthe type fieldthe role field
What type meansthe rolethe 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:

RoleLimit
first_frame / last_frame1 each
reference_image9
reference_video3 clips (2-15s each, 15s combined)
reference_audio3 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:

Itemh3h3-max
Generated videoPer second × output resolution tierSame
Reference videoPer second of the input clip × output tierN/A (it takes none)
Reference imagePer imageNot billed (vendor: input material is not billed for now)
Reference audioFreeFree

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