Hailuo API: Hailuo 2.3, Hailuo 02 and MiniMax H3
MiniMax sells two video lines: the Hailuo models, known for lively motion, and the newer MiniMax H3 with sound and 2K output. This guide covers every version on Revana, what each costs per second and how to call it.
Hailuo and MiniMax video models on one API
Hailuo is MiniMax's video family, known for energetic motion: action, dance and physical movement. MiniMax's newest video model, H3, is sold under the MiniMax name. Revana carries both lines on the same request format:
| Model | Model id | Does | Resolution | Length | Price from | Routes |
|---|---|---|---|---|---|---|
| Hailuo 2.3 | hailuo-2.3 | text to video, image to video | 768p, 1080p | 6 or 10 s | $0.06 / s | two routes |
| Hailuo 2.3 Fast | hailuo-2.3-fast | image to video | 768p, 1080p | 6 or 10 s | $0.04 / s | one route |
| Hailuo 2.3 Standard | hailuo-2.3-std | image to video | 768p, 1080p | 6 or 10 s | $0.04 / s | one route |
| Hailuo 02 | hailuo-02 | text to video, image to video, first and last frames | 512p, 768p, 1080p | 5 or 10 s | $0.02 / s | two routes |
| Hailuo 02 Pro | hailuo-02-pro | text to video, image to video | 1080p | 6 s | $0.06 / s | one route |
| MiniMax H3 | minimax-h3 | text to video, image to video, first and last frames, reference images, with sound | 768p, 2K | 4 to 15 s | $0.03 / s | three routes |
| MiniMax H3 Max | minimax-h3-max | text to video, image to video, reference images | 480p, 768p, 1080p | 5 to 15 s | $0.05 / s | one route |
Hailuo 2.3 Fast and Standard only animate a picture you send; for a clip from a prompt alone, use Hailuo 2.3, Hailuo 02 or MiniMax H3.
Which one to use
- MiniMax H3 is the newest and the most flexible: clips up to 15 seconds, sound generated with the picture, up to nine reference images, and a 2K setting at only $0.04 per second. It always makes sound, so do not send
audio: false. - Hailuo 2.3 is the pick for motion-heavy shots such as sport, dance and stunts, from a prompt or a start image.
- Hailuo 2.3 Fast animates a still for $0.04 per second at 768p, a low price for image to video.
- Hailuo 02 is the one to use when you need a clip to start on one picture and end on another, and its 512p setting at $0.02 per second is a cheap way to test image-to-video ideas.
We do not publish quality scores; render the same prompt on two of these and compare.
Hailuo and MiniMax pricing (October 2026)
All of these are billed per second of output. The table shows the listed rate and a typical clip at each setting.
| Model | Resolution | Per second | 6 s clip | 10 s clip |
|---|---|---|---|---|
| Hailuo 2.3 | 768p | $0.06 | $0.36 | $0.60 |
| Hailuo 2.3 | 1080p | $0.09 | $0.54 | 6 s only |
| Hailuo 2.3 Fast | 768p | $0.04 | $0.24 | $0.40 |
| Hailuo 2.3 Fast | 1080p | $0.06 | $0.36 | 6 s only |
| Hailuo 02 | 768p | $0.04 | 5 s: $0.20 | $0.40 |
| MiniMax H3 | 768p | $0.03 | $0.18 | $0.30 |
| MiniMax H3 | 2K | $0.04 | $0.24 | $0.40 |
| MiniMax H3 Max | 1080p | $0.16 | $0.96 | $1.60 |
Not every route takes a 10 second clip at 1080p for the Hailuo models, so plan on 6 seconds at 1080p and use 768p for 10 second clips. MiniMax H3 has no such gap: any length from 4 to 15 seconds at either setting. For how these compare with other video models, see the cheapest video API guide.
Generate a MiniMax H3 clip
Send POST /v1/generations, then poll the generation every few seconds until it has succeeded or failed. This 10 second 2K clip with sound costs $0.40.
export REVANA_API_KEY="sr_live_..."
# 1. Submit the job (returns 202 with the generation id)
curl https://api.revana.si/v1/generations \
-H "Authorization: Bearer $REVANA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-h3",
"input": {
"prompt": "A breakdancer spins on one hand in an empty car park at dusk, the camera circling low around him. Sneakers squeak on concrete, a beat echoes from a speaker.",
"resolution": "2K",
"duration": 10,
"aspect_ratio": "16:9"
},
"max_cost_usd": 0.5
}'
# 2. Poll with the id from step 1 until status is "succeeded" or "failed"
curl https://api.revana.si/v1/generations/gen_01JC2V8K5T \
-H "Authorization: Bearer $REVANA_API_KEY"import os
import time
import requests
API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}
resp = requests.post(f"{API}/generations", headers=HEADERS, json={
"model": "minimax-h3",
"input": {
"prompt": "A breakdancer spins on one hand in an empty car park at dusk, the camera circling low around him. Sneakers squeak on concrete, a beat echoes from a speaker.",
"resolution": "2K",
"duration": 10,
"aspect_ratio": "16:9",
},
"max_cost_usd": 0.5,
})
resp.raise_for_status()
job = resp.json()
while job["status"] in ("queued", "running"):
time.sleep(5)
job = requests.get(f"{API}/generations/{job['id']}", headers=HEADERS).json()
if job["status"] == "succeeded":
print(job["output"]["urls"], job["cost_usd"])
else:
print("Failed:", job["error"])// Node 18 or later. Save as generate.mjs and run: node generate.mjs
const API = "https://api.revana.si/v1";
const headers = {
Authorization: `Bearer ${process.env.REVANA_API_KEY}`,
"Content-Type": "application/json",
};
const res = await fetch(`${API}/generations`, {
method: "POST",
headers,
body: JSON.stringify({
model: "minimax-h3",
input: {
prompt: "A breakdancer spins on one hand in an empty car park at dusk, the camera circling low around him. Sneakers squeak on concrete, a beat echoes from a speaker.",
resolution: "2K",
duration: 10,
aspect_ratio: "16:9",
},
max_cost_usd: 0.5,
}),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
let job = await res.json();
while (job.status === "queued" || job.status === "running") {
await new Promise((r) => setTimeout(r, 5000));
job = await (await fetch(`${API}/generations/${job.id}`, { headers })).json();
}
if (job.status === "succeeded") console.log(job.output.urls, job.cost_usd);
else console.error("Failed:", job.error);{
"id": "gen_01JC2V8K5T",
"model": "minimax-h3",
"status": "succeeded",
"output": {
"urls": [
"https://cdn.revana.si/g/gen_01JC2V8K5T/0.mp4"
],
"duration_s": 10,
"has_audio": true
},
"cost_usd": 0.4,
"attempts": 1,
"error": null,
"created_at": "2026-10-28T10:14:02Z",
"completed_at": "2026-10-28T10:15:31Z"
}Animate a picture with Hailuo 2.3 Fast
For image to video, send the start frame in image_url and describe the movement. This 6 second 768p clip costs $0.24:
{
"model": "hailuo-2.3-fast",
"input": {
"prompt": "The dancer leaps and lands in a low crouch, her skirt swirling, the camera pushing in.",
"image_url": "https://example.com/dancer.jpg",
"resolution": "768p",
"duration": 6
},
"max_cost_usd": 0.3
}A length or resolution the model does not list is refused at once with 422 invalid_input, and the message lists what it takes. Refused requests and failed jobs are never charged.
Every Hailuo and MiniMax model is on the models page. Field-by-field details are in the docs and credit packs on the pricing page; get an API key to run the samples.
Frequently asked questions
How much does the Hailuo API cost?
In October 2026, Hailuo 2.3 costs $0.06 per second at 768p and $0.09 at 1080p. Hailuo 2.3 Fast costs $0.04 at 768p. Hailuo 02 starts at $0.02 per second at 512p.
What is MiniMax H3?
MiniMax's newest video model. It makes 4 to 15 second clips with sound from text, a start image, first and last frames or up to nine reference images, at 768p or 2K, from $0.03 per second.
Can Hailuo make text to video?
Hailuo 2.3, Hailuo 02 and Hailuo 02 Pro can. Hailuo 2.3 Fast and Hailuo 2.3 Standard are image to video only.
How long can a Hailuo video be?
Hailuo 2.3 makes 6 or 10 second clips and Hailuo 02 makes 5 or 10 second clips; at 1080p, plan on 6 seconds. MiniMax H3 goes from 4 to 15 seconds.
Does MiniMax H3 make sound?
Yes, always. Sound is generated with the picture and the price is the same, so leave the audio field out.
Try Hailuo and MiniMax with one key
One API key for every Hailuo and MiniMax model and every other video and image model. Prepaid credit from $10, charged only for clips that are delivered.