Image-to-Video
Generate video from a first frame or first-and-last frames plus an optional text prompt. Async task API: submit, poll, then download.
- First frame: one first-frame image + optional text
- First & last frames: first-frame image + last-frame image + optional text
Supports native audio and designated voices. Duration: 5 or 10 seconds.
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 2.6 is supported.
Note: First-frame and first-and-last-frame modes are supported. Last-frame-only generation is not 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/image-to-video/kling-2.6
Create Video Generation Task
Create a video generation task from a first frame or first-and-last frames.
Request Body
Content-Type: application/json
Example (first frame + voice):
{
"contents": [
{
"type": "prompt",
"text": "A girl sat on the train, looking out the window with a melancholic expression, her head swaying with the train, @1 whispers softly."
},
{
"type": "first_frame",
"url": "https://example.com/first.png"
},
{
"type": "voice",
"voice_id": "891495440020668439",
"id": "1"
}
],
"settings": {
"audio": "native",
"resolution": "1080p",
"duration": 5
},
"options": {
"callback_url": "https://xxx/callback",
"external_task_id": "",
"watermark_info": {
"enabled": true
}
}
}Example (first & last frames):
{
"contents": [
{
"type": "prompt",
"text": "Slowly pull the camera back from a close-up"
},
{
"type": "first_frame",
"url": "https://example.com/first.png"
},
{
"type": "last_frame",
"url": "https://example.com/last.png"
}
],
"settings": {
"resolution": "720p",
"duration": 5
}
}Properties:
| Name | Type | Required | Description |
|---|---|---|---|
contents | object[] | Yes | Reference inputs (prompts, images, voices, etc.) |
contents[].type | string | Yes | Input type: prompt, first_frame, last_frame, voice |
settings | object | No | Output config such as resolution and duration |
settings.audio | string | No | Whether to generate audio. native or off; default off |
settings.resolution | string | No | Video resolution. 720p or 1080p; default 720p |
settings.duration | integer | No | Duration in seconds. 5 or 10; default 5 |
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"
},
{
"type": "last_frame",
"url": "string"
},
{
"type": "voice",
"voice_id": "string",
"id": "string"
}
]Input type:
prompt: Text promptfirst_frame: First-frame imagelast_frame: Last-frame imagevoice: Voice
{
"type": "prompt",
"text": "string"
}text: Prompt content, max 2500 characters- Reference a voice in the prompt with
@xxx, e.g.@1or@sweet
{
"type": "first_frame",
"url": "string"
}first_frameis required;last_frameis optionalurl: Image URL or Base64- 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
- When using first and last frames, only
720presolution is supported
{
"type": "voice",
"voice_id": "string",
"id": "string"
}voice_id: Voice ID from the custom voice API or a system presetid: Input index ID used in the prompt (e.g.@1); must be unique within the same task- At most 2 voices per task
- When specifying a voice,
settings.audiocannot beoff
settingsobject(Optional)
Output configuration such as resolution and duration.
Whether to generate audio for the video. Default off.
native: Include native audio matching the visuals; only1080pis supportedoff: No audio; designated voice is not supported in this mode
Output video resolution. Default 720p.
720p: 720P output1080p: 1080P output
Notes:
- With native audio, only
1080pis supported - With first and last frames, only
720pis supported
Video duration in seconds. Default 5.
Options: 5, 10
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/image-to-video/kling-2.6" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxx" \
-d '{
"contents": [
{
"type": "prompt",
"text": "A girl sat on the train, looking out the window with a melancholic expression, her head swaying with the train."
},
{
"type": "first_frame",
"url": "https://example.com/first.png"
}
],
"settings": {
"resolution": "1080p",
"duration": 5
}
}'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
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 "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": "string"
},
{
"type": "image",
"url": "string",
"watermark_url": "string",
"group_id": "string"
},
{
"type": "audio",
"id": "string",
"mp3_url": "string",
"wav_url": "string",
"mp3_duration": "string",
"wav_duration": "string"
},
{
"type": "voice",
"id": "string",
"name": "string",
"url": "string",
"owned_by": "string",
"status": "succeeded"
},
{
"type": "element",
"id": "string",
"name": "string",
"description": "string",
"element_type": "string",
"references": [
{
"type": "image",
"role": "string",
"url": "string"
},
{
"type": "video",
"role": "refer",
"url": "string"
},
{
"type": "voice",
"role": "refer",
"url": "string",
"id": "string",
"name": "string",
"owned_by": "string"
}
],
"owned_by": "string",
"status": "string",
"tags": [
{
"id": 1,
"name": "string",
"description": "string"
}
]
}
],
"billing": [
{
"charge_type": "string",
"cash_type": "string",
"amount": "string",
"package_type": "string",
"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. Image-to-video 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 first-frame image | Provide at least one type=first_frame |
| Last frame only | Not supported; include a first frame |
| First & last frames with non-720p | Set settings.resolution to 720p |
Designated voice with audio=off | Set settings.audio to native |
| Native audio with non-1080p | Set settings.resolution to 1080p |
| Invalid image format / size | Follow first_frame / last_frame limits |
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 the reference image |
| Image URL unreachable | Ensure public access, or use Base64 |
| Invalid parameter combination | Follow the Request Body rules |
When a task fails, AutoRouter automatically refunds your account.
Text-to-Video
Generate video from a text prompt, with optional native audio. Supports 720p / 1080p resolution and 5 or 10 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 2.6 is supported.
Text-to-Video
Generate video from a text prompt. Supports multi-shot storytelling, native 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 is supported.