MiniMax H3, also released as Hailuo 03, is MiniMax's July 2026 video model. It generates 4-15 second clips at 768P (1344x768) or 2K (2560x1440) with a native stereo audio track that you describe in the prompt. It supports first and last frame input, or references of up to 9 images, 3 clips and 3 audio tracks to control identity, motion and voice. Prompts can be up to 7,000 characters, and the default duration is 6 seconds.
Best for
- 2K clips for YouTube and presentations
- Characters with a consistent face and voice across shots
- Copying motion from a reference clip onto a new subject
- Scenes where ambience and dialogue matter
Prompting tips
- Describe the audio in the prompt as well as the picture: dialogue, ambience, music.
- In text-to-video pick a fixed ratio;
adaptiveis rejected there. The default on Jantaris is 16:9. - Images 6-9 are billed per image, so stick to 5 references when you can.
- Reference audio is free but needs an image or clip in the same request.
FAQ
How much does the MiniMax H3 API cost?
The base rate is from $0.161 per second. Reference clips and images beyond the fifth add to the cost, which is shown before submission, and failed generations are not charged.
What resolution does MiniMax H3 output?
768P (1344x768) or 2K (2560x1440). 2K is the default.
Is MiniMax H3 the same as Hailuo 03?
Yes, it is one model released under both names. MiniMax H3 Max is a variant at 480P or 768P.
How to call MiniMax H3 via API
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-h3",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "16:9",
"resolution": "2K",
"duration": 6
}
}'import os, time, requests
API = "https://jantaris.com/v1"
H = {"Authorization": f"Bearer {os.environ['JANTARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "minimax-h3",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "16:9",
"resolution": "2K",
"duration": 6
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://jantaris.com/v1";
const headers = { Authorization: `Bearer ${process.env.JANTARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "minimax-h3",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "16:9",
"resolution": "2K",
"duration": 6
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Parameters
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt * | string | ≤ 7000 chars | |
aspect_ratio | string | 21:9 16:9 4:3 1:1 3:4 9:16 adaptive | 16:9 |
resolution | string | 768P 2K | 2K |
duration | integer | 4-15 | 6 |
image_url | string | ||
end_image_url | string | ||
image_urls | array | max 9 | |
video_urls | array | max 3 | |
audio_urls | array | max 3 |
The same schema is available from GET /v1/models/minimax-h3.









