Create video
Last updated September 7, 2026
Generate with minimax/minimax-h3-max in MiniMax's own shape; existing MiniMax clients work as-is.
Generate a video with minimax/minimax-h3-max using MiniMax's native shape: the prompt and the
material share one content[] array. Existing MiniMax clients only need to point
base_url at Amux.
https://gateway.amux.ai/v2/video_generationAuthorization
headerAuthorizationstringRequiredBearer <your Amux key> Your Amux API key.
Request
application/jsonmodelstringRequiredAlways minimax/minimax-h3-max. The manufacturer-free minimax-h3-max works too, case-insensitively.
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.
›contentarray<object>
type"text" | "image_url" | "video_url" | "audio_url"RequiredWhat kind of item this is. Note this is not the role -- the role lives on role.
textstringThe prompt, when type is text. Up to 7000 characters. Refer to material in plain language; this model has no [Image 1] style markers.
role"first_frame" | "last_frame"What this material is for. This model accepts: first_frame / last_frame.
image_urlobjectThe URL is nested in an object named after type, not a flat url. Public https URLs only.
›image_urlobject
urlstringA public https URL. The model fetches it; Amux never does.
resolution"480P" | "768P"Default "768P"Output resolution tier. This is a pricing dimension -- the per-second rate follows it. This model has only 480P / 768P. The upstream marks it required, so when you omit it we send 768P and say so in the task's notes.
durationintegerDefault 5Output length in seconds, an integer from 5 to 15. This model has no automatic duration (-1). The upstream marks it required, so when you omit it we send 5 and note it.
ratio"adaptive" | "21:9" | "16:9" | "4:3" | "1:1" | "3:4" | "9:16"Aspect ratio. adaptive cannot be used for text-only generation (no material to follow); when omitted we send 16:9 and note it.
aigc_watermarkbooleanDefault falseWhether to stamp an AIGC watermark on the output.
callback_urlstringCalled back when the task reaches a terminal state. This is the same thing as Amux's webhook_url — only the name differs; the payload matches the unified endpoint exactly. Must be a deliverable public https URL.
Response
200responseAccepted. The body carries only task_id.
400responseInvalid parameters, a missing prompt, or a material role this model does not accept.
402responseAvailable balance does not cover the reservation.
503responseNo provider can currently serve this model.
Three things that trip people up
1. The prompt is required
content must carry one non-empty text item, even when you also supply a
first frame. This differs from the other video models on Amux, which accept an
image with no prompt.
2. type is not the role, and the URL is not flat
{
"content": [
{ "type": "text", "text": "Have the person walk toward the camera" },
{ "type": "image_url", "role": "first_frame", "image_url": { "url": "https://…/a.png" } }
]
}| Field | What it is |
|---|---|
type | The media kind: text / image_url (it takes no video or audio material) |
role | The purpose: one first frame and one last frame. It accepts no reference material at all |
<type>.url | The address, nested in an object named after type |
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 the result is not what you wanted.
3. Text-only generation needs a concrete ratio
adaptive means "follow the input material's ratio", and text-only generation has
no material to follow. When you omit it we send 16:9 and say so in the task's
notes; passing adaptive explicitly without material returns a 400.
Accepted values
| Parameter | This model |
|---|---|
resolution | 480P / 768P |
duration | an integer from 5 to 15 |
ratio | adaptive (needs material) / 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16 |
| Material | one first frame and one last frame. It accepts no reference material at all |
Out-of-range values return a 400 naming the accepted values; nothing is silently substituted.
Note that resolution and duration are required upstream. When you omit them
we send 768P / 5 and say so in the task's notes — "every parameter is
optional" is a promise we keep, not one the upstream makes.
Material limits
These are enforced upstream, not by us (being stricter than the upstream by one notch is one notch of false rejections):
| Limit | |
|---|---|
| Images | ≤ 30 MB, sides in [256, 5760] px, aspect ratio in [0.4, 2.5] |
Billing
This model bills output only; input material is never charged (the vendor's words: input material is not billed for now).
Output is billed per second at the chosen resolution tier. The cost in the
example (0.25) is the price of 480P x 5s.
The reservation taken at submit time is an upper bound of 15 seconds of output; settlement uses the duration the upstream reports and releases the difference. Input material is not reserved for — it is not charged in the first place.
Callbacks
callback_url is Amux's webhook_url under a different name — it fires when the
task reaches a terminal state, with the same payload as the unified endpoint.
The task ID is ours
The task_id you get back is the Amux task ID, not the upstream one. Take it to the
unified endpoint or the
MiniMax-shaped one; both read the same
task.
curl https://gateway.amux.ai/v2/video_generation \
-H "Authorization: Bearer $AMUX_API_KEY" \
-d '{
"model": "minimax/minimax-h3-max",
"content": [
{
"type": "text",
"text": "A ginger cat running through fresh snow, slow motion"
}
],
"resolution": "768P",
"duration": 5,
"ratio": "16:9"
}'{
"task_id": "<string>"
}