models

MiniMax-Hailuo-2.3

Markdown · JSON

MiniMax-Hailuo-2.3

MiniMax Hailuo 2.3 creates videos from text or a starting image, with controls for motion and camera direction. Choose six seconds at 768P or 1080P, or ten seconds at 768P, for character performances, stylized scenes and product shots that can be reviewed and edited.

About the model

This description covers the model’s capabilities. Available in Ailoot inputs, outputs and options are listed for the selected method below.

MiniMax Hailuo 2.3 is a video-generation model with text-to-video and image-to-video modes. It builds on Hailuo 02 with a focus on physical action, visual style, character micro-expressions and response to motion instructions. Supply a written scene to create a shot from scratch, or use a starting image to establish the opening view and describe the movement that follows.

Physical performance is one of the edition’s main areas of improvement. Hailuo 2.3 aims to make body movements more fluid and controlled, including scenes with a moving camera. Plan the important action before adding decorative detail. A character lifting an object, turning towards another person or moving through a room gives the shot a visible event to evaluate. Decide which movement carries the story, then keep the surrounding instructions consistent with it.

Stylization is another focus. The model supports work in anime and illustration as well as styles such as ink-wash painting and game CG. Describe the visual treatment you want, and keep the appearance coherent with the scene. If a starting image already establishes a drawing style, use the text to guide the animation rather than introducing a competing description of the character’s design. Review the whole clip for whether that treatment remains readable during movement.

The model also focuses on facial performance and subtle expression changes. Prepare a character shot around the reaction that matters: noticing an object, becoming curious or responding with a small smile. A close view can make that change easier to assess, while a large sequence of gestures may distract from it. Check the face before, during and after the reaction rather than judging only a representative still frame.

Object motion is useful for product-centred scenes. An original brief might show a small ceramic vase turning in warm side light while the camera gradually approaches it. Identify which properties must remain recognisable, such as the silhouette, rim and surface finish. Review those details through the movement, because a convincing atmosphere alone does not establish a faithful product view.

For text-to-video, the required description can contain up to 2,000 characters. State the subject, action, setting and visual style in a coherent order. Image-to-video requires a starting-frame image, with an optional description of up to 2,000 characters. The image fixes the opening composition, so prepare the subject and framing before requesting motion. Leave visible space where an arm, object or character needs to move.

The starting image accepts JPG, JPEG, PNG or WebP, must be smaller than 20 MB, needs a short edge greater than 300 pixels and must have an aspect ratio between 2:5 and 5:2. It can be supplied as a public image URL or a Base64 data URL. Choose a clear opening picture rather than relying on the animation to repair an obscured face or an already cropped action.

Hailuo 2.3 generates at 24 frames per second. A six-second shot can use 768P or 1080P; a ten-second shot uses 768P. The defaults are six seconds and 768P. Choose the length for the action you want to see: a brief reaction may fit a short shot, while a slower movement needs more room. Read the completed result’s actual width and height when placing the clip in an edit, since a resolution label alone is not the full framing decision.

Camera direction can use bracketed commands. The available controls cover trucking, panning, pushing, pedestal movement, tilting, zooming, shaking, tracking and a static shot. A command such as [Push in] directs the approach; commands grouped inside one bracket act together, while commands placed in order describe a sequence. MiniMax recommends at most three simultaneous commands. Keep the camera movement compatible with the subject’s action so the main event remains easy to follow.

Automatic prompt optimisation is enabled by default and can be disabled for closer control over the supplied wording. Optional fast preprocessing reduces the optimisation time when that optimisation is enabled; it is a separate setting from choosing the Hailuo 2.3 Fast model. Standard Hailuo 2.3 supports both creation modes, while Fast is the distinct image-to-video edition. Choose the edition based on whether the project begins with text alone or an existing frame.

The generation workflow returns an asynchronous task identifier, then reports preparation, queueing, processing, success or failure. On success, the result supplies a file identifier and the actual video dimensions, and the completed video is retrieved for download. Save the clip while its download address is valid. The maker’s current video-download reference gives the returned download URL a one-hour lifetime. For an edited sequence, retain each shot with its prompt and starting image so that the chosen creative direction remains traceable during revision.

Review action, physical continuity, facial or product details, visual style and camera behaviour in the saved clip. Watch the whole shot, then inspect its beginning and end where it will join other material. If the request contains too many competing movements, simplify the main action; if the opening design is unclear, improve the starting image. Select a shot that communicates the intended event, then add narration, titles and transitions in the editing workflow.

Ailoot · Video POST /v1/videos/generations MiniMax-Hailuo-2.3

MiniMax-Hailuo-2.3

MiniMax /MiniMax-Hailuo-2.3

Overview

