Kling 3.0 API
Kling 3.0 video from a description or from the first and last frames: 3 to 15 seconds, up to 4K, with audio. The video can be split into several scenes, the model divides the description itself.
For AI assistants:Download .mdAll documentation .mdOpen as text
Connect in three steps
- Get a keyCreate a key in the dashboard after you confirm your email. One key opens every model.
- Check the pricePOST /v1/price shows the cost of a run in advance, without charging you.
- Run a task and collect the resultPOST /v1/tasks starts a task, GET /v1/tasks/{id} shows its status and files.
Ready-to-use code
Replace YOUR_API_KEY with your key. The code starts a task and waits for the result. In cURL, repeat the second request with the id from the first response instead of TASK_ID until status becomes succeeded.
curl -X POST "https://api.cyhub.ai/v1/tasks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling_pro",
"settings": {
"model_version": "v3.0",
"prompt": "Лиса бежит по заснеженному лесу, камера движется следом",
"quality": "1080p",
"length": 8,
"aspect_ratio": "16:9"
}
}'
curl "https://api.cyhub.ai/v1/tasks/TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"import time
import requests
API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
body = {
"model": "kling_pro",
"settings": {
"model_version": "v3.0",
"prompt": "Лиса бежит по заснеженному лесу, камера движется следом",
"quality": "1080p",
"length": 8,
"aspect_ratio": "16:9",
},
}
response = requests.post(f"{API}/tasks", json=body, headers=HEADERS, timeout=60)
response.raise_for_status()
task = response.json()
while task["status"] in ("queued", "running"):
time.sleep(5)
task = requests.get(f"{API}/tasks/{task['id']}", headers=HEADERS, timeout=30).json()
print(task["status"], task["result"])const API = "https://api.cyhub.ai/v1";
const HEADERS = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };
const body = {
"model": "kling_pro",
"settings": {
"model_version": "v3.0",
"prompt": "Лиса бежит по заснеженному лесу, камера движется следом",
"quality": "1080p",
"length": 8,
"aspect_ratio": "16:9"
}
};
async function main() {
let response = await fetch(`${API}/tasks`, { method: "POST", headers: HEADERS, body: JSON.stringify(body) });
if (!response.ok) throw new Error(await response.text());
let task = await response.json();
while (task.status === "queued" || task.status === "running") {
await new Promise((resolve) => setTimeout(resolve, 5000));
response = await fetch(`${API}/tasks/${task.id}`, { headers: HEADERS });
task = await response.json();
}
console.log(task.status, task.result);
}
main();Price before the run
Prices as of 15.10.2026: from 18 ₽. POST /v1/price shows the exact price of your settings.
| Mode | Price |
|---|---|
| Kling 3.0 | from 18 ₽ |
Send the same settings to POST /v1/price: the response shows the price of the run without charging you.
curl -X POST "https://api.cyhub.ai/v1/price" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling_pro",
"settings": {
"model_version": "v3.0",
"prompt": "Лиса бежит по заснеженному лесу, камера движется следом",
"quality": "1080p",
"length": 8,
"aspect_ratio": "16:9"
}
}'amount_minor: the price of the run in minor units (kopecks for rubles)currency: the wallet currencyavailable_minor: how much your balance has for new tasks right now
Kling 3.0
The newest version: 3 to 15 seconds, up to 4K, audio, splitting into scenes, first and last frame.
Value of the model_version field: v3.0
Price in this mode from 18 ₽.
Parameters
Model parameters go inside settings. Omitted optional fields take their default values.
promptRequiredWhat happens in the video: the action, the camera movement, the mood of the scene.
Type: StringMinimum characters: 1Maximum characters: 5000start_frameOptionalOne URL of the picture the video starts from.
Type: List (String, uri)Maximum items: 1end_frameOptionalOne URL of the picture the video ends with. Works without a first frame too.
Type: List (String, uri)Maximum items: 1qualityOptionalQuality: 720p, 1080p or 4K. The price depends on it.
Type: StringAllowed values:720p1080p4KDefault:"720p"lengthOptionalVideo length in seconds, 3 to 15. The price grows with every second.
Type: IntegerMinimum: 3Maximum: 15Default:5aspect_ratioOptionalAspect ratio of a video without frames. With a first or last frame, the video takes the aspect ratio of the frame.
Type: StringAllowed values:16:91:19:16Default:"16:9"native_audioOptionalAudio: a soundtrack that matches the video, with voices, sounds and music. Costs more.
Type: BooleanDefault:truemulti_shotOptionalSplit the video into several scenes: the model divides the description into scenes itself. It helps to describe the scenes in order in the description.
Type: BooleanDefault:false
Parameters not listed here are not accepted: the response is 422 unknown_setting.
The API sets these settings itself, do not send them: api_request = true
Input
- Frames are URLs of JPG or PNG files up to 10 MB: each side at least 300 pixels, aspect ratio from 1:2.5 to 2.5:1.
- We download the frames ourselves: the link must open without signing in and lead straight to the file, without a redirect.
| Field | Accepts | Formats | Files | File size up to |
|---|---|---|---|---|
start_frame | Images | jpeg, jpg, png | 1 | 10 MB |
end_frame | Images | jpeg, jpg, png | 1 | 10 MB |
Request example
Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.
Video from a description
{
"model": "kling_pro",
"settings": {
"model_version": "v3.0",
"prompt": "Лиса бежит по заснеженному лесу, камера движется следом",
"quality": "1080p",
"length": 8,
"aspect_ratio": "16:9"
}
}From the first frame to the last
{
"model": "kling_pro",
"settings": {
"model_version": "v3.0",
"prompt": "Бутон медленно раскрывается в цветок",
"start_frame": [
"https://example.com/bud.jpg"
],
"end_frame": [
"https://example.com/flower.jpg"
],
"length": 5,
"native_audio": false
}
}Several scenes
{
"model": "kling_pro",
"settings": {
"model_version": "v3.0",
"prompt": "Сначала мальчик находит на чердаке старую карту. Потом он бежит с ней через поле к маяку.",
"multi_shot": true,
"length": 12
}
}The price is calculated when the task is accepted, currency RUB.
Output
- One MP4 video, with sound if it is on.
- Generation usually takes 3-5 minutes.
| Kind | Formats | How many | Note |
|---|---|---|---|
video | mp4 | 1 |
A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": "succeeded",
"finished_at": "2026-10-01T12:03:41+00:00",
"result": {
"caption": "Caption of the result: the model and its settings",
"texts": [],
"files_expire_at": "2026-10-08T12:03:41+00:00",
"files_expired": false,
"artifacts": [
{
"index": 0,
"kind": "video",
"filename": "video.mp4",
"size": 12582912,
"caption": "",
"download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
}
]
}
}See also
- Kling 3.0: features and prices
- Other versions: Kling 2.6 API, Kling 2.5 Turbo API, Kling 2.1 Master API, Kling 2.1 API, Kling 1.6 API
- Similar models: Seedance 2.5 API, Kling Motion 3.0 API, Veo 3.1 API, Wan 3.0 API, MiniMax H3 (Hailuo 03) API, Gemini Omni API
- API documentation
- API errors and how to handle them
Try Kling 3.0 through the API
One key opens every CyHUB model. Payment in rubles, and you see the price before the run.
Get an API key