Hailuo 2.3 Text to Video API
/v1/tasks All models are called through the Unified Async API POST /v1/tasks endpoint; only the input fields differ (see input parameters below).
Model summary
| Model name | hailuo-2.3/text-to-video |
|---|---|
| Type | Video generation (text-to-video) |
| Endpoint | POST /v1/tasks |
| Pricing | See HiAPI Pricing |
MiniMax Hailuo 2.3 text-to-video: excellent motion physics with 6s/10s per-video pricing on the standard route.
Production guidance
- For production, pass callback.url at the top level of the request body so HiAPI can notify your service when the task reaches a terminal state.
- GET /v1/tasks/:id is better for local debugging, low-volume jobs, or fallback reconciliation if a callback is missed.
- Use callback.when=final. Both success and fail are terminal states, so your service should deduplicate by taskId.
Best suited for
Hailuo 2.3 excels at motion physics — natural humans and fluids.
promptTwo duration tiers with fixed prices on the standard route.
durationRequest parameters
model string required Fixed value hailuo-2.3/text-to-video.
input object required Business parameters. Put Hailuo 2.3 Text to Video-specific configuration here.
prompt string required Text description of the video to generate.
duration enum optional Duration of the generated video in seconds.
prompt_optimizer boolean optional Automatically optimize the prompt for better results.
callback object optional Optional callback configuration. When set, HiAPI notifies your service when the task reaches a terminal state.
url string required Required when callback is set; HTTPS URL that receives terminal task notifications.
when enum optional Callback trigger timing. Use final.
Example requests
Tested with defaults on the standard route.
{
"model": "hailuo-2.3/text-to-video",
"input": {
"prompt": "A translucent glass whale swimming slowly through pink sunset clouds above a calm ocean, gentle camera orbit, dreamy atmosphere, cinematic",
"duration": "6"
}
}Getting the result
- The response returns a taskId immediately without waiting for generation to finish.
- In production, prefer waiting for callback.url to receive the terminal notification. For local debugging, poll GET /v1/tasks/:id.
- When status=success, download the generated video from output[].url.
- When status=fail, fix the request based on the returned error instead of retrying the same invalid payload.