Omni
Unified Omni video generation with Kling 3.0 Omni. Combine prompts, images, Elements, and reference videos. Async task API: submit, poll, then download.
Generate video with the Kling 3.0 Omni model using a flexible mix of inputs: text prompts, first/last frames, reference images, Elements, feature videos, and base videos.
Supports multi-shot storytelling, native / original / off audio, 720p / 1080p / 4k resolution, and 3–15 second duration.
This is an async task-based API: submit a request to receive a task id, poll for status, then download the video when complete.
Only Kling 3.0 Omni is supported.
Base URL
https://api.autorouter.top— Production
Authentication
BearerAuth: http (bearer)
Authenticate using a Bearer Token.
Format: Authorization: Bearer sk-xxxxxx
Endpoints
POST /kling/omni-video/kling-3.0-omni
Create Video Generation Task
Create an Omni video generation task from prompts, images, Elements, and/or videos.
Headers
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
Content-Type | string | Yes | application/json | Data exchange format |
Authorization | string | Yes | - | Auth header. Format: Bearer sk-xxxxxx |
Request Body
Content-Type: application/json
Example (prompt only):
{
"contents": [
{
"type": "prompt",
"text": "Change the color of the parrot’s feathers to match the reference image. Keep all other elements of the video unchanged."
}
],
"settings": {
"resolution": "1080p",
"duration": 5,
"audio": "native",
"multi_shot": false
},
"options": {
"callback_url": "https://xxx/callback",
"external_task_id": "",
"watermark_info": {
"enabled": false
}
}
}Example (first_frame & refer_image):
{
"contents": [
{
"type": "prompt",
"text": "Change the color of the parrot’s feathers to match the reference image. Keep all other elements of the video unchanged."
},
{
"type": "first_frame",
"url": "https://example.com/first.png",
"id": "image_1"
},
{
"type": "refer_image",
"url": "https://example.com/refer.png",
"id": "image_2"
}
],
"settings": {
"resolution": "1080p",
"duration": 5,
"audio": "native",
"multi_shot": false
},
"options": {
"callback_url": "https://xxx/callback",
"external_task_id": ""
}
}Example (first_frame & last_frame & element):
{
"contents": [
{
"type": "prompt",
"text": "Change the color of the parrot’s feathers to match the reference image. Keep all other elements of the video unchanged."
},
{
"type": "first_frame",
"url": "https://example.com/first.png",
"id": "image_1"
},
{
"type": "last_frame",
"url": "https://example.com/last.png",
"id": "image_2"
},
{
"type": "element",
"element_id": "162",
"id": "element_1"
},
{
"type": "element",
"element_id": "163",
"id": "element_2"
}
],
"settings": {
"resolution": "1080p",
"duration": 5,
"audio": "native",
"multi_shot": true
},
"options": {
"callback_url": "https://xxx/callback",
"external_task_id": ""
}
}Example (feature_video):
{
"contents": [
{
"type": "prompt",
"text": "Change the color of the parrot’s feathers to match the reference image. Keep all other elements of the video unchanged."
},
{
"type": "feature_video",
"url": "https://example.com/feature.mp4",
"id": "video_1"
}
],
"settings": {
"resolution": "4k",
"audio": "off",
"multi_shot": true
},
"options": {
"callback_url": "https://xxx/callback",
"external_task_id": ""
}
}Example (base_video):
{
"contents": [
{
"type": "prompt",
"text": "Change the color of the parrot’s feathers to match the reference image. Keep all other elements of the video unchanged."
},
{
"type": "base_video",
"url": "https://example.com/base.mp4",
"id": "video_1"
}
],
"settings": {
"resolution": "1080p",
"audio": "original",
"multi_shot": false
},
"options": {
"callback_url": "https://xxx/callback",
"external_task_id": ""
}
}Properties:
| Name | Type | Required | Default | Enum | Description |
|---|---|---|---|---|---|
contents | object[] | Yes | - | - | Reference inputs (prompts, images, Elements, videos, etc.) |
contents[].type | string | Yes | - | prompt, first_frame, last_frame, refer_image, feature_video, base_video, element | Input type |
settings | object | No | - | - | Output config such as resolution and duration |
settings.multi_shot | boolean | No | true | - | Whether to generate multi-shot video |
settings.audio | string | No | off | native, original, off | Whether to generate audio for the video |
settings.resolution | string | No | 720p | 720p, 1080p, 4k | Video resolution |
settings.aspect_ratio | string | No | 16:9 | 16:9, 9:16, 1:1 | Aspect ratio (width:height); required when there is no first frame or reference video |
settings.duration | int | No | 5 | 3–15 | Duration in seconds |
options | object | No | - | - | General config such as callback URL and watermark |
options.callback_url | string | No | - | - | Callback URL for task status changes |
options.external_task_id | string | No | - | - | Custom task ID; must be unique within the account |
options.watermark_info | object | No | - | - | Whether to also generate a watermarked result |
contentsobject[](Required)
Reference input collection. Example format:
[
{
"type": "prompt",
"text": "string"
},
{
"type": "first_frame",
"url": "string",
"id": "string"
},
{
"type": "last_frame",
"url": "string",
"id": "string"
},
{
"type": "refer_image",
"url": "string",
"id": "string"
},
{
"type": "feature_video",
"url": "string",
"id": "string"
},
{
"type": "base_video",
"url": "string",
"id": "string"
},
{
"type": "element",
"element_id": "string",
"id": "string"
}
]Input type:
prompt: Text promptfirst_frame: First-frame imagelast_frame: Last-frame imagerefer_image: Element / scene reference imagefeature_video: Feature reference videobase_video: Base video to editelement: Element
{
"type": "prompt",
"text": "string"
}text: Prompt content, max 3072 characters (recommended ≤ 2500)- Multi-shot format:
"shot n, m, words; shot n, m, words;"(separated by standard semicolons), where:n: shot sequence number (1–6 shots supported)m: shot duration in seconds (each shot ≥ 1s; sum must equal total video duration)words: shot prompt (max 512 characters)
- Reference an image, Element, or video in the prompt with
@xxx, e.g.@image_1,@Zhang,@video_1 - Avoid Element names that are substrings of each other (e.g.
@Zhangand@ZhangSan) - Avoid Element names that overlap with prompt content (e.g. do not use
@gmailif the prompt containsxxx@gmail.com)
{
"type": "first_frame",
"url": "string",
"id": "string"
}Images can be used as scene/style references, or as first/last frames.
url: Image URL or Base64id: Optional input index ID for use in the prompt; must be unique within the same task- Formats:
.jpg,.jpeg,.png - Size: max 50MB
- Dimensions: width and height ≥ 300px; aspect ratio between
1:2.5and2.5:1 - Supports first-frame and first-and-last-frame generation; last-frame-only is not supported
- Quantity limits (depend on reference video and Element types):
- No reference video + only multi-image Elements: total of reference images and multi-image Elements ≤ 7
- No reference video + both video-character Elements and multi-image Elements: total of reference images and multi-image Elements ≤ 4
- With a reference video + only multi-image Elements: total of reference images and multi-image Elements ≤ 4
- With a reference video: video-character Elements and reference images cannot be used together
{
"type": "feature_video",
"url": "string",
"id": "string"
}url: Video URLid: Optional input index ID for use in the prompt; must be unique within the same task- Formats:
.mp4,.mov - Size: max 200MB
- Duration: 3s–15.5s (inclusive)
- Dimensions: width and height between 700px and 4553px; total pixels ≤ 8294400; aspect ratio between 0.4 and 2
- Frame rate: 24fps–60fps (output is 24fps)
- Maximum 1 reference video. After adding a reference video, add at most one video-character Element
When using feature_video:
- Multi-shot is supported;
multi_shotmust betrue - Native audio is not supported;
audiomust beoff
When using base_video (video to edit):
- First/last frames are not supported
- Multi-shot is not supported
- Native audio is not supported;
audiocannot benative
{
"type": "element",
"element_id": "string",
"id": "string"
}element_id: Element ID returned by the Element-related APIid: Input index ID used in the prompt (e.g.@element_1); must be unique within the same task- Elements are either video-character Elements (from video) or multi-image Elements (from images); limits differ by type
- Count limits:
- First frame or first-and-last frames: at most 3 Elements
- No reference video + only multi-image Elements: reference images + multi-image Elements ≤ 7
- No reference video + only video-character Elements: ≤ 3 video-character Elements
- No reference video + both types: ≤ 3 video-character Elements; reference images + multi-image Elements ≤ 4
- With reference video + only multi-image Elements: reference images + multi-image Elements ≤ 4
- With reference video + only video-character Elements: ≤ 1 video-character Element
- With a reference video: video-character Elements and multi-image Elements cannot be used together
settingsobject(Optional)
Output configuration such as resolution and duration.
Whether to generate multi-shot video. Default true.
When set to false, multi-shot prompts will not produce multi-shot output.
Whether to generate audio for the video. Default off.
native: Include native audio matching the visualsoriginal: Retain the original sound of the reference videooff: No audio
Output video resolution. Default 720p.
720p: 720P output1080p: 1080P output4k: 4K output
Aspect ratio of generated video frames. Default 16:9.
Options: 16:9, 9:16, 1:1
Required when there is no first frame or reference video.
Video duration in seconds. Default 5.
Options: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
optionsobject(Optional)
General configurations such as callback URL and watermark.
{
"callback_url": "https://example.com/cb",
"external_task_id": "string",
"watermark_info": {
"enabled": false
}
}Callback URL for task result notifications. If set, the server sends a notification when the task status changes.
Custom task ID. Does not overwrite the system-generated task ID and can be used for querying. Must be unique within the account.
Whether to also generate a watermarked result, controlled by enabled:
{
"enabled": false
}true: Include watermarked resultfalse(default): No watermark
Custom watermarks are not supported.
Responses
200: Task created successfully
Content-Type: application/json
Request Example
curl -X POST "https://api.autorouter.top/kling/omni-video/kling-3.0-omni" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxx" \
-d '{
"contents": [
{
"type": "prompt",
"text": "Change the color of the parrot’s feathers to match the reference image. Keep all other elements of the video unchanged."
},
{
"type": "first_frame",
"url": "https://example.com/first.png",
"id": "image_1"
},
{
"type": "refer_image",
"url": "https://example.com/refer.png",
"id": "image_2"
}
],
"settings": {
"resolution": "1080p",
"duration": 5,
"audio": "native",
"multi_shot": false
},
"options": {
"callback_url": "https://xxx/callback",
"external_task_id": ""
}
}'Response Example
{
"code": 0,
"message": "string",
"request_id": "string",
"data": {
"id": "string",
"status": "submitted",
"create_time": 1781080778802,
"update_time": 1781080794151,
"external_id": "string"
}
}Response fields:
| Name | Type | Description |
|---|---|---|
code | integer | Error code; 0 means success |
message | string | Error message |
request_id | string | Request ID generated by the system |
data.id | string | System-generated task ID |
data.status | string | Task status: submitted, processing, succeeded, failed |
data.create_time | integer | Task creation time, Unix timestamp (ms) |
data.update_time | integer | Task update time, Unix timestamp (ms) |
data.external_id | string | Custom task ID, if any |
GET /kling/tasks
Query Video Generation Task
Query async task status and results by task ID or custom task ID.
- Use either
task_idsorexternal_task_ids, not both - Batch queries are supported; separate multiple IDs with
, - Generated results are cleared after about 30 days; save them promptly
Headers
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
Content-Type | string | Yes | application/json | Data exchange format |
Authorization | string | Yes | - | Auth header. Format: Bearer sk-xxxxxx |
Query Params
| Name | Type | Required | Description |
|---|---|---|---|
task_ids | string | No | System-generated task IDs, comma-separated |
external_task_ids | string | No | Custom task IDs, comma-separated |
Responses
200: Task queried successfully
Content-Type: application/json
Request Example
curl -X GET "https://api.autorouter.top/kling/tasks?task_ids={id}" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxx"Response Example
{
"code": 0,
"message": "string",
"request_id": "string",
"data": [
{
"id": "893605946402811985",
"status": "succeeded",
"message": "string",
"create_time": 1781080778802,
"update_time": 1781080794151,
"external_id": "string",
"outputs": [
{
"type": "video",
"id": "string",
"url": "string",
"watermark_url": "string",
"duration": "5"
}
],
"billing": [
{
"charge_type": "cash",
"cash_type": "balance",
"amount": "string",
"package_type": "video",
"list_price": "string"
}
]
}
]
}Response fields:
| Name | Type | Description |
|---|---|---|
code | integer | Error code; 0 means success |
message | string | Error message |
request_id | string | Request ID generated by the system, for tracing and troubleshooting |
data | object[] | Task list |
data[].id | string | Task ID being queried |
data[].status | string | Task status: submitted, processing, succeeded, failed |
data[].message | string | Status message; failure reason when failed (e.g. content moderation) |
data[].create_time | integer | Task creation time, Unix timestamp (ms) |
data[].update_time | integer | Task update time, Unix timestamp (ms) |
data[].external_id | string | Custom task ID, if any |
data[].outputs | object[] | Generated results; fields vary by type |
data[].billing | object[] | Billing details |
statusstring
Task status:
submitted: Submittedprocessing: Processingsucceeded: Succeededfailed: Failed
Recommended poll interval: 3–5 seconds until status is succeeded or failed.
outputsobject[]
Generated results. Fields depend on type. Possible values: image, video, audio, element, voice. Omni success typically returns type=video.
| Name | Type | Description |
|---|---|---|
type | string | Fixed as video |
id | string | Video ID generated by the system |
url | string | Result URL (hotlink-protected; cleared after ~30 days; save promptly) |
watermark_url | string | Watermarked result URL (hotlink-protected) |
duration | string | Generated video duration in seconds |
| Name | Type | Description |
|---|---|---|
type | string | Fixed as image |
url | string | Result URL (hotlink-protected; cleared after ~30 days) |
watermark_url | string | Watermarked image download URL (hotlink-protected) |
group_id | string | Only present for grouped images; marks group relationship |
| Name | Type | Description |
|---|---|---|
type | string | Fixed as audio |
id | string | Audio ID generated by the system |
mp3_url | string | MP3 result URL (hotlink-protected; cleared after ~30 days) |
wav_url | string | WAV result URL (hotlink-protected; cleared after ~30 days) |
mp3_duration | string | MP3 duration in seconds |
wav_duration | string | WAV duration in seconds |
| Name | Type | Description |
|---|---|---|
type | string | Fixed as voice |
id | string | Audio ID generated by the system |
name | string | Audio name |
url | string | Material download link |
owned_by | string | Voice source: kling for official library, numbers for creator ID |
status | string | Status: succeeded, deleted |
| Name | Type | Description |
|---|---|---|
type | string | Fixed as element |
id | string | Element ID generated by the system |
name | string | Element name |
description | string | Element description |
element_type | string | Element type: video_character_elements, multi_image_elements |
references | object[] | Related materials |
references[].type | string | Material type: image, video, voice |
references[].role | string | Material role; image: frontal / reference; video and voice: refer |
references[].url | string | Material download link |
references[].id | string | Voice ID (when type=voice) |
references[].name | string | Voice name (when type=voice) |
references[].owned_by | string | Voice source (when type=voice) |
owned_by | string | Element source: kling for official library, numbers for creator ID |
status | string | Status: succeeded, deleted |
tags | object[] | Element tags |
tags[].id | integer | Tag ID |
tags[].name | string | Tag name |
tags[].description | string | Tag description |
billingobject[]
Billing details.
Account charge type:
cash: Balance deductionunit: Resource package deduction
Balance type; only present when charge_type=cash:
balance: Official quotatest_balance: Test quota
Deduction amount. When charge_type=cash, the discounted balance price; when charge_type=unit, the resource package units deducted (decimal string).
Resource package type; only present when charge_type=unit. Enum: video, image, audio.
List price for balance deduction; only present when charge_type=cash.
Error Handling
HTTP 400 Parameter Errors
| Scenario | Suggestion |
|---|---|
Missing contents | Provide at least one valid content item |
| Last frame only | Not supported; include a first frame |
| Invalid image / video format or size | Follow first_frame / refer_image / feature_video / base_video limits |
| Too many reference images or Elements | Follow the quantity limits for the current mode |
feature_video with audio=native | Use audio=off |
base_video with first/last frame or multi_shot / audio=native | Follow base-video restrictions |
Missing aspect_ratio when no first frame or reference video | Provide settings.aspect_ratio |
Invalid duration / resolution / audio | Use documented enum values |
| Multi-shot duration mismatch | Ensure sum of shot durations equals settings.duration |
HTTP 401 / 403 Auth Errors
401 Unauthorized: Invalid or expired API Key403 Forbidden: API Key is not allowed to access this model
HTTP 402 Insufficient Balance
Insufficient balance. Please top up in the AutoRouter console.
Task failed Status
| Cause | Suggestion |
|---|---|
| Content moderation failed | Adjust the prompt or change reference media |
| Image / video URL unreachable | Ensure public access, or use Base64 for images |
| Invalid parameter combination | Follow the Request Body rules |
When a task fails, AutoRouter automatically refunds your account.
Image-to-Video
Generate video from a first frame or first-and-last frames plus prompt and optional Elements with Kling 3.0. Async task API: submit, poll, then download.
Video Generation
Omni video generation with Kling O1. Combine prompts, images, Elements, and videos in one API. Async task API: submit a request, receive a task ID, then poll for status to get the result.