Minimax H3 API, Minimax Speech 2.8 API (HD & Turbo), Minimax Music 3.0 API, Minimax Voice Design API, Minimax Hailuo API: Pricing and Documentation

by MiniMax

Minimax H3 API, developers can access all MiniMax modalities including text-to-video, image generation, voice synthesis, and music creation. The API provides a unified interface for multimodal content generation, ideal for applications requiring diverse media outputs.

Get API Key
MiniMax AI API

Models Version

WELCOME BONUS

Get $5 Free Credit on First Payment

No strings attached — add funds and get $5 bonus instantly

Claim Your $5 →

Generate a complete song — vocals, lyrics and arrangement — from a text prompt. Up to five minutes, 44.1kHz stereo. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the audio.

POST https://gateway.pixazo.ai/minimax-music-3-0/v1/text-to-music

MiniMax Music 3.0 API Documentation (Text to Music)

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax Music 3.0 API (Text to Music)

Request Code

POST https://gateway.pixazo.ai/minimax-music-3-0/v1/text-to-music
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "Indie folk, melancholic, introspective, longing, solitary walk, coffee shop",
  "lyrics": "[verse]\nStreetlights flicker, the night breeze sighs\nShadows stretch as I walk alone\n[chorus]\nPushing the wooden door, the aroma spreads\nIn a familiar corner, a stranger gazes",
  "format": "mp3",
  "sample_rate": 44100,
  "bitrate": 256000
}
import requests

url = "https://gateway.pixazo.ai/minimax-music-3-0/v1/text-to-music"
headers = {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
  "prompt": "Indie folk, melancholic, introspective, longing, solitary walk, coffee shop",
  "lyrics": "[verse]\nStreetlights flicker, the night breeze sighs\nShadows stretch as I walk alone\n[chorus]\nPushing the wooden door, the aroma spreads\nIn a familiar corner, a stranger gazes",
  "format": "mp3",
  "sample_rate": 44100,
  "bitrate": 256000
}

resp = requests.post(url, json=data, headers=headers)
print(resp.json())
const res = await fetch("https://gateway.pixazo.ai/minimax-music-3-0/v1/text-to-music", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
  },
  body: JSON.stringify({
  "prompt": "Indie folk, melancholic, introspective, longing, solitary walk, coffee shop",
  "lyrics": "[verse]\nStreetlights flicker, the night breeze sighs\nShadows stretch as I walk alone\n[chorus]\nPushing the wooden door, the aroma spreads\nIn a familiar corner, a stranger gazes",
  "format": "mp3",
  "sample_rate": 44100,
  "bitrate": 256000
})
});
console.log(await res.json());
curl -X POST 'https://gateway.pixazo.ai/minimax-music-3-0/v1/text-to-music' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  --data-raw '{"prompt": "Indie folk, melancholic, introspective, longing, solitary walk, coffee shop", "lyrics": "[verse]\nStreetlights flicker, the night breeze sighs\nShadows stretch as I walk alone\n[chorus]\nPushing the wooden door, the aroma spreads\nIn a familiar corner, a stranger gazes", "format": "mp3", "sample_rate": 44100, "bitrate": 256000}'

Output

{
  "request_id": "minimax-music-3-0_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-music-3-0_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. A track takes a couple of minutes to render, so a webhook is usually the better fit.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks).

Example: enable Webhook

curl -X POST 'https://gateway.pixazo.ai/minimax-music-3-0/v1/text-to-music' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  -H 'X-Webhook-URL: https://your-server.com/webhook' \
  --data-raw '{"prompt": "Indie folk, melancholic, introspective, longing, solitary walk, coffee shop", "lyrics": "[verse]\nStreetlights flicker, the night breeze sighs\nShadows stretch as I walk alone\n[chorus]\nPushing the wooden door, the aroma spreads\nIn a familiar corner, a stranger gazes", "format": "mp3", "sample_rate": 44100, "bitrate": 256000}'

Callback Payload (success)

{
  "request_id": "minimax-music-3-0_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-music-3-0",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/audio.mp3"
    ],
    "media_type": "audio/mpeg"
  },
  "created_at": "2026-08-06T09:14:16.102Z",
  "completed_at": "2026-08-06T09:16:01.870Z"
}

Failure callback shape

{
  "request_id": "minimax-music-3-0_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-music-3-0",
  "error": "Description of the failure"
}

Delivery semantics

  • terminal mode: one Webhook callback when the request is COMPLETED or ERROR.
  • sync mode: a Webhook callback on each status change.
  • Callbacks are idempotent on request_id — de-duplicate on it.
  • Respond 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstring1–2,000 charactersDescribes the music: genre, mood, instrumentation, setting. e.g. Indie folk, melancholic, introspective, solitary walk, coffee shop.
lyricsConditionalstring1–3,500 charactersThe words to sing. Required unless is_instrumental or lyrics_optimizer is true. Supports structure tags on their own line — [verse], [chorus], [bridge] — which shape the arrangement.
is_instrumentalNobooleanfalsetrue, falseGenerate music with no vocals. Omit lyrics when this is on.
lyrics_optimizerNobooleanfalsetrue, falseLet the model write the lyrics from your prompt instead of supplying them yourself.
formatNostringmp3mp3, wavContainer for the generated track.
sample_rateNointeger4410016000, 24000, 32000, 44100Output sample rate in Hz.
bitrateNointeger25600032000, 64000, 128000, 256000Output bitrate in bits per second.

Notes

The paid tier. Higher throughput, suited to production traffic.

Lyrics, or let the model write them

Exactly one of three things must be true: you supply lyrics, you set lyrics_optimizer to have them written for you, or you set is_instrumental for a track with no vocals. Sending none of the three is rejected.

Instrumental — no vocals, no lyrics needed

{
  "prompt": "Warm lo-fi jazz, rainy afternoon, mellow keys, no vocals",
  "is_instrumental": true,
  "format": "mp3"
}

Let the model write the lyrics from your prompt

{
  "prompt": "Upbeat synthwave about a late night drive through neon streets",
  "lyrics_optimizer": true,
  "format": "mp3"
}

Structure tags

Inside lyrics, tags on their own line mark sections and shape the arrangement:

[verse]\nStreetlights flicker, the night breeze sighs\n[chorus]\nPushing the wooden door, the aroma spreads\n[bridge]\nA stranger gazes from the corner

Example Request

{
  "prompt": "Indie folk, melancholic, introspective, longing, solitary walk, coffee shop",
  "lyrics": "[verse]\nStreetlights flicker, the night breeze sighs\nShadows stretch as I walk alone\n[chorus]\nPushing the wooden door, the aroma spreads\nIn a familiar corner, a stranger gazes",
  "format": "mp3",
  "sample_rate": 44100,
  "bitrate": 256000
}

Example Response

{
  "request_id": "minimax-music-3-0_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-music-3-0_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad request — a missing or out-of-range parameter. The message names the field.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
429Too many requests.
500Internal server error.

Retrieving Results

Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or ERROR), then download output.media_url. A track typically takes one to three minutes.

curl 'https://gateway.pixazo.ai/v2/requests/status/minimax-music-3-0_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'

Completed response

{
  "request_id": "minimax-music-3-0_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-music-3-0",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/audio.mp3"
    ],
    "media_type": "audio/mpeg"
  },
  "created_at": "2026-08-06T09:14:16.102Z",
  "completed_at": "2026-08-06T09:16:01.870Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED or ERROR.
model_idstringThe model that handled the request.
output.media_urlarrayURL of the generated track.
output.media_typestringMIME type of the audio — audio/mpeg for mp3.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError message when status is ERROR.

Status Values & Flow

QUEUEDPROCESSINGCOMPLETED (success) or ERROR (failure).

Pricing

Billed at $0.15 per generated track, a flat price regardless of the length of the song — a five-minute track costs the same as a one-minute one.

RequestCost per track
Any track, up to 5 minutes$0.15

Failed requests are not billed.

MiniMax Music 3.0 API Pricing

Your request will cost $0.15 per song generation.
2. MiniMax Music 3.0 Fast (Free)

Generate a complete song — vocals, lyrics and arrangement — from a text prompt. Up to five minutes, 44.1kHz stereo. Free to call. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the audio.

POST https://gateway.pixazo.ai/minimax-music-3-0-fast/v1/text-to-music

MiniMax Music 3.0 Fast (Free) API Documentation (Text to Music)

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax Music 3.0 Fast (Free) API (Text to Music)

Request Code

POST https://gateway.pixazo.ai/minimax-music-3-0-fast/v1/text-to-music
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "Indie folk, melancholic, introspective, longing, solitary walk, coffee shop",
  "lyrics": "[verse]\nStreetlights flicker, the night breeze sighs\nShadows stretch as I walk alone\n[chorus]\nPushing the wooden door, the aroma spreads\nIn a familiar corner, a stranger gazes",
  "format": "mp3",
  "sample_rate": 44100,
  "bitrate": 256000
}
import requests

url = "https://gateway.pixazo.ai/minimax-music-3-0-fast/v1/text-to-music"
headers = {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
  "prompt": "Indie folk, melancholic, introspective, longing, solitary walk, coffee shop",
  "lyrics": "[verse]\nStreetlights flicker, the night breeze sighs\nShadows stretch as I walk alone\n[chorus]\nPushing the wooden door, the aroma spreads\nIn a familiar corner, a stranger gazes",
  "format": "mp3",
  "sample_rate": 44100,
  "bitrate": 256000
}

resp = requests.post(url, json=data, headers=headers)
print(resp.json())
const res = await fetch("https://gateway.pixazo.ai/minimax-music-3-0-fast/v1/text-to-music", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
  },
  body: JSON.stringify({
  "prompt": "Indie folk, melancholic, introspective, longing, solitary walk, coffee shop",
  "lyrics": "[verse]\nStreetlights flicker, the night breeze sighs\nShadows stretch as I walk alone\n[chorus]\nPushing the wooden door, the aroma spreads\nIn a familiar corner, a stranger gazes",
  "format": "mp3",
  "sample_rate": 44100,
  "bitrate": 256000
})
});
console.log(await res.json());
curl -X POST 'https://gateway.pixazo.ai/minimax-music-3-0-fast/v1/text-to-music' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  --data-raw '{"prompt": "Indie folk, melancholic, introspective, longing, solitary walk, coffee shop", "lyrics": "[verse]\nStreetlights flicker, the night breeze sighs\nShadows stretch as I walk alone\n[chorus]\nPushing the wooden door, the aroma spreads\nIn a familiar corner, a stranger gazes", "format": "mp3", "sample_rate": 44100, "bitrate": 256000}'

Output

{
  "request_id": "minimax-music-3-0-fast_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-music-3-0-fast_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. A track takes a couple of minutes to render, so a webhook is usually the better fit.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks).

Example: enable Webhook

curl -X POST 'https://gateway.pixazo.ai/minimax-music-3-0-fast/v1/text-to-music' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  -H 'X-Webhook-URL: https://your-server.com/webhook' \
  --data-raw '{"prompt": "Indie folk, melancholic, introspective, longing, solitary walk, coffee shop", "lyrics": "[verse]\nStreetlights flicker, the night breeze sighs\nShadows stretch as I walk alone\n[chorus]\nPushing the wooden door, the aroma spreads\nIn a familiar corner, a stranger gazes", "format": "mp3", "sample_rate": 44100, "bitrate": 256000}'

Callback Payload (success)

{
  "request_id": "minimax-music-3-0-fast_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-music-3-0-fast",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/audio.mp3"
    ],
    "media_type": "audio/mpeg"
  },
  "created_at": "2026-08-06T09:14:16.102Z",
  "completed_at": "2026-08-06T09:16:01.870Z"
}

