MiniMax H3 Video Gateway
Gateway Base URL:
https://maasunion.com/minimax
Official reference: MiniMax Video Generation API
This page is for callers using the MaasUnion aggregation platform: how to submit a video generation task, poll the result, and troubleshoot errors.
Product Overview
MiniMax H3 is MiniMax's flagship long-form, multimodal video generation model. It supports:
- Text-to-video / Image-to-video: 4–15 seconds per generation
- Multimodal references: first/last frame, image reference, video reference, audio reference
- H3-Context-IR: expand short prompts into structured, semantically richer prompts (does not consume video quota)
- Video regeneration: upgrade 768P results to 2K, or regenerate from an existing 768P video
On MaasUnion, H3 is exposed through a dedicated gateway path and is independent from other video channels (Kling, Doubao, etc.)—task IDs, billing, and routing are fully isolated. Clients use a single Authorization: Bearer <TOKEN> header and do not need to know about the upstream.
Quick Start
1. Get a Token
Create a token in the MaasUnion console under Tokens. The token determines your identity, quota, and the models you can access.
2. Make Your First Call
Point any HTTP client at the MaasUnion gateway path, and use the token above for authentication:
curl --request POST "https://maasunion.com/minimax/v2/video_generation" \
--header "Authorization: Bearer $NEW_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "MiniMax-H3",
"content": [{"type": "text", "text": "Cinematic sunrise, camera slowly pushing in toward a mountain lake"}],
"resolution": "768P",
"duration": 6,
"ratio": "16:9"
}'Response:
{"task_id": "424010985738629"}3. Poll the Result
curl --request GET "https://maasunion.com/minimax/v2/query/video_generation/$TASK_ID" \
--header "Authorization: Bearer $NEW_API_TOKEN"On success, read the video URL from task.content.url. The URL is time-limited, so download or transfer the file to your own storage as soon as possible.
The official recommendation is to poll every 10 seconds. If you would rather not poll, you can pass
callback_urlwhen creating the task; the gateway will POST to that address whenever the status changes.
Endpoints
| Capability | Gateway route |
|---|---|
| Create video | POST /minimax/v2/video_generation |
| H3-Context-IR | POST /minimax/v2/h3_context_ir |
| Video regeneration | POST /minimax/v2/video_regeneration |
| Query a task | GET /minimax/v2/query/video_generation/{task_id} |
| List tasks | GET /minimax/v2/query/video_generation |
| Cancel/delete a task | DELETE /minimax/v2/video_generation/{task_id} |
Every create endpoint returns a task_id; use the query endpoint to fetch the final result. Task records are retained for 7 days.
See the dedicated pages for parameter and field details: Create video · Context-IR · Video regeneration · Query tasks.
Task Status & Response Fields
Status progresses queued → running → succeeded / failed / cancelled.
| Field | Description |
|---|---|
id | Gateway-public task ID |
status | queued / running / succeeded / failed / cancelled |
task_type | generation / h3_context_ir / regeneration |
modality | video for video tasks, text for Context-IR |
content.url | Video URL on success (time-limited) |
content.prompt | Expanded prompt on Context-IR success |
usage | Seconds / image count for video; token usage for Context-IR |
error | Error code and message for failed tasks |
Request Constraints
Content & duration
modelmust beMiniMax-H3contentmust contain at least one non-emptytextentry; max 7,000 characters- Video duration 4–15 seconds; resolution
768Por2K - Supported ratios:
adaptive,21:9,16:9,4:3,1:1,3:4,9:16 - Text-to-video requires
ratioand cannot beadaptive; image-to-video usesadaptive
Multimodal
first_frame/last_framecannot be combined withreference_image/reference_video/reference_audio- Image ≤ 30 MB, video ≤ 50 MB, request body ≤ 64 MB
- For large files, use a public URL or
mm_file://{file_id}
Tasks & expiry
- Task records are retained for 7 days
- Successful video URLs are time-limited; download or transfer immediately
- Recommended polling cadence: every 10 seconds, or use
callback_url
Pricing
Charged in CNY and deducted from your MaasUnion quota. Failed or cancelled tasks are refunded per the standard rules.
| Item | Unit price |
|---|---|
| Video generation 768P | ¥0.50 / output second |
| Video generation 2K | ¥0.80 / output second |
| Generation image input | First 5 free, then ¥0.20 / image |
| Generation video input | Output-resolution unit price × input seconds |
| Regeneration output | ¥0.30 / output second |
| Regeneration image input | First 5 free, then ¥0.15 / image |
| Regeneration video input | ¥0.30 / input second |
| Context-IR input | ¥5.80 / 1M tokens |
| Context-IR output | ¥23.00 / 1M tokens |
See the official MiniMax pricing page for the latest rates. Context-IR does not produce video and only consumes token quota.
Troubleshooting
HTTP status codes
| Code | Meaning | Action |
|---|---|---|
| 200 | Creation succeeded (returns task_id only) | Continue polling |
| 400 | Invalid request parameters | Check model / content / resolution / duration / ratio |
| 401 | Missing or invalid token | Generate a new token |
| 403 | Token cannot use H3 | Ask the admin to add H3 to your visible group |
| 404 | Task not found or expired | Task is older than 7 days or not owned by your token |
| 429 | Rate-limited | Lower concurrency, or ask the admin to upgrade quota |
| 500/502/503 | Gateway or upstream error | Brief retry; contact support if it persists |
Business failure (status: failed)
When querying a failed task, task.error contains the code and message. Common cases:
| Error | What to check |
|---|---|
invalid api key | Upstream key misconfigured or expired in the MaasUnion admin (ask the admin) |
insufficient balance | Upstream account balance is low; top up and retry (ask the admin) |
content policy violation | Prompt or reference assets violate MiniMax content policy; edit and retry |
parameter invalid | Verify resolution / duration / ratio / file-size constraints |
rate limit exceeded | Lower request rate or apply for higher quota |
task not found | Task has expired or is not owned by your token |
Best Practices
- Polling: poll every 10 seconds, or use
callback_urlfor lower latency - Large files: prefer public URLs or
mm_file://{file_id}to avoid base64 bloat - Persist results: download or copy the video to your own storage as soon as the task
succeeds - Clean up: actively
DELETEfailed or unwanted tasks for easier auditing - Multimodal isolation: do not mix first/last frame and reference assets; for character/scene consistency, put all assets in the same
reference_imageorreference_videogroup - Prompt refinement: use Context-IR to expand your short prompt first, then copy
content.promptinto the generation request for more stable results - 2K upgrade: run 768P first to validate, then use video regeneration to upgrade to 2K to save cost
How is this guide?