Skip to content

Kling ​

Kling is Kuaishou's video generation model family. Like other video models, you create a task via POST /v1/videos and then poll for the result (OpenAI Video style responses). Model names map 1:1 to the upstream (kling-v3, kling-v2-6, etc.) — the platform provides no aliases.

Endpoints ​

  • Create task: POST $URL/v1/videos
  • Query task: GET $URL/v1/videos/{task_id}

Supported Models ​

Model NameNotesResolutions
kling-v33.0 flagship720p / 1080p / 4k
kling-v2-62.6 standard720p / 1080p
kling-v2-5-turbo2.5 fast720p / 1080p
kling-v2-1-master2.1 master720p / 1080p
kling-v2-master2.0 master720p / 1080p
  • The resolution tier is controlled by mode: std → 720P, pro → 1080P, 4k → 4K; 4K is currently only available on kling-v3 — other models return 400 for 4k;
  • kling-v3 and kling-v2-6 support audio generation (metadata.sound); the audio tier is billed higher than the silent tier;
  • The 1.x series (kling-v1 / kling-v1-6) is not available.

Parameters ​

ParameterTypeRequiredDescription
modelstringYesModel name from the table above
promptstringYesVideo content description
resolution 🆕stringNoResolution tier (recommended): "720p"(default) / "1080p" / "4k" (4k only for kling-v3). Conflicting mode returns 400
modestringNoResolution tier (legacy, compatible): std=720p / pro=1080p / 4k, default std
audio 🆕stringNoAudio generation (official style): "off"(default) / "native". Supported on kling-v3 / kling-v2-6 with higher audio-tier pricing
metadata.soundstringNoAudio generation (legacy, compatible): "on" / "off", equivalent to audio
aspect_ratio 🆕stringNoAspect ratio (official style): 16:9 / 9:16 / 1:1, default 16:9
settings 🆕objectNoOfficial settings container fully compatible: settings.resolution / settings.audio / settings.duration / settings.aspect_ratio
secondsstringNoOutput duration in seconds, e.g. "5", "10". Default "5"
sizestringNoAspect ratio: 16:9 / 9:16 / 1:1 (dimensions like 1920x1080 are also accepted and mapped to a ratio). Default 16:9
imagestringNoReference image URL (image-to-video)
imagesarrayNoReference image URLs
metadata.soundstringNoGenerate audio: "on" / "off" (kling-v3 / kling-v2-6 bill the audio tier higher; only these two models support audio)

Request Example ​

Text-to-video ​

bash
curl $URL/v1/videos \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling-v3",
    "prompt": "A cat wearing sunglasses walking on a neon street",
    "mode": "std",
    "seconds": "5",
    "metadata": { "sound": "on" }
  }'
python
import time
import requests

url = "$URL/v1/videos"
headers = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}
payload = {"model": "kling-v3", "prompt": "A cat on a neon street", "mode": "std", "seconds": "5", "metadata": {"sound": "on"}}

task = requests.post(url, json=payload, headers=headers).json()
task_id = task["id"]

while True:
    result = requests.get(f"{url}/{task_id}", headers=headers).json()
    if result["status"] in ("completed", "failed"):
        break
    time.sleep(8)

print(result)

Image-to-video ​

bash
curl $URL/v1/videos \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling-v3",
    "prompt": "Make the person in the frame turn and walk toward the camera",
    "image": "https://example.com/ref.png",
    "mode": "std",
    "seconds": "5"
  }'

Response Fields ​

Both create and query return the same structure (OpenAI Video style):

FieldTypeDescription
idstringTask ID
modelstringModel actually used
statusstringTask status (see below)
created_atintegerCreation timestamp (seconds)
seconds 🆕stringRequested generation duration in seconds (consistent with billing)
video_url 🆕stringVideo URL after completion (only when completed, same as metadata.url)
resolution 🆕stringBilled resolution tier: 720p / 1080p / 4k (echoed from submission, consistent with billing)
mode 🆕stringTier echo: std / pro / 4k
aspect_ratio 🆕stringAspect ratio echo: 16:9 / 9:16 / 1:1
audio 🆕boolWhether audio was generated (consistent with billing audio tier)
error.messagestringFailure reason (only when failed)

Task Status ​

StatusMeaningAction
queuedQueuedKeep polling
in_progressGeneratingKeep polling
completedSuccessGet the video URL from the response and download it soon
failedFailedCheck error.message

Poll every 5-10 seconds

Video URLs expire after a while — download and save them as soon as the task completes.

Response Example ​

json
{ "id": "task_xxxxxxxx", "model": "kling-v3", "status": "in_progress", "created_at": 1785000000 }

After completion:

json
{ "id": "task_xxxxxxxx", "model": "kling-v3", "status": "completed", "created_at": 1785000000, "video_url": "https://.../kling-v3-xxxx.mp4" }

Native Protocol Passthrough (advanced) ​

Raw Kling-format passthrough (the platform handles auth / channel selection / task management, fields pass through verbatim):

OperationMethod & Path
Text-to-videoPOST $URL/kling/v1/videos/text2video
Image-to-videoPOST $URL/kling/v1/videos/image2video
Query taskGET $URL/kling/v1/videos/{action}/{task_id}

Submissions still go through platform task management (polling) and return a platform task_id. The body is the native Kling format (model_name / duration / mode pass through directly). The omni reference path (/kling/v1/videos/omni-video) requires omni-series models, which are not available yet.

bash
curl $URL/kling/v1/videos/text2video \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model_name": "kling-v3",
    "prompt": "A cat wearing sunglasses walking on a neon street",
    "mode": "std",
    "duration": "5"
  }'

FAQ ​

Q: How long does a task take?

Usually 1-3 minutes, longer for complex tasks. Poll the query endpoint; tasks stuck over 20 minutes are auto-failed.

Q: Do video links expire?

Yes. Download and store the video soon after generation completes.

© 2026 Euno AI. All rights reserved.