Skip to main content
ClearMaas speaks Kling natively for video generation. You submit a task, poll the task ID for its status, and pick up the rendered MP4 once the upstream finishes (typically 30 - 90 seconds). This async submit-then-poll pattern is unique to video. Chat / images / TTS all use synchronous request-response; Kling video does not.

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:
Response carries the task ID:
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:
Response shape is wrapped:
Status values (uppercase, raw task state): 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 share POST /v1/video/generations. The endpoint Kling actually serves is determined by which fields you supply.

Text-to-video

Just model + prompt (+ optional metadata above). No image input means text-to-video:

Image-to-video

Add a top-level image (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 (no data: 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) or feature (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.
Reference images / videos / elements inside the prompt with the <<<>>> 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 via metadata.

Multi-shot

Generate a video composed of multiple sequential shots, each with its own prompt and duration. Available on kling/kling-v3 and kling/kling-v3-omni.

Native audio

Kling auto-generates a soundtrack matching the video. Bills extra upstream. Toggle via metadata.sound: "on" (default "off"). Model support:
  • kling/kling-v3 and kling/kling-v3-omni: any mode (std / pro / 4K)
  • kling/kling-v2-6: pro mode only
  • All other models: not supported

Watermark

Pass metadata.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 upstream final_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.
The corresponding fetch path is GET /kling/v1/videos/omni-video/{task_id} (or text2video, image2video). Pick whichever wire format matches your existing code. Both bill identically.

See also