# Kling V3.0 Motion Control - Documentation

> For the complete documentation index, see [llms.txt](/llms.txt). Markdown is available with `Accept: text/markdown` and `.md` URL variants.

Source: /docs/api-reference/model-apis-kling-v3.0-motion-control

# Kling V3.0 Motion Control

POST

/

v3

/

async

/

kling-v3.0-motion-control

Kling V3.0 Motion Control

cURL

```
curl --request POST \
--url https://api.novita.ai/v3/async/kling-v3.0-motion-control \
--header 'Authorization: ' \
--header 'Content-Type: ' \
--data '
{
"image": "",
"video": "",
"prompt": "",
"model_name": "",
"negative_prompt": "",
"keep_original_sound": true,
"character_orientation": ""
}
'
```

```
import requests

url = "https://api.novita.ai/v3/async/kling-v3.0-motion-control"

payload = {
"image": "",
"video": "",
"prompt": "",
"model_name": "",
"negative_prompt": "",
"keep_original_sound": True,
"character_orientation": ""
}
headers = {
"Content-Type": "",
"Authorization": ""
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
```

```
const options = {
method: 'POST',
headers: {'Content-Type': '', Authorization: ''},
body: JSON.stringify({
image: '',
video: '',
prompt: '',
model_name: '',
negative_prompt: '',
keep_original_sound: true,
character_orientation: ''
})
};

fetch('https://api.novita.ai/v3/async/kling-v3.0-motion-control', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
```

```
"https://api.novita.ai/v3/async/kling-v3.0-motion-control",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'image' => '',
'video' => '',
'prompt' => '',
'model_name' => '',
'negative_prompt' => '',
'keep_original_sound' => true,
'character_orientation' => ''
]),
CURLOPT_HTTPHEADER => [
"Authorization: ",
"Content-Type: "
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
```

```
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.novita.ai/v3/async/kling-v3.0-motion-control"

payload := strings.NewReader("{\n \"image\": \"\",\n \"video\": \"\",\n \"prompt\": \"\",\n \"model_name\": \"\",\n \"negative_prompt\": \"\",\n \"keep_original_sound\": true,\n \"character_orientation\": \"\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Content-Type", "")
req.Header.Add("Authorization", "")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
```

```
HttpResponse response = Unirest.post("https://api.novita.ai/v3/async/kling-v3.0-motion-control")
.header("Content-Type", "")
.header("Authorization", "")
.body("{\n \"image\": \"\",\n \"video\": \"\",\n \"prompt\": \"\",\n \"model_name\": \"\",\n \"negative_prompt\": \"\",\n \"keep_original_sound\": true,\n \"character_orientation\": \"\"\n}")
.asString();
```

```
require 'uri'
require 'net/http'

url = URI("https://api.novita.ai/v3/async/kling-v3.0-motion-control")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = ''
request["Authorization"] = ''
request.body = "{\n \"image\": \"\",\n \"video\": \"\",\n \"prompt\": \"\",\n \"model_name\": \"\",\n \"negative_prompt\": \"\",\n \"keep_original_sound\": true,\n \"character_orientation\": \"\"\n}"

response = http.request(request)
puts response.read_body
```

200

```
{
"task_id": ""
}
```

Kling V3.0 Motion Control extracts motion trajectories from reference videos and applies them to reference images to generate videos while maintaining subject consistency. Supports standard and professional modes with per-second billing.

This is an asynchronous API; only the task_id will be returned. You should use the task_id to request the [Task Result API](/docs/api-reference/model-apis-task-result) to retrieve the video generation results.

##

[​](#request-headers)

Request Headers

[​](#param-content-type)

Content-Type

string

required

Supports: `application/json`

[​](#param-authorization)

Authorization

string

required

Bearer authentication format, for example: Bearer {{API Key}}.

##

[​](#request-body)

Request Body

[​](#param-image)

image

string

required

Reference image URL or base64 encoded image; supports .jpg, .jpeg, .png.
Image file size must not exceed 10MB; width and height must be >= 300px; aspect ratio must be between 1:2.5 and 2.5:1.

[​](#param-video)

video

string

required

Reference motion video URL; supports .mp4, .mov.
Video file size must not exceed 10MB; width and height must be >= 300px; duration 3-30 seconds.

[​](#param-prompt)

prompt

string

Positive prompt for scene description, style, lighting; must not exceed 2500 characters.Length limit: 0 - 2500

[​](#param-model-name)

model_name

string

default:"kling-v3-0-std"

required

Model name. kling-v3-0-std: standard mode, cost-effective; kling-v3-0-pro: professional mode, higher video quality.Optional values: `kling-v3-0-std`, `kling-v3-0-pro`

[​](#param-negative-prompt)

negative_prompt

string

Negative prompt describing elements to avoid in the generated video; must not exceed 2500 characters.Length limit: 0 - 2500

[​](#param-keep-original-sound)

keep_original_sound

boolean

default:true

Whether to keep the original audio from the reference video.

[​](#param-character-orientation)

character_orientation

string

required

Output frame mode:

- image: uses the reference image’s pose and composition, transfers motion to the image subject (outputs 5 seconds)

- video: uses the reference video’s pose and composition, applies video motion to the image subject (output duration matches reference video, up to 30 seconds)

Optional values: `image`, `video`

##

[​](#response)

Response

[​](#param-task-id)

task_id

string

required

Use the task_id to request the [Task Result API](/docs/api-reference/model-apis-task-result) to retrieve the generated outputs.

Last modified on April 22, 2026
