Create a video using a text and image prompt

Table of contents

September 25, 2024 (February 24, 2026)

  1. Model Comparison Matrix
    1. Hailuo 01 β€” Legacy models, 720p 6sec, no options
    2. Hailuo 02/2.3 β€” Resolution and duration options
    3. Sora & Veo β€” aspectRatio (16:9, 9:16), higher resolution options
  2. Request Headers
  3. Request Body
  4. Responses
  5. Model
  6. Examples
  7. Try It

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
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
}
  • account is optional, if not specified API will randomly select account from available accounts.

  • prompt is optional, describe your shot. Maximum length 2,000 characters. How to prompt tutorial.

  • promptOptimization is 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.

    model fileID end_frame_fileID fileID2…fileID14 aspectRatio
    T2V-01, T2V-01-Director, T2V-2.3 Not supported - - -
    I2V-01, I2V-01-live, I2V-01-Director Required - - -
    S2V-01 Required - - -
    02 Optional Yes (768p/1080p only) - -
    I2V-2.3, I2V-2.3-Fast Required - - -
    Sora-2 Optional (exact 1280x720 or 720x1280) - - 16:9, 9:16
    Veo-3.1, Veo-3.1-Fast Optional Yes - 16:9, 9:16
    Veo-3.1-S2V, Veo-3.1-S2V-Fast Required - Up to 14 total 16:9, 9:16
  • end_frame_fileID is optional. The end_frame_fileID and fileID cannot be the same, reupload the end frame via POST /files if needed.

  • fileID2 … fileID14 are optional, for S2V models only (Veo-3.1-S2V, Veo-3.1-S2V-Fast). Additional reference images for subject/character consistency. Requires fileID first. All files must belong to the same account.

  • aspectRatio is optional, supported by Sora-2, Veo-3.1, Veo-3.1-Fast, Veo-3.1-S2V, Veo-3.1-S2V-Fast. Supported values: 16:9 (default), 9:16.

  • model is optional. Supported values:

    Hailuo 01 β€” 720p, 6 sec

    • T2V-01 (default) text-to-video
    • I2V-01 (default) image-to-video
    • I2V-01-live image-to-video, live photo effect
    • S2V-01 subject reference, character/subject consistency
    • T2V-01-Director text-to-video, camera movement control via [<movement>] in prompt (instructions)
    • I2V-01-Director image-to-video, camera movement control via [<movement>] in prompt (instructions)

    Hailuo 02/2.3 β€” resolution and duration options

    • 02 text/image-to-video, native 1080p
    • T2V-2.3 text-to-video
    • I2V-2.3 image-to-video
    • I2V-2.3-Fast image-to-video, faster generation

    Sora & Veo β€” aspectRatio support, higher resolution options

    • Sora-2 OpenAI Sora 2, text/image-to-video, 720p only. Image: exact 1280x720 (16:9) or 720x1280 (9:16)
    • Veo-3.1 Google DeepMind Veo 3.1, text/image-to-video with native audio, 720p/1080p/4K
    • Veo-3.1-Fast Veo 3.1 Fast, text/image-to-video, 720p/1080p/4K
    • Veo-3.1-S2V Veo 3.1 Subject Reference, up to 14 reference images via fileID…fileID14, 720p/1080p/4K
    • Veo-3.1-S2V-Fast Veo 3.1 Subject Reference Fast, up to 14 reference images, 720p/1080p/4K
  • options is optional. Sets resolution and duration. Hailuo 01 models do not support options.

    model options end_frame
    02 512p-6sec, 512p-10sec (I2V only), 768p-6sec, 768p-10sec, 1080p-6sec Yes (768p/1080p only)
    T2V-2.3 768p-6sec, 768p-10sec, 1080p-6sec No
    I2V-2.3 768p-6sec, 768p-10sec, 1080p-6sec No
    I2V-2.3-Fast 768p-6sec, 768p-10sec, 1080p-6sec No
    Sora-2 720p-4sec, 720p-8sec, 720p-12sec No
    Veo-3.1 veo-720p-8sec, veo-1080p-8sec, veo-4k-8sec Yes
    Veo-3.1-Fast veo-720p-8sec, veo-1080p-8sec, veo-4k-8sec Yes
    Veo-3.1-S2V veo-720p-8sec, veo-1080p-8sec, veo-4k-8sec No
    Veo-3.1-S2V-Fast veo-720p-8sec, veo-1080p-8sec, veo-4k-8sec No
  • replyUrl is optional. Callback URL for job completion notifications. API will call the provided replyUrl once MiniMax video completed or failed.
    Maximum length 1024 characters.
    We recommend using sites like webhook.site to test callback URL functionality.

  • replyRef is optional, place here your reference id which will be stored and returned along with this MiniMax video response / result.
    Maximum length 1024 characters.

  • maxJobs is 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 with 502 or 504 while still accepting jobs into the internal queue.

Responses
  • 200 OK

    Use returned videoId to retrieve video status and results using GET /videos/videoId. Check videoURL and/or downloadURL (paid account, no watermarks) for generated video with the status 2 (Completed).

    If you specify the optional parameter replyUrl the API will call the provided replyUrl with 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>"
    }
    
  • 400 Bad Request

    {
      "error": "<Error message>"
    }
    
  • 401 Unauthorized

    {
      "error": "Unauthorized"
    }
    
  • 412 Insufficient credits

    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."
    }
    
  • 422 Unprocessable Content

    Moderated message.

    {
      "error": "Your prompt is too short, please provide more details"
    }
    
  • 429 Too Many Requests

    Wait in a loop for at least 10..30 seconds and retry again.

    There are two possible cases for API response 429:

    1. API query is full and can not accept new videos/create requests. Size of query defined by maxJobs optional 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>"
               }
           ]
       }
      }
      
    2. 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"
      }
      
  • 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())
    
Try It