MiniMax Hailuo 2.3 creates videos from text or a starting image, with controls for motion and camera direction. Choose six seconds at 768P or 1080P, or ten seconds at 768P, for character performances, stylized scenes and product shots that can be reviewed and edited.

Accepted inputs
Text · Images
Results
Video

Available in Ailoot · inputs & methods

Ailoot · Video POST /v1/videos/generations
Input types
text, image
Output types
video
Output format
mp4
FieldTypeRequirementValues & limitsDefault
FieldmodelTypestringRequirementRequiredValues & limits
MiniMax-Hailuo-2.3
Default—
FieldpromptTypestringRequirementRequiredValues & limits
Minimum length: 1
Maximum length: 2,000
Unit: Unicode characters
Default—
FielddurationTypeintegerRequirementOptionalValues & limits
6, 10
Conditions: 10secondsrequires768P
Unit: seconds
Default6
FieldresolutionTypestringRequirementOptionalValues & limits
768P, 1080P
Conditions: 1080Prequires6seconds
Default768P
Fieldfirst_frame_imageTypehttps_url|data_image_urlRequirementOptionalValues & limits
Maximum decoded bytes: 20,971,520
MIME types: image/jpeg, image/png, image/webp
Minimum dimension (exclusive): 300
Aspect ratio range: 2:5, 5:2
Default—
Fieldprompt_optimizerTypebooleanRequirementOptionalValues & limitsDefault—
Fieldfast_pretreatmentTypebooleanRequirementOptionalValues & limitsDefault—
Input material combinations

Image to video · Required: prompt, first_frame_image

Text to video · Required: prompt

Method parameters and lifecycle
ParameterContract
Parametermaterial_typesContracttext, image
ParameterrequiredContractnull
Parameteroptional_controlsContractnull

Lifecycle: submit_once_poll_original

GET /v1/videos/{request_id}

GET /v1/videos/generations/{request_id}

GET /v1/videos/{request_id}/content

GET /v1/videos/generations/{request_id}/content

Method shapes and IDs are exact; supplier capability is separate from admission.

Pricing

Ailoot method rates

Ailoot VideoPOST /v1/videos/generations
Output
$0.28 per 6 s video at 768p

Ailoot reserves an estimated amount before a request. After the result, it settles the final charge from measured usage. Streaming settlement uses the final usage record. How reservation and settlement work →

Reference tariff details

Model-level reference schedules do not change method selection, quotes or charges. Active charges use the selected Ailoot method rates.

MiniMax-Hailuo-2.3

Prices by configuration

ConfigurationBilling conditionsCharge
ConfigurationMiniMax-Hailuo-2.3 · Default configurationBilling conditionsDefault configurationCharge
Input · Input $0.00 per call
Output · Output $0.60 per call
MiniMax-Hailuo-2.3

Prices by configuration

ConfigurationBilling conditionsCharge
ConfigurationMiniMax-Hailuo-2.3 · Default configurationBilling conditionsDefault configurationCharge
Input · Input $0.00 per call
Output · Output $1.20 per call

Example requests

Ailoot · Video

Video example
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl https://api.ailoot.ai/v1/videos/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "MiniMax-Hailuo-2.3", "prompt": "A person walks slowly through a quiet garden as the camera tracks from the side.", "duration": 6, "resolution": "768P"}'

Receive and save results

Ailoot · Video

mp4

  • GET /v1/videos/{request_id}
  • GET /v1/videos/generations/{request_id}
  • GET /v1/videos/{request_id}/content
  • GET /v1/videos/generations/{request_id}/content
Check job status
GET status
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_VIDEO_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_VIDEO_ID
video_id=$(python3 -c 'import os, urllib.parse; print(urllib.parse.quote(os.environ["AILOOT_VIDEO_ID"], safe=""))') || exit 1
curl "https://api.ailoot.ai/v1/videos/generations/$video_id" \
  -H "Authorization: Bearer $AILOOT_API_KEY"
Other content reads
GET content
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_VIDEO_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_VIDEO_ID
video_id=$(python3 -c 'import os, urllib.parse; print(urllib.parse.quote(os.environ["AILOOT_VIDEO_ID"], safe=""))') || exit 1
curl "https://api.ailoot.ai/v1/videos/generations/$video_id/content" \
  -H "Authorization: Bearer $AILOOT_API_KEY" \
  --output video.mp4
Keep all completed results

Save every completed video or returned file; retrieve every actual returned asset URL.

Preserve every returned data item/output index. content_url is first only; fetch every actual content path/asset. GETcontentwithoutindex isnotalloutputs.

If the original response needs checking

Read existing original job; never resubmit unknown send.

