MiniMax H3 Max Turbo
MiniMax H3 Max Turbo is a fast video generation model for text-to-video and first/last-frame image-to-video. It generates 5–15 second videos at 480p or 768p through the standard asynchronous task API.
Model and endpoint
Use minimax-h3-max-turbo with:
POST https://api.aivideoapi.ai/v1/videos/generations
Pricing
Only the requested output duration is billed, at the selected resolution. Input images and prompt expansion are free.
| Resolution | Credits/second |
|---|---|
480p | 6.54 |
768p | 10 |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
model | string | Yes | Must be minimax-h3-max-turbo |
input | object | Yes | Generation parameters described below |
callback_url | string | No | Receives task completion or failure callbacks |
Input parameters
| Field | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Non-empty prompt, maximum 7000 characters |
generation_type | string | No | Omit for text-to-video; use first_and_last_frames for image-to-video |
image_urls | string[] | Conditional | Ignored in text-to-video; frame mode requires 1–2 public HTTP(S) image URLs |
resolution | string | No | 480p or 768p; default 768p |
duration | integer | No | Only integers from 5 through 15 seconds; default 5; other values are rejected before charging |
aspect_ratio | string | No | Fixed ratio for text-to-video; frame mode always follows the images |
prompt_expansion_mode | string | No | disabled, balanced, or quality; default balanced |
seed | integer | No | Optional integer from 1 through 4294967295 |
video_urls, audio_urls, omni_reference, multimodal references, 2k, style, and watermark controls are not supported. Durations outside 5–15 seconds and fractional durations are rejected.
Generation modes
Text-to-video
Omit generation_type. Supported ratios are 21:9, 16:9, 4:3, 1:1, 3:4, and 9:16; the default is 16:9. adaptive is not accepted for text-to-video.
If image_urls is included while generation_type is omitted, it must be an array of strings and may contain any number of entries. After that type check, every entry is ignored: image URLs and content are not probed, fetched, stored, sent to the generation service, or billed.
curl -X POST https://api.aivideoapi.ai/v1/videos/generations \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-h3-max-turbo",
"input": {
"prompt": "A fast cinematic tracking shot through a neon city at night",
"resolution": "768p",
"duration": 5,
"aspect_ratio": "16:9",
"prompt_expansion_mode": "balanced",
"seed": 123456
}
}'
First/last-frame image-to-video
Set generation_type to first_and_last_frames. Provide one image for the first frame or two images for first and last frames. The output ratio is always derived from the images, so any otherwise valid aspect_ratio is ignored and normalized to adaptive.
curl -X POST https://api.aivideoapi.ai/v1/videos/generations \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-h3-max-turbo",
"callback_url": "https://your-server.com/webhook",
"input": {
"prompt": "The camera moves forward as daylight fills the room",
"generation_type": "first_and_last_frames",
"image_urls": [
"https://example.com/first.png",
"https://example.com/last.png"
],
"resolution": "480p",
"duration": 8
}
}'
Frame images must use public HTTP(S) URLs and be downloadable and decodable. JPEG, PNG, and WebP are recommended.
Create response
The create endpoint returns a platform task ID. Save data.taskId for subsequent task queries:
{
"code": 200,
"msg": "success",
"data": {
"taskId": "2e723e68-7a4a-4f38-a27a-8e638f6c44a1"
}
}
Query task
Use the taskId from the create response:
curl https://api.aivideoapi.ai/v1/tasks/{taskId} \
-H "Authorization: Bearer sk-your-api-key"
Status transitions are pending → processing → completed or failed.
Pending
{
"id": "2e723e68-7a4a-4f38-a27a-8e638f6c44a1",
"status": "pending",
"model": "minimax-h3-max-turbo",
"credits_consumed": 0,
"created_at": 1788066000,
"estimated_seconds": 300
}
Processing
{
"id": "2e723e68-7a4a-4f38-a27a-8e638f6c44a1",
"status": "processing",
"model": "minimax-h3-max-turbo",
"credits_consumed": 0,
"created_at": 1788066000,
"progress": null
}
Completed
{
"id": "2e723e68-7a4a-4f38-a27a-8e638f6c44a1",
"status": "completed",
"model": "minimax-h3-max-turbo",
"credits_consumed": 50,
"created_at": 1788066000,
"completed_at": 1788066120,
"output": {
"urls": [
"https://file.aivideoapi.ai/videos/2026/08/30/example.mp4"
],
"metadata": {
"model": "MiniMax-H3-Max-Turbo",
"resolution": "768p",
"duration": 5,
"ratio": "16:9"
}
},
"usage": {
"total_seconds": 5,
"input_seconds": 0,
"output_seconds": 5,
"input_image_count": 0
}
}
output.urls contains the generated video URL. usage is included only when media usage is returned by the generation service. Input usage does not add any H3 Max Turbo customer credit charge.
Failed
{
"id": "2e723e68-7a4a-4f38-a27a-8e638f6c44a1",
"status": "failed",
"model": "minimax-h3-max-turbo",
"credits_consumed": 0,
"created_at": 1788066000,
"error": {
"code": "upstream_error",
"message": "Video generation failed"
}
}
credits_consumed is the task's finalized customer credit charge. It is 0 while the task is in progress and after a confirmed failure has been refunded; completed tasks report the actual charge. A confirmed failed task is refunded only once.
GET /v1/tasks/{taskId} is the authoritative source for task status. This model does not support cancellation.
Successful task responses may include usage.total_seconds, usage.input_seconds, usage.output_seconds, and usage.input_image_count. These fields report media usage only; customer credits are always calculated from the requested output duration and resolution, with no input-image charge.
Callback
Pass callback_url when creating the task. The platform sends a POST request when the task reaches the completed or failed terminal state:
{
"model": "minimax-h3-max-turbo",
"callback_url": "https://your-server.com/webhook",
"input": {
"prompt": "A fast cinematic tracking shot through a neon city at night",
"resolution": "768p",
"duration": 5,
"aspect_ratio": "16:9"
}
}
Headers
| Header | Description |
|---|---|
Content-Type | application/json |
X-Event | task.completed or task.failed |
X-Task-Id | Platform task ID |
X-Timestamp | Unix timestamp in seconds |
Completed callback
{
"id": "2e723e68-7a4a-4f38-a27a-8e638f6c44a1",
"status": "completed",
"model": "minimax-h3-max-turbo",
"credits_consumed": 50,
"created_at": 1788066000,
"completed_at": 1788066120,
"output": {
"urls": [
"https://file.aivideoapi.ai/videos/2026/08/30/example.mp4"
],
"metadata": {
"model": "MiniMax-H3-Max-Turbo",
"resolution": "768p",
"duration": 5,
"ratio": "16:9"
}
},
"usage": {
"total_seconds": 5,
"input_seconds": 0,
"output_seconds": 5,
"input_image_count": 0
}
}
Failed callback
{
"id": "2e723e68-7a4a-4f38-a27a-8e638f6c44a1",
"status": "failed",
"model": "minimax-h3-max-turbo",
"credits_consumed": 0,
"created_at": 1788066000,
"error": {
"code": "upstream_error",
"message": "Video generation failed"
}
}
The callback body matches the corresponding terminal response from the query task endpoint. Return any 2xx status to acknowledge delivery. If the URL is unreachable or returns a non-2xx status, the platform makes up to three delivery attempts: immediately, then approximately 3 minutes and 10 minutes after failures.
If all callback attempts fail, continue using GET /v1/tasks/{taskId} as the fallback for final status. See the Callback Guide for complete header and retry details.
Error Codes
When a request fails, the API returns a JSON error response:
{
"error": {
"code": "insufficient_credits",
"message": "Your credit balance is too low. Please top up.",
"type": "billing_error"
}
}
Error Reference
| HTTP Status | Code | Type | Description |
|---|---|---|---|
| 400 | invalid_request | invalid_request_error | Missing or invalid parameters |
| 401 | invalid_api_key | authentication_error | API key is invalid, disabled, or deleted |
| 402 | insufficient_credits | billing_error | Credit balance too low, please top up |
| 403 | ip_not_allowed | permission_error | Request IP not in the key's allowlist |
| 404 | model_not_found | invalid_request_error | Model does not exist or is inactive |
| 404 | task_not_found | invalid_request_error | Task ID does not exist |
| 429 | rate_limit_exceeded | rate_limit_error | Too many requests, please slow down |
| 429 | spend_limit_exceeded | billing_error | Key spend limit reached (hourly/daily/total) |
| 500 | internal_error | api_error | Unexpected server error |
| 503 | upstream_error | upstream_error | Upstream AI provider returned an error |
Common Scenarios
invalid_request (400)
Returned when required fields are missing or invalid.
{
"error": {
"code": "invalid_request",
"message": "'model' is required.",
"type": "invalid_request_error"
}
}
insufficient_credits (402)
Your balance is too low. Check your balance with GET /v1/credits and top up in Dashboard > Billing.
invalid_api_key (401)
Possible causes:
- The key does not start with
sk- - The key has been disabled or deleted
- The user account has been banned
upstream_error (503)
The upstream AI provider returned an error. This may happen when:
- The input contains sensitive or prohibited content
- The provider is temporarily unavailable
- The request parameters are not supported by the provider
Credits are automatically refunded when a task fails due to upstream errors.