# 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: Kuaishou
Model key in the API: `kling_motion`

## Connect in three steps

1. [Get a key](https://api.cyhub.ai/docs/connection.md?lang=en): Create a key in the dashboard after you confirm your email. One key opens every model.
2. [Check the price](https://api.cyhub.ai/docs/generations.md?lang=en): POST /v1/price shows the cost of a run in advance, without charging you.
3. [Run a task and collect the result](https://api.cyhub.ai/docs/tasks.md?lang=en): POST /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.

```bash
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"])
```

```javascript
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](https://cyhub.ai/cabinet/keys)

## Price before the run

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

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

```bash
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.

## <a id="parameters"></a>Parameters

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

### `image_url` (Required)

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_url` (Required)

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

### `prompt` (Optional)

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

- Type: String
- Maximum characters: 2500

### `model_version` (Optional)

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

- Type: String
- Allowed values: `3.0`
- Default: `"2.6"`

### `quality` (Optional)

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

- Type: String
- Allowed values: `std` (Standard), `pro`
- Default: `"std"`

### `orientation` (Optional)

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: String
- Allowed values: `video`, `image`
- Default: `"video"`

### `with_audio` (Optional)

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

- Type: Boolean
- Default: `true`

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

## <a id="input"></a>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 |

[How to send files](https://api.cyhub.ai/docs/files.md?lang=en)

## <a id="example"></a>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](https://api.cyhub.ai/docs/generations.md?lang=en)

## <a id="output"></a>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.

```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](https://api.cyhub.ai/docs/tasks.md?lang=en#result)

## See also

- [Kling Motion 3.0: features and prices](https://api.cyhub.ai/models/kling-motion)
- Other versions: [Kling Motion 2.6 API](https://api.cyhub.ai/en/models/kling-motion-2-6/api.md)
- Similar models: [Seedance 2.5 API](https://api.cyhub.ai/en/models/seedance-2-5/api.md), [Kling 3.0 API](https://api.cyhub.ai/en/models/kling-3/api.md), [Veo 3.1 API](https://api.cyhub.ai/en/models/veo-3-1/api.md), [Wan 3.0 API](https://api.cyhub.ai/en/models/wan-3/api.md), [MiniMax H3 (Hailuo 03) API](https://api.cyhub.ai/en/models/minimax-h3/api.md), [Gemini Omni API](https://api.cyhub.ai/en/models/gemini-omni/api.md)
- [API documentation](https://api.cyhub.ai/docs.md?lang=en)
- [API errors and how to handle them](https://api.cyhub.ai/docs/errors.md?lang=en)
