# kwaivgi/kling-3.0/motion-control > Kling 3.0 Motion Control brings motion to life from reference videos, turning still images into smooth, realistic animations. Upload a character image and a motion clip — from dance to gesture, effortlessly animated — and watch your characters move realistically. Enjoy fast, reliable performance and cost-effective plans designed for creators. ## Overview - **Endpoint**: `https://api.shortapi.ai/api/v1/job/create` - **Model ID**: `kwaivgi/kling-3.0/motion-control` - **Category**: video-to-video - **Kind**: inference ## Pricing Standard: $0.107/sec | Pro: $0.143/sec For more details, please check our pricing page. ## API Information This model can be used via our HTTP API or more conveniently via our client libraries. See the input and output schema below, as well as the usage examples. ### Input Schema The API accepts the following input parameters: - **`mode`** (`string`, _optional_): Video generation mode - Default: `std` - Options: "std", "pro" - **`prompt`** (`string`, _optional_): Text prompt - Examples: "An action shot of a black lab swimming..." - **`image`** (`string`, _required_): Reference Image: Supports passing in an image via Base64 encoding or an image URL (must be publicly accessible). Do not add any prefix (such as data:image/png;base64,) before the Base64 string - **`video`** (`string`, _required_): Input video URL - **`keep_original_sound`** (`string`, _optional_): Keep original audio - Default: `yes` - Options: "yes", "no" - **`character_orientation`** (`string`, _required_): Which source controls the character. When character_orientation is 'image', the video duration should not exceed 10 seconds. When character_orientation is 'video', the video duration should not exceed 30 seconds. - Options: "image", "video" ### Output Schema The API returns a JSON response with a `job_id` for tracking the request status. **Create Job Response:** ```json { "code": 0, "data": { "amount": "0.02", "job_id": "" } } ``` **Query Job Result (when status is 2, meaning succeeded):** ```json { "code": 0, "data": { "status": 2, "result": { "videos": [{ "url": "https://..." }] } } } ``` ## Use Example To use this model, make an HTTP POST request to the API endpoint, then poll for results using the returned `job_id`. ### Bash (cURL) ```bash # Step 1: Create a job response=$(curl --request POST \ --url https://api.shortapi.ai/api/v1/job/create \ --header "Authorization: Bearer $SHORTAPI_KEY" \ --header "Content-Type: application/json" \ --data '{ "model": "kwaivgi/kling-3.0/motion-control", "args": { "image": "https://file.shortapi.ai/assets/examples/kwaivgi/kling-3.0/motion-control-image.webp", "video": "https://file.shortapi.ai/assets/examples/kwaivgi/kling-3.0/motion-control-video.mp4", "character_orientation": "video" }, "callback_url": "CALLBACK_URL" }') JOB_ID=$(echo "$response" | grep -o '"job_id": *"[^"]*"' | sed 's/"job_id": *//; s/"//g') # Step 2: Poll for results curl --request GET \ --url "https://api.shortapi.ai/api/v1/job/query?id=$JOB_ID" \ --header "Authorization: Bearer $SHORTAPI_KEY" ``` ### JavaScript (Fetch API) ```javascript // Step 1: Create a job const response = await fetch(`https://api.shortapi.ai/api/v1/job/create`, { method: "POST", headers: { "Authorization": `Bearer ${SHORTAPI_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "model": "kwaivgi/kling-3.0/motion-control", "args": { "image": "https://file.shortapi.ai/assets/examples/kwaivgi/kling-3.0/motion-control-image.webp", "video": "https://file.shortapi.ai/assets/examples/kwaivgi/kling-3.0/motion-control-video.mp4", "character_orientation": "video" }, "callback_url": "CALLBACK_URL" }) }); const data = await response.json(); const JOB_ID = data.job_id; // Step 2: Poll for results const result = await fetch(`https://api.shortapi.ai/api/v1/job/query?id=${JOB_ID}`, { method: "GET", headers: { "Authorization": `Bearer ${SHORTAPI_KEY}` } }); const resultData = await result.json(); console.log(resultData); ``` ### Python (Requests) ```python import requests # Step 1: Create a job url = "https://api.shortapi.ai/api/v1/job/create" payload = { "model": "kwaivgi/kling-3.0/motion-control", "args": { "image": "https://file.shortapi.ai/assets/examples/kwaivgi/kling-3.0/motion-control-image.webp", "video": "https://file.shortapi.ai/assets/examples/kwaivgi/kling-3.0/motion-control-video.mp4", "character_orientation": "video" }, "callback_url": "CALLBACK_URL" } headers = { "Authorization": f"Bearer {SHORTAPI_KEY}", "Content-Type": "application/json" } response = requests.post(url, headers=headers, json=payload) data = response.json() JOB_ID = data.get("job_id") # Step 2: Poll for results result_url = f"https://api.shortapi.ai/api/v1/job/query?id={JOB_ID}" result = requests.get(result_url, headers={"Authorization": f"Bearer {SHORTAPI_KEY}"}) print(result.json()) ```