PL Log inOpen Studio
Preview version. Model catalog, prices, calculator and docs are live. Generation goes live at launch.

MiniMax H3 (Hailuo 03) via API: 2K Clips With Stereo Sound, and When H3 Max Fits

MiniMax H3 (Hailuo 03) API: price per second at 768P and 2K, H3 or H3 Max, start and end frames, image, video and voice references, curl and Python.

Searching for a "Hailuo API" today leads to MiniMax H3. It replaced Hailuo 2.3 on July 31, 2026, and MiniMax also publishes it under the name Hailuo 03. Each job returns 4 to 15 seconds of 768P or 2K footage, and the stereo soundtrack follows whatever the prompt describes. On Kadraris, MiniMax H3 costs from $0.161 per second (the 768P rate; 2K is higher), and the narrower MiniMax H3 Max costs from $0.104 per second.

This guide goes through choosing between the two, costs, the fields and their traps, my own test, and request examples.

One model, three names

MiniMax runs Hailuo AI as its app for ordinary users making videos and pictures. Its latest video model is H3, sometimes labeled "Hailuo 03" and on forums just "Hailuo 3". They all mean the same model.

Kadraris carries two members of the family:

  • MiniMax H3: the complete model. 768P or 2K, stereo sound, start and end frames, and it can take references that carry over a face, a movement or a voice.
  • MiniMax H3 Max: a variant limited to 480P or 768P, working from text or start/end frames only. No references and no 2K.

Do not let the name fool you. In this catalog, "Max" is the model with fewer options, not the stronger one.

Producer sample: MiniMax (minimax.io). 2K showcase for MiniMax H3.

H3 or H3 Max: which to call

Price decides most cases. At 768P, H3 Max does not undercut full H3; right now it costs slightly more. The saving exists only at 480P. How I decide:

  • H3 at 2K: final material with stereo audio, for a YouTube video or a commercial.
  • H3 at 768P: short social posts, which the apps compress anyway.
  • H3 with references: one character who must look and sound the same in every shot, or motion copied from existing footage.
  • H3 Max at 480P: low-cost drafts of movement and start-to-end transitions before the final render in H3.

If 768P is the target, I always use the full H3, since it costs slightly less and adds sound and references. Both models side by side: MiniMax H3 vs H3 Max.

Producer sample: MiniMax (design.minimax.io). An H3 Max promo in 9:16.

Cost per clip

Billing is per second of output, at a rate that depends on resolution.

  • H3 at 768P: from $0.161 per second. A 6-second clip is 6 times that, 15 seconds is 15 times.
  • H3 at 2K: about 1.6 times the 768P rate.
  • H3 Max at 480P: from $0.104 per second.
  • H3 Max at 768P: about 1.6 times its 480P rate.

Each tier's exact price sits on its model page (H3, H3 Max); the API also sends back estimated_cost before rendering begins.

References affect the total, so count them in:

  • A reference clip adds its own length to what you pay for. Six seconds of output plus a five-second reference clip is billed as 11 seconds.
  • Reference images: five are included, the sixth to ninth cost extra.
  • Reference audio adds nothing.

A failed generation is free and the held amount returns to the balance. Funds are prepaid in dollars from $10, there is no plan to subscribe to, and unused money never lapses. Per-second comparisons with other models: AI video cost per second.

Fields and the traps in them

Taken from each model's schema in the catalog:

Fieldminimax-h3minimax-h3-max
duration4 to 15 s, default 65 to 15 s, default 6
resolution768P (1344x768), 2K (2560x1440, default)480P, 768P (default)
image_url, end_image_urlyesyes
image_urlsup to 9 imagesno
video_urlsup to 3 clips, 2 to 15 s each, 15 s in totalno
audio_urlsup to 3, only with image or video referencesno

Both accept aspect_ratio values 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 and adaptive. The H3 prompt can be up to 7,000 characters; on H3 Max the prompt is required.

The mistakes I see most:

  • Lowercase resolution. Values are 768P and 2K in capitals. Sending 768p returns 422.
  • Wrong ratio for the mode. Prompt-only jobs must name a ratio and do not take adaptive. Once a start frame is attached, sending aspect_ratio at all is rejected, as the picture defines the shape. In reference mode, the default is adaptive.
  • Audio without a visual reference. audio_urls only work together with image_urls or video_urls.

According to MiniMax, H3 is strong at following the prompt, keeping text and logos readable in frame, and transferring motion from a reference clip.

Producer sample: MiniMax (platform.minimax.io). Reference-based MiniMax H3 generation from the API docs.

What I got from one attempt

In August, before Kadraris existed, I ran H3 once over an API. As the opening frame I used a picture from a previous Grok Imagine experiment showing a fox jumping toward snow; the prompt told it to finish the dive. No retries.

