Kling Motion 2.6 API
Kling Motion 2.6 video: the person from your photo repeats the movements from your video. A proven and cheaper version, 720p or 1080p.
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.jpg"
],
"video_url": [
"https://example.com/dance.mp4"
],
"model_version": "2.6"
}
}'
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.jpg",
],
"video_url": [
"https://example.com/dance.mp4",
],
"model_version": "2.6",
},
}
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.jpg"
],
"video_url": [
"https://example.com/dance.mp4"
],
"model_version": "2.6"
}
};
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 15 ₽. POST /v1/price shows the exact price of your settings.
| Mode | Price |
|---|---|
| Kling Motion 2.6 with a 3 s file | from 15 ₽ |
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.jpg"
],
"video_url": [
"https://example.com/dance.mp4"
],
"model_version": "2.6"
}
}'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
Price in this mode from 15 ₽, 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:2.6Default:"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.
Repeat a dance from a video
{
"model": "kling_motion",
"settings": {
"image_url": [
"https://example.com/person.jpg"
],
"video_url": [
"https://example.com/dance.mp4"
]
}
}The frame of the photo, video up to 10 seconds
{
"model": "kling_motion",
"settings": {
"image_url": [
"https://example.com/portrait.jpg"
],
"video_url": [
"https://example.com/short-moves.mp4"
],
"orientation": "image"
}
}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 2.6 through the API
One key opens every CyHUB model. Payment in rubles, and you see the price before the run.
Get an API key