Failure callback shape

{
  "request_id": "minimax-music-3-0-fast_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-music-3-0-fast",
  "error": "Description of the failure"
}

Delivery semantics

  • terminal mode: one Webhook callback when the request is COMPLETED or ERROR.
  • sync mode: a Webhook callback on each status change.
  • Callbacks are idempotent on request_id — de-duplicate on it.
  • Respond 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstring1–2,000 charactersDescribes the music: genre, mood, instrumentation, setting. e.g. Indie folk, melancholic, introspective, solitary walk, coffee shop.
lyricsConditionalstring1–3,500 charactersThe words to sing. Required unless is_instrumental or lyrics_optimizer is true. Supports structure tags on their own line — [verse], [chorus], [bridge] — which shape the arrangement.
is_instrumentalNobooleanfalsetrue, falseGenerate music with no vocals. Omit lyrics when this is on.
lyrics_optimizerNobooleanfalsetrue, falseLet the model write the lyrics from your prompt instead of supplying them yourself.
formatNostringmp3mp3, wavContainer for the generated track.
sample_rateNointeger4410016000, 24000, 32000, 44100Output sample rate in Hz.
bitrateNointeger25600032000, 64000, 128000, 256000Output bitrate in bits per second.

Notes

A free tier with lower throughput, intended for trials and low-volume use. It is rate limited upstream and shared across all callers, so it is not suited to production or bulk generation — use minimax-music-3-0 for that.

Lyrics, or let the model write them

Exactly one of three things must be true: you supply lyrics, you set lyrics_optimizer to have them written for you, or you set is_instrumental for a track with no vocals. Sending none of the three is rejected.

Instrumental — no vocals, no lyrics needed

{
  "prompt": "Warm lo-fi jazz, rainy afternoon, mellow keys, no vocals",
  "is_instrumental": true,
  "format": "mp3"
}

Let the model write the lyrics from your prompt

{
  "prompt": "Upbeat synthwave about a late night drive through neon streets",
  "lyrics_optimizer": true,
  "format": "mp3"
}

Structure tags

Inside lyrics, tags on their own line mark sections and shape the arrangement:

[verse]\nStreetlights flicker, the night breeze sighs\n[chorus]\nPushing the wooden door, the aroma spreads\n[bridge]\nA stranger gazes from the corner

Example Request

{
  "prompt": "Indie folk, melancholic, introspective, longing, solitary walk, coffee shop",
  "lyrics": "[verse]\nStreetlights flicker, the night breeze sighs\nShadows stretch as I walk alone\n[chorus]\nPushing the wooden door, the aroma spreads\nIn a familiar corner, a stranger gazes",
  "format": "mp3",
  "sample_rate": 44100,
  "bitrate": 256000
}

Example Response

{
  "request_id": "minimax-music-3-0-fast_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-music-3-0-fast_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad request — a missing or out-of-range parameter. The message names the field.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
429Too many requests.
500Internal server error.

Retrieving Results

Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or ERROR), then download output.media_url. A track typically takes one to three minutes.

curl 'https://gateway.pixazo.ai/v2/requests/status/minimax-music-3-0-fast_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'

Completed response

{
  "request_id": "minimax-music-3-0-fast_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-music-3-0-fast",
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/audio.mp3"
    ],
    "media_type": "audio/mpeg"
  },
  "created_at": "2026-08-06T09:14:16.102Z",
  "completed_at": "2026-08-06T09:16:01.870Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED or ERROR.
model_idstringThe model that handled the request.
output.media_urlarrayURL of the generated track.
output.media_typestringMIME type of the audio — audio/mpeg for mp3.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError message when status is ERROR.

Status Values & Flow

QUEUEDPROCESSINGCOMPLETED (success) or ERROR (failure).

Pricing

Free. There is no charge for this tier. It is rate limited upstream and that limit is shared across all callers, so requests may be rejected under load — use minimax-music-3-0 for production traffic.

RequestCost per track
Any track, up to 5 minutes$0.00

Failed requests are not billed.

MiniMax Music 3.0 Fast (Free) API Pricing

Your request is Free
3. MiniMax H3 API

MiniMax H3 API Documentation (Text to Video)

MiniMax H3 is MiniMax's multimodal video model, producing native 2K (2560 × 1440) video at 24 fps. Generate a 2K video from a written description alone.

What you get back: a link to a finished MP4 you can download.

How it works, in 3 steps:

  1. Send your request to the URL below, including your API key.
  2. You immediately get back a request_id and a status link. The video is generated in the background, which takes a few minutes.
  3. Open the status link every few seconds until it reads COMPLETED, then download your video from the link it returns. Prefer not to poll? Add a webhook (see the Webhook section) and we will notify your server the moment it is ready.

Pricing: $0.13 per second of output — a 5 second clip costs $0.65, so duration is the main lever on price.

POST https://gateway.pixazo.ai/minimax-hailuo-h3/v2/text-to-video

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax H3 API (Text to Video)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-h3/v2/text-to-video
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "A lone lighthouse on a cliff at dusk, the beam sweeping through heavy fog as waves break below. Slow push-in. Audio: wind, surf, a distant foghorn."
}
import requests

response = requests.post(
    "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/text-to-video",
    headers={
        "Content-Type": "application/json",
        "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY",
    },
    json={
        "prompt": "A lone lighthouse on a cliff at dusk, the beam sweeping through heavy fog as waves break below. Slow push-in. Audio: wind, surf, a distant foghorn."
    },
)

data = response.json()
print(data["request_id"])
const response = await fetch(
  "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/text-to-video",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY",
    },
    body: JSON.stringify({
      "prompt": "A lone lighthouse on a cliff at dusk, the beam sweeping through heavy fog as waves break below. Slow push-in. Audio: wind, surf, a distant foghorn."
    }),
  }
);

const data = await response.json();
console.log(data.request_id);
curl -X POST "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/text-to-video" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  -d '{
  "prompt": "A lone lighthouse on a cliff at dusk, the beam sweeping through heavy fog as waves break below. Slow push-in. Audio: wind, surf, a distant foghorn."
}'

Output

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Rather than polling, you can have Pixazo POST the result to your own server. Add the webhook headers to your submit request and we will call you when the job reaches a terminal state.

HeaderTypeRequiredDescription
X-Webhook-URLstringYes, to enable the webhookHTTPS endpoint that receives the callback.
X-Webhook-ModestringNoterminal (default) fires once on COMPLETED or ERROR. sync also fires on intermediate transitions.

Example: enable the webhook

curl -X POST "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/text-to-video" \
  -H "Content-Type: application/json" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  -H "X-Webhook-URL: https://your-server.example.com/hooks/pixazo" \
  -H "X-Webhook-Mode: terminal" \
  -d '{
  "prompt": "A lone lighthouse on a cliff at dusk, the beam sweeping through heavy fog as waves break below. Slow push-in. Audio: wind, surf, a distant foghorn."
}'

Callback payload

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-07-31T10:18:51.900Z",
  "completed_at": "2026-07-31T10:22:49.000Z"
}

Failure callback

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3",
  "error": "Description of the error",
  "output": null
}

Delivery semantics

  • terminal mode sends exactly one webhook, when the job finishes or fails.
  • sync mode also sends a webhook on intermediate status changes.
  • Deliveries are idempotent on request_id — deduplicate on it, since a webhook can be retried.
  • Respond 200 within a few seconds; slow responses are treated as failures and retried.
  • The webhook URL must be HTTPS.

Request Parameters - MiniMax H3 API (Text to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstringUp to 7000 charactersWhat the video should show. Camera moves, lighting and an Audio: clause all influence the result. Required for every mode, including the image and reference ones.
durationNointeger54 – 15Length of the video in whole seconds. Billing is per second, so this sets the price directly.
ratioNostring16:921:9, 16:9, 4:3, 1:1, 3:4, 9:16Aspect ratio of the output. adaptive is not accepted for text to video — with no input media there is nothing to adapt to, so pick a concrete ratio.
resolutionNostring2K2KOutput resolution. MiniMax-H3 currently produces 2K (2560 × 1440) only.

Example Request

{
  "prompt": "A lone lighthouse on a cliff at dusk, the beam sweeping through heavy fog as waves break below. Slow push-in. Audio: wind, surf, a distant foghorn.",
  "duration": 8,
  "ratio": "16:9",
  "resolution": "2K"
}

Response

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Ocp-Apim-Subscription-KeyYesYour API subscription key.
Content-TypeYesMust be application/json.
Cache-ControlNoRecommended: no-cache.
X-Webhook-URLNoEnables webhook delivery of the result.
X-Webhook-ModeNoterminal or sync.

Response Handling

CodeMeaningWhat to do
202Accepted and queued.Read request_id and start polling.
400Invalid request body.Read the error message and correct the parameter it names.
401Missing or invalid subscription key.Check the Ocp-Apim-Subscription-Key header.
402Insufficient balance.Top up your wallet and retry.
403Not permitted for this subscription.Check your plan covers this model.
429Rate limit exceeded.Back off and retry.
500Server error.Retry; if it persists, contact support.

Error Responses

Submit-time errors come back on the POST itself:

{
  "error": "Insufficient Balance"
}
{
  "error": "Model not found"
}

Errors raised while the video is generating are reported on the status endpoint (and via webhook, if configured) with status set to ERROR. A job that fails this way is not charged — the reserved amount is released back to your wallet.

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3",
  "error": "Description of the error",
  "output": null
}

Retrieving Results

Poll the universal status endpoint to check progress and retrieve the finished video.

Endpoint

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY

cURL Example

curl "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY"

Response (Completed)

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-07-31T10:18:51.900Z",
  "completed_at": "2026-07-31T10:22:49.000Z"
}

Response Fields

FieldTypeDescription
request_idstringIdentifier for this job. Use it to poll, and to deduplicate webhooks.
statusstringOne of QUEUED, PROCESSING, COMPLETED, FAILED, ERROR.
model_idstringAlways minimax-hailuo-h3 for this API.
errorstring or nullFailure reason; null while healthy.
output.media_urlarray of stringLinks to the generated MP4 file(s).
output.media_typestringvideo/mp4.
created_atstringWhen the job was accepted (ISO 8601).
completed_atstringWhen the job reached a terminal state (ISO 8601).
polling_urlstringReturned on submit; the status URL for this job.

Status Values

StatusMeaning
QUEUEDAccepted and waiting to start.
PROCESSINGThe video is being generated.
COMPLETEDFinished. output.media_url holds the video.
FAILEDThe job could not be completed.
ERRORThe model reported an error. Not charged.

Status Flow

QUEUED  ->  PROCESSING  ->  COMPLETED
                     \->  FAILED / ERROR

