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

by MiniMax

MiniMax offers a comprehensive suite of AI generation capabilities spanning video, image, and audio creation through their Hailuo technology. Through Pixazo's 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 →
POST https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/text-to-video

MiniMax H3 Max API Documentation (Text to Video)

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax H3 Max API (Text to Video)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/text-to-video HTTP/1.1
Ocp-Apim-Subscription-Key: YOUR_API_KEY
Content-Type: application/json

{
  "prompt": "a lone lighthouse beam sweeping across fog at dusk",
  "duration": 5,
  "resolution": "768P",
  "aspect_ratio": "16:9",
  "prompt_expansion_mode": "balanced"
}
import requests

resp = requests.post(
    "https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/text-to-video",
    headers={
        "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={
        "prompt": "a lone lighthouse beam sweeping across fog at dusk",
        "duration": 5,
        "resolution": "768P",
        "aspect_ratio": "16:9",
        "prompt_expansion_mode": "balanced"
    },
)
job = resp.json()
print(job["request_id"])
const resp = await fetch("https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/text-to-video", {
  method: "POST",
  headers: {
    "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "prompt": "a lone lighthouse beam sweeping across fog at dusk",
  "duration": 5,
  "resolution": "768P",
  "aspect_ratio": "16:9",
  "prompt_expansion_mode": "balanced"
}),
});
const job = await resp.json();
console.log(job.request_id);
curl -X POST https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/text-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "a lone lighthouse beam sweeping across fog at dusk", "duration": 5, "resolution": "768P", "aspect_ratio": "16:9", "prompt_expansion_mode": "balanced"}'

Output

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

Webhook (Optional)

Instead of polling, supply a callback URL and Pixazo will POST the result to it as soon as the request reaches a terminal state.

HeaderTypeRequiredDescription
X-Webhook-URLstringNoHTTPS endpoint that receives the callback. Supplying it enables webhook delivery.
X-Webhook-ModestringNoterminal (default) delivers once on COMPLETED or FAILED. sync also delivers intermediate status changes.

Example: enable webhook

curl -X POST https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/text-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-Webhook-URL: https://your-server.example.com/hooks/video" \
  -H "X-Webhook-Mode: terminal" \
  -d '{"prompt": "a lone lighthouse beam sweeping across fog at dusk", "prompt_expansion_mode": "balanced"}'

Callback Payload

{
  "request_id": "minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3-max",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}

Failure callback shape

{
  "request_id": "minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3-max",
  "error": "Generation failed upstream",
  "output": null
}

Delivery semantics

  • terminal fires exactly once, on COMPLETED or FAILED.
  • sync also fires on intermediate transitions such as QUEUED → PROCESSING.
  • Deliveries are idempotent on request_id — de-duplicate on it, as a callback may be retried.
  • Respond 200 within a few seconds; slow endpoints are treated as failed deliveries.
  • HTTPS is required.

Request Parameters - MiniMax H3 Max API (Text to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstring—Any text, up to 50,000 charactersDescription of the video to generate.
durationNointeger55 – 15Length of the finished video in seconds. Billed per second.
resolutionNostring768P480P, 768P, 1080POutput resolution. Determines the per-second price — 480P generates at a lower cost per second than 768P, and 1080P at a higher cost per second than 768P. 480P and 768P are native generation resolutions; 1080P is produced by latent refinement from a native 768P source. See the pricing table for current rates.
aspect_ratioNostring16:921:9, 16:9, 4:3, 1:1, 3:4, 9:16Frame shape of the output video.
prompt_expansion_modeYesstringbalanceddisabled, balanced, qualityHow much the prompt is rewritten before generation. disabled uses your wording verbatim; balanced adds about a second; quality spends up to ~30s building a richer prompt.
enable_safety_checkerNobooleantruetrue, falseRuns the content safety check over the generated video.
seedNointeger— (random)Any integerReusing a seed gives a fixed starting point for comparing two runs of the same brief. The prompt is rewritten before generation, so a repeated seed is a reference point rather than a guarantee of an identical video.

Example Request

{
  "prompt": "a lone lighthouse beam sweeping across fog at dusk",
  "prompt_expansion_mode": "balanced"
}

Response

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

Request Headers

HeaderValueRequired
Ocp-Apim-Subscription-KeyYOUR_API_KEYYes
Content-Typeapplication/jsonYes
X-Webhook-URLhttps://your-server.example.com/hooks/videoNo
X-Webhook-Modeterminal | syncNo

Response Handling

CodeMeaningWhat to do
202Accepted and queuedRead request_id and poll the status endpoint.
400Invalid request body or parameter valueCheck the parameter table above; the message names the offending field.
401Missing or invalid subscription keyCheck the Ocp-Apim-Subscription-Key header.
402Insufficient wallet balanceTop up. The message names the resolved price for this request.
403Key not subscribed to this productSubscribe the key to the API product.
429Rate limit exceededBack off and retry; the limit is 50 calls per 60 seconds.
500Server errorRetry once; if it persists, contact support with the request_id.

Error Responses

Insufficient balance (402)

{
  "error": "Insufficient balance",
  "required": 0.4,
  "available": 0.12,
  "currency": "USD"
}

Invalid parameter (400)

{
  "error": "Invalid value for 'duration': must be between 5 and 15"
}

Failure after acceptance

A request that was accepted can still fail during generation. That is reported through the status endpoint or the webhook, with status set to ERROR:

{
  "request_id": "minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3-max",
  "error": "Generation failed upstream",
  "output": null
}

Retrieving Results

Poll the status endpoint with the request_id returned by the submit call.

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}

cURL Example

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

Response (Completed)

{
  "request_id": "minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3-max",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}

Response Fields

FieldTypeDescription
request_idstringIdentifier for this request. Use it to poll and to de-duplicate webhooks.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED or ERROR.
model_idstringAlways minimax-hailuo-h3-max.
errorstring | nullFailure reason, null while the request is healthy.
output.media_urlstringURL of the finished MP4, re-hosted by Pixazo.
output.media_typestringAlways video/mp4.
created_atstringISO-8601 timestamp of submission.
completed_atstringISO-8601 timestamp of the terminal transition.
polling_urlstringFully-formed status URL for this request.

Status Values

StatusTerminalMeaning
QUEUEDNoAccepted and waiting for a generation slot.
PROCESSINGNoGeneration is running.
COMPLETEDYesFinished. output.media_url holds the video.
FAILEDYesGeneration failed. Not billed.
ERRORYesThe request could not be processed. Not billed.

