Submit Kling 3.0 Motion Control Task
curl --request POST \
--url https://api.poyo.ai/api/generate/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "kling-3.0-motion-control",
"callback_url": "https://your-domain.com/callback",
"input": {
"image_urls": [
"https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png"
],
"video_urls": [
"https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4"
],
"character_orientation": "video",
"resolution": "720p",
"prompt": "Keep the identity consistent and reference @Element1 for facial details",
"kling_elements": [
{
"frontal_image_url": "https://example.com/front-face.png",
"reference_image_urls": [
"https://example.com/face-angle-1.png"
]
}
]
}
}
'import requests
url = "https://api.poyo.ai/api/generate/submit"
payload = {
"model": "kling-3.0-motion-control",
"callback_url": "https://your-domain.com/callback",
"input": {
"image_urls": ["https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png"],
"video_urls": ["https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4"],
"character_orientation": "video",
"resolution": "720p",
"prompt": "Keep the identity consistent and reference @Element1 for facial details",
"kling_elements": [
{
"frontal_image_url": "https://example.com/front-face.png",
"reference_image_urls": ["https://example.com/face-angle-1.png"]
}
]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'kling-3.0-motion-control',
callback_url: 'https://your-domain.com/callback',
input: {
image_urls: ['https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png'],
video_urls: ['https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4'],
character_orientation: 'video',
resolution: '720p',
prompt: 'Keep the identity consistent and reference @Element1 for facial details',
kling_elements: [
{
frontal_image_url: 'https://example.com/front-face.png',
reference_image_urls: ['https://example.com/face-angle-1.png']
}
]
}
})
};
fetch('https://api.poyo.ai/api/generate/submit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.poyo.ai/api/generate/submit",
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([
'model' => 'kling-3.0-motion-control',
'callback_url' => 'https://your-domain.com/callback',
'input' => [
'image_urls' => [
'https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png'
],
'video_urls' => [
'https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4'
],
'character_orientation' => 'video',
'resolution' => '720p',
'prompt' => 'Keep the identity consistent and reference @Element1 for facial details',
'kling_elements' => [
[
'frontal_image_url' => 'https://example.com/front-face.png',
'reference_image_urls' => [
'https://example.com/face-angle-1.png'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.poyo.ai/api/generate/submit"
payload := strings.NewReader("{\n \"model\": \"kling-3.0-motion-control\",\n \"callback_url\": \"https://your-domain.com/callback\",\n \"input\": {\n \"image_urls\": [\n \"https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png\"\n ],\n \"video_urls\": [\n \"https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4\"\n ],\n \"character_orientation\": \"video\",\n \"resolution\": \"720p\",\n \"prompt\": \"Keep the identity consistent and reference @Element1 for facial details\",\n \"kling_elements\": [\n {\n \"frontal_image_url\": \"https://example.com/front-face.png\",\n \"reference_image_urls\": [\n \"https://example.com/face-angle-1.png\"\n ]\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.poyo.ai/api/generate/submit")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"kling-3.0-motion-control\",\n \"callback_url\": \"https://your-domain.com/callback\",\n \"input\": {\n \"image_urls\": [\n \"https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png\"\n ],\n \"video_urls\": [\n \"https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4\"\n ],\n \"character_orientation\": \"video\",\n \"resolution\": \"720p\",\n \"prompt\": \"Keep the identity consistent and reference @Element1 for facial details\",\n \"kling_elements\": [\n {\n \"frontal_image_url\": \"https://example.com/front-face.png\",\n \"reference_image_urls\": [\n \"https://example.com/face-angle-1.png\"\n ]\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.poyo.ai/api/generate/submit")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"kling-3.0-motion-control\",\n \"callback_url\": \"https://your-domain.com/callback\",\n \"input\": {\n \"image_urls\": [\n \"https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png\"\n ],\n \"video_urls\": [\n \"https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4\"\n ],\n \"character_orientation\": \"video\",\n \"resolution\": \"720p\",\n \"prompt\": \"Keep the identity consistent and reference @Element1 for facial details\",\n \"kling_elements\": [\n {\n \"frontal_image_url\": \"https://example.com/front-face.png\",\n \"reference_image_urls\": [\n \"https://example.com/face-angle-1.png\"\n ]\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"code": 200,
"data": {
"task_id": "task-unified-1757165031-uyujaw3d",
"status": "not_started",
"created_time": "2025-11-12T10:30:00"
}
}Kling
Kling 3.0 Motion Control
The Kling 3.0 Motion Control API transfers motion from one reference video onto one image at 720p or 1080p. Video orientation allows up to 30 seconds and an optional facial element; image orientation allows up to 10 seconds.
POST
/
api
/
generate
/
submit
Submit Kling 3.0 Motion Control Task
curl --request POST \
--url https://api.poyo.ai/api/generate/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "kling-3.0-motion-control",
"callback_url": "https://your-domain.com/callback",
"input": {
"image_urls": [
"https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png"
],
"video_urls": [
"https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4"
],
"character_orientation": "video",
"resolution": "720p",
"prompt": "Keep the identity consistent and reference @Element1 for facial details",
"kling_elements": [
{
"frontal_image_url": "https://example.com/front-face.png",
"reference_image_urls": [
"https://example.com/face-angle-1.png"
]
}
]
}
}
'import requests
url = "https://api.poyo.ai/api/generate/submit"
payload = {
"model": "kling-3.0-motion-control",
"callback_url": "https://your-domain.com/callback",
"input": {
"image_urls": ["https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png"],
"video_urls": ["https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4"],
"character_orientation": "video",
"resolution": "720p",
"prompt": "Keep the identity consistent and reference @Element1 for facial details",
"kling_elements": [
{
"frontal_image_url": "https://example.com/front-face.png",
"reference_image_urls": ["https://example.com/face-angle-1.png"]
}
]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'kling-3.0-motion-control',
callback_url: 'https://your-domain.com/callback',
input: {
image_urls: ['https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png'],
video_urls: ['https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4'],
character_orientation: 'video',
resolution: '720p',
prompt: 'Keep the identity consistent and reference @Element1 for facial details',
kling_elements: [
{
frontal_image_url: 'https://example.com/front-face.png',
reference_image_urls: ['https://example.com/face-angle-1.png']
}
]
}
})
};
fetch('https://api.poyo.ai/api/generate/submit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.poyo.ai/api/generate/submit",
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([
'model' => 'kling-3.0-motion-control',
'callback_url' => 'https://your-domain.com/callback',
'input' => [
'image_urls' => [
'https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png'
],
'video_urls' => [
'https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4'
],
'character_orientation' => 'video',
'resolution' => '720p',
'prompt' => 'Keep the identity consistent and reference @Element1 for facial details',
'kling_elements' => [
[
'frontal_image_url' => 'https://example.com/front-face.png',
'reference_image_urls' => [
'https://example.com/face-angle-1.png'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.poyo.ai/api/generate/submit"
payload := strings.NewReader("{\n \"model\": \"kling-3.0-motion-control\",\n \"callback_url\": \"https://your-domain.com/callback\",\n \"input\": {\n \"image_urls\": [\n \"https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png\"\n ],\n \"video_urls\": [\n \"https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4\"\n ],\n \"character_orientation\": \"video\",\n \"resolution\": \"720p\",\n \"prompt\": \"Keep the identity consistent and reference @Element1 for facial details\",\n \"kling_elements\": [\n {\n \"frontal_image_url\": \"https://example.com/front-face.png\",\n \"reference_image_urls\": [\n \"https://example.com/face-angle-1.png\"\n ]\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.poyo.ai/api/generate/submit")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"kling-3.0-motion-control\",\n \"callback_url\": \"https://your-domain.com/callback\",\n \"input\": {\n \"image_urls\": [\n \"https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png\"\n ],\n \"video_urls\": [\n \"https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4\"\n ],\n \"character_orientation\": \"video\",\n \"resolution\": \"720p\",\n \"prompt\": \"Keep the identity consistent and reference @Element1 for facial details\",\n \"kling_elements\": [\n {\n \"frontal_image_url\": \"https://example.com/front-face.png\",\n \"reference_image_urls\": [\n \"https://example.com/face-angle-1.png\"\n ]\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.poyo.ai/api/generate/submit")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"kling-3.0-motion-control\",\n \"callback_url\": \"https://your-domain.com/callback\",\n \"input\": {\n \"image_urls\": [\n \"https://storage.poyo.ai/kling-3.0-motion-control/reference-image-new.png\"\n ],\n \"video_urls\": [\n \"https://storage.poyo.ai/kling-3.0-motion-control/reference-video-new.mp4\"\n ],\n \"character_orientation\": \"video\",\n \"resolution\": \"720p\",\n \"prompt\": \"Keep the identity consistent and reference @Element1 for facial details\",\n \"kling_elements\": [\n {\n \"frontal_image_url\": \"https://example.com/front-face.png\",\n \"reference_image_urls\": [\n \"https://example.com/face-angle-1.png\"\n ]\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"code": 200,
"data": {
"task_id": "task-unified-1757165031-uyujaw3d",
"status": "not_started",
"created_time": "2025-11-12T10:30:00"
}
}- After submission, a
task_idwill be returned. If you provided acallback_url, when the task status becomesfinishedorfailed, a POST request will be sent to thecallback_url. - Regardless of whether
callback_urlis provided, you can retrieve the result through the unified Query Task Status endpoint.
kling-3.0-motion-control combines one reference image and one reference video to transfer motion to the target character.
Models
- kling-3.0-motion-control - Motion transfer from reference video to reference image
Required parameters
- image_urls: Exactly
1reference image - video_urls: Exactly
1reference video - character_orientation:
imageorvideo
Optional parameters
- prompt: Optional scene prompt
- resolution:
720por1080p. Default is720p - kling_elements: Optional facial consistency element. Only available when
character_orientation=video
Notes
- Images support
.jpg,.jpeg,.png, up to10MB - Videos support
.mp4,.mov, up to100MB - Reference video must be at least
3seconds - When
character_orientation=image, the reference video must not exceed10seconds - When
character_orientation=video, the reference video must not exceed30seconds kling_elementssupports only1facial element. Each element requiresfrontal_image_urlandreference_image_urlswith1to3images- When using
kling_elements, reference the element in your prompt as@Element1
Authorizations
All API endpoints require Bearer Token authentication
Get your API Key:
Visit the API Key Management Page to get your API Key
Add it to the request header:
Authorization: Bearer YOUR_API_KEY
Body
application/json