Amux

Create video

Last updated September 7, 2026

Generate with minimax/minimax-h3 in MiniMax's own shape; existing MiniMax clients work as-is.

Generate a video with minimax/minimax-h3 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.

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

Authorization

header
AuthorizationstringRequired

Bearer <your Amux key> Your Amux API key.

Request

application/json
modelstringRequired

Always minimax/minimax-h3. The manufacturer-free minimax-h3 works too, case-insensitively.

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.

contentarray<object>
type"text" | "image_url" | "video_url" | "audio_url"Required

What kind of item this is. Note this is not the role -- the role lives on role.

textstring

The 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" | "reference_image" | "reference_video" | "reference_audio"

What this material is for. This model accepts: first_frame / last_frame / reference_image / reference_video / reference_audio.

image_urlobject

The URL is nested in an object named after type, not a flat url. Public https URLs only.

image_urlobject
urlstring

A public https URL. The model fetches it; Amux never does.

resolution"768P" | "2K"Default "768P"

Output resolution tier. This is a pricing dimension -- the per-second rate follows it. This model has only 768P / 2K. The upstream marks it required, so when you omit it we send 768P and say so in the task's notes.

durationintegerDefault 4

Output length in seconds, an integer from 4 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 false

Whether to stamp an AIGC watermark on the output.

callback_urlstring

Called 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

200response

Accepted. The body carries only task_id.

400response

Invalid parameters, a missing prompt, or a material role this model does not accept.

402response

Available balance does not cover the reservation.

503response

No 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" } }
  ]
}
FieldWhat it is
typeThe media kind: text / image_url / video_url / audio_url
roleThe purpose: one first frame, one last frame, nine reference images, three reference videos and three reference audio clips
<type>.urlThe 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

ParameterThis model
resolution768P / 2K
durationan integer from 4 to 15
ratioadaptive (needs material) / 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16
Materialone first frame, one last frame, nine reference images, three reference videos and three reference audio clips

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]
Video≤ 50 MB, ≤ 3 clips, 2-15s each and ≤ 15s combined, fps in [23.976, 60]
Audio≤ 15 MB, ≤ 3 clips, 2-15s each and ≤ 15s combined

Billing

This model bills for input material: reference images per image and reference video by its input duration (at the output tier's rate); reference audio is free.

Output is billed per second at the chosen resolution tier. The cost in the example (0.36) is the price of 768P x 4s plus one reference image.

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.

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
curl https://gateway.amux.ai/v2/video_generation \
  -H "Authorization: Bearer $AMUX_API_KEY" \
  -d '{
    "model": "minimax/minimax-h3",
    "content": [
      {
        "type": "text",
        "text": "A ginger cat running through fresh snow, slow motion"
      }
    ],
    "resolution": "768P",
    "duration": 4,
    "ratio": "16:9"
  }'
{
  "task_id": "<string>"
}