Skip to main content
POST
Kling 3.0 Turbo
Parameters and usage are aligned with the official API. For detailed parameters, refer directly to the official documentation.

1. Overview

This document explains how to use text-to-video and image-to-video capabilities through the Kling 3.0 Turbo native protocol. Turbo uses the same native protocol as standard Kling 3.0, with identical request and response structures, differing only in capability scope, resolution tiers, and billing. Both capabilities use an asynchronous task model:
  1. Call the corresponding creation API.
  2. Save the data.id from the creation response.
  3. Query the task status using the same API Key that was used to create the task.
  4. After the task succeeds, retrieve and save the generated video from outputs.

1.1 API Endpoints

In the examples in this document, the full address is https://{api_domain} plus the API path in the table, where {api_domain} is the API domain you use. Turbo only provides text-to-video and image-to-video; it does not support Omni video or motion control.

1.2 Authentication

All requests require an API Key. POST requests must also specify the JSON content type:

1.3 Response Structure

The data in the creation response is an object. Common fields include id (the task ID generated by the Kling system, used for subsequent queries), external_id (the echo of options.external_task_id; may be omitted if not set), and status (the task status after creation, usually submitted). The data in the query response is an array. Each task contains id, external_id, status (submitted, processing, succeeded, or failed), message, create_time, update_time, and outputs. Common fields for video results in outputs are type, id, url, watermark_url, and duration, where url is the non-watermarked result URL, watermark_url is the watermarked result URL, and duration is the video duration in seconds.

2. Text-to-Video

2.1 Create Task

Request Fields: Multi-shot video is implemented using a fixed format in prompt: “Shot n, m, words; Shot n, m, words;” (separated by half-width punctuation). Here, n is the shot index (1 to 6 shots), m is the shot duration (each not less than 1, and the sum of all shot durations equals the total video duration), and words is the shot prompt (up to 512 characters).

2.2 Create Example

After successful creation, the task ID is returned:
Please save data.id. If options.external_task_id is not provided, data.external_id may not be returned.

2.3 Query Task

Use the same API Key that was used to create the task. You can also use external_task_ids to query custom task IDs. For each request, exactly one of task_ids and external_task_ids must be provided. Both support 1–50 IDs separated by English commas. The data in the response is an array and preserves the order of the requested IDs.

2.4 Query Example

When the task succeeds, the response is:
status=processing means the task is still running; it is recommended to query every 10–30 seconds. status=failed means the task failed and you should stop polling. After the task succeeds, save the file corresponding to outputs[type=video].url promptly, as the download URL may be valid for only a limited time.

2.5 Billing

The price tier is determined only by settings.resolution (720p or 1080p). If duration is not provided, the default of 5 seconds is billed. Charges are applied at task creation based on the requested duration; if task creation fails or final generation fails, the fee is automatically refunded. Refer to the pricing page of the service you are using for specific unit prices.

3. Image-to-Video

3.1 Create Task

Request Fields: Images support .jpg, .jpeg, and .png formats. Files must not exceed 50 MB, width and height must be at least 300 pixels, and the aspect ratio must be between 1:2.5 and 2.5:1. Image-to-video only supports a first frame image; “first frame + last frame” and “last frame only” are not supported yet. options.callback_url can also be provided, with the same usage as in text-to-video. Multi-shot video is also implemented using the fixed format in prompt.

3.2 Create Example

On successful creation, the response is:

3.3 Query Task

Query the task using data.id from the creation response:
When querying with task_ids, use the same API Key that was used to create the task. You can also query using external_task_ids for the options.external_task_id passed at creation time. The query parameter supports 1–50 IDs separated by English commas.

3.4 Query Example

When the task succeeds, the video URL is located at outputs[type=video].url:
When status=processing, it is recommended to continue querying every 10–30 seconds. When status=failed, stop polling and correct the input based on the error message.

3.5 Billing

The price tier is determined only by settings.resolution (720p or 1080p). If duration is not provided, the default of 5 seconds is billed. Charges are applied at task creation based on the requested duration; if task creation fails or final generation fails, the fee is automatically refunded. Refer to the pricing page of the service you are using for specific unit prices.

4. Common Errors and Notes

API errors use the following structure:
Common status codes: 400/1200 (invalid parameters or content type, correct based on message), 401/1000 (API Key missing or invalid), 403/1103 (no permission to perform the operation), 404/1203 (task does not exist or no permission to query), 429/1302 (requests too frequent, reduce frequency and use exponential backoff), 500/5000, 503/5001, 504/5002 (service exception or timeout, retry later; avoid uncontrolled repeated submissions). If message contains trace_id, provide it when contacting technical support. Additional notes:
  • The request body does not need model or model_name; the model version is already included in the URL.
  • Persist data.id after creating the task; do not treat request_id as the task ID.
  • The maximum request body size is 64 MB; for larger images, it is recommended to use a publicly accessible URL for Kling.
  • Input material URLs must be publicly accessible by Kling and cannot rely on intranet access, cookies, or temporary login sessions.
  • Use a polling interval of 10–30 seconds for the query API, and set an overall timeout and exponential backoff.
  • A POST timeout does not necessarily mean the task was not created; query first with external_task_id before deciding whether to retry.
  • After receiving a successful status, save the file corresponding to outputs[type=video].url immediately, as the result URL may expire.

5. Python Example

The following example uses the standard requests library to demonstrate text-to-video creation and polling. For image-to-video, simply replace the creation API endpoint and request body.
Last modified on October 15, 2026