curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "MiniMax-H3-Max",
"prompt": "A detective in a trench coat turns around on a neon-lit street in the rain. The camera slowly pushes in as reflections shimmer on the pavement.",
"duration": 5,
"resolution": "768P",
"aspect_ratio": "16:9"
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/videos/generations",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
},
json={
"model": "MiniMax-H3-Max",
"prompt": "A detective turns around on a neon-lit street in the rain.",
"duration": 5,
"resolution": "768P",
"aspect_ratio": "16:9",
},
)
print(response.json())
const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "MiniMax-H3-Max",
prompt: "A detective turns around on a neon-lit street in the rain.",
duration: 5,
resolution: "768P",
aspect_ratio: "16:9",
}),
});
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01J9HA7JPQ9A0Z6JZ3V8M9W6PZ"
}
]
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentication failed. Check your API key.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient account balance",
"type": "payment_required"
}
}
MiniMax-H3
MiniMax-H3-Max Video Generation
- MiniMax Video Generation V2 fast model with asynchronous task submission
- Supports text-to-video and image-to-video with first, last, or first-and-last frames
- Supports 768P / 480P, durations from 5 to 15 seconds, with audio
- Does not support 2K, middle frames, or multimodal reference generation
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "MiniMax-H3-Max",
"prompt": "A detective in a trench coat turns around on a neon-lit street in the rain. The camera slowly pushes in as reflections shimmer on the pavement.",
"duration": 5,
"resolution": "768P",
"aspect_ratio": "16:9"
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/videos/generations",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
},
json={
"model": "MiniMax-H3-Max",
"prompt": "A detective turns around on a neon-lit street in the rain.",
"duration": 5,
"resolution": "768P",
"aspect_ratio": "16:9",
},
)
print(response.json())
const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "MiniMax-H3-Max",
prompt: "A detective turns around on a neon-lit street in the rain.",
duration: 5,
resolution: "768P",
aspect_ratio: "16:9",
}),
});
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01J9HA7JPQ9A0Z6JZ3V8M9W6PZ"
}
]
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentication failed. Check your API key.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient account balance",
"type": "payment_required"
}
}
Model selection: Use
MiniMax-H3-Max when speed matters and you only need text-to-video or first/last-frame control. For 2K, middle frames, reference images, reference videos, or reference audio, use MiniMax-H3.curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "MiniMax-H3-Max",
"prompt": "A detective in a trench coat turns around on a neon-lit street in the rain. The camera slowly pushes in as reflections shimmer on the pavement.",
"duration": 5,
"resolution": "768P",
"aspect_ratio": "16:9"
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/videos/generations",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
},
json={
"model": "MiniMax-H3-Max",
"prompt": "A detective turns around on a neon-lit street in the rain.",
"duration": 5,
"resolution": "768P",
"aspect_ratio": "16:9",
},
)
print(response.json())
const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "MiniMax-H3-Max",
prompt: "A detective turns around on a neon-lit street in the rain.",
duration: 5,
resolution: "768P",
aspect_ratio: "16:9",
}),
});
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01J9HA7JPQ9A0Z6JZ3V8M9W6PZ"
}
]
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentication failed. Check your API key.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient account balance",
"type": "payment_required"
}
}
Authentication
string
required
All endpoints require Bearer Token authentication. Get your key from the API Key page.
Authorization: Bearer YOUR_API_KEY
Choose the right model
| Capability | MiniMax-H3 | MiniMax-H3-Max |
|---|---|---|
| Resolution | 2K / 768P; default 2K | 768P / 480P; default 768P |
| Duration | 4–15 seconds | 5–15 seconds |
| Text-to-video | Supported | Supported |
| First / last frames | Supported | Supported |
| Middle frames | Supported | Not supported |
| Multimodal references | Images, video, and audio | Not supported |
| Input image charge | First 5 images are free | Free |
MiniMax-H3-Max does not support 2K and its output cannot be used as the source for Regeneration. Use MiniMax-H3 when you need either capability.Generation modes
The request fields determine the mode automatically; do not send amode field.
| Mode | Trigger | Behavior |
|---|---|---|
| Text-to-video (T2V) | Only prompt and common fields | Generates from text |
| Image-to-video (I2V) | first_frame_image / last_frame_image, or equivalent roles in image_with_roles | Controls the first frame, last frame, or both |
This model does not support
image_urls, video_urls, audio_urls, or image_with_roles[].role = "reference_image". Any reference-media field returns HTTP 400 synchronously; no task is created or charged.Request parameters
string
required
Fixed value:
MiniMax-H3-MaxModel IDs are case-insensitive; minimax-h3-max is also accepted.string
required
A non-empty description of the video. Required in every mode.Maximum:
7000 characters.integer
default:"5"
Video duration in seconds.
- Integer from
5to15 - Default:
5 - 4 seconds is not supported
string
default:"768P"
Output resolution:
768P(default)480P
2K, 1440P, and 2048P are not supported. Invalid values return HTTP 400 and are not silently downgraded.string
Output aspect ratio. The aliases
size and ratio are also accepted.Text-to-video values: 21:9, 16:9, 4:3, 1:1, 3:4, 9:16.- T2V without this field, or with
adaptive: falls back to16:9 - I2V: determined by the input image; this field is ignored
string
Public image URL used as the video’s first frame.
string
Public image URL used as the video’s last frame. It can be used alone or together with
first_frame_image.object[]
Role-based image array that can replace
Each role accepts at most one image.
first_frame_image and last_frame_image.Show image_with_roles item
Show image_with_roles item
role cannot be empty.boolean
default:"false"
Whether to add an AIGC watermark. Alias:
aigc_watermark.string
Receives a notification when the task reaches a successful or failed terminal state.
Use
webhook, not MiniMax’s callback_url. The gateway reserves callback_url for internal polling acceleration.Unsupported parameters
The following values return HTTP 400 before task creation and billing:| Parameter / value | Reason |
|---|---|
image_urls | Treated as reference images, which this model does not support |
image_with_roles[].role = "reference_image" | Only first and last frames are supported |
video_urls / video_url | Reference video is not supported |
audio_urls / audio_url | Reference audio is not supported |
resolution: "2K" | Only 768P and 480P are supported |
duration: 4 or a value above 15 | Only 5–15 seconds are supported |
For reference media, 2K, middle frames, or a 4-second video, change
model to MiniMax-H3 and follow the MiniMax-H3 guide.Image limits
The total request body must be 64 MB or less. Use public URLs; Base64 is not supported.| Item | Limit |
|---|---|
| Formats | JPG / JPEG / PNG / WEBP / HEIC / HEIF |
| Per file | ≤ 30 MB |
| Width and height | 256–5760 px |
| Aspect ratio (width / height) | 0.4–2.5 |
| Count | Up to 1 first frame and 1 last frame; 2 images total |
Examples
First-frame image-to-video
{
"model": "MiniMax-H3-Max",
"prompt": "The camera slowly pushes in as steam rises and people move in the background.",
"first_frame_image": "https://cdn.example.com/ramen.png",
"duration": 5,
"resolution": "480P"
}
First-and-last-frame image-to-video
{
"model": "MiniMax-H3-Max",
"prompt": "The scene gradually transitions from morning to sunset.",
"first_frame_image": "https://cdn.example.com/morning.png",
"last_frame_image": "https://cdn.example.com/sunset.png",
"duration": 8,
"resolution": "768P"
}
Query a task
Submission returns atask_id. Poll Task Status every 5–10 seconds; use a client timeout of 15 minutes.
curl https://api.apimart.ai/v1/tasks/task_01J9HA7JPQ9A0Z6JZ3V8M9W6PZ \
--header 'Authorization: Bearer <token>'
status | Meaning |
|---|---|
pending | Submitted or queued |
processing | Generating |
completed | Video URL is in result.videos[0].url |
failed | Check error.message; the task is refunded automatically |
Generated video URLs typically expire after about 24 hours. Download and store the result promptly.
Pricing
Total cost equals the per-second rate multiplied by video duration. First and last frame images are free.| Item | Rate |
|---|---|
| 768P video | $0.075 / second |
| 480P video | $0.0495 / second |
| Input images | Free |
cost field is authoritative.
Errors
| Scenario | Result |
|---|---|
Empty or over-7000-character prompt | 400; no task |
duration outside 5–15 | 400; no task |
Unsupported resolution | 400; no task |
| Any reference media | 400; no task |
| Invalid or duplicate image role | 400; no task |
| Insufficient balance | 402 |
| Content safety rejection | 422 |
| Rate limit | 429; retry with backoff |
status = failed with details in error.message and are refunded automatically.
Response
integer
Response status code; 200 on success