My MiniMax H3 test, August 2026: image-to-video at 2K, start frame from Grok Imagine, one try. Shown at 720p without sound.

The snow scatters believably and the fur keeps the look of the source still. Picture from an image model, motion from a video model: that is the routine I use most, described in the image-to-video guide.

In Studio, without code

  1. Create an account and add at least $10.
  2. Open Studio, go to Video and select MiniMax H3.
  3. Type the prompt and close it with a line about the sound.
  4. Set the shape, the length and either 768P or 2K.
  5. To start from a picture, open Start frame. For a transition from A to B, also fill End frame.
  6. Check the price and press Generate.
Video panel in Studio showing an attached opening image
Kadraris Studio with a start frame filled in. Kling 3.0 is selected here; the frame fields are the same for MiniMax H3.

Requests

bash
export KADRARIS_API_KEY="sk-kd-..."

2K from text, with sound

bash
curl https://kadraris.com/v1/generate \
  -H "Authorization: Bearer $KADRARIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "minimax-h3",
    "input": {
      "prompt": "A street food vendor flips noodles in a flaming wok at night, slow push-in, steam and neon reflections. Audio: sizzling oil, clanging wok, distant traffic.",
      "duration": 8,
      "resolution": "2K",
      "aspect_ratio": "16:9"
    }
  }'

Start and end frame (leave out the ratio)

json
{
  "model": "minimax-h3-max",
  "input": {
    "prompt": "The camera glides forward as the empty shop fills with customers, lights switch on one by one",
    "image_url": "https://example.com/frames/shop-empty.jpg",
    "end_image_url": "https://example.com/frames/shop-busy.jpg",
    "duration": 6,
    "resolution": "480P"
  }
}

Same face and voice from references

json
{
  "model": "minimax-h3",
  "input": {
    "prompt": "The woman from the reference photo sits at a cafe table and says: \"I finally finished the project.\" Quiet cafe chatter in the background.",
    "image_urls": ["https://example.com/refs/character.jpg"],
    "audio_urls": ["https://example.com/refs/voice.mp3"],
    "duration": 6,
    "resolution": "768P"
  }
}

Python: send, wait, save

python
import os
import time
import requests

API = "https://kadraris.com/v1"
KEY = os.environ["KADRARIS_API_KEY"]
HEADERS = {"Authorization": f"Bearer {KEY}"}


def run(payload: dict) -> dict:
    r = requests.post(f"{API}/generate",
                      headers=HEADERS, json=payload,
                      timeout=30)
    if r.status_code != 202:
        msg = r.json()["error"]["message"]
        raise RuntimeError(f"{r.status_code}: {msg}")
    task = r.json()
    print("estimated:", task["estimated_cost"])
    # back off up to 20 s between checks
    delay = 5
    while task["status"] not in ("succeeded", "failed"):
        time.sleep(delay)
        delay = min(delay * 1.5, 20)
        task = requests.get(
            f"{API}/tasks/{task['id']}",
            headers=HEADERS, timeout=30,
        ).json()
    return task


task = run({
    "model": "minimax-h3",
    "input": {
        "prompt": "Waves crash against black basalt "
                  "cliffs at dusk, static tripod shot. "
                  "Audio: deep surf, wind, gulls.",
        "duration": 6,
        "resolution": "768P",
        "aspect_ratio": "9:16",
    },
})

if task["status"] == "succeeded":
    url = task["output"][0]["url"]
    data = requests.get(url, timeout=180).content
    with open(f"{task['id']}.mp4", "wb") as f:
        f.write(data)
    print("saved, cost:", task["cost"])
else:
    print("failed, nothing charged:", task["error"])

Result links expire, so download right away. When you run lots of jobs, a webhook_url saves you the polling loop. Patterns: webhooks for AI video jobs; fields: generate reference.

H3 among the other video models

H3 is my pick for 2K with audio and for reference-driven control. Single long takes of up to 30 seconds go to Seedance 2.5 (MiniMax H3 vs Seedance 2.5), and for scenes with several shots at Kling 3.0 (MiniMax H3 vs Kling 3.0). The broader picture: AI video API comparison and the AI video generator page.

Questions

Why does my request with 768p fail?

The value is case-sensitive. Use 768P or 2K in capitals; lowercase returns a 422 error.

Can I send a voice sample on its own?

No. audio_urls only work when the request also has image_urls or video_urls. Reference audio does not add to the price.

Can I download H3 and run it on my own GPU?

Partly. On August 2, 2026 MiniMax released H3-Base weights, but the community license leaves out a number of regions, the US, the UK and the EU among them. The 2K mode is only in the hosted version, so in practice H3 is used through an app or an API.

Does the Hailuo app give free clips?

New Hailuo app accounts get some free credits, but under its terms those clips carry a watermark, have lower resolution and are not for commercial use. Kadraris has no free tier; you start with a $10 top-up and failed jobs cost nothing.