REST async · one key · updated 2026-10-02

MiniMax H3 API

Everything for calling MiniMax H3 from code: who hosts it, what each host charges per second, and a working request.

API at a glance

EndpointPOST https://videorouter.sh/api/v1/videos
AuthenticationAuthorization: Bearer llmr_sk_live_...
LifecycleAsync job: queued → in_progress → completed | failed. Polling is free.
Model idsminimax/h3, minimax/h3-max, minimax/h3-unrestricted, h3-max-turbo
BillingPer requested second, charged once at job creation; failed-upstream jobs are not billed. Flat 2% platform fee.
Provider choiceUnpinned requests route to the cheapest healthy host and fail over; append /<host> to prefer one.

Models

Provider comparison — minimax/h3

Host480p540p768p1080p-esr1080p1440p-esr1440p2k2160p4k-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.

Examples

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.

Notes

A dozen-plus hosts
H3 is one of the most widely hosted video models; the live table shows cheapest vs priciest.
Resolution tiers
Price is per second per resolution; the table shows the tier with the biggest spread.
Failover
Unpinned requests retry another H3 host if one is down.
Variants
H3 Max and H3 Max Turbo are available under the same endpoint.

FAQ

Who hosts MiniMax H3?

MiniMax itself plus many third-party providers. The live table shows the count and the cheapest/priciest.

What is the model id?

minimax/h3, with an optional provider suffix such as minimax/h3/fal.

Does H3 do image-to-video?

Yes, pass start_image_url on the same endpoint.

How is it billed?

Per requested second at creation; polling is free and failed-upstream jobs are not billed.

Guides

Using MiniMax H3 is one part of the job.

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 →