Kling 3.0 Motion Control icon
Video by Kuaishou

Kling 3.0 Motion Control API

Kling 3.0 Motion Control transfers the motion from a reference video onto the character in a reference image, so one video generation call reanimates any character with the exact actions of your driving clip. Upload a character image and a motion video, pick Standard or Pro, and the Kling 3.0 Motion Control API returns a new clip through async jobs and webhooks. It runs on Apiframe with no separate Kling AI account to manage.

Integrate Kling 3.0 Motion Control with a single API call — one key, one unified endpoint, and shared billing across every model on Apiframe.

model: "kling-3.0-motion-control"

What's special about Kling 3.0 Motion Control

Motion transfer from any reference video

Drive a still character image with a real motion clip: the Kling 3.0 Motion Control API reads the actions in your reference video and maps them onto the character from your image. Dancing, gestures, walking, and full-body performance carry over with improved consistency, so motion transfer becomes a single video generation call instead of a manual rig-and-animate pipeline.

Character comes from your image

The characters, backgrounds, and other elements in the generated video are based on your reference image, so the look you upload is the look you get. Feed a portrait, a full-body shot, or an illustration and the Kling 3.0 Motion Control API keeps that identity while the reference video supplies only the motion. It pairs naturally with reference images exported from other models.

Standard and Pro quality tiers

Choose Standard mode for cost-effective 720p output, or Pro mode for higher-quality 1080p renders. The Kling 3.0 Motion Control API bills per second of the reference clip, so you trade cost for fidelity per request and only pay for the length you actually drive.

Character orientation control

Decide whether the generated character keeps the orientation of the person in your image or follows the orientation of the characters in the reference video. Image orientation supports clips up to 10 seconds; video orientation supports up to 30 seconds, ideal for longer performance capture and full routines.

Keep the original sound

Optionally carry the reference video’s original audio track straight into the generated video, so music, dialogue, and ambience stay in sync with the transferred motion. Turn it off when you want a silent clip to score separately with AI music or your own mix.

Access Kling Motion Control through one AI API

Apiframe gives you API access to Kling 3.0 Motion Control behind one AI API and key, with no separate Kling AI account. The API uses async jobs: send the image and video, get a task id, and poll or receive a webhook when the generated video is ready. The same AI API also runs other Kling video models and dozens more.

Made with Kling 3.0 Motion Control

A few outputs generated through the Kling 3.0 Motion Control API on Apiframe.

Sample coming soon

Drone shot flying over a tropical coastline at sunrise, smooth cinematic motion

Sample coming soon

A vintage car driving through a rainy neon city at night, reflections on the asphalt

Sample coming soon

Time-lapse of clouds rolling over a mountain range in warm golden light

Overview

Endpoint
POST /v2/videos/generate
Model ID
kling-3.0-motion-control
Params key
klingParams
Modality
Video
Provider
Kuaishou
Avg. completion
~240s

Capabilities

Image inputSupported
Avg. time~240s

Quick start

Send a single POST /v2/videos/generate request with your API key to generate with Kling 3.0 Motion Control. The call returns a jobId you can poll or receive via webhook.

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": "a cinematic sunrise over a futuristic cityscape, smooth camera push-in",
        "model": "kling-3.0-motion-control",
        "klingParams": {
            "image": "https://example.com/input.jpg",
            "video": "https://example.com/input.jpg",
            "mode": "pro",
            "character_orientation": "image"
        }
    }'
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": "a cinematic sunrise over a futuristic cityscape, smooth camera push-in",
        "model": "kling-3.0-motion-control",
        "klingParams": {
            "image": "https://example.com/input.jpg",
            "video": "https://example.com/input.jpg",
            "mode": "pro",
            "character_orientation": "image"
        }
    },
)
print(response.json())  # { "jobId": "...", "status": "QUEUED" }
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": "a cinematic sunrise over a futuristic cityscape, smooth camera push-in",
    "model": "kling-3.0-motion-control",
    "klingParams": {
      "image": "https://example.com/input.jpg",
      "video": "https://example.com/input.jpg",
      "mode": "pro",
      "character_orientation": "image"
    }
  }),
});
const { jobId } = await response.json();
console.log(jobId);