Typical Workflow

  1. POST your request and read request_id from the 202 response.
  2. Wait roughly 30 seconds, then GET https://gateway.pixazo.ai/v2/requests/status/{request_id}.
  3. Keep polling every 15 to 30 seconds while the status is QUEUED or PROCESSING. A 5 second clip typically finishes in 3 to 6 minutes.
  4. On COMPLETED, download the file from output.media_url[0].
  5. On FAILED or ERROR, read error. Nothing is charged for a failed generation.

MiniMax H3 API Pricing

Your request will cost $0.13 per second of output video.
Image to Video

MiniMax H3 API Documentation (Image to Video)

MiniMax H3 is MiniMax's multimodal video model, producing native 2K (2560 × 1440) video at 24 fps. Bring a still image to life. The image you supply becomes the opening frame and the model animates forward from it.

What you get back: a link to a finished MP4 you can download.

How it works, in 3 steps:

  1. Send your request to the URL below, including your API key.
  2. You immediately get back a request_id and a status link. The video is generated in the background, which takes a few minutes.
  3. Open the status link every few seconds until it reads COMPLETED, then download your video from the link it returns. Prefer not to poll? Add a webhook (see the Webhook section) and we will notify your server the moment it is ready.

Pricing: $0.13 per second of output — a 5 second clip costs $0.65, so duration is the main lever on price.

POST https://gateway.pixazo.ai/minimax-hailuo-h3/v2/image-to-video

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax H3 API (Image to Video)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-h3/v2/image-to-video
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "Pull focus to the people in the background and let steam rise from the bowl.",
  "first_frame_image": "https://example.com/opening-frame.png"
}
import requests

response = requests.post(
    "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/image-to-video",
    headers={
        "Content-Type": "application/json",
        "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY",
    },
    json={
        "prompt": "Pull focus to the people in the background and let steam rise from the bowl.",
        "first_frame_image": "https://example.com/opening-frame.png"
    },
)

data = response.json()
print(data["request_id"])
const response = await fetch(
  "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/image-to-video",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY",
    },
    body: JSON.stringify({
      "prompt": "Pull focus to the people in the background and let steam rise from the bowl.",
      "first_frame_image": "https://example.com/opening-frame.png"
    }),
  }
);

const data = await response.json();
console.log(data.request_id);
curl -X POST "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/image-to-video" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  -d '{
  "prompt": "Pull focus to the people in the background and let steam rise from the bowl.",
  "first_frame_image": "https://example.com/opening-frame.png"
}'

Output

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Rather than polling, you can have Pixazo POST the result to your own server. Add the webhook headers to your submit request and we will call you when the job reaches a terminal state.

HeaderTypeRequiredDescription
X-Webhook-URLstringYes, to enable the webhookHTTPS endpoint that receives the callback.
X-Webhook-ModestringNoterminal (default) fires once on COMPLETED or ERROR. sync also fires on intermediate transitions.

Example: enable the webhook

curl -X POST "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/image-to-video" \
  -H "Content-Type: application/json" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  -H "X-Webhook-URL: https://your-server.example.com/hooks/pixazo" \
  -H "X-Webhook-Mode: terminal" \
  -d '{
  "prompt": "Pull focus to the people in the background and let steam rise from the bowl.",
  "first_frame_image": "https://example.com/opening-frame.png"
}'

Callback payload

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-07-31T10:18:51.900Z",
  "completed_at": "2026-07-31T10:22:49.000Z"
}

Failure callback

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3",
  "error": "Description of the error",
  "output": null
}

Delivery semantics

  • terminal mode sends exactly one webhook, when the job finishes or fails.
  • sync mode also sends a webhook on intermediate status changes.
  • Deliveries are idempotent on request_id — deduplicate on it, since a webhook can be retried.
  • Respond 200 within a few seconds; slow responses are treated as failures and retried.
  • The webhook URL must be HTTPS.

Request Parameters - MiniMax H3 API (Image to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstringUp to 7000 charactersWhat the video should show. Camera moves, lighting and an Audio: clause all influence the result. Required for every mode, including the image and reference ones.
first_frame_imageYesstringImage URL or base64 data URIThe opening frame. JPG, JPEG, PNG, WEBP, HEIC or HEIF; up to 30 MB; 256 – 5760 px per side; aspect ratio between 0.4 and 2.5.
durationNointeger54 – 15Length of the video in whole seconds. Billing is per second, so this sets the price directly.
ratioNostringadaptiveadaptive, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16Aspect ratio of the output. adaptive follows the input media.
resolutionNostring2K2KOutput resolution. MiniMax-H3 currently produces 2K (2560 × 1440) only.

Example Request

{
  "prompt": "Pull focus to the people in the background and let steam rise from the bowl.",
  "first_frame_image": "https://example.com/opening-frame.png",
  "duration": 6,
  "ratio": "adaptive",
  "resolution": "2K"
}

Response

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Ocp-Apim-Subscription-KeyYesYour API subscription key.
Content-TypeYesMust be application/json.
Cache-ControlNoRecommended: no-cache.
X-Webhook-URLNoEnables webhook delivery of the result.
X-Webhook-ModeNoterminal or sync.

Response Handling

CodeMeaningWhat to do
202Accepted and queued.Read request_id and start polling.
400Invalid request body.Read the error message and correct the parameter it names.
401Missing or invalid subscription key.Check the Ocp-Apim-Subscription-Key header.
402Insufficient balance.Top up your wallet and retry.
403Not permitted for this subscription.Check your plan covers this model.
429Rate limit exceeded.Back off and retry.
500Server error.Retry; if it persists, contact support.

Error Responses

Submit-time errors come back on the POST itself:

{
  "error": "Insufficient Balance"
}
{
  "error": "Model not found"
}

Errors raised while the video is generating are reported on the status endpoint (and via webhook, if configured) with status set to ERROR. A job that fails this way is not charged — the reserved amount is released back to your wallet.

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3",
  "error": "Description of the error",
  "output": null
}

Retrieving Results

Poll the universal status endpoint to check progress and retrieve the finished video.

Endpoint

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY

cURL Example

curl "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY"

Response (Completed)

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-07-31T10:18:51.900Z",
  "completed_at": "2026-07-31T10:22:49.000Z"
}

Response Fields

FieldTypeDescription
request_idstringIdentifier for this job. Use it to poll, and to deduplicate webhooks.
statusstringOne of QUEUED, PROCESSING, COMPLETED, FAILED, ERROR.
model_idstringAlways minimax-hailuo-h3 for this API.
errorstring or nullFailure reason; null while healthy.
output.media_urlarray of stringLinks to the generated MP4 file(s).
output.media_typestringvideo/mp4.
created_atstringWhen the job was accepted (ISO 8601).
completed_atstringWhen the job reached a terminal state (ISO 8601).
polling_urlstringReturned on submit; the status URL for this job.

Status Values

StatusMeaning
QUEUEDAccepted and waiting to start.
PROCESSINGThe video is being generated.
COMPLETEDFinished. output.media_url holds the video.
FAILEDThe job could not be completed.
ERRORThe model reported an error. Not charged.

Status Flow

QUEUED  ->  PROCESSING  ->  COMPLETED
                     \->  FAILED / ERROR

Typical Workflow

  1. POST your request and read request_id from the 202 response.
  2. Wait roughly 30 seconds, then GET https://gateway.pixazo.ai/v2/requests/status/{request_id}.
  3. Keep polling every 15 to 30 seconds while the status is QUEUED or PROCESSING. A 5 second clip typically finishes in 3 to 6 minutes.
  4. On COMPLETED, download the file from output.media_url[0].
  5. On FAILED or ERROR, read error. Nothing is charged for a failed generation.

MiniMax H3 API Pricing

Your request will cost $0.13 per second of output video.
Last Frame to Video

MiniMax H3 API Documentation (Last Frame to Video)

MiniMax H3 is MiniMax's multimodal video model, producing native 2K (2560 × 1440) video at 24 fps. Generate a video that ends on the image you supply. The model invents everything leading up to it.

What you get back: a link to a finished MP4 you can download.

How it works, in 3 steps:

  1. Send your request to the URL below, including your API key.
  2. You immediately get back a request_id and a status link. The video is generated in the background, which takes a few minutes.
  3. Open the status link every few seconds until it reads COMPLETED, then download your video from the link it returns. Prefer not to poll? Add a webhook (see the Webhook section) and we will notify your server the moment it is ready.

Pricing: $0.13 per second of output — a 5 second clip costs $0.65, so duration is the main lever on price.

POST https://gateway.pixazo.ai/minimax-hailuo-h3/v2/last-frame-to-video

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax H3 API (Last Frame to Video)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-h3/v2/last-frame-to-video
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "The camera drifts through the empty street as the storm clears, settling on this view.",
  "last_frame_image": "https://example.com/opening-frame.png"
}
import requests

response = requests.post(
    "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/last-frame-to-video",
    headers={
        "Content-Type": "application/json",
        "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY",
    },
    json={
        "prompt": "The camera drifts through the empty street as the storm clears, settling on this view.",
        "last_frame_image": "https://example.com/opening-frame.png"
    },
)

data = response.json()
print(data["request_id"])
const response = await fetch(
  "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/last-frame-to-video",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY",
    },
    body: JSON.stringify({
      "prompt": "The camera drifts through the empty street as the storm clears, settling on this view.",
      "last_frame_image": "https://example.com/opening-frame.png"
    }),
  }
);

const data = await response.json();
console.log(data.request_id);
curl -X POST "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/last-frame-to-video" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  -d '{
  "prompt": "The camera drifts through the empty street as the storm clears, settling on this view.",
  "last_frame_image": "https://example.com/opening-frame.png"
}'

Output

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Rather than polling, you can have Pixazo POST the result to your own server. Add the webhook headers to your submit request and we will call you when the job reaches a terminal state.

HeaderTypeRequiredDescription
X-Webhook-URLstringYes, to enable the webhookHTTPS endpoint that receives the callback.
X-Webhook-ModestringNoterminal (default) fires once on COMPLETED or ERROR. sync also fires on intermediate transitions.

Example: enable the webhook

curl -X POST "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/last-frame-to-video" \
  -H "Content-Type: application/json" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  -H "X-Webhook-URL: https://your-server.example.com/hooks/pixazo" \
  -H "X-Webhook-Mode: terminal" \
  -d '{
  "prompt": "The camera drifts through the empty street as the storm clears, settling on this view.",
  "last_frame_image": "https://example.com/opening-frame.png"
}'

Callback payload

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-07-31T10:18:51.900Z",
  "completed_at": "2026-07-31T10:22:49.000Z"
}

Failure callback

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3",
  "error": "Description of the error",
  "output": null
}

Delivery semantics

  • terminal mode sends exactly one webhook, when the job finishes or fails.
  • sync mode also sends a webhook on intermediate status changes.
  • Deliveries are idempotent on request_id — deduplicate on it, since a webhook can be retried.
  • Respond 200 within a few seconds; slow responses are treated as failures and retried.
  • The webhook URL must be HTTPS.