Response fields
FieldType
FieldidTypestring
FieldobjectTypestring
FieldmodelTypestring
FieldstatusTypestring
Fieldcontent_urlTypesigned URL
Fielddata[]Typesigned URL
FieldusageTypeobject
Fieldresult_pending_checkTypeboolean
Errors and next steps
ResponseConditionNext step
Response400 · invalid_request_errorConditionInvalid required fields, material representation or parameter valueNext stepCorrect the indicated fields before a new creation request.
Response409 · video_not_readyConditionOriginal result content is not yet availableNext stepPoll the original returned ID and respect Retry-After.
Responseserver_errorConditionThe returned response says the operation or result requires a checkNext stepKeep the original returned operation/task ID, request headers and response; continue supported reads of that original operation. Do not resubmit the creation request.

Aliases

Model aliases

Ailoot MiniMax-Hailuo-2.3
Ailoot Ultra MiniMax-Hailuo-2.3

Method path aliases

/v1/videos/generations, /videos, /videos/generations

Related caller IDs

MiniMax-Hailuo-2.3, MiniMax-Hailuo-2.3

Ailoot Ultra · Video POST /v1/videos MiniMax-Hailuo-2.3

MiniMax-Hailuo-2.3

MiniMax /MiniMax-Hailuo-2.3

Overview

MiniMax Hailuo 2.3 creates videos from text or a starting image, with controls for motion and camera direction. Choose six seconds at 768P or 1080P, or ten seconds at 768P, for character performances, stylized scenes and product shots that can be reviewed and edited.

Accepted inputs
Text
Results
Video

Available in Ailoot · inputs & methods

Ailoot Ultra · Video POST /v1/videos
Input types
text
Output types
video
Output format
mp4
Output count
Up to 1 output
FieldTypeRequirementValues & limitsDefault
FieldmodelTypestringRequirementRequiredValues & limits
MiniMax-Hailuo-2.3
Default—
FieldpromptTypestringRequirementRequiredValues & limits
Minimum length: 1
Maximum length: 2,000
Conditions: For 768P: at most 2000 Unicode code points. For 1080P: fewer than 200 Unicode code points (maximum 199). The prompt must contain non-whitespace text.
Unit: Unicode characters
Default—
FielddurationTypeintegerRequirementRequiredValues & limits
6
Unit: seconds
Default—
FieldresolutionTypestringRequirementRequiredValues & limits
768P, 1080P
Default—
Input material combinations

Text to video · Required: prompt

Method parameters and lifecycle
ParameterContract
Parametercontent_typeContractapplication/json
ParameterrequiredContractmodel, prompt, duration, resolution
Parameterother_optionsContractfalse
ParameterdurationContract6
ParameterresolutionContract768P, 1080P
Parameterprompt_max_charactersContract2000
Parametermaterial_typesContracttext
Parameterprompt_max_characters_by_resolutionContract{"768P":2000,"1080P":199}

Method aliases: /v1/videos/generations, /videos, /videos/generations

Lifecycle: submit_once_poll_original

GET /v1/videos/{request_id}

GET /v1/videos/generations/{request_id}

GET /v1/videos/{request_id}/content

GET /v1/videos/generations/{request_id}/content

Create once and save returned ID.

Poll original status; retain every completed asset and duration.

Pricing

Tariff references do not add request options. Supported parameters are listed for the selected method.

Fast mode
Not specified When fast mode is selected
Flex mode
Not specified When flex mode is selected
Maximum reasoning effort
Not specified When maximum reasoning effort uses the default adjustment

Ailoot rates

Prices by configuration

Match each charge to the conditions shown. Use one rate for each set of alternative configurations.

ConfigurationRate scheduleNominal clip duration, secondsResolutionBilling unitCharge
ConfigurationBase token ratesRate scheduleBase rateNominal clip duration, seconds—Resolution—Billing unit—Charge
Input · Input tokens — / 1K tokens
Output · Output tokens — / 1K tokens
Input · Cache read — / 1K tokens
Input · Cache write — / 1K tokens
Input · Cache write, 1 hour — / 1K tokens
ConfigurationUltraRate schedule—Nominal clip duration, seconds6Resolution1080PBilling unitper nominal 6s output clipCharge
Output · nominal 6s output clip $1.2 per nominal 6s output clip
ConfigurationUltraRate schedule—Nominal clip duration, seconds6Resolution768PBilling unitper nominal 6s output clipCharge
Output · nominal 6s output clip $0.6 per nominal 6s output clip

Ailoot reserves an estimated amount before a request. After the result, it settles the final charge from measured usage. Streaming settlement uses the final usage record. How reservation and settlement work →

Reference tariff details

Model-level reference schedules do not change method selection, quotes or charges. Active charges use the selected Ailoot method rates.

MiniMax-Hailuo-2.3

Prices by configuration

ConfigurationBilling conditionsCharge
ConfigurationMiniMax-Hailuo-2.3 · Default configurationBilling conditionsDefault configurationCharge
Input · Input $0.00 per call
Output · Output $0.60 per call
MiniMax-Hailuo-2.3