Status Flow

QUEUED -> PROCESSING -> COMPLETED
                     -> FAILED
                     -> ERROR

Typical Workflow

  1. POST the request body to https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/text-to-video.
  2. Read request_id from the 202 response.
  3. Poll https://gateway.pixazo.ai/v2/requests/status/{request_id} every few seconds, or wait for the webhook.
  4. On COMPLETED, download output.media_url.

MiniMax H3 Max API Pricing — Per-Second Rates

768P is the API default. 480P generates at a lower cost per second; 1080P is a higher-cost tier, refined from a native 768P render.

ResolutionPrice (USD)
768P$0.08/sec
480P$0.05/sec
1080P$0.16/sec
Image to Video
POST https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/image-to-video

MiniMax H3 Max API Documentation (Image to Video)

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax H3 Max API (Image to Video)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/image-to-video HTTP/1.1
Ocp-Apim-Subscription-Key: YOUR_API_KEY
Content-Type: application/json

{
  "prompt": "the camera slowly pushes in as rain begins to fall",
  "image_url": "https://your-cdn.example.com/first-frame.jpg",
  "duration": 5,
  "resolution": "768P",
  "prompt_expansion_mode": "balanced"
}
import requests

resp = requests.post(
    "https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/image-to-video",
    headers={
        "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={
        "prompt": "the camera slowly pushes in as rain begins to fall",
        "image_url": "https://your-cdn.example.com/first-frame.jpg",
        "duration": 5,
        "resolution": "768P",
        "prompt_expansion_mode": "balanced"
    },
)
job = resp.json()
print(job["request_id"])
const resp = await fetch("https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/image-to-video", {
  method: "POST",
  headers: {
    "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "prompt": "the camera slowly pushes in as rain begins to fall",
  "image_url": "https://your-cdn.example.com/first-frame.jpg",
  "duration": 5,
  "resolution": "768P",
  "prompt_expansion_mode": "balanced"
}),
});
const job = await resp.json();
console.log(job.request_id);
curl -X POST https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/image-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "the camera slowly pushes in as rain begins to fall", "image_url": "https://your-cdn.example.com/first-frame.jpg", "duration": 5, "resolution": "768P", "prompt_expansion_mode": "balanced"}'

Output

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

Webhook (Optional)

Instead of polling, supply a callback URL and Pixazo will POST the result to it as soon as the request reaches a terminal state.

HeaderTypeRequiredDescription
X-Webhook-URLstringNoHTTPS endpoint that receives the callback. Supplying it enables webhook delivery.
X-Webhook-ModestringNoterminal (default) delivers once on COMPLETED or FAILED. sync also delivers intermediate status changes.

Example: enable webhook

curl -X POST https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/image-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-Webhook-URL: https://your-server.example.com/hooks/video" \
  -H "X-Webhook-Mode: terminal" \
  -d '{"prompt": "the camera slowly pushes in", "image_url": "https://your-cdn.example.com/first-frame.jpg", "prompt_expansion_mode": "balanced"}'

Callback Payload

{
  "request_id": "minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3-max",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}

Failure callback shape

{
  "request_id": "minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3-max",
  "error": "Generation failed upstream",
  "output": null
}

Delivery semantics

  • terminal fires exactly once, on COMPLETED or FAILED.
  • sync also fires on intermediate transitions such as QUEUED → PROCESSING.
  • Deliveries are idempotent on request_id — de-duplicate on it, as a callback may be retried.
  • Respond 200 within a few seconds; slow endpoints are treated as failed deliveries.
  • HTTPS is required.

Request Parameters - MiniMax H3 Max API (Image to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstring—Any text, up to 50,000 charactersDescription of the video to generate.
image_urlYesstring—Public https URL of an imageFirst frame of the video. The output aspect ratio follows this image, so there is no aspect_ratio parameter on this operation.
end_image_urlNostring— (none)Public https URL of an imageOptional last frame. Supply it to generate a first-to-last keyframe transition.
durationNointeger55 – 15Length of the finished video in seconds. Billed per second.
resolutionNostring768P480P, 768P, 1080POutput resolution. Determines the per-second price — 480P generates at a lower cost per second than 768P, and 1080P at a higher cost per second than 768P. 480P and 768P are native generation resolutions; 1080P is produced by latent refinement from a native 768P source. See the pricing table for current rates.
prompt_expansion_modeYesstringbalanceddisabled, balanced, qualityHow much the prompt is rewritten before generation. disabled uses your wording verbatim; balanced adds about a second; quality spends up to ~30s building a richer prompt.
enable_safety_checkerNobooleantruetrue, falseRuns the content safety check over the generated video.
seedNointeger— (random)Any integerReusing a seed gives a fixed starting point for comparing two runs of the same brief. The prompt is rewritten before generation, so a repeated seed is a reference point rather than a guarantee of an identical video.

Example Request

{
  "prompt": "the camera slowly pushes in",
  "image_url": "https://your-cdn.example.com/first-frame.jpg",
  "prompt_expansion_mode": "balanced"
}

Response

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

Request Headers

HeaderValueRequired
Ocp-Apim-Subscription-KeyYOUR_API_KEYYes
Content-Typeapplication/jsonYes
X-Webhook-URLhttps://your-server.example.com/hooks/videoNo
X-Webhook-Modeterminal | syncNo

Response Handling

CodeMeaningWhat to do
202Accepted and queuedRead request_id and poll the status endpoint.
400Invalid request body or parameter valueCheck the parameter table above; the message names the offending field.
401Missing or invalid subscription keyCheck the Ocp-Apim-Subscription-Key header.
402Insufficient wallet balanceTop up. The message names the resolved price for this request.
403Key not subscribed to this productSubscribe the key to the API product.
429Rate limit exceededBack off and retry; the limit is 50 calls per 60 seconds.
500Server errorRetry once; if it persists, contact support with the request_id.

Error Responses

Insufficient balance (402)

{
  "error": "Insufficient balance",
  "required": 0.4,
  "available": 0.12,
  "currency": "USD"
}

Invalid parameter (400)

{
  "error": "Invalid value for 'duration': must be between 5 and 15"
}

Failure after acceptance

A request that was accepted can still fail during generation. That is reported through the status endpoint or the webhook, with status set to ERROR:

{
  "request_id": "minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3-max",
  "error": "Generation failed upstream",
  "output": null
}

Retrieving Results

Poll the status endpoint with the request_id returned by the submit call.

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}

