Skip to main content

Kling

In this page's examples, {BASE_URL} is https://api.uniall.ai.

Overview

Kling video capabilities use stable version-level model IDs. Select quality with the top-level resolution field and select the workflow with operation; do not encode quality, audio, or an upstream route in the model name.

ModelVideo capabilitiesResolution
kling-v3-turboText-to-video and single-first-frame image-to-video720p, 1080p
kling-v3Text-to-video, image-to-video, first-last-frame, motion control, and digital humanstd, pro
kling-v3-omniText-to-video, image-to-video, first-last-frame, multimodal reference, and video editingstd, pro
kling-o1Text-to-video, image-to-video, first-last-frame, multimodal reference, and video editingstd, pro

Availability depends on the model catalog, the API key's model permissions, and currently enabled routes. Historical quality, audio, silent, and digital-human tier model IDs are no longer accepted and are not converted automatically.

When To Use It

  • Use kling-v3-turbo for fast text or single-image video generation with 720p or 1080p output.
  • Use kling-v3 for first-last-frame generation, motion control, or digital-human video.
  • Use kling-v3-omni for multimodal references and video editing with up to four reference images.
  • Use kling-o1 for the same reference and editing request shape with a 3 to 10 second generation range.

Endpoint

ActionMethodPath
Create a video taskPOST/v1/videos
Query a video taskGET/v1/videos/{task_id}
Download a completed videoGET/v1/videos/{task_id}/content

POST /v1/videos/generations and POST /v1/video/generations remain compatible creation paths. New integrations should use POST /v1/videos.

Authentication

Authorization: Bearer sk-***
Content-Type: application/json

Resolution And Audio

Pass resolution at the request body's top level. Do not use size in its place. When omitted, Turbo defaults to 720p; the other Kling video models default to std. Pass it explicitly when predictable output and billing records matter.

Kling video requests do not accept a sound switch. Describe dialogue, music, ambient sound, or silence in prompt. The audio_url and voice_id fields used by digital-human tasks are lip-sync inputs, not sound switches.

Operations

operationSupported modelsRequired input
text_to_videoTurbo, V3, Omni, O1prompt
image_to_videoTurbo, V3, Omni, O1prompt and image
first_last_frameV3, Omni, O1prompt, image, and last_image
reference_to_videoOmni, O1prompt and image or video references
edit_videoOmni, O1prompt and video_url; reference images are optional
motion_controlV3prompt, image, video, and character_orientation
avatarV3See Digital Human Video

Duration rules:

  • Turbo and V3 generation operations accept 3 to 15 seconds.
  • Omni text-to-video, image-to-video, and first-last-frame operations accept 3 to 15 seconds; reference_to_video accepts 3 to 10 seconds.
  • O1 generation operations accept 3 to 10 seconds.
  • Motion control, digital human, and video editing use the duration rules of their operation; omit duration unless the operation explicitly accepts it.
  • Turbo text-to-video accepts aspect_ratio; Turbo image-to-video does not.

Request Parameters

ParameterTypeRequiredDescription
modelstringYesStable Kling video model ID.
promptstringYesPrompt required by the UniAll video task interface.
operationstringRecommendedWorkflow from the operations table.
resolutionstringNoModel-specific quality value; defaults are described above.
durationintegerConditionalOutput duration for operations that accept it.
aspect_ratiostringConditional16:9, 9:16, or 1:1.
imagestringConditionalPublic HTTP(S) image URL for image-to-video or the first frame.
last_imagestringConditionalLast-frame image URL; use it together with image.
reference_image_urlsstring[]NoUp to four reference-image URLs for multimodal reference or editing.
video_urlstringConditionalBase video URL for reference or editing operations.
videostringConditionalMotion-reference video URL for motion_control.
keep_original_soundstringNoyes or no for multimodal reference and video editing.
character_orientationstringConditionalimage or video for motion_control.
watermarkbooleanNoWhether to add an AIGC watermark.

Request Examples

Turbo Text-To-Video

curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-v3-turbo",
"operation": "text_to_video",
"prompt": "A paper airplane crosses a quiet city street at dawn, cinematic camera movement, soft ambient sound.",
"duration": 3,
"resolution": "720p",
"aspect_ratio": "16:9",
"watermark": false
}'

Turbo Image-To-Video

curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-v3-turbo",
"operation": "image_to_video",
"prompt": "The paper airplane glides steadily forward while the camera follows slowly.",
"image": "https://example.com/plane.png",
"duration": 5,
"resolution": "1080p"
}'

Do not pass aspect_ratio for Turbo image-to-video.

V3 First-Last-Frame

curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-v3",
"operation": "first_last_frame",
"prompt": "The subject turns naturally toward the camera with a continuous, smooth transition.",
"image": "https://example.com/first.png",
"last_image": "https://example.com/last.png",
"duration": 5,
"resolution": "pro"
}'

V3 Motion Control

curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-v3",
"operation": "motion_control",
"prompt": "Preserve the subject identity and clothing while reproducing the motion from the reference video.",
"image": "https://example.com/person.png",
"video": "https://example.com/motion.mp4",
"resolution": "pro",
"character_orientation": "image"
}'

Omni Multimodal Reference

curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-v3-omni",
"operation": "reference_to_video",
"prompt": "Preserve the subject and clothing while applying the referenced motion to the base video.",
"reference_image_urls": [
"https://example.com/person.png",
"https://example.com/clothes.png"
],
"video_url": "https://example.com/base.mp4",
"duration": 8,
"resolution": "pro",
"keep_original_sound": "yes"
}'

Omni Video Editing

curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-v3-omni",
"operation": "edit_video",
"prompt": "Keep the subject motion unchanged and replace the background with a city street at night.",
"video_url": "https://example.com/source.mp4",
"reference_image_urls": [
"https://example.com/city-style.png"
],
"resolution": "pro",
"keep_original_sound": "yes"
}'

Use the same text, image, first-last-frame, reference, and editing request shape with kling-o1; its generation duration range is 3 to 10 seconds.

Response Example

{
"id": "task_xxxxxxxxxxxxx",
"task_id": "task_xxxxxxxxxxxxx",
"object": "video.generation.job",
"model": "kling-v3",
"status": "queued",
"progress": 0
}

Task Status And Result

Save id or task_id, then follow Video Generation Overview for the shared 3-to-10-second polling interval, terminal statuses, result fields, error contract, and authenticated download flow.

Billing Notes

Video billing normally depends on the public model, operation, resolution, and actual output duration. Task submission may reserve balance; the task settlement record and current model catalog price are the final billing source.

Common Errors

  • Using a historical quality, audio, silent, or digital-human tier model ID instead of one of the version-level IDs above.
  • Passing size instead of resolution, or passing sound to a video request.
  • Passing aspect_ratio to Turbo image-to-video.
  • Requesting a duration outside the selected model and operation range.
  • Mixing image, reference_image_urls, and video inputs in a way that duplicates the same reference.
  • Passing image or video URLs that the service cannot access publicly.
  • Resubmitting a paid task after one polling request times out instead of continuing to query the original task_id.

Public responses do not expose provider names, upstream task IDs, routes, credentials, or raw upstream requests.