MiniMax's H3 video family — H3, H3 Max and H3 Max Turbo — behind one endpoint, with live pricing across every host.
| Endpoint | POST https://videorouter.sh/api/v1/videos |
| Authentication | Authorization: Bearer llmr_sk_live_... |
| Lifecycle | Async job: queued → in_progress → completed | failed. Polling is free. |
| Model ids | minimax/h3, minimax/h3-max, minimax/h3-unrestricted, h3-max-turbo |
| Billing | Per requested second, charged once at job creation; failed-upstream jobs are not billed. Flat 2% platform fee. |
| Provider choice | Unpinned requests route to the cheapest healthy host and fail over; append /<host> to prefer one. |
minimax/h314 hosts · 480p
minimax/h3-max5 hosts · 480p
minimax/h3-unrestricted2 hosts · 768p
h3-max-turbo2 hosts · 480p
| Host | 480p | 540p | 768p | 1080p-esr | 1080p | 1440p-esr | 1440p | 2k | 2160p | 4k-esr |
|---|---|---|---|---|---|---|---|---|---|---|
| MachGen | $0.035 | — | $0.04 | — | — | — | $0.10 | — | — | — |
| Atlas Cloud | $0.038 | — | $0.08 | $0.105 | $0.08 | $0.115 | $0.08 | $0.13 | $0.08 | $0.195 |
| WaveSpeedAI | $0.04 | $0.06 | $0.08 | — | $0.16 | — | — | — | — | — |
| kie.ai | — | — | $0.04 | — | — | — | — | $0.065 | — | — |
| Fal | $0.05 | — | $0.06 | — | — | — | — | $0.13 | $0.16 | — |
| OpenSand | — | — | $0.053 | — | — | — | — | $0.0862 | — | — |
| SandBase | — | — | $0.064 | — | — | — | — | $0.104 | — | — |
| Novita | — | — | $0.069 | — | — | — | — | $0.1104 | — | — |
| MiniMax | — | — | $0.08 | — | — | — | — | $0.13 | — | — |
| Replicate | — | — | $0.08 | — | — | — | — | $0.13 | — | — |
| Pika | — | — | $0.08 | — | — | — | — | $0.13 | — | — |
| TOAPIS | — | — | $0.08 | — | — | — | — | $0.13 | — | — |
| TOAPIS-Overseas | — | — | $0.08 | — | — | — | — | $0.13 | — | — |
| WaveSpeedAI-resell | — | — | $0.10 | — | — | — | — | $0.14 | — | — |
USD per second, before the 2% platform fee. Bold = cheapest at that tier.
curl https://videorouter.sh/api/v1/videos \
-H "Authorization: Bearer $VIDEOROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "minimax/h3", "prompt": "a paper airplane gliding over a city", "duration_secs": 5}'
# -> {"id": "video_...", "status": "queued"}
curl https://videorouter.sh/api/v1/videos/$ID -H "Authorization: Bearer $VIDEOROUTER_API_KEY"import time, requests
H = {"Authorization": "Bearer llmr_sk_live_..."}
job = requests.post("https://videorouter.sh/api/v1/videos", headers=H, json={
"model": "minimax/h3", "prompt": "a paper airplane gliding over a city", "duration_secs": 5}).json()
while job["status"] not in ("completed", "failed"):
time.sleep(5)
job = requests.get(f"https://videorouter.sh/api/v1/videos/{job['id']}", headers=H).json()
print(job["data"][0]["url"] if job["status"] == "completed" else job["error"])const H = { Authorization: "Bearer llmr_sk_live_...", "Content-Type": "application/json" };
let job = await (await fetch("https://videorouter.sh/api/v1/videos", { method: "POST", headers: H,
body: JSON.stringify({ model: "minimax/h3", prompt: "a paper airplane gliding over a city", duration_secs: 5 }) })).json();
while (!["completed", "failed"].includes(job.status)) {
await new Promise(r => setTimeout(r, 5000));
job = await (await fetch(`https://videorouter.sh/api/v1/videos/${job.id}`, { headers: H })).json();
}
console.log(job.data?.[0]?.url ?? job.error);Model id used: minimax/h3. More in examples.
MiniMax's current-generation video model family. Compare its hosts and prices in the live table above.
They are priced differently and suit different stages of a pipeline. Compare live prices to see the gap, and test each on your own prompts.
It changes. The pricing page reads the current catalog; check it before you hard-code a provider.
Yes, e.g. minimax/h3/fal. Unpinned requests route to the cheapest healthy host.
VideoRouter puts it next to dozens of other video and image models behind one API key, so you can compare providers, prices and fail over automatically. Compare providers on VideoRouter →