Save a Kling 4.0 Voice
October 15, 2026
Table of contents
This endpoint saves your own Kling 4.0 voice from an audio clip. Kling cleans up the clip and saves it to your Kling account as a voice with source: USER.
Use the returned id (or the name) as voice_1, voice_2 or voice_3 in POST /videos/omni with omni_version: v4. A saved voice belongs to the Kling account that saved it, so pass the same email to POST /videos/omni.
Saved voices are listed first by GET /videos/voices, and you can remove one with DELETE /videos/voices.
https://api.useapi.net/v1/kling/videos/voices
Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
API tokenis required, see Setup useapi.net for details.
Request Body
{
"email": "[email protected]",
"audioUrl": "https://example.com/my-voice.mp3",
"name": "My voice"
}
-
emailis optional when only one account configured.
However, if you have multiple accounts configured, this parameter becomes required. -
audioUrlis required, a URL of an audio file 4.5 to 30 seconds long.
Supported formats:mp3,wav,m4a,flac,aac,ogg. -
nameis required, the voice name.
Maximum length: 30 characters.
Responses
-
{ "email": "[email protected]", "id": "301234567890", "name": "My voice", "source": "USER", "audioUrl": "https://v15-kling.klingai.com/.../voice.quality.wav", "coverUrl": "https://s15-kling.klingai.com/kimg/.../cover.png", "duration": 8300 } -
The clip is shorter than 4.5 seconds or longer than 30 seconds,
audioUrlcan’t be fetched, or it is not an audio file.{ "error": "audioUrl duration 2.8s must be between 4.5 and 30 seconds" } -
{ "error": "Unauthorized", "code": 401 }
Model
{ // TypeScript, all fields are optional
email: string // Kling account the voice was saved to
id: string // Use as voice_1 … voice_3 in POST /videos/omni (or use name)
name: string
source: 'USER' // Your saved voice
audioUrl: string // The cleaned-up voice sample (.wav)
coverUrl: string // Cover image
duration: number // Voice length in milliseconds
}
Examples
-
curl -X POST "https://api.useapi.net/v1/kling/videos/voices" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -d '{ "email": "[email protected]", "audioUrl": "https://example.com/my-voice.mp3", "name": "My voice" }' -
const token = "API token"; const email = "Previously configured account email"; const apiUrl = "https://api.useapi.net/v1/kling/videos/voices"; const response = await fetch(apiUrl, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${token}`, }, body: JSON.stringify({ email: email, audioUrl: "https://example.com/my-voice.mp3", name: "My voice" }) }); const result = await response.json(); console.log("response", {response, result}); -
import requests token = "API token" email = "Previously configured account email" apiUrl = "https://api.useapi.net/v1/kling/videos/voices" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {token}" } data = { "email": email, "audioUrl": "https://example.com/my-voice.mp3", "name": "My voice" } response = requests.post(apiUrl, headers=headers, json=data) print(response, response.json())