Other video models
Parameters, sizes, aspect ratios, and input/output reference for Hailuo 3, Grok Imagine, Kling, Veo, Gemini Omni, and Motion.
Every video model other than the Seedance family is served by the le-video provider and shares one asynchronous task API: submit and receive a task ID, poll for status, download the MP4 when it completes.
Each model accepts only its own fixed enumeration of sizes and durations, and no two are alike. Any value outside the table returns 400 and is never forwarded upstream. The tables below are the complete enumerations — there is no "derivable aspect ratio" rule here.
The Seedance family (dreamina-seedance-*) is a separate group — see Dreamina video generation.
Model overview
These models are billed per second of video (meter video_seconds, unit: second).
| Model ID | Name | Input | Audio | Duration (s) |
|---|---|---|---|---|
hailuo-3 | MiniMax Hailuo 3 | Text-to-video / image-to-video | Always on, cannot be disabled | 5–15 (default 5) |
grok-imagine-1.5 | Grok Imagine 1.5 | Image-to-video only | Toggleable (default on) | 3–15 (default 6) |
kling-3.0-turbo | Kling 3.0 Turbo | Text-to-video / image-to-video | Toggleable (default on) | 3–15 (default 5) |
veo-3.1-generate-001 | Veo 3.1 | Text-to-video / image-to-video | Toggleable (default on) | 4 / 6 / 8 (default 8) |
gemini-omni-flash | Gemini Omni Flash | Text-to-video / image-to-video | Not supported | 3–10 (default 8) |
motion_2.0-fast | Motion 2.0 Fast | Text-to-video / image-to-video | Not supported | Fixed 5 |
hailuo-03 is an equivalent spelling of hailuo-3; both IDs work and are identical in capability and billing. Treat the unit price returned by the console or the model discovery endpoint as authoritative. Models your organization has not enabled return 403.
Sizes and aspect ratios
size takes a "WIDTHxHEIGHT" string. The tables are the complete set of legal values.
hailuo-3 / hailuo-03
2K only; 720p and below are rejected.
| size | Aspect ratio |
|---|---|
3360x1440 | 21:9 |
2560x1440 | 16:9 |
1920x1440 | 4:3 |
1440x1440 | 1:1 (default) |
1440x1920 | 3:4 |
1440x2560 | 9:16 |
grok-imagine-1.5
| size | Aspect ratio |
|---|---|
1280x720 | 16:9 (default) |
720x1280 | 9:16 |
960x960 | 1:1 |
544x544 | 1:1 (small) |
736x400 | 16:9 (small) |
400x736 | 9:16 (small) |
kling-3.0-turbo
| size | Aspect ratio | Tier |
|---|---|---|
1280x720 | 16:9 | 720p (default) |
960x960 | 1:1 | 720p |
720x1280 | 9:16 | 720p |
1920x1080 | 16:9 | 1080p |
1440x1440 | 1:1 | 1080p |
1080x1920 | 9:16 | 1080p |
veo-3.1-generate-001
| size | Aspect ratio | Tier |
|---|---|---|
1280x720 | 16:9 | 720p (default) |
720x1280 | 9:16 | 720p |
1920x1080 | 16:9 | 1080p |
1080x1920 | 9:16 | 1080p |
3840x2160 | 16:9 | 4K |
2160x3840 | 9:16 | 4K |
gemini-omni-flash
| size | Aspect ratio |
|---|---|
1280x720 | 16:9 (default) |
720x1280 | 9:16 |
motion_2.0-fast
| size | Aspect ratio |
|---|---|
1280x720 | 16:9 (only legal value) |
Input and output
| Model | Text-to-video | Image-to-video | Reference image limit | Output |
|---|---|---|---|---|
hailuo-3 | Yes | Yes | 4 | MP4 with audio |
grok-imagine-1.5 | No | Required | 1 (first frame) | MP4 |
kling-3.0-turbo | Yes | Yes | 1 (first frame) | MP4 |
veo-3.1-generate-001 | Yes | Yes | 3 | MP4 |
gemini-omni-flash | Yes | Yes | 4 | MP4 (no audio) |
motion_2.0-fast | Yes | Yes | 1 (first frame) | MP4 (no audio) |
grok-imagine-1.5 has no text-to-video path upstream. Submitting without input_reference returns 400 invalid_reference and is never forwarded upstream.
Endpoints
| Operation | Endpoint |
|---|---|
| Create task | POST /v1/videos |
| Get task | GET /v1/videos/{task_id} |
| Download result | GET /v1/videos/{task_id}/content |
The key must carry the ai:video scope:
Authorization: Bearer $TOS_API_KEYRequest parameters
| Field | Type | Required | Description |
|---|---|---|---|
model | string | Yes | A model ID from the table above |
prompt | string | Yes | An empty prompt returns 400 |
size | string | No | "WIDTHxHEIGHT". A value outside the model's enumeration snaps to the legal size with the closest aspect ratio; omitting it uses the model's default |
duration | number | No | Seconds. A value outside the enumeration snaps to the nearest legal value, ties rounding up; omitting it uses the default. Aliases: duration_seconds, seconds |
audio | boolean | No | Only meaningful for models that support audio. hailuo-3 always produces audio regardless |
input_reference | string or string[] | Required for grok-imagine-1.5 | Publicly reachable http(s) image URL. Exceeding the model's reference limit returns 400 |
Billing follows the duration actually rendered, i.e. the value after snapping. Asking a model that only accepts 4/6/8/10 seconds for 5 seconds renders 6 seconds and is billed as 6.
Text-to-video
curl --noproxy '*' "https://ai.tos.run/v1/videos" \
-H "Authorization: Bearer $TOS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "hailuo-3",
"prompt": "A red apple rolling slowly across a white table, cinematic",
"size": "2560x1440",
"duration": 5
}'{
"id": "78a2ab60-9a53-4d2c-99fb-b5f8ca8d4018",
"task_id": "78a2ab60-9a53-4d2c-99fb-b5f8ca8d4018",
"object": "video",
"model": "hailuo-3",
"status": "queued",
"progress": 0,
"created_at": 1786370088,
"expires_at": 1786974888,
"metadata": { "provider": "le-video" }
}Image-to-video
grok-imagine-1.5 must use this path:
curl --noproxy '*' "https://ai.tos.run/v1/videos" \
-H "Authorization: Bearer $TOS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-1.5",
"prompt": "Slow camera push-in with natural light",
"size": "1280x720",
"duration": 6,
"input_reference": "https://example.com/first-frame.jpg"
}'The reference image must be publicly downloadable and stay reachable for the duration of the task — upstream fetches it while generating.
Polling and download
| Field | Description |
|---|---|
id / task_id | Gateway task ID, used for both polling and download |
status | queued → in_progress → completed / failed |
progress | 0–100, display only; never use it to decide terminal state |
metadata.url | Result URL, present once status is completed |
expires_at | When the stored result expires |
status is the only terminal-state signal.
curl --noproxy '*' "https://ai.tos.run/v1/videos/$TASK_ID" \
-H "Authorization: Bearer $TOS_API_KEY"
curl --noproxy '*' "https://ai.tos.run/v1/videos/$TASK_ID/content" \
-H "Authorization: Bearer $TOS_API_KEY" -o output.mp42K generation takes considerably longer than 720p: a 5-second 2K clip from hailuo-3 typically needs more than 7 minutes. Poll no more often than every 15 seconds.
Errors
| HTTP | code | Meaning |
|---|---|---|
| 400 | invalid_size | Size is outside the model's enumeration. The error lists every legal size for that model |
| 400 | invalid_duration | Duration is outside the model's enumeration |
| 400 | invalid_reference | Missing a required reference image, or more references than the model allows |
| 400 | model_not_available_for_routing | The model ID is not in the video catalog |
| 403 | model_not_authorized_for_org | Your organization has not enabled this model |
| 502 / 504 | upstream_error | Upstream returned an error or timed out |