- Called via unified endpoint
/v1/videos/generations - Supports image / video character orientation, max duration 10s / 30s respectively
- Asynchronous task — returns task_id on submission
Request example
curl --request POST \
--url https://api.openveer.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "kling-v2-6-motion-control",
"prompt": "Keep the character consistent, perform a turn and wave following the reference video, cinematic lighting",
"image_url": "https://example.com/ref-image.png",
"video_url": "https://example.com/ref-video-8s.mp4",
"keep_original_sound": "yes",
"character_orientation": "image",
"mode": "std",
"watermark_info": {"enabled": false}
}'import requests
url = "https://api.openveer.com/v1/videos/generations"
payload = {
"model": "kling-v2-6-motion-control",
"prompt": "Keep the character consistent, perform a turn and wave following the reference video, cinematic lighting",
"image_url": "https://example.com/ref-image.png",
"video_url": "https://example.com/ref-video-8s.mp4",
"keep_original_sound": "yes",
"character_orientation": "image",
"mode": "std",
"watermark_info": {"enabled": False}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())const url = "https://api.openveer.com/v1/videos/generations";
const payload = {
model: "kling-v2-6-motion-control",
prompt: "Keep the character consistent, perform a turn and wave following the reference video, cinematic lighting",
image_url: "https://example.com/ref-image.png",
video_url: "https://example.com/ref-video-8s.mp4",
keep_original_sound: "yes",
character_orientation: "image",
mode: "std",
watermark_info: { enabled: false }
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));Response example
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01J9HA7JPQ9A0Z6JZ3V8M9W6PZ"
}
]
}{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": 401,
"message": "Authentication failed. Please check your API key.",
"type": "authentication_error"
}
}{
"error": {
"code": 402,
"message": "Insufficient account balance. Please top up and try again.",
"type": "payment_required"
}
}{
"error": {
"code": 429,
"message": "Too many requests. Please try again later.",
"type": "rate_limit_error"
}
}{
"error": {
"code": 500,
"message": "Internal server error. Please try again later.",
"type": "server_error"
}
}Authentication
Authorization stringAll requests require Bearer Token authentication
Get your API Key:
Visit the API Key Management page to obtain your API Key
Add the following header to each request:
Authorization: Bearer YOUR_API_KEYRequest Parameters
model stringModel name: kling-v3-motion-control or kling-v2-6-motion-control
nsfw_check booleanWhether to run content moderation before submitting the video task.
true: useomni-moderation-latestto review prompts and input imagesfalseor omitted: do not send a moderation request, adding no moderation cost or latency (default)
prompt stringText prompt describing the desired motion, camera movement, and style
Optional but recommended — more specific descriptions produce more stable results
Example: "The character dances following the reference video, smooth motion, realistic style"
image_url stringReference image URL
Must be a publicly accessible link
video_url stringReference video URL
Must be a publicly accessible direct link; mp4/mov recommended, under 100MB
The server probes the actual duration of video_url. Minimum is 3 seconds; maximum is determined by character_orientation.
keep_original_sound stringWhether to retain the original audio track from the reference video
Options:
yes: Keep original audio (default)no: Do not keep original audio
character_orientation stringCharacter orientation control
Options:
image: Use the character orientation from the reference image (reference video duration:3~10s)video: Use the character orientation from the reference video (reference video duration:3~30s)
mode stringGeneration mode
Options:
std: Standard mode (balanced speed and quality)pro: High-quality mode (higher latency)
watermark_info objectenabled booleanWhether to add a watermark
* true: Add watermark
* false: No watermark (default)
Duration Rules
| Condition | Allowed Reference Video Duration |
|---|---|
character_orientation = image |
3s ~ 10s |
character_orientation = video |
3s ~ 30s |
Billing duration is determined by the actual duration probed from video_url by the server, not a client-side estimate.
Response
code integerResponse status code, 200 on success
data arraystatus stringTask status, submitted on initial submission
task_id stringUnique task identifier used to query task status and results
Examples
Example 1: image orientation (within 10s)
{
"model": "kling-v2-6-motion-control",
"prompt": "Keep character orientation consistent with the reference image, perform a turn and wave",
"image_url": "https://example.com/ref-image.png",
"video_url": "https://example.com/ref-video-8s.mp4",
"character_orientation": "image",
"mode": "std",
"keep_original_sound": "yes",
"watermark_info": {"enabled": false}
}Example 2: video orientation (within 30s)
{
"model": "kling-v2-6-motion-control",
"prompt": "Follow the character orientation and rhythm of the reference video, maintain fluid motion",
"image_url": "https://example.com/ref-image.png",
"video_url": "https://example.com/ref-video-12s.mp4",
"character_orientation": "video",
"mode": "pro",
"keep_original_sound": "no",
"watermark_info": {"enabled": false}
}This documentation is built and hosted on Mintlify, a developer documentation platform.