Request Parameters - MiniMax H3 API (Last Frame to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstringUp to 7000 charactersWhat the video should show. Camera moves, lighting and an Audio: clause all influence the result. Required for every mode, including the image and reference ones.
last_frame_imageYesstringImage URL or base64 data URIThe closing frame. JPG, JPEG, PNG, WEBP, HEIC or HEIF; up to 30 MB; 256 – 5760 px per side; aspect ratio between 0.4 and 2.5.
durationNointeger54 – 15Length of the video in whole seconds. Billing is per second, so this sets the price directly.
ratioNostringadaptiveadaptive, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16Aspect ratio of the output. adaptive follows the input media.
resolutionNostring2K2KOutput resolution. MiniMax-H3 currently produces 2K (2560 × 1440) only.

Example Request

{
  "prompt": "The camera drifts through the empty street as the storm clears, settling on this view.",
  "last_frame_image": "https://example.com/opening-frame.png",
  "duration": 6,
  "ratio": "adaptive",
  "resolution": "2K"
}

Response

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Ocp-Apim-Subscription-KeyYesYour API subscription key.
Content-TypeYesMust be application/json.
Cache-ControlNoRecommended: no-cache.
X-Webhook-URLNoEnables webhook delivery of the result.
X-Webhook-ModeNoterminal or sync.

Response Handling

CodeMeaningWhat to do
202Accepted and queued.Read request_id and start polling.
400Invalid request body.Read the error message and correct the parameter it names.
401Missing or invalid subscription key.Check the Ocp-Apim-Subscription-Key header.
402Insufficient balance.Top up your wallet and retry.
403Not permitted for this subscription.Check your plan covers this model.
429Rate limit exceeded.Back off and retry.
500Server error.Retry; if it persists, contact support.

Error Responses

Submit-time errors come back on the POST itself:

{
  "error": "Insufficient Balance"
}
{
  "error": "Model not found"
}

Errors raised while the video is generating are reported on the status endpoint (and via webhook, if configured) with status set to ERROR. A job that fails this way is not charged — the reserved amount is released back to your wallet.

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3",
  "error": "Description of the error",
  "output": null
}

Retrieving Results

Poll the universal status endpoint to check progress and retrieve the finished video.

Endpoint

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY

cURL Example

curl "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY"

Response (Completed)

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-07-31T10:18:51.900Z",
  "completed_at": "2026-07-31T10:22:49.000Z"
}

Response Fields

FieldTypeDescription
request_idstringIdentifier for this job. Use it to poll, and to deduplicate webhooks.
statusstringOne of QUEUED, PROCESSING, COMPLETED, FAILED, ERROR.
model_idstringAlways minimax-hailuo-h3 for this API.
errorstring or nullFailure reason; null while healthy.
output.media_urlarray of stringLinks to the generated MP4 file(s).
output.media_typestringvideo/mp4.
created_atstringWhen the job was accepted (ISO 8601).
completed_atstringWhen the job reached a terminal state (ISO 8601).
polling_urlstringReturned on submit; the status URL for this job.

Status Values

StatusMeaning
QUEUEDAccepted and waiting to start.
PROCESSINGThe video is being generated.
COMPLETEDFinished. output.media_url holds the video.
FAILEDThe job could not be completed.
ERRORThe model reported an error. Not charged.

Status Flow

QUEUED  ->  PROCESSING  ->  COMPLETED
                     \->  FAILED / ERROR

Typical Workflow

  1. POST your request and read request_id from the 202 response.
  2. Wait roughly 30 seconds, then GET https://gateway.pixazo.ai/v2/requests/status/{request_id}.
  3. Keep polling every 15 to 30 seconds while the status is QUEUED or PROCESSING. A 5 second clip typically finishes in 3 to 6 minutes.
  4. On COMPLETED, download the file from output.media_url[0].
  5. On FAILED or ERROR, read error. Nothing is charged for a failed generation.

MiniMax H3 API Pricing

Your request will cost $0.13 per second of output video.
Start and End Frame to Video

MiniMax H3 API Documentation (Start and End Frame to Video)

MiniMax H3 is MiniMax's multimodal video model, producing native 2K (2560 × 1440) video at 24 fps. Interpolate between two stills. The first image opens the video, the second closes it, and the model generates the journey between them.

What you get back: a link to a finished MP4 you can download.

How it works, in 3 steps:

  1. Send your request to the URL below, including your API key.
  2. You immediately get back a request_id and a status link. The video is generated in the background, which takes a few minutes.
  3. Open the status link every few seconds until it reads COMPLETED, then download your video from the link it returns. Prefer not to poll? Add a webhook (see the Webhook section) and we will notify your server the moment it is ready.

Pricing: $0.13 per second of output — a 5 second clip costs $0.65, so duration is the main lever on price.

POST https://gateway.pixazo.ai/minimax-hailuo-h3/v2/start-end-to-video

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax H3 API (Start and End Frame to Video)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-h3/v2/start-end-to-video
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "A slow dolly forward through the doorway as the light shifts from morning to dusk.",
  "first_frame_image": "https://example.com/opening-frame.png",
  "last_frame_image": "https://example.com/closing-frame.png"
}
import requests

response = requests.post(
    "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/start-end-to-video",
    headers={
        "Content-Type": "application/json",
        "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY",
    },
    json={
        "prompt": "A slow dolly forward through the doorway as the light shifts from morning to dusk.",
        "first_frame_image": "https://example.com/opening-frame.png",
        "last_frame_image": "https://example.com/closing-frame.png"
    },
)

data = response.json()
print(data["request_id"])
const response = await fetch(
  "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/start-end-to-video",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY",
    },
    body: JSON.stringify({
      "prompt": "A slow dolly forward through the doorway as the light shifts from morning to dusk.",
      "first_frame_image": "https://example.com/opening-frame.png",
      "last_frame_image": "https://example.com/closing-frame.png"
    }),
  }
);

const data = await response.json();
console.log(data.request_id);
curl -X POST "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/start-end-to-video" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  -d '{
  "prompt": "A slow dolly forward through the doorway as the light shifts from morning to dusk.",
  "first_frame_image": "https://example.com/opening-frame.png",
  "last_frame_image": "https://example.com/closing-frame.png"
}'

Output

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Rather than polling, you can have Pixazo POST the result to your own server. Add the webhook headers to your submit request and we will call you when the job reaches a terminal state.

HeaderTypeRequiredDescription
X-Webhook-URLstringYes, to enable the webhookHTTPS endpoint that receives the callback.
X-Webhook-ModestringNoterminal (default) fires once on COMPLETED or ERROR. sync also fires on intermediate transitions.

Example: enable the webhook

curl -X POST "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/start-end-to-video" \
  -H "Content-Type: application/json" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  -H "X-Webhook-URL: https://your-server.example.com/hooks/pixazo" \
  -H "X-Webhook-Mode: terminal" \
  -d '{
  "prompt": "A slow dolly forward through the doorway as the light shifts from morning to dusk.",
  "first_frame_image": "https://example.com/opening-frame.png",
  "last_frame_image": "https://example.com/closing-frame.png"
}'

Callback payload

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-07-31T10:18:51.900Z",
  "completed_at": "2026-07-31T10:22:49.000Z"
}

Failure callback

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3",
  "error": "Description of the error",
  "output": null
}

Delivery semantics

  • terminal mode sends exactly one webhook, when the job finishes or fails.
  • sync mode also sends a webhook on intermediate status changes.
  • Deliveries are idempotent on request_id — deduplicate on it, since a webhook can be retried.
  • Respond 200 within a few seconds; slow responses are treated as failures and retried.
  • The webhook URL must be HTTPS.

Request Parameters - MiniMax H3 API (Start and End Frame to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstringUp to 7000 charactersWhat the video should show. Camera moves, lighting and an Audio: clause all influence the result. Required for every mode, including the image and reference ones.
first_frame_imageYesstringImage URL or base64 data URIThe opening frame. JPG, JPEG, PNG, WEBP, HEIC or HEIF; up to 30 MB; 256 – 5760 px per side; aspect ratio between 0.4 and 2.5.
last_frame_imageYesstringImage URL or base64 data URIThe closing frame. Same formats and limits as first_frame_image.
durationNointeger54 – 15Length of the video in whole seconds. Billing is per second, so this sets the price directly.
ratioNostringadaptiveadaptive, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16Aspect ratio of the output. adaptive follows the input media.
resolutionNostring2K2KOutput resolution. MiniMax-H3 currently produces 2K (2560 × 1440) only.

Example Request

{
  "prompt": "A slow dolly forward through the doorway as the light shifts from morning to dusk.",
  "first_frame_image": "https://example.com/opening-frame.png",
  "last_frame_image": "https://example.com/closing-frame.png",
  "duration": 10,
  "ratio": "16:9",
  "resolution": "2K"
}

Response

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Ocp-Apim-Subscription-KeyYesYour API subscription key.
Content-TypeYesMust be application/json.
Cache-ControlNoRecommended: no-cache.
X-Webhook-URLNoEnables webhook delivery of the result.
X-Webhook-ModeNoterminal or sync.

Response Handling

CodeMeaningWhat to do
202Accepted and queued.Read request_id and start polling.
400Invalid request body.Read the error message and correct the parameter it names.
401Missing or invalid subscription key.Check the Ocp-Apim-Subscription-Key header.
402Insufficient balance.Top up your wallet and retry.
403Not permitted for this subscription.Check your plan covers this model.
429Rate limit exceeded.Back off and retry.
500Server error.Retry; if it persists, contact support.

Error Responses

Submit-time errors come back on the POST itself:

{
  "error": "Insufficient Balance"
}
{
  "error": "Model not found"
}

Errors raised while the video is generating are reported on the status endpoint (and via webhook, if configured) with status set to ERROR. A job that fails this way is not charged — the reserved amount is released back to your wallet.

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3",
  "error": "Description of the error",
  "output": null
}

Retrieving Results

Poll the universal status endpoint to check progress and retrieve the finished video.

Endpoint

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY

cURL Example

curl "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY"

Response (Completed)

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-07-31T10:18:51.900Z",
  "completed_at": "2026-07-31T10:22:49.000Z"
}

Response Fields

FieldTypeDescription
request_idstringIdentifier for this job. Use it to poll, and to deduplicate webhooks.
statusstringOne of QUEUED, PROCESSING, COMPLETED, FAILED, ERROR.
model_idstringAlways minimax-hailuo-h3 for this API.
errorstring or nullFailure reason; null while healthy.
output.media_urlarray of stringLinks to the generated MP4 file(s).
output.media_typestringvideo/mp4.
created_atstringWhen the job was accepted (ISO 8601).
completed_atstringWhen the job reached a terminal state (ISO 8601).
polling_urlstringReturned on submit; the status URL for this job.

Status Values

StatusMeaning
QUEUEDAccepted and waiting to start.
PROCESSINGThe video is being generated.
COMPLETEDFinished. output.media_url holds the video.
FAILEDThe job could not be completed.
ERRORThe model reported an error. Not charged.

Status Flow

QUEUED  ->  PROCESSING  ->  COMPLETED
                     \->  FAILED / ERROR

Typical Workflow

  1. POST your request and read request_id from the 202 response.
  2. Wait roughly 30 seconds, then GET https://gateway.pixazo.ai/v2/requests/status/{request_id}.
  3. Keep polling every 15 to 30 seconds while the status is QUEUED or PROCESSING. A 5 second clip typically finishes in 3 to 6 minutes.
  4. On COMPLETED, download the file from output.media_url[0].
  5. On FAILED or ERROR, read error. Nothing is charged for a failed generation.

