CyHUB
РусскийGet an API key

Kling Motion 3.0 API

Kling Motion 3.0 video: the person from your photo repeats the movements from your video. Version 3.0 follows complex movements and the face more closely, 720p or 1080p. You can keep the sound of the motion video.

Developer: KuaishouModel key in the API: kling_motion

For AI assistants:Download .mdAll documentation .mdOpen as text

Connect in three steps

  1. Get a keyCreate a key in the dashboard after you confirm your email. One key opens every model.
  2. Check the pricePOST /v1/price shows the cost of a run in advance, without charging you.
  3. 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
curl -X POST "https://api.cyhub.ai/v1/tasks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling_motion",
  "settings": {
    "image_url": [
      "https://example.com/person.png"
    ],
    "video_url": [
      "https://example.com/moves.mov"
    ],
    "model_version": "3.0",
    "quality": "pro",
    "with_audio": false,
    "prompt": "Ночная улица с неоновыми вывесками, лёгкий дождь"
  }
}'

curl "https://api.cyhub.ai/v1/tasks/TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
import time

import requests

API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

body = {
    "model": "kling_motion",
    "settings": {
        "image_url": [
            "https://example.com/person.png",
        ],
        "video_url": [
            "https://example.com/moves.mov",
        ],
        "model_version": "3.0",
        "quality": "pro",
        "with_audio": False,
        "prompt": "Ночная улица с неоновыми вывесками, лёгкий дождь",
    },
}

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"])
Node.js
const API = "https://api.cyhub.ai/v1";
const HEADERS = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };

const body = {
  "model": "kling_motion",
  "settings": {
    "image_url": [
      "https://example.com/person.png"
    ],
    "video_url": [
      "https://example.com/moves.mov"
    ],
    "model_version": "3.0",
    "quality": "pro",
    "with_audio": false,
    "prompt": "Ночная улица с неоновыми вывесками, лёгкий дождь"
  }
};

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();
Get a key

Price before the run

Prices as of 15.10.2026: from 27 ₽. POST /v1/price shows the exact price of your settings.

ModePrice
Kling Motion 3.0 with a 3 s filefrom 27 ₽

Send the same settings to POST /v1/price: the response shows the price of the run without charging you.

cURL
curl -X POST "https://api.cyhub.ai/v1/price" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling_motion",
  "settings": {
    "image_url": [
      "https://example.com/person.png"
    ],
    "video_url": [
      "https://example.com/moves.mov"
    ],
    "model_version": "3.0",
    "quality": "pro",
    "with_audio": false,
    "prompt": "Ночная улица с неоновыми вывесками, лёгкий дождь"
  }
}'
  • amount_minor: the price of the run in minor units (kopecks for rubles)
  • currency: the wallet currency
  • available_minor: how much your balance has for new tasks right now

This page is about Kling Motion 3.0: send model_version = 3.0. Without the model_version field the task runs on 2.6.

Price in this mode from 27 ₽, with a 3 s file.

Parameters

Model parameters go inside settings. Omitted optional fields take their default values.

image_urlRequired

One link to a photo of the character. The head and the body are clearly visible and not covered. The character is framed like the person in the video: to the waist or whole.

Type: List (String, uri)Maximum items: 1
video_urlRequired

One link to the motion video: best with one person filmed in a single shot, without cuts or camera movement. The whole video goes to Kling.

Type: List (String, uri)Maximum items: 1
promptOptional

Optional. The scene and the look. There is no need to describe the motion, it is taken from the video.

Type: StringMaximum characters: 2500
model_versionOptional

Model version. VIDEO 3.0 follows complex movements and the face more closely, VIDEO 2.6 is proven and costs less.

Type: StringAllowed values: 3.0Default: "2.6"
qualityOptional

Resolution: Standard 720p or Pro 1080p. Pro costs more.

Type: StringAllowed values: stdproDefault: "std"
orientationOptional

How the character is turned: like the person in the video (better for complex movements, video up to 30 seconds) or like in the photo (the frame of the photo, video up to 10 seconds).

Type: StringAllowed values: videoimageDefault: "video"
with_audioOptional

Keep the sound of the motion video in the finished video.

Type: BooleanDefault: true

Parameters not listed here are not accepted: the response is 422 unknown_setting.

Input

  • The photo is a link to a JPEG or PNG file up to 10 MB: at least 300 pixels on each side, aspect ratio from 1:2.5 to 2.5:1.
  • The video is a link to an MP4 or MOV file up to 100 MB, sides from 340 to 3850 pixels. Length from 3 to 30 seconds, up to 10 with the orientation from the photo.
  • The price is per second of the motion video, counted over its whole length.
FieldAcceptsFormatsFilesFile size up to
image_urlImagesjpeg, jpg, png110 MB
video_urlVideomp4, mov1100 MB
How to send files

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 3.0 in 1080p, no sound, with a scene

JSON
{
  "model": "kling_motion",
  "settings": {
    "image_url": [
      "https://example.com/person.png"
    ],
    "video_url": [
      "https://example.com/moves.mov"
    ],
    "model_version": "3.0",
    "quality": "pro",
    "with_audio": false,
    "prompt": "Ночная улица с неоновыми вывесками, лёгкий дождь"
  }
}

The price is calculated when the task is accepted, currency RUB.

Complete generation example

Output

  • One MP4 video as long as the motion video. It can be shorter: Kling takes only the movements it recognized.
  • Generation takes 5-10 minutes.
KindFormatsHow manyNote
videomp41

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.

JSON
{
  "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"
      }
    ]
  }
}
How to read the result and download files

See also

Try Kling Motion 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