Prices by configuration

ConfigurationBilling conditionsCharge
ConfigurationMiniMax-Hailuo-2.3 · Default configurationBilling conditionsDefault configurationCharge
Input · Input $0.00 per call
Output · Output $1.20 per call

Example requests

Ailoot Ultra · Video

curlcurl · 1080P / 6 seconds
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "MiniMax-Hailuo-2.3", "prompt": "A cat in a spacesuit walking on the Moon", "duration": 6, "resolution": "768P"}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "MiniMax-Hailuo-2.3", "prompt": "A cat in a spacesuit walking on the Moon", "duration": 6, "resolution": "1080P"}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json

Receive and save results

Ailoot Ultra · Video

mp4

  • GET /v1/videos/{request_id}
  • GET /v1/videos/generations/{request_id}
  • GET /v1/videos/{request_id}/content
  • GET /v1/videos/generations/{request_id}/content
Check job status
GET status
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/$operation_id" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
    for x in r.get("data",[]):print(x)
PY_STATUS
Save all completed assets
GET all completed assets
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
    if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
    u=urljoin("https://api.ailoot.ai",x)
    z=urlsplit(u)
    if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
    urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
  curl --fail-with-body --silent --show-error "$asset_url" \
    -H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
  index=$((index + 1))
done < asset-urls.txt
Other content reads
GET content
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/$operation_id/content" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
Keep all completed results

Save every completed video or returned file; retrieve every actual returned asset URL.

Completed data[] contains all owned signed content URLs. Fetch each returned URL, or use the content endpoint with index set to an actual output index. A failed original job may return charge_pending_check; check that original job rather than creating it again.

If the original response needs checking

Read existing original job; never resubmit unknown send.

Maximum outputs: 1.

Response fields
FieldType
FieldidTypestring
FieldobjectTypestring
FieldmodelTypestring
FieldstatusTypestring
Fielddata[]Typesigned content URL
Fieldcharge_pending_checkTypeboolean
Fielderror.codeTypestring
Fielderror.messageTypestring
Fieldrequested_nominal_duration_secondsTypeinteger
Fieldmeasured_duration_secondsTypenumber
FieldwidthTypeinteger
FieldheightTypeinteger
Errors and next steps
ResponseConditionNext step
Response400 · invalid_request_errorConditionInvalid required fields, material representation or parameter valueNext stepCorrect the indicated fields before a new creation request.
Response409 · video_not_readyConditionOriginal result content is not yet availableNext stepPoll the original returned ID and respect Retry-After.
Responseserver_errorConditionThe returned response says the operation or result requires a checkNext stepKeep the original returned operation/task ID, request headers and response; continue supported reads of that original operation. Do not resubmit the creation request.

Aliases

Model aliases

Ailoot MiniMax-Hailuo-2.3
Ailoot Ultra MiniMax-Hailuo-2.3

Method path aliases

/v1/videos/generations, /videos, /videos/generations

Related caller IDs

MiniMax-Hailuo-2.3, MiniMax-Hailuo-2.3

FAQ · MiniMax-Hailuo-2.3
What inputs and results are available?

POST /v1/videos/generations · MiniMax-Hailuo-2.3: text, image → video

POST /v1/videos · MiniMax-Hailuo-2.3: text → video

Which fields does the request use?

POST /v1/videos/generations · MiniMax-Hailuo-2.3: model, prompt, duration, resolution, first_frame_image, prompt_optimizer, fast_pretreatment

POST /v1/videos · MiniMax-Hailuo-2.3: model, prompt, duration, resolution

What limits apply?

POST /v1/videos/generations · MiniMax-Hailuo-2.3: prompt.maximum_length: 2000

POST /v1/videos · MiniMax-Hailuo-2.3: prompt.maximum_length: 2000

More details

Connect Ailoot to Claude Code, OpenCode, Hermes or your own app.

The company and its project portfolio

The company and its project portfolio: millions of customers; monthly sales in the billions.

Buy tokens at a discount.

Subscription discounts for regular use. Promo codes offer up to 50% off token purchases.

Subscription
Choose a discounted plan for your regular requests.
Promo code: up to 50% off
Enter your code at checkout. The price updates to reflect the current promotion.
Spending in your history
The model, tokens and amount are recorded for each request.

Choose a subscription · View model prices

Connect the API to a product you sell.

Use Ailoot in SaaS, apps and bots under its official service offer and licence agreement. Request a reseller licence for resale.

Commercial application
Add text, image, video and audio generation to paid features in your service.
Reseller licence
Send a description of your project and how you provide access. Request written terms for use and resale.
Documents on the website
The service offer, licence agreement and data processing policy are available before you connect.

Request a reseller licence · Service offer and licence agreement