Response & job lifecycle

Generation is asynchronous. A successful submission returns 202 Accepted with a jobId. Poll GET /v2/jobs/{id} (or supply a webhook_url) until the status is COMPLETED; the result field then holds the output URL(s).

1. Submission response (202)

{
  "jobId": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
  "status": "QUEUED"
}

2. Poll for the result

curl https://api.apiframe.ai/v2/jobs/JOB_ID \
  -H "X-API-Key: afk_your_api_key_here"
import requests, time

while True:
    job = requests.get(
        "https://api.apiframe.ai/v2/jobs/JOB_ID",
        headers={"X-API-Key": "afk_your_api_key_here"},
    ).json()
    if job["status"] in ("COMPLETED", "FAILED"):
        break
    time.sleep(2)
print(job["result"])
let job;
do {
  await new Promise((r) => setTimeout(r, 2000));
  job = await fetch("https://api.apiframe.ai/v2/jobs/JOB_ID", {
    headers: { "X-API-Key": "afk_your_api_key_here" },
  }).then((r) => r.json());
} while (job.status !== "COMPLETED" && job.status !== "FAILED");
console.log(job.result);

Input schema

Request parameters accepted by the Kling 3.0 Motion Control endpoint. Model-specific options are nested under the params object shown below.

Parameter Type Required Default Allowed / range Description
prompt string required Text description of what to generate.
model string required "kling-3.0-motion-control" "kling-3.0-motion-control" The model identifier for this endpoint.
klingParams.image string (URL) optional Reference image the generated character is based on.
klingParams.video string (URL) optional Motion reference clip (3–30s). The character mirrors its actions.
klingParams.mode string optional "pro" "std", "pro" Mode
klingParams.character_orientation string optional "image" "image", "video" Whether the character faces as in the image or follows the video.
klingParams.keep_original_sound boolean optional true Keep the reference video’s original audio track.

Frequently Asked Questions

Common questions about the Kling 3.0 Motion Control API.

What is Kling 3.0 Motion Control?

Kling 3.0 Motion Control is a Kuaishou Kling model that transfers motion from a reference video onto a character image. You provide a character image and a motion reference clip, and the model generates a new video where your character performs the actions from the reference video with improved consistency and quality.

How do I call the Kling 3.0 Motion Control API?

Get an api key, then send a POST request to the video generation endpoint with model set to kling-3.0-motion-control and klingParams containing an image URL and a video URL. The request returns a task id; poll it or use a webhook to fetch the generated video. Apiframe gives you Kling video behind one AI API and key.

What inputs are required?

Both a reference image and a reference video are required. The image supplies the character and scene; the video supplies the motion. You can optionally set mode (std or pro), character_orientation (image or video), and keep_original_sound.

How long can the reference video be?

When character_orientation is "image", the reference video can be up to 10 seconds. When it is "video", the clip can be up to 30 seconds. The reference video should be 3 seconds or longer. Requests outside that range are rejected before any credits are charged.

How is Kling 3.0 Motion Control priced?

Pricing is per second of the reference video: 12 credits per second in Standard (std) mode and 21 credits per second in Pro (pro) mode. The billed duration is measured from the reference clip you upload, so a 5-second Pro request costs 105 credits.

What is the difference between Standard and Pro mode?

Standard mode renders at 720p and is the cost-effective option; Pro mode renders at 1080p for higher quality. Pick the tier per request to balance cost and fidelity.

Still have questions?

Start building with the Kling 3.0 Motion Control API

Get your API key and integrate Kling 3.0 Motion Control in minutes — Pay-as-you-go.

Free credits to start
One API for every model
Webhooks, SDKs & idempotency
No provider account required

Questions? Join our Discord or contact sales.