cURL Example

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

Response (Completed)

{
  "request_id": "minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3-max",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}

Response Fields

FieldTypeDescription
request_idstringIdentifier for this request. Use it to poll and to de-duplicate webhooks.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED or ERROR.
model_idstringAlways minimax-hailuo-h3-max.
errorstring | nullFailure reason, null while the request is healthy.
output.media_urlstringURL of the finished MP4, re-hosted by Pixazo.
output.media_typestringAlways video/mp4.
created_atstringISO-8601 timestamp of submission.
completed_atstringISO-8601 timestamp of the terminal transition.
polling_urlstringFully-formed status URL for this request.

Status Values

StatusTerminalMeaning
QUEUEDNoAccepted and waiting for a generation slot.
PROCESSINGNoGeneration is running.
COMPLETEDYesFinished. output.media_url holds the video.
FAILEDYesGeneration failed. Not billed.
ERRORYesThe request could not be processed. Not billed.

Status Flow

QUEUED -> PROCESSING -> COMPLETED
                     -> FAILED
                     -> ERROR

Typical Workflow

  1. POST the request body to https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/image-to-video.
  2. Read request_id from the 202 response.
  3. Poll https://gateway.pixazo.ai/v2/requests/status/{request_id} every few seconds, or wait for the webhook.
  4. On COMPLETED, download output.media_url.

MiniMax H3 Max API Pricing — Per-Second Rates

768P is the API default. 480P generates at a lower cost per second; 1080P is a higher-cost tier, refined from a native 768P render.

ResolutionPrice (USD)
768P$0.08/sec
480P$0.05/sec
1080P$0.16/sec
Reference to Video
POST https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/reference-to-video

MiniMax H3 Max API Documentation (Reference to Video)

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax H3 Max API (Reference to Video)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/reference-to-video HTTP/1.1
Ocp-Apim-Subscription-Key: YOUR_API_KEY
Content-Type: application/json

{
  "prompt": "the camera slowly pushes in as rain begins to fall",
  "reference_image_urls": ["https://your-cdn.example.com/subject.jpg"],
  "duration": 5,
  "resolution": "768P",
  "prompt_expansion_mode": "balanced"
}
import requests

resp = requests.post(
    "https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/reference-to-video",
    headers={
        "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={
        "prompt": "the camera slowly pushes in as rain begins to fall",
        "reference_image_urls": ["https://your-cdn.example.com/subject.jpg"],
        "duration": 5,
        "resolution": "768P",
        "prompt_expansion_mode": "balanced"
    },
)
job = resp.json()
print(job["request_id"])
const resp = await fetch("https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/reference-to-video", {
  method: "POST",
  headers: {
    "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "prompt": "the camera slowly pushes in as rain begins to fall",
  "reference_image_urls": ["https://your-cdn.example.com/subject.jpg"],
  "duration": 5,
  "resolution": "768P",
  "prompt_expansion_mode": "balanced"
}),
});
const job = await resp.json();
console.log(job.request_id);
curl -X POST https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/reference-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "the camera slowly pushes in as rain begins to fall", "reference_image_urls": ["https://your-cdn.example.com/subject.jpg"], "duration": 5, "resolution": "768P", "prompt_expansion_mode": "balanced"}'

Output

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

Webhook (Optional)

Instead of polling, supply a callback URL and Pixazo will POST the result to it as soon as the request reaches a terminal state.

HeaderTypeRequiredDescription
X-Webhook-URLstringNoHTTPS endpoint that receives the callback. Supplying it enables webhook delivery.
X-Webhook-ModestringNoterminal (default) delivers once on COMPLETED or FAILED. sync also delivers intermediate status changes.

Example: enable webhook

curl -X POST https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/reference-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-Webhook-URL: https://your-server.example.com/hooks/video" \
  -H "X-Webhook-Mode: terminal" \
  -d '{"prompt": "the camera slowly pushes in", "reference_image_urls": ["https://your-cdn.example.com/subject.jpg"], "prompt_expansion_mode": "balanced"}'

Callback Payload

{
  "request_id": "minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3-max",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}

Failure callback shape

{
  "request_id": "minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3-max",
  "error": "Generation failed upstream",
  "output": null
}

Delivery semantics

  • terminal fires exactly once, on COMPLETED or FAILED.
  • sync also fires on intermediate transitions such as QUEUED → PROCESSING.
  • Deliveries are idempotent on request_id — de-duplicate on it, as a callback may be retried.
  • Respond 200 within a few seconds; slow endpoints are treated as failed deliveries.
  • HTTPS is required.

Request Parameters - MiniMax H3 Max API (Reference to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstring—Any text, up to 50,000 charactersDescription of the video to generate.
reference_image_urlsNoarray of string— (none)Up to 4 public https image URLsSubject or style reference images, and the only kind of reference this operation accepts. Refer to them in the prompt as Image 1, Image 2, and so on. At most four are accepted.
aspect_ratioNostringadaptiveadaptive, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16Aspect ratio of the generated video. adaptive is the default for this operation; the other values request a fixed frame shape.
durationNointeger55 – 15Length of the finished video in seconds. Billed per second.
resolutionNostring768P480P, 768P, 1080POutput resolution. Determines the per-second price — 480P generates at a lower cost per second than 768P, and 1080P at a higher cost per second than 768P. 480P and 768P are native generation resolutions; 1080P is produced by latent refinement from a native 768P source. See the pricing table for current rates.
prompt_expansion_modeYesstringbalanceddisabled, balanced, qualityHow much the prompt is rewritten before generation. disabled uses your wording verbatim; balanced adds about a second; quality spends up to ~30s building a richer prompt.
enable_safety_checkerNobooleantruetrue, falseRuns the content safety check over the generated video.
seedNointeger— (random)Any integerReusing a seed gives a fixed starting point for comparing two runs of the same brief. The prompt is rewritten before generation, so a repeated seed is a reference point rather than a guarantee of an identical video.

Example Request

{
  "prompt": "the camera slowly pushes in",
  "reference_image_urls": ["https://your-cdn.example.com/subject.jpg"],
  "prompt_expansion_mode": "balanced"
}

Response

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

Request Headers

HeaderValueRequired
Ocp-Apim-Subscription-KeyYOUR_API_KEYYes
Content-Typeapplication/jsonYes
X-Webhook-URLhttps://your-server.example.com/hooks/videoNo
X-Webhook-Modeterminal | syncNo

Response Handling

CodeMeaningWhat to do
202Accepted and queuedRead request_id and poll the status endpoint.
400Invalid request body or parameter valueCheck the parameter table above; the message names the offending field.
401Missing or invalid subscription keyCheck the Ocp-Apim-Subscription-Key header.
402Insufficient wallet balanceTop up. The message names the resolved price for this request.
403Key not subscribed to this productSubscribe the key to the API product.
429Rate limit exceededBack off and retry; the limit is 50 calls per 60 seconds.
500Server errorRetry once; if it persists, contact support with the request_id.

Error Responses

Insufficient balance (402)

{
  "error": "Insufficient balance",
  "required": 0.4,
  "available": 0.12,
  "currency": "USD"
}

Invalid parameter (400)

{
  "error": "Invalid value for 'duration': must be between 5 and 15"
}

Failure after acceptance

A request that was accepted can still fail during generation. That is reported through the status endpoint or the webhook, with status set to ERROR:

{
  "request_id": "minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3-max",
  "error": "Generation failed upstream",
  "output": null
}

Retrieving Results

Poll the status endpoint with the request_id returned by the submit call.

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}

