Kling Motion Control API reference (Kling 3.0 and 2.6)
AI motion control (motion transfer) by Kuaishou’s Kling. Apply the dance or movement from a reference video to a character image, producing a video of that character performing the motion. It needs both inputs: one character image and one motion video. Two versions on one endpoint: Kling 3.0 (kling-3.0-motion-control) at $0.10/s for 720p and $0.15/s for 1080p, and Kling 2.6 (kling-motion-control) at $0.06/s and $0.10/s. Billed per second of the reference video, up to 30s. Async: create a task, then poll the same endpoint for the result.
Model page: Kling AI Motion Control API — pricing, specs and the playground
Where each input goes
input_urls— the character photo, full body works best (PNG / JPG). This is who moves.video_urls— the dance / motion source video (MP4). This is how it moves.
Both fields are arrays and both are required. Swap them — motion clip in input_urls, portrait in video_urls — and the job will not do what you meant.
Models
| Model | API | Duration | Price |
|---|---|---|---|
| Kling 3.0 Motion Control | kling-3.0-motion-control | up to 30s | $0.10/s+ (720p $0.10/s · 1080p $0.15/s) |
| Kling 2.6 Motion Control | kling-motion-control | up to 30s | $0.06/s+ (720p $0.06/s · 1080p $0.10/s) |
| DreamActor V2 | dreamactor-v2 | up to 30s | $0.06/s |
DreamActor V2 does the same job — image + reference video, character motion transfer; see /models/dreamactor-v2. The parameter contract on this page applies to both kling-3.0-motion-control and kling-motion-control (identical fields).
Create a task
POST /api/v1/video/generations — async: create, then poll the same endpoint for the result.
# Step 1: Create motion control task
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-3.0-motion-control",
"input_urls": ["https://example.com/character.png"],
"video_urls": ["https://example.com/dance-motion.mp4"],
"mode": "720p",
"character_orientation": "video"
}'
# Step 2: Poll status
curl "https://api.apimodels.app/v1/video/generations?task_id=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"Request parameters
| Field | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | "kling-3.0-motion-control" (Kling 3.0; kling-v3-motion-control also works) or "kling-motion-control" (Kling 2.6; kling-2.6-motion-control also works) |
| input_urls | Yes | array | Character reference image URLs (PNG / JPG) |
| video_urls | Yes | array | Motion reference video URLs (MP4) |
| mode | No | string | "720p" (default) or "1080p" |
| character_orientation | No | string | "image" (default) — follow the character image orientation, or "video" — follow the motion video orientation |
| callback_url | No | string | Webhook URL called when the task completes |
Choosing character_orientation
| Value | Orientation follows |
|---|---|
| video | The motion reference video |
| image (default) | The character image itself |
Billing and notes
- Billed per second of the reference video (rounded up, up to 30 seconds): Kling 3.0 $0.10/s at 720p and $0.15/s at 1080p; Kling 2.6 $0.06/s and $0.10/s.
- input_urls takes the character photo — a full-body shot works best.
- video_urls takes the dance or motion reference video.
- Task states: pending / processing / completed / failed. Read data.resultUrls[0] when completed, data.failMsg when failed.
- Poll every 5-10 seconds; in production prefer callback_url over polling.
- Result videos are kept for 30 days — download or re-host anything you need to keep.
- Kling also has dedicated endpoints — see the Kling Video API docs for text-to-video, image-to-video and other advanced features.
Related
FAQ
How do I make a character in a photo perform the motion from a video?
POST to https://api.apimodels.app/v1/video/generations on apimodels.app with model "kling-3.0-motion-control" (or "kling-motion-control" for Kling 2.6), put the character photo in input_urls and the dance/motion clip in video_urls, then poll GET /api/v1/video/generations?task_id= until state is completed and read data.resultUrls[0]. Both fields are arrays and both are required.
How much does Kling Motion Control cost?
It is billed per second of the reference video on apimodels.app, rounded up and capped at 30 seconds. Kling 3.0: $0.10/s at 720p and $0.15/s at 1080p, so a 10-second 720p clip is $1.00. Kling 2.6: $0.06/s and $0.10/s, so the same clip is $0.60. Failed jobs are not charged.
How do I get 1080p instead of 720p?
Set mode to "1080p" in the create request — the default is "720p". Pricing follows the resolution: Kling 3.0 $0.10/s at 720p and $0.15/s at 1080p; Kling 2.6 $0.06/s and $0.10/s.
What kind of character image works best?
A full-body photo works best. Pass it as a public PNG or JPG URL in input_urls; the motion source stays in video_urls as an MP4 URL.
What does character_orientation do?
It decides whose orientation the generated character follows: "image" (the default) follows the orientation of the character image you uploaded, while "video" follows the motion reference video.
Is there another motion transfer model on apimodels.app?
Yes — DreamActor V2 (rh-dreamactor/dreamactor-v2) also does image + reference video character motion transfer, at $0.06/s for clips up to 30 seconds. Both run through the same video endpoint and the same API key.