Models
All models support text-to-video and image-to-video. Advanced features vary:
Multi-source reference = the
image_list / video_list metadata
fields. Routes to Kling’s Omni-Video upstream endpoint when present.
kling/kling-video-o1 is a constrained subset (5s/10s only, no multi-shot,
no audio); pick kling/kling-v3-omni for the full Omni surface.
Native audio = Kling auto-generates a soundtrack matching the video.
Bills extra upstream. Toggle via metadata.sound: "on".
The submit endpoint is the same for all models �?
POST /v1/video/generations. What changes is which metadata fields
the upstream honors per the table above.
Submit a task
Send a POST to/v1/video/generations with model, prompt, and any
upstream-specific parameters under metadata:
POST returns lowercase
status: "queued". GET returns a wrapped
envelope with uppercase status (SUBMITTED / IN_PROGRESS / SUCCESS /
FAILURE) �?see Poll for results below.Common metadata fields
These three apply to every endpoint variant:
These two work on text-to-video and image-to-video only (not Omni-Video):
Poll for results
Use the task ID returned at submit time:
Progress comes back as a percent string (
"30%", "100%"), not an int.
Poll every 5 - 10 seconds. A typical std 5-second clip completes in 30 - 60
seconds; 4K, 15-second, and multi-shot tasks take 2 - 5 minutes.
data.result_url is a Kling-signed URL (note the ksTime / ksSecret
query params). Download or rehost promptly if you need long retention �?
the signature has an upstream-defined expiry.
Endpoint variants
All three variants sharePOST /v1/video/generations. The endpoint Kling
actually serves is determined by which fields you supply.
Text-to-video
Justmodel + prompt (+ optional metadata above). No image input means
text-to-video:
Image-to-video
Add a top-levelimage (first frame) and / or metadata.image_tail (last
frame) for first / last frame i2v:
Multi-source reference (Omni-Video)
image_list and video_list route the request to Kling’s Omni-Video
endpoint. Available only on kling/kling-video-o1 and kling/kling-v3-omni.
image_list �?multi-image reference:
image_url(required): URL or raw base64 (nodata:prefix).type(optional):first_frame/end_frame. Omit unless the image is meant as a frame anchor. End-only is not supported (always pair with a first-frame image).
video_list �?video reference (max 1 video, MP4/MOV, �?00MB):
refer_type:base(video editing �?input video is edited; default) orfeature(style/composition reference �?generate next/previous shot).keep_original_sound:yes/no.- On
kling/kling-v3-omni, video reference is supported only at 3-10s duration, std/pro mode (not 4K).
When
video_list is set, metadata.sound must be "off" �?
Kling rejects the combination otherwise.<<<>>> syntax: <<<image_1>>>, <<<video_1>>>, <<<element_1>>>.
Omni-only. The index matches the array order (1-based).
Advanced features
These features work across text-to-video, image-to-video, and Omni-Video endpoints �?model support varies. Pass them viametadata.
Multi-shot
Generate a video composed of multiple sequential shots, each with its own prompt and duration. Available onkling/kling-v3 and kling/kling-v3-omni.
Native audio
Kling auto-generates a soundtrack matching the video. Bills extra upstream. Toggle viametadata.sound: "on" (default "off").
Model support:
kling/kling-v3andkling/kling-v3-omni: any mode (std / pro / 4K)kling/kling-v2-6: pro mode only- All other models: not supported
Watermark
Passmetadata.watermark_info: {enabled: true} to imprint Kling’s
watermark on the rendered video. Default is no watermark.
Billing
Kling video bills per task. ClearMaas charges exactly what Kling charges �? the upstreamfinal_unit_deduction becomes the wallet debit, with no
markup. Final cost matches Kling’s published rate card.
A small pre-consume hold is reserved at submit time to cover the highest
plausible cost for your request (e.g. 4K + audio); the difference is
refunded as soon as the task succeeds.
See your wallet history in the console for actual per-task spend.
Using the Kling SDK directly
If you already have code written against Kling’s official SDK, ClearMaas also speaks Kling’s native wire format on/kling/v1/videos/.... Body
fields stay flat (model_name, mode, etc.) �?only the base URL,
Authorization header, and model_name value change:
model_name must use the ClearMaas-side model identity (the same name
you’d use on /v1/video/generations), not Kling’s bare model name.
ClearMaas resolves it through the channel’s model mapping before
forwarding to Kling.GET /kling/v1/videos/omni-video/{task_id} (or text2video, image2video).
Pick whichever wire format matches your existing code. Both bill identically.
See also
- API Reference / Video �?full schema with try-it
- Operations / Billing & Usage
- Operations / Errors