cURL Example

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

Response (Completed)

{
  "request_id": "minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3-max",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3-max_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}

Response Fields

FieldTypeDescription
request_idstringIdentifier for this request. Use it to poll and to de-duplicate webhooks.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED or ERROR.
model_idstringAlways minimax-hailuo-h3-max.
errorstring | nullFailure reason, null while the request is healthy.
output.media_urlstringURL of the finished MP4, re-hosted by Pixazo.
output.media_typestringAlways video/mp4.
created_atstringISO-8601 timestamp of submission.
completed_atstringISO-8601 timestamp of the terminal transition.
polling_urlstringFully-formed status URL for this request.

Status Values

StatusTerminalMeaning
QUEUEDNoAccepted and waiting for a generation slot.
PROCESSINGNoGeneration is running.
COMPLETEDYesFinished. output.media_url holds the video.
FAILEDYesGeneration failed. Not billed.
ERRORYesThe request could not be processed. Not billed.

Status Flow

QUEUED -> PROCESSING -> COMPLETED
                     -> FAILED
                     -> ERROR

Typical Workflow

  1. POST the request body to https://gateway.pixazo.ai/minimax-hailuo-h3-max/v1/reference-to-video.
  2. Read request_id from the 202 response.
  3. Poll https://gateway.pixazo.ai/v2/requests/status/{request_id} every few seconds, or wait for the webhook.
  4. On COMPLETED, download output.media_url.

MiniMax H3 Max API Pricing — Per-Second Rates

768P is the API default. 480P generates at a lower cost per second; 1080P is a higher-cost tier, refined from a native 768P render. Reference to Video is priced above the other capabilities because the provider also bills the reference images you supply as input.

ResolutionPrice (USD)
768P$0.12/sec
480P$0.09/sec
1080P$0.20/sec
Audio to Video (Ref Audio + Ref Image to Video) - Lipsync

Animate a still image so that its subject speaks or sings in sync with an audio track. Supply the image and the audio as public URLs; the model returns an MP4 with the audio as its soundtrack. The video is exactly as long as the audio (at least 5 seconds, at most 15 — longer audio is clipped to its first 15 seconds). Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED.

POST https://gateway.pixazo.ai/minimax-hailuo-h3-max-lip-sync/v1/image-to-video

MiniMax H3 Max API Documentation (Audio to Video (Ref Audio + Ref Image to Video) - Lipsync)

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax H3 Max API (Audio to Video (Ref Audio + Ref Image to Video) - Lipsync)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-h3-max-lip-sync/v1/image-to-video
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/lipsync/talking-head-frame.jpg",
  "audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-6s.mp3",
  "resolution": "768P"
}
import requests

url = "https://gateway.pixazo.ai/minimax-hailuo-h3-max-lip-sync/v1/image-to-video"
headers = {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
  "image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/lipsync/talking-head-frame.jpg",
  "audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-6s.mp3",
  "resolution": "768P"
}

resp = requests.post(url, json=data, headers=headers)
print(resp.json())
const res = await fetch("https://gateway.pixazo.ai/minimax-hailuo-h3-max-lip-sync/v1/image-to-video", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
  },
  body: JSON.stringify({
  "image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/lipsync/talking-head-frame.jpg",
  "audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-6s.mp3",
  "resolution": "768P"
})
});
console.log(await res.json());
curl -X POST 'https://gateway.pixazo.ai/minimax-hailuo-h3-max-lip-sync/v1/image-to-video' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  --data-raw '{"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/lipsync/talking-head-frame.jpg", "audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-6s.mp3", "resolution": "768P"}'

Output

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

Webhook (Optional)

Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.

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-hailuo-h3-max-lip-sync/v1/image-to-video' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  -H 'X-Webhook-URL: https://your-server.com/webhook' \
  --data-raw '{"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/lipsync/talking-head-frame.jpg", "audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-6s.mp3", "resolution": "768P"}'

Callback Payload (success)

{
  "request_id": "minimax-hailuo-h3-max-lip-sync_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3-max-lip-sync",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3-max-lip-sync_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-09-18T10:40:08.748Z",
  "completed_at": "2026-09-18T10:43:36.118Z"
}

Failure callback shape

{
  "request_id": "minimax-hailuo-h3-max-lip-sync_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3-max-lip-sync",
  "error": "Description of the failure",
  "output": null
}

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 - MiniMax H3 Max API (Audio to Video (Ref Audio + Ref Image to Video) - Lipsync)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
image_urlYesstring—Public http(s) URL of an image; aspect ratio 0.4–2.5The image to animate. Its aspect ratio (width ÷ height) must be between 0.4 and 2.5; the output uses the supported aspect ratio nearest the image.
audio_urlYesstring—Public http(s) URL of an audio file, at least 5 seconds longThe audio to synchronise the mouth movements to. Audio over 15 seconds is clipped to its first 15 seconds, so the video is at most 15 seconds long. The audio becomes the video's soundtrack.
resolutionNostring768P480P, 768P, 1080P, 2KOutput resolution. Uses the supported aspect ratio nearest the image. Selects the per-second rate — see the pricing panel on this page.
enable_transcriptionNobooleantruetrue, falseTranscribe the supplied audio to guide lip synchronisation. When false, the mouth is synchronised to the audio without a transcript.
enable_safety_checkerNobooleantruetrue, falseEnables the content safety checks. A request flagged by them fails after acceptance (see Response Handling).
seedNointeger— (random)0–2147483647Random seed. Repeating a request with the same seed and inputs gives a more consistent result, but exact reproducibility is not guaranteed.
  • image_url and audio_url are the only required fields. Both must be public http(s) URLs that stay reachable until the request has been processed.
  • There is no duration parameter. The length of the video follows the audio: at least 5 seconds, and at most 15 — audio over 15 seconds is clipped to its first 15 seconds.
  • The model is fixed by the URL. Do not send a model_id in the body.

