API DocsAI Model APIsVideosKling O1

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.

Unified omni video generation with Kling O1. Combine text prompts, first/last frames, reference images, Elements, feature videos, and base videos in a single request. Supports 720p / 1080p resolution and 3–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 O1 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-o1

Create Video Generation Task

Create an omni video generation task from a contents collection (prompts, images, Elements, videos, etc.).

Headers

NameTypeRequiredDefaultDescription
Content-TypestringYesapplication/jsonData exchange format
AuthorizationstringYes-Auth header. Format: Bearer sk-xxxxxx

Request Body

Content-Type: application/json

Example:

{
  "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",
      "id": "image_1"
    },
    {
      "type": "refer_image",
      "url": "https://example.com/refer.png",
      "id": "image_2"
    }
  ],
  "settings": {
    "resolution": "1080p",
    "duration": 3,
    "audio": "off"
  },
  "options": {
    "callback_url": "https://xxx/callback",
    "external_task_id": "",
    "watermark_info": {
      "enabled": false
    }
  }
}

Properties:

NameTypeRequiredDefaultEnumDescription
contentsarrayYes--Reference input collection (prompts, images, Elements, videos, etc.)
contents[].typestringYes-prompt, first_frame, last_frame, refer_image, feature_video, base_video, elementInput type
settingsobjectNo--Output config such as resolution and duration
settings.audiostringNoofforiginal, offWhether to generate audio for the video
settings.resolutionstringNo720p720p, 1080pResolution of the generated video
settings.aspect_ratiostringNo16:916:9, 9:16, 1:1Aspect ratio (width:height) of generated frames
settings.durationintNo5310Video duration in seconds
optionsobjectNo--General config such as callback URL and watermark
options.callback_urlstringNo--Callback URL for task status change notifications
options.external_task_idstringNo--Custom task ID
options.watermark_infoobjectNo--Whether to also generate a watermarked result

contentsarray(Required)

Reference input collection. 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"
  }
]

typestring(Required)

Input type:

  • prompt: Text prompt
  • first_frame: First-frame image
  • last_frame: Last-frame image
  • refer_image: Reference image (scene, style, etc.)
  • feature_video: Feature reference video
  • base_video: Base video to edit
  • element: Element (multi-image Elements only; video Elements are not yet supported)
type=promptobject(Required)
{
  "type": "prompt",
  "text": "string"
}
  • text: Text prompt with positive/negative descriptions. Max 2500 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. @Zhang and @ZhangSan)
  • Avoid Element names that overlap with prompt text (e.g. do not use @gmail if the prompt contains an email address)
  • For more guidance, see the Kling O1 Model User Guide
type=first_frame / last_frame / refer_imageobject(Optional)
{
  "type": "first_frame",
  "url": "string",
  "id": "string"
}
  • url: Image URL or Base64 (required)
  • id: Input index ID for use in the prompt; must be unique within the same task (optional)
  • Formats: .jpg, .jpeg, .png
  • Size: max 50MB
  • Dimensions: width and height ≥ 300px; aspect ratio between 1:2.5 and 2.5:1

Quantity limits:

  • No reference video + multi-image Elements: reference images + multi-image Elements ≤ 7
  • With a reference video + multi-image Elements: reference images + multi-image Elements ≤ 4

First / last frame rules:

  • Only “first frame only” and “first + last frame” are supported; “last frame only” is not supported
  • When using both first and last frames, no additional reference images can be added
type=feature_video / base_videoobject(Optional)
{
  "type": "feature_video",
  "url": "string",
  "id": "string"
}
  • url: Video URL (required)
  • id: Input index ID for use in the prompt; must be unique within the same task (optional)
  • Formats: .mp4, .mov
  • Size: max 200MB
  • Duration: 3–10 seconds (inclusive)
  • Dimensions: width and height between 700px and 2160px (inclusive)
  • Frame rate: 24–60 fps (generated video is 24 fps)
  • At most one reference video per task
  • feature_video: only supports defining the first frame of the video, not the last frame
  • base_video (video to edit): does not support defining first or last frames
