Create a video using a text and image prompt
Table of contents
September 25, 2024 (February 24, 2026)
Use hailuoai.video account to generate videos, see Setup MiniMax for details.
To upload prompt image use POST /files.
Model Comparison Matrix
Hailuo 01 β Legacy models, 720p 6sec, no options
| Model | Type | Notes |
|---|---|---|
| T2V-01 | Text-to-Video | Default for text prompts |
| I2V-01 | Image-to-Video | Default for image prompts |
| I2V-01-live | Image-to-Video | Live photo effect |
| I2V-01-Director | Image-to-Video | Camera movement control |
| T2V-01-Director | Text-to-Video | Camera movement control |
| S2V-01 | Subject Reference | Character/subject consistency |
Hailuo 02/2.3 β Resolution and duration options
| Model | Type | Options | End Frame |
|---|---|---|---|
| 02 | Text/Image-to-Video | 512p-6/10sec, 768p-6/10sec, 1080p-6sec | Yes (768p/1080p) |
| T2V-2.3 | Text-to-Video | 768p-6/10sec, 1080p-6sec | No |
| I2V-2.3 | Image-to-Video | 768p-6/10sec, 1080p-6sec | No |
| I2V-2.3-Fast | Image-to-Video | 768p-6/10sec, 1080p-6sec | No |
Sora & Veo β aspectRatio (16:9, 9:16), higher resolution options
| Model | Type | Options | End Frame | Notes |
|---|---|---|---|---|
| Sora-2 | Text/Image-to-Video | 720p-4/8/12sec | No | OpenAI, exact 1280x720 or 720x1280 images |
| Veo-3.1 | Text/Image-to-Video | veo-720p/1080p/4k-8sec | Yes | Google DeepMind, native audio |
| Veo-3.1-Fast | Text/Image-to-Video | veo-720p/1080p/4k-8sec | Yes | Faster generation |
| Veo-3.1-S2V | Subject Reference | veo-720p/1080p/4k-8sec | No | Up to 14 ref images |
| Veo-3.1-S2V-Fast | Subject Reference | veo-720p/1080p/4k-8sec | No | Up to 14 ref images, faster |
π² Credits estimator
Credits are charged per video. Actual costs may change, see hailuoai.video for current pricing.
| Model | Option | Credits |
|---|---|---|
| T2V-01, I2V-01, I2V-01-live, S2V-01, T2V-01-Director, I2V-01-Director | - | 25 |
| 02, T2V-2.3, I2V-2.3 | 768p-6sec | 25 |
| 02, T2V-2.3, I2V-2.3 | 768p-10sec | 50 |
| 02, T2V-2.3, I2V-2.3 | 1080p-6sec | 80 |
| 02 | 512p-6sec | 12 |
| 02 | 512p-10sec | 25 |
| I2V-2.3-Fast | 768p-6sec | 15 |
| I2V-2.3-Fast | 768p-10sec | 30 |
| I2V-2.3-Fast | 1080p-6sec | 50 |
| Sora-2 | 720p-4sec | 40 |
| Sora-2 | 720p-8sec | 80 |
| Sora-2 | 720p-12sec | 120 |
| Veo-3.1, Veo-3.1-S2V | veo-720p-8sec | 120 |
| Veo-3.1, Veo-3.1-S2V | veo-1080p-8sec | 120 |
| Veo-3.1, Veo-3.1-S2V | veo-4k-8sec | 180 |
| Veo-3.1-Fast, Veo-3.1-S2V-Fast | veo-720p-8sec | 60 |
| Veo-3.1-Fast, Veo-3.1-S2V-Fast | veo-1080p-8sec | 60 |
| Veo-3.1-Fast, Veo-3.1-S2V-Fast | veo-4k-8sec | 90 |
https://api.useapi.net/v1/minimax/videos/create
Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
API tokenis required, see Setup useapi.net for details.
Request Body
{
"account": "Optional MiniMax API account",
"prompt": "Optional text prompt",
"promptOptimization": true,
"fileID": "user:user_id-minimax:account-file:file_id",
"fileID2": "user:β¦-minimax:β¦-file:β¦ (S2V models only)",
"end_frame_fileID": "user:β¦-minimax:β¦-file:β¦ (`02` 768p/1080p, `Veo-3.1`, `Veo-3.1-Fast`)",
"model": "Optional model name",
"options": "Optional option name",
"aspectRatio": "16:9",
"replyUrl": "Place your call back URL here",
"replyRef": "Place your reference id here",
"maxJobs": 1
}
-
accountis optional, if not specified API will randomly select account from available accounts. -
promptis optional, describe your shot. Maximum length 2,000 characters. How to prompt tutorial. -
promptOptimizationis optional. Supported values:true,false. Default:false(no optimization). -
fileIDβ image/character reference. Upload via POST /files, retrieve via GET /files, GET videos/characters, or use fileID from POST images/create.modelfileIDend_frame_fileIDfileID2β¦fileID14aspectRatioT2V-01,T2V-01-Director,T2V-2.3Not supported - - - I2V-01,I2V-01-live,I2V-01-DirectorRequired - - - S2V-01Required - - - 02Optional Yes (768p/1080p only) - - I2V-2.3,I2V-2.3-FastRequired - - - Sora-2Optional (exact 1280x720 or 720x1280) - - 16:9,9:16Veo-3.1,Veo-3.1-FastOptional Yes - 16:9,9:16Veo-3.1-S2V,Veo-3.1-S2V-FastRequired - Up to 14 total 16:9,9:16 -
end_frame_fileIDis optional. Theend_frame_fileIDandfileIDcannot be the same, reupload the end frame via POST /files if needed. -
fileID2β¦fileID14are optional, for S2V models only (Veo-3.1-S2V,Veo-3.1-S2V-Fast). Additional reference images for subject/character consistency. RequiresfileIDfirst. All files must belong to the same account. -
aspectRatiois optional, supported bySora-2,Veo-3.1,Veo-3.1-Fast,Veo-3.1-S2V,Veo-3.1-S2V-Fast. Supported values:16:9(default),9:16. -
modelis optional. Supported values:Hailuo 01 β 720p, 6 sec
T2V-01(default) text-to-videoI2V-01(default) image-to-videoI2V-01-liveimage-to-video, live photo effectS2V-01subject reference, character/subject consistencyT2V-01-Directortext-to-video, camera movement control via[<movement>]in prompt (instructions)I2V-01-Directorimage-to-video, camera movement control via[<movement>]in prompt (instructions)
Hailuo 02/2.3 β resolution and duration
options02text/image-to-video, native 1080pT2V-2.3text-to-videoI2V-2.3image-to-videoI2V-2.3-Fastimage-to-video, faster generation
Sora & Veo β
aspectRatiosupport, higher resolutionoptionsSora-2OpenAI Sora 2, text/image-to-video, 720p only. Image: exact 1280x720 (16:9) or 720x1280 (9:16)Veo-3.1Google DeepMind Veo 3.1, text/image-to-video with native audio, 720p/1080p/4KVeo-3.1-FastVeo 3.1 Fast, text/image-to-video, 720p/1080p/4KVeo-3.1-S2VVeo 3.1 Subject Reference, up to 14 reference images viafileIDβ¦fileID14, 720p/1080p/4KVeo-3.1-S2V-FastVeo 3.1 Subject Reference Fast, up to 14 reference images, 720p/1080p/4K
-
optionsis optional. Sets resolution and duration. Hailuo 01 models do not supportoptions.modeloptionsend_frame02512p-6sec,512p-10sec(I2V only),768p-6sec,768p-10sec,1080p-6secYes (768p/1080p only) T2V-2.3768p-6sec,768p-10sec,1080p-6secNo I2V-2.3768p-6sec,768p-10sec,1080p-6secNo I2V-2.3-Fast768p-6sec,768p-10sec,1080p-6secNo Sora-2720p-4sec,720p-8sec,720p-12secNo Veo-3.1veo-720p-8sec,veo-1080p-8sec,veo-4k-8secYes Veo-3.1-Fastveo-720p-8sec,veo-1080p-8sec,veo-4k-8secYes Veo-3.1-S2Vveo-720p-8sec,veo-1080p-8sec,veo-4k-8secNo Veo-3.1-S2V-Fastveo-720p-8sec,veo-1080p-8sec,veo-4k-8secNo -
replyUrlis optional. Callback URL for job completion notifications. API will call the providedreplyUrlonce MiniMax video completed or failed.
Maximum length 1024 characters.
We recommend using sites like webhook.site to test callback URL functionality. -
replyRefis optional, place here your reference id which will be stored and returned along with this MiniMax video response / result.
Maximum length 1024 characters. -
maxJobsis optional, if not specified value from accounts/account will be used.
Valid range: 1β¦10.
Please set this number according to your subscription plan. We recommend setting it to 2 (3 maximum) for Free, and 3 (4 maximum) for Standard and Unlimited plans. Although you can set it to higher values (3 for Free and 5 for Standard and Unlimited respectively), it wonβt make any difference since only one video can be processed at a time for Free accounts, and no more than two for Standard and Unlimited accounts. Itβs helpful to have a spare empty slot for cases where the MiniMax website is too busy and responds with502or504while still accepting jobs into the internal queue.
Responses
-
Use returned
videoIdto retrieve video status and results using GET /videos/videoId. CheckvideoURLand/ordownloadURL(paid account, no watermarks) for generated video with thestatus2 (Completed).If you specify the optional parameter
replyUrlthe API will call the providedreplyUrlwith video progress updates until the video is complete or fails.{ "id": "1122334455667798899", "task": { "batchID": "998877665544332211", "videoIDs": [ "1122334455667798899" ] }, "videoId": "user:1234-minimax:987654321-video:998877665544332211", "replyUrl": "https://webhook.site/abc", "replyRef": "<your optional reference id>" } -
{ "error": "<Error message>" } -
{ "error": "Unauthorized" } -
Insufficient credits. Please recharge to get more credits or try again next day.
{ "error": "Insufficient credits. Please recharge to get more credits or try again next day." } -
Moderated message.
{ "error": "Your prompt is too short, please provide more details" } -
Wait in a loop for at least 10..30 seconds and retry again.
There are two possible cases for API response 429:
- API query is full and can not accept new videos/create requests. Size of query defined by
maxJobsoptional parameter.{ "error": "Account <MiniMax account> is busy executing <Account maxJobs> videos", "runningVideos": { "<MiniMax account>": [ { "account": "<MiniMax account>", "id": "id1", "scheduledVideo": "<scheduled video id1>", "videoId": "user:user_id-minimax:account-video:id1", "started": "2024-09-25T01:55:16.128Z", "replyUrl": "<optional callback URL>", "replyRef": "<optional reference>" }, { "account": "<MiniMax account>", "id": "idN", "scheduledVideo": "<scheduled video idN>", "videoId": "user:user_id-minimax:account-video:idN", "started": "2024-09-25T01:55:16.128Z", "replyUrl": "<optional callback URL>", "replyRef": "<optional reference>" } ] } } - The API received an HTTP response status 429 from MiniMax. Please refer to your subscription plan for the maximum allowed tasks in the queue.
{ "error": "YOU CAN QUEUE 3 JOBS AT ONCE" }
- API query is full and can not accept new videos/create requests. Size of query defined by
-
596 Pending mod message
Your hailuoai.video account has been placed on hold, which may last a few hours. It may be a good idea to pause operations until then. You can reach out to the Discord support channel or send an email requesting your account to be unlocked. Based on the information we have gathered, this seems to be a temporary ban that will automatically unlock in just a few hours.
{ "error": "Unusual account activities detected. Please contact customer support at [email protected]" }
Model
{ // TypeScript, all fields are optional
videoId: string
id: string
task: {
batchID: string
videoIDs: string[]
}
runningVideos: {
[account: string]: {
account: string
id: string
scheduledVideo: string
videoId: string
started: string
replyUrl: string
replyRef: string
}[]
}
replyUrl: string
replyRef: string
error: string
}
Examples
-
curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer β¦" \ -X POST "https://api.useapi.net/v1/minimax/videos/create" \ -d '{"prompt": "β¦"}' -
const prompt = "text prompt"; const apiUrl = `https://api.useapi.net/v1/minimax/videos/create`; const token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ prompt }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); -
import requests prompt = "text prompt" apiUrl = f"https://api.useapi.net/v1/minimax/videos/create" token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } body = { "prompt": f"{prompt}" } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json())