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.
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_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"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"])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();Price before the run
Prices as of 15.10.2026: from 27 ₽. POST /v1/price shows the exact price of your settings.
| Mode | Price |
|---|---|
| Kling Motion 3.0 with a 3 s file | from 27 ₽ |
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_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 currencyavailable_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_urlRequiredOne 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: 1video_urlRequiredOne 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: 1promptOptionalOptional. The scene and the look. There is no need to describe the motion, it is taken from the video.
Type: StringMaximum characters: 2500model_versionOptionalModel 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"qualityOptionalResolution: Standard 720p or Pro 1080p. Pro costs more.
Type: StringAllowed values:stdproDefault:"std"orientationOptionalHow 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_audioOptionalKeep 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.
| Field | Accepts | Formats | Files | File size up to |
|---|---|---|---|---|
image_url | Images | jpeg, jpg, png | 1 | 10 MB |
video_url | Video | mp4, mov | 1 | 100 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 3.0 in 1080p, no sound, with a scene
{
"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.
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.
| 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
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