Everything for calling MiniMax H3 from code: who hosts it, what each host charges per second, and a working request.
| 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 itself plus many third-party providers. The live table shows the count and the cheapest/priciest.
minimax/h3, with an optional provider suffix such as minimax/h3/fal.
Yes, pass start_image_url on the same endpoint.
Per requested second at creation; polling is free and failed-upstream jobs are not billed.
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 →