Input requirements

Image

  • A public http(s) URL. The image is fetched when the request is processed, so the URL must stay reachable until then.
  • The aspect ratio (width ÷ height) must be between 0.4 and 2.5 — from a tall 2:5 portrait to a wide 5:2 panorama. Images outside that range are rejected after acceptance.
  • The output uses the supported aspect ratio nearest the image, at the chosen resolution.

Audio

  • A public http(s) URL to an audio file, at least 5 seconds long. Shorter audio is rejected after acceptance.
  • Audio over 15 seconds is clipped to its first 15 seconds, so the video is never longer than 15 seconds. Trim the audio yourself if a different 15 seconds is wanted.
  • The (clipped) audio becomes the soundtrack of the returned MP4.

Example Request

{
  "image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/lipsync/talking-head-frame.jpg",
  "audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-6s.mp3",
  "resolution": "768P"
}

Example Response

{
  "request_id": "minimax-hailuo-h3-max-lip-sync_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3-max-lip-sync_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).
X-Webhook-ModeNoterminal (default) or sync.

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Invalid parameters — a required field is missing, a value has the wrong type, or resolution is not one of the allowed values. Rejected before any hold is placed on your balance; violations names each offending field.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance for the hold this request needs (the message names the amount).
403Key not subscribed to this product.
429Too many requests — back off and retry.
500Internal server error — retry once; if it persists, contact support with the request_id.

Parameter problems are caught when you submit and returned as a 400, before any hold is placed on your balance. Checks that need the files themselves — whether the URLs can be fetched, the audio length, the image aspect ratio, the safety check — run after the request is accepted and are reported through the status endpoint as status: "ERROR", with a message in error saying what to fix. Failed requests are not billed — the hold is released in full.

ConditionHow it surfaces
Missing or invalid subscription keysynchronous 401
Balance too low for the holdsynchronous 402
Missing image_url or audio_urlsynchronous 400
resolution not one of 480P, 768P, 1080P, 2Ksynchronous 400
image_url or audio_url not a string, enable_transcription or enable_safety_checker not a boolean, or seed not an integersynchronous 400
image_url or audio_url not a public http(s) URL, not downloadable, or not an image / audio filestatus: "ERROR"
Audio shorter than 5 secondsstatus: "ERROR"
Image aspect ratio outside 0.4–2.5status: "ERROR"
Input or output flagged by the safety checkerstatus: "ERROR"

Error Responses

Invalid parameter (400)

Returned when you submit, before any hold is placed. violations lists every problem found, one entry per field.

{
  "error": "Invalid request parameters",
  "message": "'audio_url' is required",
  "violations": [
    "'audio_url' is required"
  ]
}

Failure after acceptance

A request that was accepted can still fail — an input URL that cannot be fetched, audio under 5 seconds, an image whose aspect ratio is outside 0.4–2.5, or content flagged by the safety checker. That is reported through the status endpoint or the webhook, with status set to ERROR. Failed requests are not billed.

{
  "request_id": "minimax-hailuo-h3-max-lip-sync_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3-max-lip-sync",
  "error": "Description of the failure",
  "output": null
}

Retrieving Results

Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or FAILED/ERROR), then download the video from output.media_url.

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}

cURL Example

curl 'https://gateway.pixazo.ai/v2/requests/status/minimax-hailuo-h3-max-lip-sync_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'

Completed response

{
  "request_id": "minimax-hailuo-h3-max-lip-sync_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3-max-lip-sync",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3-max-lip-sync_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-09-18T10:40:08.748Z",
  "completed_at": "2026-09-18T10:43:36.118Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique request identifier. Use it to poll and to de-duplicate webhooks.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR.
model_idstringThe model that handled the request — minimax-hailuo-h3-max-lip-sync for this endpoint.
errorstring | nullFailure reason; null while the request is healthy.
output.media_urlarray of stringsURL of the finished video, an MP4 with the audio as its soundtrack, re-hosted by Pixazo.
output.media_typestringvideo/mp4.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
polling_urlstringFully-formed status URL for this request (submit response).

Status Values & Flow

StatusTerminalMeaning
QUEUEDNoAccepted and waiting for a generation slot.
PROCESSINGNoGeneration is running.
COMPLETEDYesFinished. output.media_url holds the video.
FAILEDYesGeneration failed. Not billed.
ERRORYesThe request could not be processed. Not billed.

QUEUED → PROCESSING → COMPLETED (success) or FAILED/ERROR (failure).

Typical workflow

  1. POST the request body to https://gateway.pixazo.ai/minimax-hailuo-h3-max-lip-sync/v1/image-to-video.
  2. Read request_id from the 202 response.
  3. Poll https://gateway.pixazo.ai/v2/requests/status/{request_id} every few seconds, or wait for the webhook.
  4. On COMPLETED, download output.media_url.

How billing is measured

Billing is measured on the length of the generated video, in seconds, at the rate for the resolution you chose — not on how long generation takes, and not on the length of the audio you upload beyond the 15 seconds that are used. Because the length is not known until the video exists, a hold covering the 15-second maximum at your resolution is placed when the request is submitted; it is reduced to the real cost once the video has been measured, and released in full if the request fails.

The current rate for each resolution is shown in the pricing panel on this page.

MiniMax H3 Max API Pricing — Per-Second Rates

768P is the API default. 480P generates at a lower cost per second; 1080P and 2K are higher-cost tiers. Billed per second of generated video — the clip length follows the audio you supply (5 seconds minimum, clipped to the first 15 seconds).

ResolutionPrice (USD)
768P$0.08/sec
480P$0.05/sec
1080P$0.16/sec
2K$0.32/sec
2. MiniMax H3 Max Turbo API
POST https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/text-to-video

MiniMax H3 Max Turbo API Documentation (Text to Video)

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax H3 Max Turbo API (Text to Video)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/text-to-video HTTP/1.1
Ocp-Apim-Subscription-Key: YOUR_API_KEY
Content-Type: application/json

{
  "prompt": "a lone lighthouse beam sweeping across fog at dusk",
  "duration": 5,
  "resolution": "768P",
  "aspect_ratio": "16:9",
  "prompt_expansion_mode": "balanced"
}
import requests

resp = requests.post(
    "https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/text-to-video",
    headers={
        "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={
        "prompt": "a lone lighthouse beam sweeping across fog at dusk",
        "duration": 5,
        "resolution": "768P",
        "aspect_ratio": "16:9",
        "prompt_expansion_mode": "balanced"
    },
)
job = resp.json()
print(job["request_id"])
const resp = await fetch("https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/text-to-video", {
  method: "POST",
  headers: {
    "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "prompt": "a lone lighthouse beam sweeping across fog at dusk",
  "duration": 5,
  "resolution": "768P",
  "aspect_ratio": "16:9",
  "prompt_expansion_mode": "balanced"
}),
});
const job = await resp.json();
console.log(job.request_id);
curl -X POST https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/text-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "a lone lighthouse beam sweeping across fog at dusk", "duration": 5, "resolution": "768P", "aspect_ratio": "16:9", "prompt_expansion_mode": "balanced"}'

