MiniMax Generic Video Format
Call H3, Max, and Max Turbo through /v1/videos or /v1/video/generations, with field mapping and query response differences.
Use the generic format to share a aiiqq.com video client across models. Generation uses lowercase minimax-h3, minimax-h3-max, or minimax-h3-max-turbo; the server already maps H3 to its upstream name. Use the dedicated native endpoints for minimax-h3-context-ir and minimax-h3-regeneration rather than generic video generation.
Field mapping
| Generic field | Field sent to the video model |
|---|---|
model | Corresponding model name; H3 maps to MiniMax-H3 |
prompt | Text item in content |
images, or image | reference_image items in content |
metadata.video_url | A reference_video item |
metadata.audio_url | A reference_audio item |
size | resolution; H3 uses 768P / 2K, Max uses 480P / 768P |
seconds or duration | Integer duration, with seconds taking precedence; avoid conflicting values |
metadata.ratio or metadata.aspect_ratio | ratio, with the first field taking precedence |
metadata.content | Complete media array; when nonempty, it takes precedence over generated text and media items |
metadata.extra | Platform extra, such as Max prompt-expansion options |
metadata.callback_url, metadata.aigc_watermark | Corresponding optional native fields; explicit false is preserved |
Use media shortcuts only when the selected model supports that media. To specify first/last frames or explicit media roles, supply complete metadata.content, including its text item.
The generic endpoints require a non-empty top-level prompt, including when metadata.content is supplied. Native /v2 requests put the text item inside content instead.
H3: 768P, four seconds
curl --max-time 300 "$MODELSELL_BASE_URL/v1/videos" \
-H "Authorization: Bearer $MODELSELL_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "minimax-h3",
"prompt": "A red ceramic teapot rests on a wooden table in morning sunlight. The camera slowly moves closer.",
"seconds": "4",
"size": "768P",
"metadata": {"ratio": "16:9", "aigc_watermark": false}
}'Max: 480P, five seconds
{
"model": "minimax-h3-max",
"prompt": "A product film of a red ceramic teapot in morning sunlight.",
"seconds": "5",
"size": "480P",
"metadata": {
"ratio": "16:9",
"extra": {"prompt_expansion_mode": "balanced"}
}
}For Max Turbo, change model to minimax-h3-max-turbo, retain the minimal 480P / five-second request, and omit unconfirmed metadata.extra options.
Explicit first and last frames
{
"model": "minimax-h3",
"prompt": "A flower bud gradually blooms in morning sunlight.",
"seconds": "4",
"size": "768P",
"metadata": {
"ratio": "adaptive",
"content": [
{"type": "text", "text": "A flower bud gradually blooms in morning sunlight."},
{"type": "image_url", "image_url": {"url": "https://example.com/first.png"}, "role": "first_frame"},
{"type": "image_url", "image_url": {"url": "https://example.com/last.png"}, "role": "last_frame"}
]
}
}Once complete metadata.content takes effect, prompt, images, and video/audio shortcuts are not merged into it. See Request Parameters for role constraints.
Creation and query responses
Both POST /v1/videos and POST /v1/video/generations return a generic video creation object. Save id:
{"id": "task_example_h3_generation", "task_id": "task_example_h3_generation", "object": "video", "model": "minimax-h3", "status": "queued", "progress": 0, "created_at": 1793145600}Prefer GET /v1/videos/{task_id}, retaining the API Key used for creation. Example success response:
{
"id": "task_example_h3_generation",
"object": "video",
"model": "minimax-h3",
"status": "completed",
"video_url": "https://example.com/result.mp4",
"metadata": {
"url": "https://example.com/result.mp4",
"resolution": "768P",
"usage": {"total_seconds": 4, "output_seconds": 4, "input_seconds": 0, "input_image_count": 0}
}
}The generic query also returns this video object for platform Max / Turbo tasks. metadata.outputs retains the source URL list, and metadata.usage contains final metering such as seconds.
GET /v1/video/generations/{task_id} uses a different task envelope: read data.status (for example SUCCESS) and data.result_url; data.data contains the upstream snapshot. Use the creation id / task_id or outer data.task_id as the public ID, not an upstream ID in the raw snapshot. Do not parse this response using the root-level status / video_url above. Use /v1/videos/{task_id} for normalized statuses and metadata; native cancellation maps to failed in that object.
Generic queries identify the original task channel. This does not make a platform task eligible as native regeneration source_task_id. See the overview for native creation formats and matching native query paths.