MiniMax H3 API Pricing

Your request will cost $0.13 per second of output video.
Reference to Video

MiniMax H3 API Documentation (Reference to Video)

MiniMax H3 is MiniMax's multimodal video model, producing native 2K (2560 × 1440) video at 24 fps. Carry a subject, a motion style or a voice across into a new video. Supply reference images, video clips, audio clips, or any mix of them.

What you get back: a link to a finished MP4 you can download.

How it works, in 3 steps:

  1. Send your request to the URL below, including your API key.
  2. You immediately get back a request_id and a status link. The video is generated in the background, which takes a few minutes.
  3. Open the status link every few seconds until it reads COMPLETED, then download your video from the link it returns. Prefer not to poll? Add a webhook (see the Webhook section) and we will notify your server the moment it is ready.

Pricing: $0.13 per second of output — a 5 second clip costs $0.65, so duration is the main lever on price.

POST https://gateway.pixazo.ai/minimax-hailuo-h3/v2/reference-to-video

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax H3 API (Reference to Video)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-h3/v2/reference-to-video
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "The same character walks through a rainy street at night, neon reflections underfoot.",
  "reference_images": [
    "https://example.com/opening-frame.png"
  ]
}
import requests

response = requests.post(
    "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/reference-to-video",
    headers={
        "Content-Type": "application/json",
        "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY",
    },
    json={
        "prompt": "The same character walks through a rainy street at night, neon reflections underfoot.",
        "reference_images": [
                "https://example.com/opening-frame.png"
        ]
    },
)

data = response.json()
print(data["request_id"])
const response = await fetch(
  "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/reference-to-video",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY",
    },
    body: JSON.stringify({
      "prompt": "The same character walks through a rainy street at night, neon reflections underfoot.",
      "reference_images": [
            "https://example.com/opening-frame.png"
      ]
    }),
  }
);

const data = await response.json();
console.log(data.request_id);
curl -X POST "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/reference-to-video" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  -d '{
  "prompt": "The same character walks through a rainy street at night, neon reflections underfoot.",
  "reference_images": [
    "https://example.com/opening-frame.png"
  ]
}'

Output

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Rather than polling, you can have Pixazo POST the result to your own server. Add the webhook headers to your submit request and we will call you when the job reaches a terminal state.

HeaderTypeRequiredDescription
X-Webhook-URLstringYes, to enable the webhookHTTPS endpoint that receives the callback.
X-Webhook-ModestringNoterminal (default) fires once on COMPLETED or ERROR. sync also fires on intermediate transitions.

Example: enable the webhook

curl -X POST "https://gateway.pixazo.ai/minimax-hailuo-h3/v2/reference-to-video" \
  -H "Content-Type: application/json" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  -H "X-Webhook-URL: https://your-server.example.com/hooks/pixazo" \
  -H "X-Webhook-Mode: terminal" \
  -d '{
  "prompt": "The same character walks through a rainy street at night, neon reflections underfoot.",
  "reference_images": [
    "https://example.com/opening-frame.png"
  ]
}'

Callback payload

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-07-31T10:18:51.900Z",
  "completed_at": "2026-07-31T10:22:49.000Z"
}

Failure callback

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3",
  "error": "Description of the error",
  "output": null
}

Delivery semantics

  • terminal mode sends exactly one webhook, when the job finishes or fails.
  • sync mode also sends a webhook on intermediate status changes.
  • Deliveries are idempotent on request_id — deduplicate on it, since a webhook can be retried.
  • Respond 200 within a few seconds; slow responses are treated as failures and retried.
  • The webhook URL must be HTTPS.

Request Parameters - MiniMax H3 API (Reference to Video)

Note: At least one of reference_images or reference_videos is required, and no more than 12 reference files in total. Reference generation and frame images are mutually exclusive — do not send first_frame_image or last_frame_image here; use the Image to Video operations for those.

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstringUp to 7000 charactersWhat the video should show. Camera moves, lighting and an Audio: clause all influence the result. Required for every mode, including the image and reference ones.
reference_imagesConditionalarray of stringUp to 9 itemsImages that lock in a character, subject or style. Up to 30 MB each.
reference_videosConditionalarray of stringUp to 3 itemsClips that supply motion or style. MP4 or MOV, H.264 or H.265 with AAC or MP3 audio; up to 50 MB each; 2 – 15 s each and 15 s in total.
reference_audiosConditionalarray of stringUp to 3 itemsClips that supply voice timbre for lip-synced speech. WAV or MP3; up to 15 MB each; 2 – 15 s each and 15 s in total. Audio on its own is not enough — pair it with a reference image or video.
durationNointeger54 – 15Length of the video in whole seconds. Billing is per second, so this sets the price directly.
ratioNostringadaptiveadaptive, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16Aspect ratio of the output. adaptive follows the input media.
resolutionNostring2K2KOutput resolution. MiniMax-H3 currently produces 2K (2560 × 1440) only.

Example Request

{
  "prompt": "The same character walks through a rainy street at night, neon reflections underfoot. Voice timbre follows the reference audio.",
  "reference_images": [
    "https://example.com/opening-frame.png",
    "https://example.com/closing-frame.png"
  ],
  "reference_audios": [
    "https://example.com/voice.mp3"
  ],
  "duration": 8,
  "ratio": "adaptive",
  "resolution": "2K"
}

Response

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

HeaderRequiredDescription
Ocp-Apim-Subscription-KeyYesYour API subscription key.
Content-TypeYesMust be application/json.
Cache-ControlNoRecommended: no-cache.
X-Webhook-URLNoEnables webhook delivery of the result.
X-Webhook-ModeNoterminal or sync.

Response Handling

CodeMeaningWhat to do
202Accepted and queued.Read request_id and start polling.
400Invalid request body.Read the error message and correct the parameter it names.
401Missing or invalid subscription key.Check the Ocp-Apim-Subscription-Key header.
402Insufficient balance.Top up your wallet and retry.
403Not permitted for this subscription.Check your plan covers this model.
429Rate limit exceeded.Back off and retry.
500Server error.Retry; if it persists, contact support.

Error Responses

Submit-time errors come back on the POST itself:

{
  "error": "Insufficient Balance"
}
{
  "error": "Model not found"
}

Errors raised while the video is generating are reported on the status endpoint (and via webhook, if configured) with status set to ERROR. A job that fails this way is not charged — the reserved amount is released back to your wallet.

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3",
  "error": "Description of the error",
  "output": null
}

Retrieving Results

Poll the universal status endpoint to check progress and retrieve the finished video.

Endpoint

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY

cURL Example

curl "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY"

Response (Completed)

{
  "request_id": "minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-07-31T10:18:51.900Z",
  "completed_at": "2026-07-31T10:22:49.000Z"
}

Response Fields

FieldTypeDescription
request_idstringIdentifier for this job. Use it to poll, and to deduplicate webhooks.
statusstringOne of QUEUED, PROCESSING, COMPLETED, FAILED, ERROR.
model_idstringAlways minimax-hailuo-h3 for this API.
errorstring or nullFailure reason; null while healthy.
output.media_urlarray of stringLinks to the generated MP4 file(s).
output.media_typestringvideo/mp4.
created_atstringWhen the job was accepted (ISO 8601).
completed_atstringWhen the job reached a terminal state (ISO 8601).
polling_urlstringReturned on submit; the status URL for this job.

Status Values

StatusMeaning
QUEUEDAccepted and waiting to start.
PROCESSINGThe video is being generated.
COMPLETEDFinished. output.media_url holds the video.
FAILEDThe job could not be completed.
ERRORThe model reported an error. Not charged.

Status Flow

QUEUED  ->  PROCESSING  ->  COMPLETED
                     \->  FAILED / ERROR

Typical Workflow

  1. POST your request and read request_id from the 202 response.
  2. Wait roughly 30 seconds, then GET https://gateway.pixazo.ai/v2/requests/status/{request_id}.
  3. Keep polling every 15 to 30 seconds while the status is QUEUED or PROCESSING. A 5 second clip typically finishes in 3 to 6 minutes.
  4. On COMPLETED, download the file from output.media_url[0].
  5. On FAILED or ERROR, read error. Nothing is charged for a failed generation.

MiniMax H3 API Pricing

Your request will cost $0.13 per second of output video.
4. MiniMax Speech 2.8 API HD

MiniMax Speech 2.8 API HD Documentation (Text to Speech)

https://gateway.pixazo.ai/minimax-speech-2-8-hd/v1/minimax-speech-2-8-hd-request

Authentication

All requests require an API key passed via header.

Header Type Required Description
Ocp-Apim-Subscription-Key string Yes Your API subscription key

MiniMax Speech 2.8 API HD (Text to Speech)

Request Code

POST /minimax-speech-2-8-hd-request HTTP/1.1
Host: gateway.pixazo.ai
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "The research findings indicate a significant correlation between sleep quality and cognitive performance in adults over fifty.",
  "output_format": "hex"
}
import requests

url = "https://gateway.pixazo.ai/minimax-speech-2-8-hd/v1/minimax-speech-2-8-hd-request"
headers = {
    "Content-Type": "application/json",
    "Cache-Control": "no-cache",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
    "prompt": "The research findings indicate a significant correlation between sleep quality and cognitive performance in adults over fifty.",
    "output_format": "hex"
}

response = requests.post(url, json=data, headers=headers)
print(response.json())
fetch("https://gateway.pixazo.ai/minimax-speech-2-8-hd/v1/minimax-speech-2-8-hd-request", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Cache-Control": "no-cache",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
  },
  body: JSON.stringify({
    prompt: "The research findings indicate a significant correlation between sleep quality and cognitive performance in adults over fifty.",
    output_format: "hex"
  })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
curl -X POST "https://gateway.pixazo.ai/minimax-speech-2-8-hd/v1/minimax-speech-2-8-hd-request" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  --data-raw '{
    "prompt": "The research findings indicate a significant correlation between sleep quality and cognitive performance in adults over fifty.",
    "output_format": "hex"
  }'

Output

{
  "request_id": "minimax-speech-2-8-hd_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "/v2/requests/status/minimax-speech-2-8-hd_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.

Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.

Webhook Headers

HeaderRequiredDefaultDescription
X-Webhook-URLYes (to enable)HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed).
X-Webhook-ModeNoterminalterminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates.

Example: enable webhook

X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal

Callback Payload

Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):

{
  "request_id": "minimax-speech-2-8-hd_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-speech-2-8-hd",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-speech-2-8-hd_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
    ],
    "media_type": "audio/wav"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}

Failure callback shape

{
  "request_id": "minimax-speech-2-8-hd_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-speech-2-8-hd",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}

Delivery semantics

  • terminal mode (default) — exactly one POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries.
  • HTTPS required — plain http:// URLs are rejected.

Request Parameters - MiniMax Speech 2.8 API HD (Text to Speech)

