Kling
Kling 음성 생성
CometAPI POST /kling/v1/audio/tts를 통해 Kling TTS를 호출하여 다국어 음성으로 텍스트를 음성으로 변환하고, voice_id not found 오류에 대한 해결 방법도 확인하세요.
POST
/
kling
/
v1
/
audio
/
tts
cURL
curl https://api.cometapi.com/kling/v1/audio/tts \
-H "Authorization: Bearer $COMETAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Welcome to CometAPI!",
"voice_id": "genshin_vindi2",
"voice_language": "zh",
"voice_speed": 1.2
}'import os
import requests
response = requests.post(
"https://api.cometapi.com/kling/v1/audio/tts",
headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
json={
"text": "Welcome to CometAPI!",
"voice_id": "genshin_vindi2",
"voice_language": "zh",
"voice_speed": 1.2
},
)
result = response.json()
print(result["code"], result.get("data", {}).get("task_id")) # the route responds with the result payload directly
const response = await fetch("https://api.cometapi.com/kling/v1/audio/tts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"text": "Welcome to CometAPI!",
"voice_id": "genshin_vindi2",
"voice_language": "zh",
"voice_speed": 1.2
}),
});
const result = await response.json();
console.log(result.code, result.data?.task_id); // the route responds with the result payload directly
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cometapi.com/kling/v1/audio/tts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'text' => 'Welcome to CometAPI!',
'voice_id' => 'genshin_vindi2',
'voice_language' => 'zh'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cometapi.com/kling/v1/audio/tts"
payload := strings.NewReader("{\n \"text\": \"Welcome to CometAPI!\",\n \"voice_id\": \"genshin_vindi2\",\n \"voice_language\": \"zh\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cometapi.com/kling/v1/audio/tts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"Welcome to CometAPI!\",\n \"voice_id\": \"genshin_vindi2\",\n \"voice_language\": \"zh\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cometapi.com/kling/v1/audio/tts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"text\": \"Welcome to CometAPI!\",\n \"voice_id\": \"genshin_vindi2\",\n \"voice_language\": \"zh\"\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"message": "SUCCEED",
"data": {
"task_id": "<task_id>",
"task_status": "submitted",
"task_info": {},
"task_status_msg": null,
"created_at": 1773366840306,
"updated_at": 1773366840306
}
}TTS
Kling TTS(Text-to-Speech) API는 고품질 텍스트 음성 변환 서비스를 제공하며, 여러 언어와 음성 옵션을 지원합니다.참고 문서
- API Reference: Kling TTS API 문서
- Voice ID List: 사용 가능한 Voice ID 참조
일반적인 문제
Voice id not found 오류
문제 설명:voice_id가 voice_language와 일치하지 않으면 API는 다음 오류를 반환합니다:
{
"message": "Voice id not found",
"data": {
"data": {
"code": 1201,
"message": "Voice id not found",
"request_id": "ed47a82c-804b-45f3-bde9-926039cd25c0"
},
"message": "Voice id not found"
}
}
voice_id가 지정한 voice_language를 지원하는지 확인하세요. 각 Voice ID가 어떤 언어를 지원하는지 확인하려면 Voice ID List를 참조하세요.인증
Bearer token authentication. Use your CometAPI key.
헤더
Content type of the request body.
본문
application/json
Text to synthesize into speech. Max 1000 characters.
Voice preset ID. Determines the speaker voice used for synthesis. See the Kling documentation for available voice IDs and their supported languages.
Language of the selected voice. Must match the language supported by the chosen voice_id. Values: zh (Chinese) or en (English).
Speech rate multiplier. Range 0.8–2.0 (one decimal place). Values outside this range are clamped automatically.
마지막 수정일 2026년 6월 23일
⌘I
cURL
curl https://api.cometapi.com/kling/v1/audio/tts \
-H "Authorization: Bearer $COMETAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Welcome to CometAPI!",
"voice_id": "genshin_vindi2",
"voice_language": "zh",
"voice_speed": 1.2
}'import os
import requests
response = requests.post(
"https://api.cometapi.com/kling/v1/audio/tts",
headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
json={
"text": "Welcome to CometAPI!",
"voice_id": "genshin_vindi2",
"voice_language": "zh",
"voice_speed": 1.2
},
)
result = response.json()
print(result["code"], result.get("data", {}).get("task_id")) # the route responds with the result payload directly
const response = await fetch("https://api.cometapi.com/kling/v1/audio/tts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"text": "Welcome to CometAPI!",
"voice_id": "genshin_vindi2",
"voice_language": "zh",
"voice_speed": 1.2
}),
});
const result = await response.json();
console.log(result.code, result.data?.task_id); // the route responds with the result payload directly
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cometapi.com/kling/v1/audio/tts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'text' => 'Welcome to CometAPI!',
'voice_id' => 'genshin_vindi2',
'voice_language' => 'zh'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cometapi.com/kling/v1/audio/tts"
payload := strings.NewReader("{\n \"text\": \"Welcome to CometAPI!\",\n \"voice_id\": \"genshin_vindi2\",\n \"voice_language\": \"zh\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cometapi.com/kling/v1/audio/tts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"Welcome to CometAPI!\",\n \"voice_id\": \"genshin_vindi2\",\n \"voice_language\": \"zh\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cometapi.com/kling/v1/audio/tts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"text\": \"Welcome to CometAPI!\",\n \"voice_id\": \"genshin_vindi2\",\n \"voice_language\": \"zh\"\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"message": "SUCCEED",
"data": {
"task_id": "<task_id>",
"task_status": "submitted",
"task_info": {},
"task_status_msg": null,
"created_at": 1773366840306,
"updated_at": 1773366840306
}
}