Output

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

Webhook (Optional)

Instead of polling, supply a callback URL and Pixazo will POST the result to it as soon as the request reaches a terminal state.

HeaderTypeRequiredDescription
X-Webhook-URLstringNoHTTPS endpoint that receives the callback. Supplying it enables webhook delivery.
X-Webhook-ModestringNoterminal (default) delivers once on COMPLETED or FAILED. sync also delivers intermediate status changes.

Example: enable webhook

curl -X POST https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/text-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-Webhook-URL: https://your-server.example.com/hooks/video" \
  -H "X-Webhook-Mode: terminal" \
  -d '{"prompt": "a lone lighthouse beam sweeping across fog at dusk", "prompt_expansion_mode": "balanced"}'

Callback Payload

{
  "request_id": "minimax-hailuo-h3-max-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3-max-turbo",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3-max-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}

Failure callback shape

{
  "request_id": "minimax-hailuo-h3-max-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3-max-turbo",
  "error": "Generation failed upstream",
  "output": null
}

Delivery semantics

  • terminal fires exactly once, on COMPLETED or FAILED.
  • sync also fires on intermediate transitions such as QUEUED → PROCESSING.
  • Deliveries are idempotent on request_id — de-duplicate on it, as a callback may be retried.
  • Respond 200 within a few seconds; slow endpoints are treated as failed deliveries.
  • HTTPS is required.

Request Parameters - MiniMax H3 Max Turbo API (Text to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstring—Any text, up to 50,000 charactersDescription of the video to generate.
durationNointeger55 – 15Length of the finished video in seconds. Billed per second.
resolutionNostring768P480P, 768P, 1080POutput resolution. Determines the per-second price — 480P generates at a lower cost per second than 768P, and 1080P at a higher cost per second than 768P. 480P and 768P are native generation resolutions; 1080P is produced by latent refinement from a native 768P source. See the pricing table for current rates.
aspect_ratioNostring16:921:9, 16:9, 4:3, 1:1, 3:4, 9:16Frame shape of the output video.
prompt_expansion_modeYesstringbalanceddisabled, balanced, qualityHow much the prompt is rewritten before generation. disabled uses your wording verbatim; balanced adds about a second; quality spends up to ~30s building a richer prompt.
enable_safety_checkerNobooleantruetrue, falseRuns the content safety check over the generated video.
seedNointeger— (random)Any integerReusing a seed gives a fixed starting point for comparing two runs of the same brief. The prompt is rewritten before generation, so a repeated seed is a reference point rather than a guarantee of an identical video.

Example Request

{
  "prompt": "a lone lighthouse beam sweeping across fog at dusk",
  "prompt_expansion_mode": "balanced"
}

Response

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

Request Headers

HeaderValueRequired
Ocp-Apim-Subscription-KeyYOUR_API_KEYYes
Content-Typeapplication/jsonYes
X-Webhook-URLhttps://your-server.example.com/hooks/videoNo
X-Webhook-Modeterminal | syncNo

Response Handling

CodeMeaningWhat to do
202Accepted and queuedRead request_id and poll the status endpoint.
400Invalid request body or parameter valueCheck the parameter table above; the message names the offending field.
401Missing or invalid subscription keyCheck the Ocp-Apim-Subscription-Key header.
402Insufficient wallet balanceTop up. The message names the resolved price for this request.
403Key not subscribed to this productSubscribe the key to the API product.
429Rate limit exceededBack off and retry; the limit is 50 calls per 60 seconds.
500Server errorRetry once; if it persists, contact support with the request_id.

Error Responses

Insufficient balance (402)

{
  "error": "Insufficient balance",
  "required": 0.4,
  "available": 0.12,
  "currency": "USD"
}

Invalid parameter (400)

{
  "error": "Invalid value for 'duration': must be between 5 and 15"
}

Failure after acceptance

A request that was accepted can still fail during generation. That is reported through the status endpoint or the webhook, with status set to ERROR:

{
  "request_id": "minimax-hailuo-h3-max-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3-max-turbo",
  "error": "Generation failed upstream",
  "output": null
}

Retrieving Results

Poll the status endpoint with the request_id returned by the submit call.

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}

cURL Example

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

Response (Completed)

{
  "request_id": "minimax-hailuo-h3-max-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3-max-turbo",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3-max-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}

Response Fields

FieldTypeDescription
request_idstringIdentifier for this request. Use it to poll and to de-duplicate webhooks.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED or ERROR.
model_idstringAlways minimax-hailuo-h3-max-turbo.
errorstring | nullFailure reason, null while the request is healthy.
output.media_urlstringURL of the finished MP4, re-hosted by Pixazo.
output.media_typestringAlways video/mp4.
created_atstringISO-8601 timestamp of submission.
completed_atstringISO-8601 timestamp of the terminal transition.
polling_urlstringFully-formed status URL for this request.

Status Values

StatusTerminalMeaning
QUEUEDNoAccepted and waiting for a generation slot.
PROCESSINGNoGeneration is running.
COMPLETEDYesFinished. output.media_url holds the video.
FAILEDYesGeneration failed. Not billed.
ERRORYesThe request could not be processed. Not billed.

Status Flow

QUEUED -> PROCESSING -> COMPLETED
                     -> FAILED
                     -> ERROR

