Animate the exact jumping spider in this first frame. In one uninterrupted macro shot it takes two short sideways steps on the observation surface, rotates its body to face the camera, lifts its front pair of legs and holds still. Preserve its eight legs, large forward-facing eyes, compact body and detailed hairs without adding appendages. Natural tiny foot contacts and deliberate pauses. Keep the camera, background and lighting fixed with enough depth of field to see the body. No cuts, no lettering, no logos, no advertising, no watermark.
Hailuo 2.3 Standard Image to Video API
minimax/hailuo-2.3/standard/image-to-videoHailuo 2.3 Standard Image to Video animates static starting images into expressive 768p video scenes, supporting 6-second or 10-second outputs, natural facial micro-expressions, and responsive motion prompt control. It preserves original character identity, compositional framing, and lighting atmosphere while introducing fluid physical movement and cinematic camera transitions.

Required first frame. Playground uploads support JPG, PNG and WebP, up to 10 MiB. Use JSON mode to supply an HTTP(S) URL.
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/standard/image-to-video",
"input": {
"prompt": "A quiet forest in morning light, with a slow camera pan.",
"duration": 6,
"resolution": "768p",
"prompt_optimizer": false,
"start_image_url": "https://example.com/start-image.png"
}
}
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/standard/image-to-video",
"input": {
"prompt": "A quiet forest in morning light, with a slow camera pan.",
"duration": 6,
"resolution": "768p",
"prompt_optimizer": false,
"start_image_url": "https://example.com/start-image.png"
}
}
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 | 6 or 10 seconds; defaults to 6. |
| resolution | string | No | 768p | Fixed to 768p for this endpoint; used when omitted. |
| start_image_url | string | Yes | — | Required first-frame HTTP(S) image URL with a hostname and no embedded credentials. End frames, arrays and data URLs are not supported. |
| 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/standard/image-to-video | Root-level model field. |
| Resolution | 768p | Fixed to 768p for this endpoint; used when omitted. |
| Duration | 6 / 10s | 6 or 10 seconds; defaults to 6. |
Hailuo 2.3 Standard Image to Video API frequently asked questions
What is the Hailuo 2.3 Standard Image to Video API?
Hailuo 2.3 Standard Image to Video is a MiniMax model for video generation from images. It animates static images into continuous 768p video scenes based on starting image inputs and text prompts, supporting 6-second or 10-second clips, subtle facial micro-expressions, and physical motion simulation. Built on MiniMax's enhanced multimodal video architecture, it preserves character identity, compositional framing, and lighting texture while generating natural body movements and cinematic camera transitions. You can call it programmatically or try it from the playground above.
What starting image formats are supported by Hailuo 2.3 Standard Image to Video?
The endpoint accepts publicly accessible HTTP(S) URLs pointing to JPG, PNG, or WebP images via the start_image_url parameter. In the interactive playground, images up to 10 MiB can be uploaded directly.
Does Hailuo 2.3 Standard Image to Video support an end frame?
This endpoint focuses strictly on start-frame guided generation through the start_image_url parameter. To steer the conclusion of your video, describe the closing action, subject placement, and final camera framing directly within the prompt.
How does Hailuo 2.3 Standard Image to Video preserve character facial likeness?
The model extracts identity and textural features from the starting frame to maintain facial anatomy, hair details, and costume consistency across the entire clip, allowing natural head turns and micro-expressions without facial warping.
Can Hailuo 2.3 Standard Image to Video generate 10-second animations?
Yes. The endpoint supports discrete duration options of 6 seconds (default, 35 credits) and 10 seconds (70 credits). Selecting 10 seconds provides ample temporal span for extended character dialogue gestures and multi-angle scene choreography.
How is Hailuo 2.3 Standard Image to Video billed?
Billing is calculated on a fixed per-video basis (1 credit = $0.005). A 6-second 768p video costs 35 credits ($0.175), while a 10-second 768p video costs 70 credits ($0.350). Enabling prompt optimization incurs no extra charges.
When should creators choose Hailuo 2.3 Standard Image to Video over Pro?
The Standard tier is recommended when you need flexible 6-second or 10-second durations, reliable 768p output, and economical per-video rates for rapid asset iteration. Choose Hailuo 2.3 Pro Image to Video when your production requires native 1080p Full HD fidelity for commercial showcase pieces.