Field Type Required Default Description
prompt string Yes Text to convert to speech. Must be valid UTF-8. Use <#x#> for pauses (x = 0.01-99.99 seconds). Supports interjection tags such as (laughs), (sighs), (coughs), (clears throat), (gasps), (sniffs), (groans), (yawns).
voice_setting object No Voice configuration. Nested fields: voice_id (string, default "Wise_Woman"); speed (float, 0.5-2.0, default 1); vol (float, 0-10, default 1); pitch (integer, -12 to 12, default 0); emotion (one of happy, sad, angry, fearful, disgusted, surprised, neutral); english_normalization (boolean) - improves number reading, with a slight latency increase.
audio_setting object No Audio output configuration. Nested fields: sample_rate (one of 8000, 16000, 22050, 24000, 32000, 44100; default 32000); bitrate (one of 32000, 64000, 128000, 256000; default 128000); format (one of mp3, pcm, flac; default mp3); channel (1 = mono, 2 = stereo; default 1).
language_boost string No Enhance recognition of a specific language or dialect. One of: Chinese, Chinese,Yue, English, Arabic, Russian, Spanish, French, Portuguese, German, Turkish, Dutch, Ukrainian, Vietnamese, Indonesian, Japanese, Italian, Korean, Thai, Polish, Romanian, Greek, Czech, Finnish, Hindi, Bulgarian, Danish, Hebrew, Malay, Slovak, Swedish, Croatian, Hungarian, Norwegian, Slovenian, Catalan, Nynorsk, Afrikaans, auto.
output_format string No hex Format of the returned audio content (non-streaming only). Allowed: "hex" (hex-encoded audio, default) or "url" (hosted file URL).
pronunciation_dict object No Custom pronunciation dictionary. Nested field: tone_list (array of strings) - replacements in the format ['text/(pronunciation)', ...].
normalization_setting object No Loudness normalization settings. Nested fields: enabled (boolean, default true); target_loudness (float, default -18 LUFS); target_range (float, default 8 LU); target_peak (float, default -0.5 dBTP).
voice_modify object No Voice modification. Nested fields: pitch (integer, -100 to 100); intensity (integer, -100 to 100); timbre (integer, -100 to 100).

Minimum Request

{
  "prompt": "The research findings indicate a significant correlation between sleep quality and cognitive performance in adults over fifty.",
  "output_format": "hex"
}

Full Request (all options)

{
  "prompt": "The research findings indicate a significant correlation between sleep quality and cognitive performance in adults over fifty.",
  "output_format": "hex"
}

Response

{
  "request_id": "minimax-speech-2-8-hd_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "/v2/requests/status/minimax-speech-2-8-hd_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

Header Value
Content-Type application/json
Cache-Control no-cache
Ocp-Apim-Subscription-Key Your API subscription key

Response Handling

Common status codes for MiniMax Speech 2.8 HD generate request.

Code Meaning
202 Accepted — Request queued
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
Too Many Requests
500 Internal Server Error

Error Responses

Queue system errors and model validation errors.

Queue System Errors

// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'minimax-speech-2-8-hd' not found or is disabled"
}

Error via Status/Webhook

{
  "request_id": "minimax-speech-2-8-hd_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-speech-2-8-hd",
  "error": "Description of the error",
  "output": null
}

Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

Endpoint

GET /v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY

cURL Example

curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "/v2/requests/status/minimax-speech-2-8-hd_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Response (Completed)

{
  "request_id": "minimax-speech-2-8-hd_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-speech-2-8-hd",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-speech-2-8-hd_019dxxxx-xxxx/output.ext"
    ],
    "media_type": "application/octet-stream"
  },
  "created_at": "2026-03-31T10:00:00.000Z",
  "updated_at": "2026-03-31T10:00:15.000Z",
  "completed_at": "2026-03-31T10:00:15.000Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

MiniMax Speech 2.8 HD API Pricing

Your request will cost $0.05 per 1,000 characters.
5. MiniMax Speech 2.8 API Turbo

MiniMax Speech 2.8 API Turbo Documentation (Text to Speech)

https://gateway.pixazo.ai/minimax-speech-2-8-turbo/v1/minimax-speech-2-8-turbo-request

Authentication

All requests require an API key passed via header.

Header Type Required Description
Ocp-Apim-Subscription-Key string Yes Your API subscription key

MiniMax Speech 2.8 API Turbo (Text to Speech)

Request Code

POST https://gateway.pixazo.ai/minimax-speech-2-8-turbo/v1/minimax-speech-2-8-turbo-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "Good morning everyone and welcome to the annual technology summit. We have an exciting lineup of speakers for you today.",
  "output_format": "hex",
  "voice_setting": {
    "voice_id": "Wise_Woman",
    "speed": 1,
    "vol": 1
  }
}
import requests

url = "https://gateway.pixazo.ai/minimax-speech-2-8-turbo/v1/minimax-speech-2-8-turbo-request"
headers = {
    "Content-Type": "application/json",
    "Cache-Control": "no-cache",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
    "prompt": "Good morning everyone and welcome to the annual technology summit. We have an exciting lineup of speakers for you today.",
    "output_format": "hex",
    "voice_setting": {
        "voice_id": "Wise_Woman",
        "speed": 1,
        "vol": 1
    }
}

response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/minimax-speech-2-8-turbo/v1/minimax-speech-2-8-turbo-request';

const data = {
  prompt: "Good morning everyone and welcome to the annual technology summit. We have an exciting lineup of speakers for you today.",
  output_format: "hex",
  voice_setting: {
    voice_id: "Wise_Woman",
    speed: 1,
    vol: 1
  }
};

fetch(url, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Cache-Control': 'no-cache',
    'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
  },
  body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/minimax-speech-2-8-turbo/v1/minimax-speech-2-8-turbo-request" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  --data-raw '{
    "prompt": "Good morning everyone and welcome to the annual technology summit. We have an exciting lineup of speakers for you today.",
    "output_format": "hex",
    "voice_setting": {
      "voice_id": "Wise_Woman",
      "speed": 1,
      "vol": 1
    }
  }'

Output

{
  "request_id": "minimax-speech-2-8-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-speech-2-8-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.

Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.

Webhook Headers

HeaderRequiredDefaultDescription
X-Webhook-URLYes (to enable)HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed).
X-Webhook-ModeNoterminalterminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates.

Example: enable webhook

X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal

Callback Payload

Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):

{
  "request_id": "minimax-speech-2-8-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-speech-2-8-turbo",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-speech-2-8-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
    ],
    "media_type": "audio/wav"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}

Failure callback shape

{
  "request_id": "minimax-speech-2-8-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-speech-2-8-turbo",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}

Delivery semantics

  • terminal mode (default) — exactly one POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries.
  • HTTPS required — plain http:// URLs are rejected.

Request Parameters - MiniMax Speech 2.8 API Turbo (Text to Speech)

Field Type Required Default Description
prompt string Yes The text to be converted into speech. Must be a valid string containing natural language.
output_format string Yes Output format of the generated audio. Currently supports only "hex" (hexadecimal representation of audio bytes).
voice_setting.voice_id string Yes Identifier of the voice to use. Example: "Wise_Woman". Available voices are defined by the service.
voice_setting.speed number No 1 Speed multiplier for speech generation. Values range from 0.5 (half speed) to 2.0 (double speed).
voice_setting.vol number No 1 Volume multiplier for speech output. Values range from 0.0 (muted) to 2.0 (double volume).

Minimum Request

{
  "prompt": "Good morning everyone and welcome to the annual technology summit. We have an exciting lineup of speakers for you today.",
  "output_format": "hex",
  "voice_setting": {
    "voice_id": "Wise_Woman"
  }
}

Full Request (all options)

{
  "prompt": "Good morning everyone and welcome to the annual technology summit. We have an exciting lineup of speakers for you today.",
  "output_format": "hex",
  "voice_setting": {
    "voice_id": "Wise_Woman",
    "speed": 1,
    "vol": 1
  }
}

Response

{
  "request_id": "minimax-speech-2-8-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-speech-2-8-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

Header Value
Content-Type application/json
Cache-Control no-cache
Ocp-Apim-Subscription-Key Your API subscription key

Response Handling

Common status codes for MiniMax Speech 2.8 Turbo generate request.

Code Meaning
202 Accepted — Request queued
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
Too Many Requests
500 Internal Server Error

Error Responses

Queue system errors and model validation errors.

Queue System Errors

// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'minimax-speech-2-8-turbo' not found or is disabled"
}

Error via Status/Webhook

{
  "request_id": "minimax-speech-2-8-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-speech-2-8-turbo",
  "error": "Description of the error",
  "output": null
}

Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

Endpoint

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY

cURL Example

curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "https://gateway.pixazo.ai/v2/requests/status/minimax-speech-2-8-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Response (Completed)

{
  "request_id": "minimax-speech-2-8-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-speech-2-8-turbo",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-speech-2-8-turbo_019dxxxx-xxxx/output.ext"
    ],
    "media_type": "application/octet-stream"
  },
  "created_at": "2026-03-31T10:00:00.000Z",
  "updated_at": "2026-03-31T10:00:15.000Z",
  "completed_at": "2026-03-31T10:00:15.000Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

MiniMax Speech 2.8 Turbo API Pricing

Your request will cost $0.06 per 1,000 characters.
about $0.06 per 1,000 characters, the fast tier of Speech 2.8
equivalent to $60 per 1M characters
6. MiniMax Voice Design v1 API

MiniMax Voice Design v1 API Documentation (Text to Speech)

https://gateway.pixazo.ai/minimax-voice-design-api-363/v1/minimax-voice-design-api-request

Authentication

All requests require an API key passed via header.

Header Type Required Description
Ocp-Apim-Subscription-Key string Yes Your API subscription key

MiniMax Voice Design v1 API (Text to Speech)

Request Code

POST /minimax-voice-design-api-request HTTP/1.1
Host: gateway.pixazo.ai
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "Bubbly and excitable female pop star interviewee, youthful, slightly breathless, and very enthusiastic", 
"preview_text": "Oh my gosh, hi. It iss like so amazing to be here. This new endpoint just dropped on pixazo and the results have been like totally incredible. Use it now, It is gonna be like epic!"
}
import requests

url = "https://gateway.pixazo.ai/minimax-voice-design-api-363/v1/minimax-voice-design-api-request"
headers = {
    "Content-Type": "application/json",
    "Cache-Control": "no-cache",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
    "prompt": "Bubbly and excitable female pop star interviewee, youthful, slightly breathless, and very enthusiastic",
    "preview_text": "Oh my gosh, hi. It iss like so amazing to be here. This new endpoint just dropped on pixazo and the results have been like totally incredible. Use it now, It is gonna be like epic!"
}

response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/minimax-voice-design-api-363/v1/minimax-voice-design-api-request';

const data = {
  prompt: "Bubbly and excitable female pop star interviewee, youthful, slightly breathless, and very enthusiastic",
  preview_text: "Oh my gosh, hi. It iss like so amazing to be here. This new endpoint just dropped on pixazo and the results have been like totally incredible. Use it now, It is gonna be like epic!"
};

fetch(url, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Cache-Control': 'no-cache',
    'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
  },
  body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/minimax-voice-design-api-363/v1/minimax-voice-design-api-request" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  --data-raw '{
    "prompt": "Bubbly and excitable female pop star interviewee, youthful, slightly breathless, and very enthusiastic",
    "preview_text": "OOh my gosh, hi. It iss like so amazing to be here. This new endpoint just dropped on pixazo and the results have been like totally incredible. Use it now, It is gonna be like epic!"
  }'