Typical Workflow

  1. POST the request body to https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/text-to-video.
  2. Read request_id from the 202 response.
  3. Poll https://gateway.pixazo.ai/v2/requests/status/{request_id} every few seconds, or wait for the webhook.
  4. On COMPLETED, download output.media_url.

MiniMax H3 Max Turbo API Pricing — Per-Second Rates

768P is the API default. 480P generates at a lower cost per second; 1080P is a higher-cost tier, refined from a native 768P render.

ResolutionPrice (USD)
768P$0.04/sec
480P$0.025/sec
1080P$0.08/sec
Image to Video
POST https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/image-to-video

MiniMax H3 Max Turbo API Documentation (Image to Video)

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour API subscription key

MiniMax H3 Max Turbo API (Image to Video)

Request Code

POST https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/image-to-video HTTP/1.1
Ocp-Apim-Subscription-Key: YOUR_API_KEY
Content-Type: application/json

{
  "prompt": "the camera slowly pushes in as rain begins to fall",
  "image_url": "https://your-cdn.example.com/first-frame.jpg",
  "duration": 5,
  "resolution": "768P",
  "prompt_expansion_mode": "balanced"
}
import requests

resp = requests.post(
    "https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/image-to-video",
    headers={
        "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={
        "prompt": "the camera slowly pushes in as rain begins to fall",
        "image_url": "https://your-cdn.example.com/first-frame.jpg",
        "duration": 5,
        "resolution": "768P",
        "prompt_expansion_mode": "balanced"
    },
)
job = resp.json()
print(job["request_id"])
const resp = await fetch("https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/image-to-video", {
  method: "POST",
  headers: {
    "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "prompt": "the camera slowly pushes in as rain begins to fall",
  "image_url": "https://your-cdn.example.com/first-frame.jpg",
  "duration": 5,
  "resolution": "768P",
  "prompt_expansion_mode": "balanced"
}),
});
const job = await resp.json();
console.log(job.request_id);
curl -X POST https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/image-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "the camera slowly pushes in as rain begins to fall", "image_url": "https://your-cdn.example.com/first-frame.jpg", "duration": 5, "resolution": "768P", "prompt_expansion_mode": "balanced"}'

Output

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

Webhook (Optional)

Instead of polling, supply a callback URL and Pixazo will POST the result to it as soon as the request reaches a terminal state.

HeaderTypeRequiredDescription
X-Webhook-URLstringNoHTTPS endpoint that receives the callback. Supplying it enables webhook delivery.
X-Webhook-ModestringNoterminal (default) delivers once on COMPLETED or FAILED. sync also delivers intermediate status changes.

Example: enable webhook

curl -X POST https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/image-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-Webhook-URL: https://your-server.example.com/hooks/video" \
  -H "X-Webhook-Mode: terminal" \
  -d '{"prompt": "the camera slowly pushes in", "image_url": "https://your-cdn.example.com/first-frame.jpg", "prompt_expansion_mode": "balanced"}'

Callback Payload

{
  "request_id": "minimax-hailuo-h3-max-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3-max-turbo",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3-max-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}

Failure callback shape

{
  "request_id": "minimax-hailuo-h3-max-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3-max-turbo",
  "error": "Generation failed upstream",
  "output": null
}

Delivery semantics

  • terminal fires exactly once, on COMPLETED or FAILED.
  • sync also fires on intermediate transitions such as QUEUED → PROCESSING.
  • Deliveries are idempotent on request_id — de-duplicate on it, as a callback may be retried.
  • Respond 200 within a few seconds; slow endpoints are treated as failed deliveries.
  • HTTPS is required.

