A restrained cinematic comedy shot of ONE muscular adult amateur boxer reclining in a dental examination chair, wearing a plain dark charcoal T-shirt. Tight close-up of his face, neck and upper chest; his arms and all hands remain OUTSIDE the frame throughout. A single small dental inspection mirror on a thin metal stem enters slowly from the far left edge, held by an unseen dentist. It stays near the image edge and never touches the man. He notices it with only his eyes, swallows once with a visible small throat movement, then tightens his lips and furrows his brow while trying to seem brave. His head remains nearly still. Natural skin texture and subtle coherent facial muscle movement, consistent face, softly blurred clinical room background, fixed camera and soft light. One continuous six-second take, no cuts. No gloves, hands or extra people in frame, no mouth interior, no treatment, no blood, no writing, no logos, no watermark.
Hailuo 2.3 Pro Text to Video API
minimax/hailuo-2.3/pro/text-to-videoHailuo 2.3 Pro Text to Video turns descriptive text prompts into cinematic native 1080p video clips with true-to-life physics simulation, high dynamic range lighting, and refined motion details. It accurately follows intricate multi-subject choreography, fluid camera pans, and natural inertia while delivering studio-grade visual clarity across fixed 6-second generations.
Examples
REST API Spec
Quick Start
Submit an endpoint request and poll for status. Replace example URLs with your accessible files.
Step 1: Configure API authentication
Obtain an API key from the dashboard and include Authorization: Bearer <API_KEY> in every request header.
- Submission Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Auth Header
- Authorization: Bearer VIDGO_API_KEY
Step 2: Submit a generation task
POST /api/generate/submit. Pass model and optional callback_url at the root level, with generation parameters inside input.
REQUEST_BODY=$(cat <<'JSON'
{
"model": "minimax/hailuo-2.3/pro/text-to-video",
"input": {
"prompt": "A quiet forest in morning light, with a slow camera pan.",
"duration": 6,
"resolution": "1080p",
"prompt_optimizer": false
}
}
JSON
)
RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
CODE=$(printf '%s' "$RESPONSE" | jq -r '.code // empty')
if [ "$CODE" != "0" ] && [ "$CODE" != "200" ]; then
printf 'API error: %s
' "$RESPONSE" >&2
exit 1
fi
printf '%s
' "$RESPONSE"Step 3: Poll for task completion
Poll status with task_id; continue while not_started or running, and stop on finished or failed. Read video URLs from data.files[].file_url on success, or data.error_message on failure.
Status Endpoint
GET https://api.vidgo.ai/api/generate/status/{task_id}Poll status using task_id; continue while not_started or running, stop when finished or failed. On success, read data.files[].file_url; on failure, read data.error_message.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "task-example",
"status": "not_started",
"created_time": "2026-09-23T08:00:00"
}
}{
"code": 200,
"data": {
"task_id": "task-unified-...",
"status": "finished",
"files": [
{
"file_url": "https://storage.vidgo.ai/generated/video.mp4",
"file_type": "video"
}
],
"created_time": "2026-08-22T10:00:00Z",
"progress": 100,
"error_message": null
}
}Complete end-to-end script example
Expand to view a production-ready script with retry logic, error handling, and timeout safeguards.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "minimax/hailuo-2.3/pro/text-to-video",
"input": {
"prompt": "A quiet forest in morning light, with a slow camera pan.",
"duration": 6,
"resolution": "1080p",
"prompt_optimizer": false
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
BUSINESS_CODE=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Submit failed:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
START_TIME=$(date +%s)
POLL_DELAY=2
while true; do
if [ $(( $(date +%s) - START_TIME )) -ge 600 ]; then
printf 'Timed out after 600 seconds
' >&2
exit 1
fi
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
BUSINESS_CODE=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Status request failed:
%s
' "$STATUS_RESPONSE" >&2
exit 1
fi
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep "$POLL_DELAY"
if [ "$POLL_DELAY" -lt 10 ]; then POLL_DELAY=$((POLL_DELAY + 1)); fi
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneRequest Parameters (input object)
Supported generation parameters inside the input object when submitting a POST request to /api/generate/submit:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | — | Required nonblank string, trimmed before validation. Maximum 5,000 Unicode characters. |
| duration | integer | No | 6 | Only 6 seconds; defaults to 6. |
| resolution | string | No | 1080p | Fixed to 1080p for this endpoint; used when omitted. |
| prompt_optimizer | boolean | No | — | Optional boolean; omit to leave unspecified upstream. No API default. The playground starts with false; no extra charge. |
Response Fields (query result)
Task details returned when polling GET /api/generate/status/{task_id}:
| Field | Type | Description |
|---|---|---|
| code | integer | Business response code, 200 on success. |
| data.task_id | string | Globally unique asynchronous task identifier. |
| data.status | string | Execution status: not_started, running, finished, or failed. |
| data.files | array | Generated video files upon completion, each with file_url and file_type. |
| data.error_message | string | null | Error description if task fails. |
Task Lifecycle
Clients should inspect the status field and stop polling when reaching finished or failed:
not_startedTask received and queued for execution.
runningGeneration is in progress.
finishedGeneration complete; retrieve video URL from data.files.
failedGeneration failed; inspect data.error_message; deducted credits are refunded per standard policy.
Polling & Error Handling
- Recommended Polling IntervalStart polling every 2–3 seconds, increasing to 5 seconds as the task continues, to avoid excessive requests.
- Network Fluctuations & RetriesIf status polling encounters 5xx or timeouts, the task is still running; retry querying after a brief pause.
- Asynchronous Webhook CallbackProvide callback_url at the root of the request payload to receive the completed task result automatically via POST.
Specifications
| Specification | Value | Description |
|---|---|---|
| Model ID | minimax/hailuo-2.3/pro/text-to-video | Root-level model field. |
| Resolution | 1080p | Fixed to 1080p for this endpoint; used when omitted. |
| Duration | 6s | Only 6 seconds; defaults to 6. |
Hailuo 2.3 Pro Text to Video API frequently asked questions
What is the Hailuo 2.3 Pro Text to Video API?
Hailuo 2.3 Pro Text to Video is MiniMax's premier text-to-video generation model, developed for high-end cinematic motion and broadcast-grade visual production. It converts detailed natural language prompts into native 1080p full HD video clips with advanced physical simulation, volumetric lighting, and realistic camera choreography across focused 6-second sequences. Leveraging MiniMax's high-capacity multi-modal diffusion architecture, it renders realistic fluid, cloth, and character dynamics while maintaining pristine edge definition and frame-to-frame coherence. Developers can integrate the model programmatically through Vidgo's REST API or test creative ideas immediately in the interactive web playground above.
Does Hailuo 2.3 Pro Text to Video output native 1080p resolution?
Yes, Hailuo 2.3 Pro Text to Video outputs native 1080p full HD resolution directly from the generative model rather than relying on spatial upscaling, delivering razor-sharp textures, authentic depth of field, and filmic detail.
Why is Hailuo 2.3 Pro Text to Video limited to a 6-second duration?
The Pro tier is architected to maximize per-frame visual complexity, photoreal physics, and cinematic rendering density within a standardized 6-second window. The API only accepts duration=6; configuring any other duration value will result in a validation error.
How does pricing work for Hailuo 2.3 Pro Text to Video?
Hailuo 2.3 Pro Text to Video is billed at a fixed rate of 60 credits ($0.300 based on $0.005 per credit) per 6-second generation. Using the prompt optimizer does not incur any additional charges.
How does Hailuo 2.3 Pro Text to Video handle complex physical motion?
The model incorporates a dedicated world-simulation physical prior that accurately accounts for gravitational pull, momentum, fluid splashing, smoke dissipation, and collision dynamics, preventing unnatural morphing during rapid movements.
Can I use up to 5,000 characters in Hailuo 2.3 Pro Text to Video prompts?
Yes, the prompt field supports up to 5,000 Unicode characters, allowing directors and prompts engineers to articulate comprehensive shot lists, lighting temperatures, actor staging, lens types, and sequential narrative progression.
When should I choose Hailuo 2.3 Pro Text to Video instead of the Standard endpoint?
Choose Hailuo 2.3 Pro Text to Video when your production requires native 1080p full HD clarity, broadcast-quality lighting, and intense physical action within a 6-second timeframe. If your workflow prioritizes rapid drafting, lower unit cost (35 credits for 6s), or requires 10-second extended shots (70 credits), the Standard Text to Video endpoint is the recommended choice.