type=elementobject(Optional)
{
  "type": "element",
  "element_id": "string",
  "id": "string"
}
  • element_id: Element ID returned by the Element Management API (required)
  • id: Input index ID for use in the prompt; must be unique within the same task (required)
  • Currently only multi-image Elements are supported; video Elements are not yet supported
  • Using first + last frames: Elements are not supported
  • No reference video: reference images + Elements ≤ 7
  • With reference video: reference images + Elements ≤ 4

settingsobject(Optional)

Output configuration such as resolution and duration.

audiostring(Optional)

Whether to generate audio for the video. Default off.

  • original: Keep the original sound of the reference video
  • off: No audio
resolutionstring(Optional)

Output video resolution. Default 720p.

  • 720p: 720P output
  • 1080p: 1080P output
aspect_ratiostring(Optional)

Aspect ratio of generated video frames. Default 16:9.

Options: 16:9, 9:16, 1:1

Required when there is no first frame and no reference video.

durationinteger(Optional)

Video duration in seconds. Default 5.

Options: 3, 4, 5, 6, 7, 8, 9, 10

When using a first frame with no other reference images (refer_image) or videos (feature_video / base_video), only 5-second or 10-second videos can be generated.

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_urlstring(Optional)

Callback URL for task result notifications. If set, the server sends a notification when the task status changes.

external_task_idstring(Optional)

Custom task ID. Does not overwrite the system-generated task ID and can be used for querying. Must be unique within the account.

watermark_infoobject(Optional)

Whether to also generate a watermarked result, controlled by enabled:

{
  "enabled": false
}
  • true: Include watermarked result
  • false (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-o1" \
  -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",
      "id": "image_1"
    },
    {
      "type": "refer_image",
      "url": "https://example.com/refer.png",
      "id": "image_2"
    }
  ],
  "settings": {
    "resolution": "1080p",
    "duration": 3,
    "audio": "off"
  },
  "options": {
    "callback_url": "https://xxx/callback",
    "watermark_info": {
      "enabled": false
    }
  }
}'

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:

NameTypeDescription
codeintegerError code; 0 means success
messagestringError message
request_idstringRequest ID generated by the system
data.idstringSystem-generated task ID
data.statusstringTask status: submitted, processing, succeeded, failed
data.create_timeintegerTask creation time, Unix timestamp (ms)
data.update_timeintegerTask update time, Unix timestamp (ms)
data.external_idstringCustom task ID, if any

More Scenario Examples

First frame & refer_image

curl -X POST "https://api.autorouter.top/kling/omni-video/kling-o1" \
  -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",
      "id": "image_1"
    },
    {
      "type": "refer_image",
      "url": "https://example.com/refer.png",
      "id": "image_2"
    }
  ],
  "settings": {
    "resolution": "1080p",
    "duration": 3,
    "audio": "off"
  }
}'

First frame & Element & feature_video

curl -X POST "https://api.autorouter.top/kling/omni-video/kling-o1" \
  -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": "element",
      "element_id": "161",
      "id": "element_1"
    },
    {
      "type": "first_frame",
      "url": "https://example.com/first.png",
      "id": "image_1"
    },
    {
      "type": "feature_video",
      "url": "https://example.com/feature.mp4",
      "id": "video_1"
    }
  ],
  "settings": {
    "resolution": "1080p",
    "aspect_ratio": "16:9",
    "audio": "off"
  }
}'

Base video & refer_image

curl -X POST "https://api.autorouter.top/kling/omni-video/kling-o1" \
  -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": "refer_image",
      "url": "https://example.com/refer.png",
      "id": "image_1"
    },
    {
      "type": "base_video",
      "url": "https://example.com/base.mp4",
      "id": "video_1"
    }
  ],
  "settings": {
    "resolution": "1080p",
    "aspect_ratio": "16:9",
    "audio": "off"
  }
}'

GET /kling/tasks

Query Video Generation Task

Query async task status and results by task ID or custom task ID.

  • Use either task_ids or external_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

NameTypeRequiredDescription
task_idsstringNoSystem-generated task IDs, comma-separated
external_task_idsstringNoCustom 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

Full response schema for reference. Fields under each outputs item differ by type (video / image / audio / voice / element). Video generation success typically returns only a type=video item.

