MiniMax H3 MAX
MiniMax H3 MAX is an economical, fast video generation model from MiniMax (the team behind the Hailuo video engine). It supports text-to-video, first-frame-to-video, and first-and-last-frame-to-video generation with direct 768P output. Dual first/last frame control precisely locks the starting and ending visuals, with 4–15 second clips across aspect ratios from 21:9 to 9:16. Billing is fully transparent — from $0.05/second at 480P and $0.08/second at 768P, charged only for the output seconds actually generated, with input text and frame images completely free — making it a cost-effective choice for e-commerce showcases, social media videos, and bulk creative production.
MiniMax H3 Max Video
The MiniMax H3 Max video generation model creates high-quality videos from text and images, with native 768P output and first/last frame control.
Base URL
https://api.icreat.aiAuthentication
All API requests require API key authentication.
export ICREAT_API_KEY="your-api-key-here"HTTP Request Headers
import os
API_KEY = os.environ.get("ICREAT_API_KEY")
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + API_KEY,
}Keep Your API Key Secure
Never expose your API key in client-side code or public repositories. Use environment variables or a backend proxy.
Code Examples
Video generation uses a two-step asynchronous workflow: first submit a task to obtain a task_id, then poll the task result endpoint for progress. The following examples use the same task_id across both steps.
1. Submit a Task
2. Query Task Results (Polling)
Use the task_id returned by the submission step to query the task progress until the status changes to SUCCEEDED or FAILED.
Input Parameters
Submit Task - Input Parameters
The following parameters are accepted in the task submission request body.
Total: 7; Required: 5; Optional: 2.
The model name. When using this model endpoint, set it to minimax/h3-max.
The input content array. It must contain exactly one non-empty text item and may also include first-frame or last-frame images.
The video resolution.
The duration of the generated video in seconds.
Min: 4 Max: 15
The aspect ratio of the generated video. Text-to-video requests must specify a concrete aspect ratio and cannot use adaptive.
Reserved for protocol compatibility. The current task workflow still relies on actively querying the task status.
Whether to add an AIGC identification watermark. The exact appearance depends on the provider route used.
Content Validation Rules
contentmust contain exactly one non-emptytextitem.- Each image item must provide a non-empty
image_url.urland a correspondingrole. - No more than one
first_frameand onelast_framemay be provided. - A
first_framemust also be provided when usinglast_frame. - Text-to-video requests cannot use
adaptive. - All image URLs must be non-empty and accessible by the server.
Query Task Results - Input Parameters
Total: 1; Required: 1; Optional: 0.
The task ID returned by the task submission endpoint.
Output Parameters
Submit Task - Output Parameters
Total: 1.
The unique identifier of the asynchronous task. Use this ID to query the task status.
Query Task Results - Output Parameters
The current task status.
The list of generated video resources. This field is [] while the task is processing or if it fails.
The task cost in USD. This field is returned only when the task succeeds.
The error code returned when the task fails.
The English error message returned when the task fails.
Usage Examples
Text to Video
Text-to-video requests must specify a concrete aspect ratio.
{
"model": "minimax/h3-max",
"content": [
{
"type": "text",
"text": "A golden retriever running on a beach in slow motion at sunset, cinematic style"
}
],
"resolution": "480P",
"duration": 5,
"ratio": "16:9"
}First Frame to Video
{
"model": "minimax/h3-max",
"content": [
{
"type": "text",
"text": "Have the person in the scene walk naturally into the distance"
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/first-frame.jpg"
},
"role": "first_frame"
}
],
"resolution": "768P",
"duration": 5,
"ratio": "adaptive"
}First and Last Frames to Video
last_frame must be used together with first_frame.
{
"model": "minimax/h3-max",
"content": [
{
"type": "text",
"text": "Have the person in the scene walk naturally into the distance"
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/first-frame.jpg"
},
"role": "first_frame"
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/last-frame.jpg"
},
"role": "last_frame"
}
],
"resolution": "768P",
"duration": 5,
"ratio": "adaptive"
}LLM-Friendly Prompt
# minimax/h3-max
> The MiniMax H3 Max video generation model supports text-to-video, first-frame-to-video, and first-and-last-frame-to-video generation, with output resolutions of 768P or 480P.
## API Information
- **Base URL**: `https://api.icreat.ai`
- **Submit endpoint**: `POST /v1/task/submit/minimax/h3-max`
- **Query endpoint**: `POST /v1/task/result`
- **Model ID**: `minimax/h3-max`
- **model parameter**: `minimax/h3-max`
- **Authentication**: `Authorization: Bearer ${ICREAT_API_KEY}`
## Workflow
1. Submit a task and save the `task_id` from the response.
2. Call `/v1/task/result` using the same `task_id`.
3. Continue polling while the status is `SUBMITTED` or `IN_PROGRESS`.
4. When the status is `SUCCEEDED`, read the video URL from `result`.
5. When the status is `FAILED`, read `error_code` and `error_message`.
## Input Notes
- `model`: Must be `minimax/h3-max`.
- `content`: Must contain exactly one non-empty text item and may include first-frame or last-frame images.
- `resolution`: `768P` or `480P`.
- `duration`: 4 to 15 seconds.
- `ratio`: `adaptive`, `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, or `9:16`.
- Text-to-video requests cannot use `adaptive`.
- Supported image roles are `first_frame` and `last_frame`.
- No more than one `first_frame` and one `last_frame` may be provided.
- A `first_frame` must also be provided when using `last_frame`.
- `aigc_watermark` defaults to `false`.
## Output Notes
Successful submission:
`{ "task_id": "task-xxx" }`
Processing:
`{ "status": "IN_PROGRESS", "result": [] }`
Successful:
`{ "status": "SUCCEEDED", "result": [{ "type": "video", "url": "..." }], "costUSD": "0.1234" }`
Failed:
`{ "status": "FAILED", "error_code": "...", "error_message": "...", "result": [] }`