MiniMax-H3 Video Generation
MiniMax-H3 (MiniMax-H3) is MiniMax's Hailuo-series video generation model. It supports text-to-video, image-to-video (first frame) and video reference, outputting 768P by default with an optional 2K mode. It uses the unified POST /v1/videos endpoint and returns an OpenAI Video style response (id / status / metadata.url), sharing the same task polling mechanism as other video models.
Billing
Billed by actual generated duration (seconds), with different unit prices per resolution tier (768P / 2K). Exact unit prices and billing expressions are shown on the corresponding model card in the console "Model Plaza" (prices are intentionally omitted from this documentation).
Endpoints
- Create task:
POST $URL/v1/videos - Query task:
GET $URL/v1/videos/{task_id}
Compatible alias
An OpenAI Sora-style alias is also supported: POST $URL/v1/video/generations, GET $URL/v1/video/generations/{task_id} — equivalent to the above.
Supported Models
| Model name | Positioning | Resolutions |
|---|---|---|
MiniMax-H3 | Video generation, 768P by default, 2K optional | 768P / 2K |
The resolution tier is selected via
metadata.resolution(see "Parameters" below).
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | yes | MiniMax-H3 |
prompt | string | yes | Video description; recommend specifying subject, action, scene, and camera movement |
image / images | string / array | no | Reference image URL(s), used as the first frame for image-to-video |
input_reference | string | no | Reference video URL, for video reference generation |
seconds | string | no | Output duration in seconds, e.g. "5", "10"; defaults to 5 seconds |
metadata.resolution | string | no | Resolution tier: 768P (default) / 2K |
metadata.ratio | string | no | Aspect ratio, defaults to 16:9, e.g. 9:16, 1:1 |
metadata.duration | number | no | Override output duration (seconds) |
metadata.aigc_watermark | boolean | no | Whether to add an AIGC content watermark |
metadata.callback_url | string | no | Callback URL for task completion (upstream push) |
Reference material
Publicly accessible image/video URLs are supported (the upstream server fetches them; intranet or local addresses will fail).
Request Examples
Text-to-video
# 1. Create video task (768P, 5 seconds)
curl $URL/v1/videos \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-H3",
"prompt": "A dolphin leaping out of the sea at sunset, golden splashes, slow motion, cinematic",
"seconds": "5"
}'
# 2. Query task status (replace {task_id} with the id returned above)
curl $URL/v1/videos/{task_id} \
-H "Authorization: Bearer $YOUR_API_KEY"import time
import requests
url = "$URL/v1/videos"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
}
payload = {
"model": "MiniMax-H3",
"prompt": "A dolphin leaping out of the sea at sunset, golden splashes, slow motion, cinematic",
"seconds": "5",
}
task = requests.post(url, json=payload, headers=headers).json()
task_id = task["id"]
while True:
result = requests.get(f"{url}/{task_id}", headers=headers).json()
if result["status"] in ("completed", "failed"):
break
time.sleep(8)
print(result)Image-to-video (first frame)
curl $URL/v1/videos \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-H3",
"prompt": "Make the robot in the picture stand up and wave at the camera",
"image": "https://example.com/ref.png",
"seconds": "5"
}'Video reference
curl $URL/v1/videos \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-H3",
"prompt": "Transform the scene in the video into a neon night lighting effect",
"input_reference": "https://example.com/clip.mp4",
"seconds": "5"
}'Switching to 2K
Use metadata.resolution to select the resolution tier:
curl $URL/v1/videos \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-H3",
"prompt": "Aerial drone shot of snow-capped mountains above the clouds, golden sunrise, breathtaking panorama",
"seconds": "5",
"metadata": {
"resolution": "2K"
}
}'Response Fields
Create and query responses share the same structure (OpenAI Video style):
| Field | Type | Description |
|---|---|---|
id | string | Task ID |
status | string | Task status (see below) |
metadata.url | string | Video URL after completion (only on completed) |
progress | integer | Generation progress, 0–100 |
completed_at | integer | Completion timestamp (seconds, only on completed) |
error.message | string | Failure reason (only on failed) |
Task Status
| Status | Meaning | Suggestion |
|---|---|---|
queued | Queued | Keep polling |
in_progress | Generating | Keep polling |
completed | Success | Get the video URL from metadata.url and download it as soon as possible |
failed | Failed | Check error.message |
Poll every 5–10 seconds
Video URLs are time-limited — download and store the result as soon as possible after completion.
Response Example
{
"id": "task_xxxxxxxx",
"status": "in_progress",
"progress": 50
}After completion:
{
"id": "task_xxxxxxxx",
"status": "completed",
"progress": 100,
"metadata": {
"url": "https://cdn.example.com/.../result.mp4"
},
"completed_at": 1786431715
}FAQ
Q: What reference materials are supported?
Reference images (first-frame image-to-video) and reference videos (video reference generation) — just pass publicly accessible URLs (see image / images / input_reference above).
Q: How long does a task take?
It depends on duration and resolution. A 768P 5-second task usually completes within 1–3 minutes; 2K takes longer. Poll the query endpoint for the final status.
Q: Do generated video links expire?
Yes. Video URLs are time-limited, so download and store the result as soon as possible.
Q: Is there an asset library?
No standalone asset library — use publicly accessible image/video URLs as reference material.
