Kling 3.0 Motion Control
Kling 3.0 Motion Control — transfer motion from a reference video onto a character image.
POST /v2/videos/generate — model: "kling-3.0-motion-control"
Kling 3.0 Motion Control transfers the motion from a reference video onto the character in a reference image. The generated character, backgrounds, and other elements come from the image, while the actions follow the reference clip. Both image and video are required.
See Video Generation overview for common request fields, response format, and error codes.
Model-specific parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
klingParams.image | string | — | Required. URL of the reference character image. .jpg/.jpeg/.png, max 10MB, 340–3850px, aspect ratio 1:2.5 to 2.5:1 |
klingParams.video | string | — | Required. URL of the motion reference video. .mp4/.mov, max 100MB, 3–30s (see character_orientation) |
klingParams.mode | string | "pro" | Generation mode: "std" (720p, cost-effective) or "pro" (1080p, higher quality) |
klingParams.character_orientation | string | "image" | "image" keeps the orientation of the person in the image (max 10s clip); "video" follows the orientation of the characters in the video (max 30s clip) |
klingParams.keep_original_sound | boolean | true | Keep the reference video's original audio track |
Credit cost
Pricing is per second of output. The output length matches the reference video, so the total credit cost is credits-per-second × ceil(reference video duration). The reference video's duration is measured server-side before the job is queued.
| Variant | Credits / sec |
|---|---|
std | 12 |
pro | 21 |
Examples: a 5-second reference clip in pro mode costs 21 × 5 = 105 credits; a 10-second clip in std mode costs 12 × 10 = 120 credits.
The reference video must be 3–10s when character_orientation is "image", or 3–30s when it is "video". Requests with a clip outside that range are rejected before any credits are charged.
Example result
Once the job is COMPLETED, the result object on GET /v2/jobs/:id looks like:
{
"videoUrl": "https://cdn2.apiframe.ai/videos/b2c3d4e5-f6a7-8901-bcde-f23456789012.mp4"
}See Result format for field details.
Code examples
curl -X POST https://api.apiframe.ai/v2/videos/generate \
-H "X-API-Key: afk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"prompt": "the character dances energetically",
"model": "kling-3.0-motion-control",
"klingParams": {
"image": "https://example.com/character.png",
"video": "https://example.com/dance.mp4",
"mode": "pro",
"character_orientation": "video",
"keep_original_sound": true
}
}'import requests
response = requests.post(
"https://api.apiframe.ai/v2/videos/generate",
headers={
"X-API-Key": "afk_your_api_key_here",
"Content-Type": "application/json",
},
json={
"prompt": "the character dances energetically",
"model": "kling-3.0-motion-control",
"klingParams": {
"image": "https://example.com/character.png",
"video": "https://example.com/dance.mp4",
"mode": "pro",
"character_orientation": "video",
"keep_original_sound": True,
},
},
)
print(response.json())const response = await fetch("https://api.apiframe.ai/v2/videos/generate", {
method: "POST",
headers: {
"X-API-Key": "afk_your_api_key_here",
"Content-Type": "application/json",
},
body: JSON.stringify({
prompt: "the character dances energetically",
model: "kling-3.0-motion-control",
klingParams: {
image: "https://example.com/character.png",
video: "https://example.com/dance.mp4",
mode: "pro",
character_orientation: "video",
keep_original_sound: true,
},
}),
});
console.log(await response.json());Try it
/v2/videos/generateTry it