Output

{
  "request_id": "minimax-voice-design-api-363_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "/v2/requests/status/minimax-voice-design-api-363_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.

Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.

Webhook Headers

HeaderRequiredDefaultDescription
X-Webhook-URLYes (to enable)HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed).
X-Webhook-ModeNoterminalterminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates.

Example: enable webhook

X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal

Callback Payload

Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):

{
  "request_id": "minimax-voice-design-api-363_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-voice-design-api-363",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-voice-design-api-363_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.wav"
    ],
    "media_type": "audio/wav"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}

Failure callback shape

{
  "request_id": "minimax-voice-design-api-363_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-voice-design-api-363",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}

Delivery semantics

  • terminal mode (default) — exactly one POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries.
  • HTTPS required — plain http:// URLs are rejected.

Request Parameters - MiniMax Voice Design v1 API (Text to Speech)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstringUp to 2000 charactersA natural language description of the desired voice personality, tone, and characteristics (e.g., age, gender, emotion, style). This defines the unique vocal identity to be synthesized.
preview_textYesstringUp to 500 charactersThe sample text that will be spoken by the generated voice. Must be a natural, expressive phrase that demonstrates the intended vocal style.

Minimum Request

{
  "prompt": "Bubbly and excitable female pop star interviewee, youthful, slightly breathless, and very enthusiastic",
  "preview_text": "Oh my gosh, hi. It's like so amazing to be here."
}

Full Request (all options)

{
  "prompt": "Bubbly and excitable female pop star interviewee, youthful, slightly breathless, and very enthusiastic",
  "preview_text": "Oh my gosh, hi. It iss like so amazing to be here. This new endpoint just dropped on pixazo and the results have been like totally incredible. Use it now, It is gonna be like epic!"
}

Response

{
  "request_id": "minimax-voice-design-api-363_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "/v2/requests/status/minimax-voice-design-api-363_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

Header Value
Content-Type application/json
Cache-Control no-cache
Ocp-Apim-Subscription-Key Your API subscription key

Response Handling

Common status codes for MiniMax Voice Design API generate request.

Code Meaning
202 Accepted — Request queued
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
Too Many Requests
500 Internal Server Error

Error Responses

Queue system errors and model validation errors.

Queue System Errors

// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'minimax-voice-design-api-363' not found or is disabled"
}

Error via Status/Webhook

{
  "request_id": "minimax-voice-design-api-363_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-voice-design-api-363",
  "error": "Description of the error",
  "output": null
}

Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

Endpoint

GET /v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY

cURL Example

curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "/v2/requests/status/minimax-voice-design-api-363_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Response (Completed)

{
  "request_id": "minimax-voice-design-api-363_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-voice-design-api-363",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-voice-design-api-363_019dxxxx-xxxx/output.ext"
    ],
    "media_type": "application/octet-stream"
  },
  "created_at": "2026-03-31T10:00:00.000Z",
  "updated_at": "2026-03-31T10:00:15.000Z",
  "completed_at": "2026-03-31T10:00:15.000Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

MiniMax Voice Design v1 API Pricing

Your request will cost $0.03 per 1,000 characters.
7. MiniMax Hailuo 2.3 API

MiniMax Hailuo 2.3 API Documentation (Image to Video)

https://gateway.pixazo.ai/minimax-hailuo-ai/v1/imageToVideo

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax Hailuo 2.3 API (Image to Video)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-ai/v1/imageToVideo
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "Man walked into winter cave with polar bear",
  "first_frame_image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/manwithbear.jpg",
  "duration": 6,
  "resolution": "768P",
  "prompt_optimizer": true,
  "fast_pretreatment": false,
  "aigc_watermark": false
}
import requests

url = "https://gateway.pixazo.ai/minimax-hailuo-ai/v1/imageToVideo"
headers = {
    "Content-Type": "application/json",
    "Cache-Control": "no-cache",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
    "prompt": "Man walked into winter cave with polar bear",
    "first_frame_image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/manwithbear.jpg",
    "duration": 6,
    "resolution": "768P",
    "prompt_optimizer": true,
    "fast_pretreatment": false,
    "aigc_watermark": false
}

response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/minimax-hailuo-ai/v1/imageToVideo";
const headers = {
  "Content-Type": "application/json",
  "Cache-Control": "no-cache",
  "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};
const data = {
  "prompt": "Man walked into winter cave with polar bear",
  "first_frame_image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/manwithbear.jpg",
  "duration": 6,
  "resolution": "768P",
  "prompt_optimizer": true,
  "fast_pretreatment": false,
  "aigc_watermark": false
};

fetch(url, {
  method: "POST",
  headers: headers,
  body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
curl -v -X POST "https://gateway.pixazo.ai/minimax-hailuo-ai/v1/imageToVideo" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  --data-raw '{
    "prompt": "Man walked into winter cave with polar bear",
    "first_frame_image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/manwithbear.jpg",
    "duration": 6,
    "resolution": "768P",
    "prompt_optimizer": true,
    "fast_pretreatment": false,
    "aigc_watermark": false
}'

Output

{
  "request_id": "minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.

Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.

Webhook Headers

HeaderRequiredDefaultDescription
X-Webhook-URLYes (to enable)HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed).
X-Webhook-ModeNoterminalterminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates.

Example: enable webhook

X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal

Callback Payload

Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):

{
  "request_id": "minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-ai",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}

Failure callback shape

{
  "request_id": "minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-ai",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}

Delivery semantics

  • terminal mode (default) — exactly one POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries.
  • HTTPS required — plain http:// URLs are rejected.

Request Parameters - MiniMax Hailuo 2.3 API (Image to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptNostringOptional text description of the video, up to 2000 characters. Supports 15+ camera-movement instructions using [command] syntax (e.g. [Truck left], [Pan right], [Push in]) for precise camera control.
first_frame_imageYesstringImage URL to use as the starting frame. Supports public URLs or Base64 encoded Data URLs. Image requirements: JPG/JPEG/PNG/WebP, <20MB, short side >300px, aspect ratio 2:5 to 5:2.
prompt_optimizerNobooleantruetrue, falseAutomatically rewrites and enriches your prompt with extra detail before generation to improve results.
fast_pretreatmentNobooleanfalsetrue, falseReduces prompt-optimization time when prompt_optimizer is enabled. Supported by MiniMax-Hailuo-2.3.
durationNointeger66, 10Video length in seconds. 768P supports 6 or 10 seconds; 1080P supports 6 seconds only.
resolutionNostring768P768P, 1080POutput video resolution. 768P supports 6- or 10-second videos; 1080P supports 6-second videos only.
callback_urlNostringURL to receive task status update notifications.
aigc_watermarkNobooleanfalsetrue, falseDefault: false. Whether to add AIGC watermark to the generated video.

Content Item Types & Limits

TypeMaxFormat / SizeDescription
image1JPG, PNG, WEBP · < 20 MBFirst-frame image; short side > 300px.

Example Request

{
  "prompt": "Man walked into winter cave with polar bear",
  "first_frame_image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/manwithbear.jpg",
  "duration": 6,
  "resolution": "768P",
  "prompt_optimizer": true,
  "fast_pretreatment": false,
  "aigc_watermark": false
}

Response

{
  "request_id": "minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

Header Value
Content-Typeapplication/json
Cache-Controlno-cache
Ocp-Apim-Subscription-KeyYOUR_SUBSCRIPTION_KEY

Response Handling

Common status codes.

CodeMeaning
202Accepted — Request queued
Bad Request
401Unauthorized
402Insufficient Balance
403Forbidden
Too Many Requests
500Internal Server Error

Error Responses

Queue system errors and model validation errors.

Queue System Errors

// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'minimax-hailuo-ai' not found or is disabled"
}

Error via Status/Webhook

{
  "request_id": "minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-ai",
  "error": "Description of the error",
  "output": null
}

Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

Endpoint

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY

cURL Example

curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Response (Completed)

{
  "request_id": "minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-ai",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-ai_019dxxxx-xxxx/output.ext"
    ],
    "media_type": "application/octet-stream"
  },
  "created_at": "2026-03-31T10:00:00.000Z",
  "updated_at": "2026-03-31T10:00:15.000Z",
  "completed_at": "2026-03-31T10:00:15.000Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

MiniMax Hailuo 2.3 API Pricing

ResolutionDurationPrice (USD)
All Resolution6s$0.35
All Resolution10s$0.60
Text to Video

MiniMax Hailuo 2.3 API Documentation (Text to Video)

https://gateway.pixazo.ai/minimax-hailuo-ai/v1/generate

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax Hailuo 2.3 API (Text to Video)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-ai/v1/generate
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "A high-energy scene of a large, muscular bear leaping gracefully into a fast-flowing river to catch a fish. The video starts with the bear crouching by the riverbank, then transitions to it leaping mid-air, with water splashing dramatically around it. The camera follows the bear's movement, capturing the intensity and speed of the jump. The bear's paws extend toward the fish, which is darting through the clear water, as the background shows a lush, green forest and distant mountains. The scene is full of natural sounds — the rush of water, splashes, and the bear's powerful movement. Light filters through the trees, creating a dramatic, cinematic atmosphere.",
  "duration": 6,
  "resolution": "768P",
  "prompt_optimizer": true,
  "fast_pretreatment": false,
  "aigc_watermark": false
}
import requests

url = "https://gateway.pixazo.ai/minimax-hailuo-ai/v1/generate"
headers = {
    "Content-Type": "application/json",
    "Cache-Control": "no-cache",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
    "prompt": "A high-energy scene of a large, muscular bear leaping gracefully into a fast-flowing river to catch a fish. The video starts with the bear crouching by the riverbank, then transitions to it leaping mid-air, with water splashing dramatically around it. The camera follows the bear's movement, capturing the intensity and speed of the jump. The bear's paws extend toward the fish, which is darting through the clear water, as the background shows a lush, green forest and distant mountains. The scene is full of natural sounds — the rush of water, splashes, and the bear's powerful movement. Light filters through the trees, creating a dramatic, cinematic atmosphere.",
    "duration": 6,
    "resolution": "768P",
    "prompt_optimizer": True,
    "fast_pretreatment": False,
    "aigc_watermark": False
}

response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/minimax-hailuo-ai/v1/generate';
const headers = {
  'Content-Type': 'application/json',
  'Cache-Control': 'no-cache',
  'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
  prompt: 'A high-energy scene of a large, muscular bear leaping gracefully into a fast-flowing river to catch a fish. The video starts with the bear crouching by the riverbank, then transitions to it leaping mid-air, with water splashing dramatically around it. The camera follows the bear\'s movement, capturing the intensity and speed of the jump. The bear\'s paws extend toward the fish, which is darting through the clear water, as the background shows a lush, green forest and distant mountains. The scene is full of natural sounds — the rush of water, splashes, and the bear\'s powerful movement. Light filters through the trees, creating a dramatic, cinematic atmosphere.',
  duration: 6,
  resolution: '768P',
  prompt_optimizer: true,
  fast_pretreatment: false,
  aigc_watermark: false
};