{
  "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:

NameTypeDescription
codeintegerError code; 0 means success
messagestringError information
request_idstringRequest ID generated by the system, used for tracing and troubleshooting
dataobject[]Task list
data[].idstringTask ID being queried
data[].statusstringTask status: submitted, processing, succeeded, failed
data[].messagestringStatus message; failure reason when failed (e.g. content risk control)
data[].create_timeintegerTask creation time, Unix timestamp (ms)
data[].update_timeintegerTask update time, Unix timestamp (ms)
data[].external_idstringCustom task ID, if any
data[].outputsobject[]Generated results; fields vary by type, see below
data[].outputs[].typestringResult type: image, video, audio, element, voice
data[].billingobject[]Billing details, see below
data[].billing[].charge_typestringConsumption account type: cash (balance), unit (resource package)
data[].billing[].cash_typestringBalance type when charge_type=cash: balance, test_balance
data[].billing[].amountstringDeduction amount; discounted price for balance, units for resource package
data[].billing[].package_typestringResource package type when charge_type=unit: video, image, audio
data[].billing[].list_pricestringBalance list price when charge_type=cash

statusstring

Task status:

  • submitted: Submitted
  • processing: Processing
  • succeeded: Succeeded
  • failed: 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. Video generation success typically returns type=video.

type=videoobject
NameTypeDescription
typestringAlways video
idstringVideo ID generated by the system
urlstringResult URL (hotlink-protected; cleared after ~30 days, save promptly)
watermark_urlstringWatermarked result URL (hotlink-protected)
durationstringGenerated video duration in seconds
type=imageobject
NameTypeDescription
typestringAlways image
urlstringResult URL (hotlink-protected; cleared after ~30 days)
watermark_urlstringWatermarked image download URL (hotlink-protected)
group_idstringAppears only for grouped images, marks grouping relationship
type=audioobject
NameTypeDescription
typestringAlways audio
idstringAudio ID generated by the system
mp3_urlstringMP3 result URL (hotlink-protected; cleared after ~30 days)
wav_urlstringWAV result URL (hotlink-protected; cleared after ~30 days)
mp3_durationstringMP3 duration in seconds
wav_durationstringWAV duration in seconds
type=voiceobject
NameTypeDescription
typestringAlways voice
idstringAudio ID generated by the system
namestringAudio name
urlstringMaterial download link
owned_bystringVoice source: kling for official library, numbers for creator IDs
statusstringStatus: succeeded, deleted
type=elementobject
NameTypeDescription
typestringAlways element
idstringElement ID generated by the system
namestringElement name
descriptionstringElement description
element_typestringElement type: video_character_elements, multi_image_elements
referencesobject[]Related materials
references[].typestringMaterial type: image, video, voice
references[].rolestringRole; image: frontal / reference; video and voice: refer
references[].urlstringMaterial download link
references[].idstringVoice ID (when type=voice)
references[].namestringVoice name (when type=voice)
references[].owned_bystringVoice source (when type=voice)
owned_bystringElement source: kling for official library, numbers for creator IDs
statusstringStatus: succeeded, deleted
tagsobject[]Element tags
tags[].idintegerTag ID
tags[].namestringTag name
tags[].descriptionstringTag description

billingobject[]

Billing details.

charge_typestring

Consumption account type:

  • cash: Balance deduction
  • unit: Resource package deduction
cash_typestring

Balance type, only when charge_type=cash:

  • balance: Official quota
  • test_balance: Test quota
amountstring

Deduction amount. For charge_type=cash, discounted balance price; for charge_type=unit, resource package units deducted (decimal string).

package_typestring

Resource package type, only when charge_type=unit. Fixed enum: video, image, audio.

list_pricestring

Balance list price, only when charge_type=cash.

Error Handling

HTTP 400 Parameter Errors

ScenarioSuggestion
Missing contentsProvide the required field
Invalid contents[].typeUse documented enum values
First + last frames with extra reference imagesDo not add refer_image when using both frames
Missing aspect_ratio without first frame / reference videoSet settings.aspect_ratio
Invalid duration / resolutionUse documented enum values

HTTP 401 / 403 Auth Errors

  • 401 Unauthorized: Invalid or expired API Key
  • 403 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

CauseSuggestion
Content moderation failedAdjust the prompt and avoid sensitive content
Invalid parameter combinationFollow the Request Body rules

When a task fails, AutoRouter automatically refunds your account.

On this page