Skip to main content
Model ID
Calling method: sync

Kling Custom Voice Integration Guide

kling-custom-voice clones a target speaker into a reusable Kling voice profile. Submit a clean 5–30 second voice sample (an audio file URL or a previously generated Kling video ID), and Kling returns a globally unique voice_id that can be reused as the speaker for downstream Kling models such as kling-lip-sync or any avatar pipeline that accepts a voice_id.

kling-custom-voice

Asynchronous. The SubmitRequest response returns immediately with status: "dispatched"; the final result arrives via the webhook (and is also persisted on the request record).

Parameters

Provide exactly one of voice_url or video_id. They are mutually exclusive — submitting both, or neither, will be rejected by Kling.

Submit Request — using voice_url

Submit Request — using video_id

note: the webhook field in the request body is optional.

Final Outcome

outcome.voices is an array — typically of length 1 — describing the cloned voice profile:
If Kling reports success but returns no voices (rare), the outcome instead carries:

Pricing

The reconciliation is idempotent — duplicate success callbacks for the same task will not double-charge.

Failure & Refund

If Kling reports the task as failed (or our pipeline classifies the response as a failure), the request status becomes failed and the full pre-charge is refunded. No post-charge adjustment is applied.

End-to-End Flow

  1. POST /requests with kling-custom-voice, providing exactly one of voice_url or video_id.
  2. Wait for the webhook (or poll GET /requests/{request_id}).
  3. On success, capture outcome.voices[0].voice_id.
  4. Reuse that voice_id as the speaker in subsequent Kling generation requests (e.g. kling-lip-sync, avatar pipelines).