fetch(url, {
  method: 'POST',
  headers: headers,
  body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -v -X POST "https://gateway.pixazo.ai/minimax-hailuo-ai/v1/generate" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  --data-raw '{
    "prompt": "A high-energy scene of a large, muscular bear leaping gracefully into a fast-flowing river to catch a fish. The video starts with the bear crouching by the riverbank, then transitions to it leaping mid-air, with water splashing dramatically around it. The camera follows the bear\'s movement, capturing the intensity and speed of the jump. The bear\'s paws extend toward the fish, which is darting through the clear water, as the background shows a lush, green forest and distant mountains. The scene is full of natural sounds — the rush of water, splashes, and the bear\'s powerful movement. Light filters through the trees, creating a dramatic, cinematic atmosphere.",
    "duration": 6,
    "resolution": "768P",
    "prompt_optimizer": true,
    "fast_pretreatment": false,
    "aigc_watermark": false
}'

Output

{
  "request_id": "minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.

Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.

Webhook Headers

HeaderRequiredDefaultDescription
X-Webhook-URLYes (to enable)HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed).
X-Webhook-ModeNoterminalterminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates.

Example: enable webhook

X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal

Callback Payload

Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):

{
  "request_id": "minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-ai",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}

Failure callback shape

{
  "request_id": "minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-ai",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}

Delivery semantics

  • terminal mode (default) — exactly one POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries.
  • HTTPS required — plain http:// URLs are rejected.

Request Parameters - MiniMax Hailuo 2.3 API (Text to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstringText description of the video, up to 2000 characters. Supports 15+ camera-movement instructions using [command] syntax (e.g. [Truck left], [Pan right], [Push in]) for precise camera control.
durationNointeger66, 10Video length in seconds. 768P supports 6 or 10 seconds; 1080P supports 6 seconds only.
resolutionNostring768P768P, 1080POutput video resolution. 768P supports 6- or 10-second videos; 1080P supports 6-second videos only.
prompt_optimizerNobooleantruetrue, falseAutomatically rewrites and enriches your prompt with extra detail before generation to improve results. Set to false for more precise control.
fast_pretreatmentNobooleanfalsetrue, falseReduces prompt-optimization time when prompt_optimizer is enabled. Supported by MiniMax-Hailuo-2.3.
callback_urlNostringURL to receive callback notifications when video is ready.
aigc_watermarkNobooleanfalsetrue, falseWhether to add an AIGC watermark to the generated video.

Example Request

{
  "prompt": "A high-energy scene of a large, muscular bear leaping gracefully into a fast-flowing river to catch a fish. The video starts with the bear crouching by the riverbank, then transitions to it leaping mid-air, with water splashing dramatically around it. The camera follows the bear's movement, capturing the intensity and speed of the jump. The bear's paws extend toward the fish, which is darting through the clear water, as the background shows a lush, green forest and distant mountains. The scene is full of natural sounds — the rush of water, splashes, and the bear's powerful movement. Light filters through the trees, creating a dramatic, cinematic atmosphere.",
  "duration": 6,
  "resolution": "768P",
  "prompt_optimizer": true,
  "fast_pretreatment": false,
  "aigc_watermark": false
}

Response

{
  "request_id": "minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

Header Value
Content-Typeapplication/json
Cache-Controlno-cache
Ocp-Apim-Subscription-KeyYOUR_SUBSCRIPTION_KEY

Response Handling

Common status codes.

CodeMeaning
202Accepted — Request queued
Bad Request
401Unauthorized
402Insufficient Balance
403Forbidden
Too Many Requests
500Internal Server Error

Error Responses

Queue system errors and model validation errors.

Queue System Errors

// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'minimax-hailuo-ai' not found or is disabled"
}

Error via Status/Webhook

{
  "request_id": "minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-ai",
  "error": "Description of the error",
  "output": null
}

Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

Endpoint

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY

cURL Example

curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Response (Completed)

{
  "request_id": "minimax-hailuo-ai_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-ai",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-ai_019dxxxx-xxxx/output.ext"
    ],
    "media_type": "application/octet-stream"
  },
  "created_at": "2026-03-31T10:00:00.000Z",
  "updated_at": "2026-03-31T10:00:15.000Z",
  "completed_at": "2026-03-31T10:00:15.000Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

MiniMax Hailuo 2.3 API Pricing

ResolutionDurationPrice (USD)
All Resolution6s$0.35
All Resolution10s$0.60
8. MiniMax Music 2.6 API

MiniMax Music 2.6 API Documentation (Text to Music)

https://gateway.pixazo.ai/minimax-music-generation-2-6/v1/generate

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax Music 2.6 API (Text to Music)

Request Code

POST https://gateway.pixazo.ai/minimax-music-generation-2-6/v1/generate
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "calm lo-fi hip hop with mellow piano",
  "is_instrumental": true
}
import requests

url = "https://gateway.pixazo.ai/minimax-music-generation-2-6/v1/generate"
headers = {
    "Content-Type": "application/json",
    "Cache-Control": "no-cache",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
    "prompt": "calm lo-fi hip hop with mellow piano",
    "is_instrumental": True
}

response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/minimax-music-generation-2-6/v1/generate';
const headers = {
  'Content-Type': 'application/json',
  'Cache-Control': 'no-cache',
  'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
  prompt: 'calm lo-fi hip hop with mellow piano',
  is_instrumental: true
};

fetch(url, {
  method: 'POST',
  headers: headers,
  body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/minimax-music-generation-2-6/v1/generate" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  --data-raw '{
    "prompt": "calm lo-fi hip hop with mellow piano",
    "is_instrumental": true
  }'

Output

{
  "request_id": "minimax-music-generation-2-6_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-music-generation-2-6_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Webhook (Optional)

Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.

Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.

Webhook Headers

HeaderRequiredDefaultDescription
X-Webhook-URLYes (to enable)HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed).
X-Webhook-ModeNoterminalterminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates.

Example: enable webhook

X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal

Callback Payload

Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):

{
  "request_id": "minimax-music-generation-2-6_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-music-generation-2-6",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-music-generation-2-6_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp3"
    ],
    "media_type": "audio/mpeg"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}

Failure callback shape

{
  "request_id": "minimax-music-generation-2-6_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-music-generation-2-6",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}

Delivery semantics

  • terminal mode (default) — exactly one POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries.
  • HTTPS required — plain http:// URLs are rejected.

Request Parameters - MiniMax Music 2.6 API (Text to Music)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstring10–2000 charactersDescription of the desired music style, mood, genre, and scenario. Drives the composition.
lyricsNostringUp to 3500 charactersSong lyrics for vocal tracks. Use \n to separate lines, with optional structure tags such as [Intro], [Verse], [Chorus], [Bridge], [Outro]. Required for vocal output unless lyrics_optimizer is enabled; ignored when is_instrumental is true.
sample_rateNointeger4410016000, 24000, 32000, 44100Audio sample rate in Hz. Higher = higher fidelity, larger files.
bitrateNointeger25600032000, 64000, 128000, 256000Audio bitrate in bits/sec. Higher = better quality, larger files.
formatNostringmp3mp3, wav, pcmOutput audio container/codec.
lyrics_optimizerNobooleanfalsetrue, falseWhen true and lyrics is empty, the model auto-generates lyrics from the prompt. Ignored if lyrics is provided.
is_instrumentalNobooleanfalsetrue, falseWhen true, generates instrumental music (no vocals) and lyrics is ignored.

Example Request

{
  "prompt": "Upbeat synthwave with retro arcade vibes, 120 BPM, layered analog synths",
  "lyrics": "[Verse 1]\nNeon lights are calling out\nDigital dreams without a doubt\n[Chorus]\nWe are alive in the night\nDancing in electric light",
  "sample_rate": 44100,
  "bitrate": 256000,
  "format": "mp3",
  "lyrics_optimizer": false,
  "is_instrumental": false
}

Response

{
  "request_id": "minimax-music-generation-2-6_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-music-generation-2-6_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Headers

Header Value
Content-Typeapplication/json
Cache-Controlno-cache
Ocp-Apim-Subscription-KeyYOUR_SUBSCRIPTION_KEY

Response Handling

Common status codes.

CodeMeaning
202Accepted — Request queued
Bad Request
401Unauthorized
402Insufficient Balance
403Forbidden
Too Many Requests
500Internal Server Error

Error Responses

Queue system errors and model validation errors.

Queue System Errors

// 402 — Insufficient balance
{
  "error": "Insufficient Balance",
  "message": "Your wallet does not have enough balance. Required: $0.08"
}
// 400 — Model not found
{
  "error": "Model not found",
  "message": "Model 'minimax-music-generation-2-6' not found or is disabled"
}

Error via Status/Webhook

{
  "request_id": "minimax-music-generation-2-6_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-music-generation-2-6",
  "error": "Description of the error",
  "output": null
}

Retrieving Results

Poll the universal status endpoint to check progress and retrieve results.

Endpoint

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY

cURL Example

curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  "https://gateway.pixazo.ai/v2/requests/status/minimax-music-generation-2-6_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Response (Completed)

{
  "request_id": "minimax-music-generation-2-6_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-music-generation-2-6",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-music-generation-2-6_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp3"
    ],
    "media_type": "audio/mpeg"
  },
  "created_at": "2026-04-04T06:15:23.699Z",
  "updated_at": "2026-04-04T06:16:20.000Z",
  "completed_at": "2026-04-04T06:16:20.000Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type (audio/mpeg)
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

MiniMax Music 2.6 API Pricing

Your request will cost $0.15 per song generation.

⚡ Performance

Live usage measured on Pixazo's gateway, split by model version. Generation time is how long a generation takes end-to-end (lower is better). Success rate is the percent of generations that complete (higher is better).

Show data for the last
Generations
27,200last 30d
~907 per day
Success rate
91.5%
of completed generations
Generation time
2.5minavg
p95 3.2min
Requests
Jul 10max 2,400Aug 8
MiniMax Hailuo 2.3Avg 507/day
MiniMax Music 2.6Avg 150/day
MiniMax H3Avg 100/day
MiniMax Speech 2.8 HDAvg 63/day
OtherAvg 87/day
Generation Time
Jul 10max 7.6minAug 8
MiniMax Hailuo 2.3Avg 2.2min
MiniMax Music 2.6Avg 3.0min
MiniMax H3Avg 5.4min
MiniMax Speech 2.8 HDAvg 59.7s
OtherAvg 96.9s
Error Rate
Jul 10max 100.0%Aug 8
MiniMax Hailuo 2.3Avg 5.4%
MiniMax Music 2.6Avg 0.0%
MiniMax H3Avg 30.0%
MiniMax Speech 2.8 HDAvg 0.0%
OtherAvg 23.1%

〰 Uptime

Percent of generations that succeeded over the selected period, per model version.

Avg. Success Rate (30d)
91.54%
across all generations of this model family
Uptime
Jul 10max 100%Aug 8
MiniMax Hailuo 2.3Avg 94.59%
MiniMax Music 2.6Avg 100.00%
MiniMax H3Avg 70.00%
MiniMax Speech 2.8 HDAvg 100.00%
OtherAvg 76.92%