Request Parameters - MiniMax H3 Max Turbo API (Image to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstring—Any text, up to 50,000 charactersDescription of the video to generate.
image_urlYesstring—Public https URL of an imageFirst frame of the video. The output aspect ratio follows this image, so there is no aspect_ratio parameter on this operation.
end_image_urlNostring— (none)Public https URL of an imageOptional last frame. Supply it to generate a first-to-last keyframe transition.
durationNointeger55 – 15Length of the finished video in seconds. Billed per second.
resolutionNostring768P480P, 768P, 1080POutput resolution. Determines the per-second price — 480P generates at a lower cost per second than 768P, and 1080P at a higher cost per second than 768P. 480P and 768P are native generation resolutions; 1080P is produced by latent refinement from a native 768P source. See the pricing table for current rates.
prompt_expansion_modeYesstringbalanceddisabled, balanced, qualityHow much the prompt is rewritten before generation. disabled uses your wording verbatim; balanced adds about a second; quality spends up to ~30s building a richer prompt.
enable_safety_checkerNobooleantruetrue, falseRuns the content safety check over the generated video.
seedNointeger— (random)Any integerReusing a seed gives a fixed starting point for comparing two runs of the same brief. The prompt is rewritten before generation, so a repeated seed is a reference point rather than a guarantee of an identical video.

Example Request

{
  "prompt": "the camera slowly pushes in",
  "image_url": "https://your-cdn.example.com/first-frame.jpg",
  "prompt_expansion_mode": "balanced"
}

Response

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

Request Headers

HeaderValueRequired
Ocp-Apim-Subscription-KeyYOUR_API_KEYYes
Content-Typeapplication/jsonYes
X-Webhook-URLhttps://your-server.example.com/hooks/videoNo
X-Webhook-Modeterminal | syncNo

Response Handling

CodeMeaningWhat to do
202Accepted and queuedRead request_id and poll the status endpoint.
400Invalid request body or parameter valueCheck the parameter table above; the message names the offending field.
401Missing or invalid subscription keyCheck the Ocp-Apim-Subscription-Key header.
402Insufficient wallet balanceTop up. The message names the resolved price for this request.
403Key not subscribed to this productSubscribe the key to the API product.
429Rate limit exceededBack off and retry; the limit is 50 calls per 60 seconds.
500Server errorRetry once; if it persists, contact support with the request_id.

Error Responses

Insufficient balance (402)

{
  "error": "Insufficient balance",
  "required": 0.4,
  "available": 0.12,
  "currency": "USD"
}

Invalid parameter (400)

{
  "error": "Invalid value for 'duration': must be between 5 and 15"
}

Failure after acceptance

A request that was accepted can still fail during generation. That is reported through the status endpoint or the webhook, with status set to ERROR:

{
  "request_id": "minimax-hailuo-h3-max-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "minimax-hailuo-h3-max-turbo",
  "error": "Generation failed upstream",
  "output": null
}

Retrieving Results

Poll the status endpoint with the request_id returned by the submit call.

GET https://gateway.pixazo.ai/v2/requests/status/{request_id}

cURL Example

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

Response (Completed)

{
  "request_id": "minimax-hailuo-h3-max-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "minimax-hailuo-h3-max-turbo",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/minimax-hailuo-h3-max-turbo_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}

Response Fields

FieldTypeDescription
request_idstringIdentifier for this request. Use it to poll and to de-duplicate webhooks.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED or ERROR.
model_idstringAlways minimax-hailuo-h3-max-turbo.
errorstring | nullFailure reason, null while the request is healthy.
output.media_urlstringURL of the finished MP4, re-hosted by Pixazo.
output.media_typestringAlways video/mp4.
created_atstringISO-8601 timestamp of submission.
completed_atstringISO-8601 timestamp of the terminal transition.
polling_urlstringFully-formed status URL for this request.

Status Values

StatusTerminalMeaning
QUEUEDNoAccepted and waiting for a generation slot.
PROCESSINGNoGeneration is running.
COMPLETEDYesFinished. output.media_url holds the video.
FAILEDYesGeneration failed. Not billed.
ERRORYesThe request could not be processed. Not billed.

Status Flow

QUEUED -> PROCESSING -> COMPLETED
                     -> FAILED
                     -> ERROR

Typical Workflow

  1. POST the request body to https://gateway.pixazo.ai/minimax-hailuo-h3-max-turbo/v1/image-to-video.
  2. Read request_id from the 202 response.
  3. Poll https://gateway.pixazo.ai/v2/requests/status/{request_id} every few seconds, or wait for the webhook.
  4. On COMPLETED, download output.media_url.

MiniMax H3 Max Turbo API Pricing — Per-Second Rates

768P is the API default. 480P generates at a lower cost per second; 1080P is a higher-cost tier, refined from a native 768P render.

ResolutionPrice (USD)
768P$0.04/sec
480P$0.025/sec
1080P$0.08/sec
3. MiniMax Music 3.0

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
promptYesstring—1–2,000 charactersDescribes the music: genre, mood, instrumentation, setting. e.g. Indie folk, melancholic, introspective, solitary walk, coffee shop.
lyricsConditionalstring—1–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

QUEUED → PROCESSING → COMPLETED (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.
4. MiniMax Music 3.0 Fast (Free)
⚠️ This API was retired on 7 September 2026
MiniMax Music 3.0 Fast (Free) is no longer available and requests to it will fail. Use MiniMax Music 3.0 (minimax-music-3-0) instead — same request and response shape.

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
promptYesstring—1–2,000 charactersDescribes the music: genre, mood, instrumentation, setting. e.g. Indie folk, melancholic, introspective, solitary walk, coffee shop.
lyricsConditionalstring—1–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

QUEUED → PROCESSING → COMPLETED (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
5. 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
promptYesstring—Up 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 — Per-Second Rates

2K is the API default. 768P generates at a lower cost per second.

ResolutionPrice (USD)
2K$0.13/sec
768P$0.08/sec
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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.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
promptYesstring—Up 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_imageYesstring—Image 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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.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 — Per-Second Rates

2K is the API default. 768P generates at a lower cost per second.

ResolutionPrice (USD)
2K$0.13/sec
768P$0.08/sec
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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.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
promptYesstring—Up 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_imageYesstring—Image 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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.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 — Per-Second Rates

2K is the API default. 768P generates at a lower cost per second.

ResolutionPrice (USD)
2K$0.13/sec
768P$0.08/sec
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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
  "last_frame_image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
        "last_frame_image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
      "last_frame_image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
  "last_frame_image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
  "last_frame_image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.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
promptYesstring—Up 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_imageYesstring—Image 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_imageYesstring—Image 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://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
  "last_frame_image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.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 — Per-Second Rates

2K is the API default. 768P generates at a lower cost per second.

ResolutionPrice (USD)
2K$0.13/sec
768P$0.08/sec
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://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg"
  ]
}
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://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg"
        ]
    },
)

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://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg"
      ]
    }),
  }
);

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://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg"
  ]
}'

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://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg"
  ]
}'

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
promptYesstring—Up 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 string—Up to 9 itemsImages that lock in a character, subject or style. Up to 30 MB each.
reference_videosConditionalarray of string—Up 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 string—Up 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://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg",
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"
  ],
  "reference_audios": [
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/audio/speech-17s.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 — Per-Second Rates

2K is the API default. 768P generates at a lower cost per second.

ResolutionPrice (USD)
2K$0.13/sec
768P$0.08/sec
6. 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 mode — POST 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 API HD Pricing

Your request will cost $0.05 per 1,000 characters.
7. 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 mode — POST 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 API Turbo 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
8. 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 mode — POST 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
promptYesstring—Up 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_textYesstring—Up 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.
9. 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 mode — POST 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
promptNostring——Optional 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_imageYesstring——Image 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_urlNostring——URL 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 mode — POST 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
promptYesstring——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.
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_urlNostring——URL 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
10. 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 mode — POST 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
promptYesstring—10–2000 charactersDescription of the desired music style, mood, genre, and scenario. Drives the composition.
lyricsNostring—Up 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
48,000last 30d
~1,600 per day
Success rate
98.3%
of completed generations
Generation time
2.3minavg
p95 2.6min
Requests
Sep 10max 4,200Oct 9
MiniMax H3 MaxAvg 713/day
MiniMax H3 Max TurboAvg 650/day
MiniMax H3Avg 213/day
MiniMax Music 3.0Avg 10/day
OtherAvg 13/day
Generation Time
Sep 10max 9.2minOct 9
MiniMax H3 MaxAvg 114.7s
MiniMax H3 Max TurboAvg 112.7s
MiniMax H3Avg 4.3min
MiniMax Music 3.0Avg 5.3min
OtherAvg 2.5min
Error Rate
Sep 10max 100.0%Oct 9
MiniMax H3 MaxAvg 1.4%
MiniMax H3 Max TurboAvg 0.5%
MiniMax H3Avg 50.0%
MiniMax Music 3.0Avg 33.3%
OtherAvg 0.0%

〰 Uptime

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

Avg. Success Rate (30d)
98.33%
across all generations of this model family
Uptime
Sep 10max 100%Oct 9
MiniMax H3 MaxAvg 98.58%
MiniMax H3 Max TurboAvg 99.49%
MiniMax H3Avg 50.00%
MiniMax Music 3.0Avg 66.67%
OtherAvg 100.00%