API 문서화
REST API를 사용하여 TTS.ai을 애플리케이션에 통합하십시오. 쉬운 마이그레이션을 위한 OpenAI 호환 형식.
개요
TTS.ai API는 텍스트에서 음성으로 합성, 음성에서 텍스트로 전사, 음성 복제, 오디오 향상 등 모든 플랫폼 기능에 대한 프로그래밍 액세스를 제공합니다. API는 JSON 요청/응답 본문과 함께 표준 REST 규약을 사용합니다.
API 키
API 키 가져오기 계정 설정. Pro 및 Enterprise 플랜에서 사용할 수 있습니다.
기본 URL
https://api.tts.ai/v1/
인증
보유자 토큰 Authorization 헤더
인증
/v1/tts/ 무료 모델을 사용하여 IP당 하루 최대 5,000자까지 인증 없이 작업 (piper, vits, melotts, kokoro). 무료 계정에 가입하여 15,000개의 보너스 캐릭터와 프리미엄 모델에 액세스하세요.
프리미엄 모델과 더 높은 속도 제한의 경우, 메뉴에서 베어러 토큰으로 인증하십시오. Authorization 헤더.
Authorization: Bearer sk-tts-your-api-key-here
SDK
공식 SDK는 TTS.ai을 애플리케이션에 쉽게 통합할 수 있도록 해줍니다. 두 개 모두 오픈 소스이며 GitHub에서 사용할 수 있습니다.
Python
pip install ttsai
from tts_ai import TTSClient
client = TTSClient(api_key="sk-tts-...")
audio = client.generate(
text="Hello world!",
model="kokoro"
)
client.save(audio, "output.wav")
JavaScript / Node.js
npm install @ttsainpm/ttsai
const { TTSClient } = require('@ttsainpm/ttsai');
const client = new TTSClient({
apiKey: 'sk-tts-...'
});
const audio = await client.generate({
input: 'Hello world!',
model: 'kokoro'
});
await client.saveToFile(audio, 'output.wav');
기본 URL
모든 엔드포인트는 이 기본 URL에 상대적입니다. 예를 들어, TTS 엔드포인트는 다음과 같습니다.
속도 제한
API 속도 제한은 플랜에 따라 다릅니다.
| 플랜 | 요청/분 | 동시 | 최대 텍스트 길이 |
|---|---|---|---|
| 자유 | 10 | 2 | 500자 |
| 시작 | 30 | 3 | 1,000,000 문자 |
| 프로 | 60 | 5 | 1,000,000 문자 |
| 엔터프라이즈 | 300 | 20 | 50,000자 |
속도 제한 헤더는 모든 응답에 포함됩니다. X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
신용 비용
| 서비스 | 비용 | 단위 |
|---|---|---|
| TTS (무료 모델: 파이퍼, VITS, MeloTTS) | 1,000자 | 1,000자당 |
| TTS (표준 모델: Kokoro, CosyVoice 2 등) | 2,000자 | 1,000자당 |
| TTS (프리미엄 모델: Tortoise, Chatterbox 등) | 4,000자 | 1,000자당 |
| 음성을 텍스트로 | 2,000자 | 분당 오디오 |
| 음성 복제 | 4,000자 | 1,000자당 |
| 음성 변경기Name | 3 크레딧 | 분당 오디오 |
| 오디오 향상 | 2,000자 | 분당 오디오 |
| 보컬 제거 / 줄기 분할 | 3,000-4,000 글자 | 분당 오디오 |
| 음성 번역 | 5,000자 | 분당 오디오 |
| 음성 채팅 | 3 크레딧 | 턴당 |
| 키( BPM) 찾기 | 자유 | -- |
| 오디오 변환기Name | 자유 | -- |
텍스트에서 음성으로Name
텍스트를 음성 오디오로 변환합니다. 요청한 형식의 오디오 파일을 반환합니다.
요청 본문
| 파라미터 | 종류 | 필요 | 설명 |
|---|---|---|---|
| model | string | 아니요 | 모델 ID(예: kokoro, chatterbox, piper). 생략하면 요청한 언어를 지원하는 모델을 자동으로 선택합니다. en/ja/zh/ko/fr/de/it/pt/es/hi/ru의 경우 kokoro, 다른 지원 언어(ar/pl/nl/cs/da/fi/el/hu/tr/uk/vi/etc.)의 경우 piper입니다. |
| text | string | 네 | 음성으로 변환할 텍스트. 요청당 최대 용량: 500자(익명), 5,000자(무료 계정), 1,000,000자(유료 계정). 긴 입력은 서버 측에서 자동으로 쪼개집니다. |
| voice | string | 네 | 음성 ID(/v1/voices/를 사용하여 사용 가능한 음성을 나열) |
| format | string | 아니요 | 출력 형식: mp3 (기본값), wav, flac, ogg |
| speed | float | 아니요 | 말하기 속도 곱셈. 기본값: 1.0. 범위: 0.5에서 2.0까지 |
| language | string | 아니요 | 언어 코드 (예: en, es). 생략하면 자동으로 감지됩니다. |
| instructions | string | 아니요 | 행동/전달 큐 (≤500 문자). 예를 들어 <코드>\ |
| pronunciations | object | array | 아니요 | 요청당 발음이 재정의됩니다. {\ |
| stream | boolean | 아니요 | 스트리밍 응답 활성화. 기본값: false |
예제 요청
curl -X POST https://api.tts.ai/v1/tts/ \
-H "Authorization: Bearer sk-tts-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "kokoro",
"text": "Hello from TTS.ai! This is a test.",
"voice": "af_bella",
"format": "mp3"
}' \
--output output.mp3
SSML 태그
숫자, 날짜, 통화, 전화번호, 약어를 날짜 형식은 기본적으로 The TTS endpoint queues your request and returns a JSON response with a job UUID. You then poll for the result. Poll this endpoint every 1-2 seconds until Fetch the Streaming alternative: For supported models (Kokoro, MeloTTS), use
해석 입력 다음으로 말함 cardinal1234one thousand two hundred thirty-four ordinal21twenty-first date1999-12-3112월 31일, 1999년 time14:30two thirty PM telephone+1-555-867-5309plus one five five five eight six seven… currency$1,234.56one thousand two hundred thirty-four dollars and fifty-six cents spell-outNASAN A S A mdy 로 영어와 dmy 로 다른 언어로 표시되며 format=\ 로 덮어쓰기할 수 있다.{
"model": "kokoro",
"voice": "af_bella",
"text": "Your appointment is on <say-as interpret-as=\"date\">2026-04-26</say-as> at <say-as interpret-as=\"time\">14:30</say-as>. Please call <say-as interpret-as=\"telephone\">+1-555-867-5309</say-as> if you need to reschedule."
}응답
Step 1: Submit request
{
"uuid": "77b71db532874ce98e84a69a2d740d4c",
"job_id": "f21316bb-aefa-480d-8523-701d1e3184ce",
"status": "queued",
"credits_used": 11,
"credits_remaining": 15000
}Step 2: Poll for result
status is completed or failed.{
"status": "completed",
"result_url": "https://api.tts.ai/static/downloads/77b71db5.../output.mp3"
}{
"status": "processing"
}Step 3: Download audio
result_url from the completed response to download the audio file.전체 예제
import requests, time
API_KEY = "sk-tts-your-key"
BASE = "https://api.tts.ai"
# 1. Submit TTS request
resp = requests.post(f"{BASE}/v1/tts/", json={
"model": "kokoro",
"text": "Hello from TTS.ai!",
"voice": "af_bella"
}, headers={"Authorization": f"Bearer {API_KEY}"})
data = resp.json()
uuid = data["uuid"]
# 2. Poll for result
while True:
result = requests.get(f"{BASE}/v1/speech/results/",
params={"uuid": uuid}).json()
if result["status"] == "completed":
# 3. Download audio
audio = requests.get(result["result_url"])
with open("output.mp3", "wb") as f:
f.write(audio.content)
break
elif result["status"] == "failed":
raise Exception(result.get("error", "Generation failed"))
time.sleep(1.5)POST /v1/tts/stream/ for real-time Server-Sent Events (SSE) streaming — no polling needed.
음성을 텍스트로
오디오를 텍스트로 변환합니다. 자동 감지로 99개 언어를 지원합니다.
요청 본문 (multipart/form-data)
| 파라미터 | 종류 | 필요 | 설명 |
|---|---|---|---|
| file | file | 네 | 오디오 파일 (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). 최대 100MB. |
| model | string | 아니요 | STT 모델: whisper (기본값), faster-whisper, sensevoice |
| language | string | 아니요 | 언어 코드. auto 자동 감지 (기본값). |
| timestamps | boolean | 아니요 | 단어 수준의 타임스탬프를 포함합니다. 기본값: false |
| diarize | boolean | 아니요 | 기본값: false |
응답
{
"text": "Hello, this is a transcription test.",
"language": "en",
"duration": 3.5,
"segments": [
{
"start": 0.0,
"end": 1.8,
"text": "Hello, this is",
"speaker": "SPEAKER_00"
},
{
"start": 1.8,
"end": 3.5,
"text": "a transcription test.",
"speaker": "SPEAKER_00"
}
]
}
음성 복제
복제된 음성으로 음성을 생성합니다. 참조 오디오 및 텍스트를 업로드합니다.
요청 본문 (multipart/form-data)
| 파라미터 | 종류 | 필요 | 설명 |
|---|---|---|---|
| reference_audio | file | 네 | 참조 음성 오디오(10-30초 권장). 최대 20MB. |
| text | string | 네 | 복제된 음성으로 말할 텍스트. |
| model | string | 아니요 | 클론 모델: chatterbox (기본값), cosyvoice2, gpt-sovits |
| format | string | 아니요 | 출력 형식: mp3 (기본값), wav, flac |
| language | string | 아니요 | 대상 언어 코드. 선택한 모델에서 지원되어야 합니다. |
응답
TTS 엔드포인트와 동일한 바이너리 데이터로 오디오 파일을 반환합니다.
음성 변경기Name
다른 목소리처럼 들리도록 오디오를 변환합니다. 소스 오디오를 업로드하고 대상 목소리를 선택합니다.
요청 본문 (multipart/form-data)
| 파라미터 | 종류 | 필요 | 설명 |
|---|---|---|---|
| file | file | 네 | 소스 오디오 파일 (MP3, WAV, FLAC). 최대 50MB. |
| target_voice | string | 네 | 변환할 대상 음성 ID(/v1/voices/를 사용하여 사용 가능한 음성을 나열) |
| model | string | 아니요 | 음성 변환 모델: openvoice (기본값), knn-vc |
| format | string | 아니요 | 출력 형식: wav (기본값), mp3, flac |
예제 요청
curl -X POST https://api.tts.ai/v1/voice-convert/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "file=@source_audio.mp3" \
-F "target_voice=af_bella" \
-F "model=openvoice" \
-o converted.wav
응답
변환된 오디오 파일을 바이너리 데이터로 반환합니다.
음성 번역
한 언어에서 다른 언어로 말하는 오디오를 번역합니다. 음성에서 텍스트로, 번역에서 텍스트로, 음성에서 텍스트로를 하나의 통화로 결합합니다.
요청 본문 (multipart/form-data)
| 파라미터 | 종류 | 필요 | 설명 |
|---|---|---|---|
| file | file | 네 | 원본 언어로 된 오디오 파일. 최대 100MB. |
| target_language | string | 네 | 대상 언어 코드(예: es, fr, de, ja) |
| voice | string | 아니요 | 번역 출력을 위한 음성. 생략하면 자동으로 선택됩니다. |
| preserve_voice | boolean | 아니요 | 원래 발음자의 음성 특성을 보존하려고 시도합니다. 기본값: false |
응답
{
"original_text": "Hello, how are you?",
"translated_text": "Hola, como estas?",
"source_language": "en",
"target_language": "es",
"audio_url": "https://api.tts.ai/v1/results/translate_abc123.mp3",
"credits_used": 5
}
음성에서 음성으로
콘텐츠를 유지하면서 연설 스타일, 감정 또는 전달을 변화시킵니다. 음색, 페이스, 표현력을 조정하는 데 유용합니다.
요청 본문 (multipart/form-data)
| 파라미터 | 종류 | 필요 | 설명 |
|---|---|---|---|
| file | file | 네 | 소스 음성 오디오 파일. 최대 50MB. |
| voice | string | 네 | 출력 음성에 대한 대상 음성 ID |
| model | string | 아니요 | 형식: openvoice (기본값), chatterbox |
| emotion | string | 아니요 | 대상 감정: 중립, 행복, 슬픔, 분노, 흥분 |
| speed | float | 아니요 | 속도 조정. 기본값: 1.0. 범위: 0.5에서 2.0까지 |
응답
변환된 오디오 파일을 바이너리 데이터로 반환합니다.
오디오 도구Name
향상, 보컬 제거, 스템 분할 등을 위한 오디오 처리 엔드포인트.
오디오 품질 향상: 소음 제거, 선명도 향상, 슈퍼 해상도.
| file file | 향상시킬 오디오 파일 |
| denoise boolean | 소음 제거 사용하기 (기본값: true) |
| enhance_clarity boolean | 음성 명확도 향상 (기본값: true) |
| super_resolution boolean | 오디오 품질 업스케일 (기본값: false) |
| strength integer | 1- 3 (가벼운, 중간, 강한). 기본값: 2 |
보컬을 악기에서 분리하거나 (보컬 제거) 줄기로 나누어 넣습니다.
| file file | 분리할 오디오 파일 |
| model string | demucs (기본값) 또는 spleeter |
| stems integer | 줄기 수: 2, 4, 5, 또는 6 (기본값: 2) |
| format string | 출력 형식: wav, mp3, flac |
오디오 녹음에서 에코와 잔향을 제거합니다.
| file file | 처리할 오디오 파일 |
| type string | echo or reverb (default: both) |
| intensity integer | 1-5 (default: 3) |
오디오를 분석하여 키, BPM, 타이밍을 감지합니다.
| file file | 분석할 오디오 파일 |
{
"key": "C",
"scale": "Major",
"bpm": 120.0,
"time_signature": "4/4",
"camelot": "8B",
"compatible_keys": ["C Major", "G Major", "F Major", "A Minor"]
}
형식 간에 오디오를 변환합니다.
| file file | 변환할 오디오 파일 |
| format string | 대상 형식: mp3, wav, flac, ogg, m4a, aac |
| bitrate integer | 출력 비트레이트( kbps): 64, 128, 192, 256, 320 |
| sample_rate integer | 샘플링 속도: 22050, 44100, 48000 |
| channels string | mono 또는 stereo |
음성 채팅
오디오 또는 텍스트를 보내고 합성 음성으로 AI 응답을 받으십시오.
요청 본문 (multipart/form-data 또는 JSON)
| 파라미터 | 종류 | 필요 | 설명 |
|---|---|---|---|
| audio | file | 아니요* | 오디오 입력(오디오 또는 텍스트 필요) |
| text | string | 아니요* | 텍스트 입력(오디오 또는 텍스트 필요) |
| voice | string | 아니요 | AI 응답을 위한 음성. 기본값: af_bella |
| tts_model | string | 아니요 | 응답을 위한 TTS 모델. 기본값: kokoro |
| system_prompt | string | 아니요 | AI를 위한 사용자 정의 시스템 프롬프트 |
| conversation_id | string | 아니요 | 기존 대화 계속하기 |
응답
{
"conversation_id": "conv_abc123",
"user_text": "What is the capital of France?",
"ai_text": "The capital of France is Paris.",
"audio_url": "https://api.tts.ai/v1/audio/tmp/resp_xyz.mp3",
"credits_used": 3
}
일괄 TTS
병렬 TTS 생성을 위해 여러 개의 텍스트를 제출합니다. 모든 작업이 완료되면 웹훅 콜백을 받을 수 있습니다.
파라미터
| 파라미터 | 종류 | 설명 |
|---|---|---|
| texts | array | Array of objects: {text, model, voice}. Max 50 items. |
| webhook_url | string | 배치가 완료될 때 POST 결과를 보내는 URL 선택 사항. |
응답
{
"batch_id": "abc123",
"total": 3,
"completed": 0,
"status": "processing"
}
GET /v1/tts/batch/result/?batch_id=abc123 를 사용하여 투표 진행 상태를 확인합니다.
음성 포함
참조 오디오에서 음성 임베딩을 사전 계산합니다. 거의 즉각적인 생성을 위해 후속 음성 복제 요청에서 반환된 embed_id를 사용합니다.
파라미터
| 파라미터 | 종류 | 설명 |
|---|---|---|
| file | file | Reference audio file (WAV, MP3, FLAC). |
| model | string | Cloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts. |
응답
{
"embed_id": "emb_abc123",
"model": "chatterbox",
"duration_ms": 450
}
상태 검사
GPU 서버 상태, 로드된 모델, 큐 크기 확인. 인증 필요 없음. 30초 동안 캐시됨.
응답
{
"status": "online",
"latency_ms": 45,
"queue_size": 3,
"models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}
모델 목록
사용 가능한 모든 모델과 그 기능의 목록을 반환합니다.
응답
{
"models": [
{
"id": "kokoro",
"name": "Kokoro",
"type": "tts",
"tier": "standard",
"languages": ["en", "ja", "ko", "zh", "fr"],
"supports_cloning": false,
"supports_streaming": true,
"credits_per_1k_chars": 2
},
{
"id": "chatterbox",
"name": "Chatterbox",
"type": "tts",
"tier": "premium",
"languages": ["en"],
"supports_cloning": true,
"supports_streaming": true,
"credits_per_1k_chars": 4
}
]
}
목록 보이스
모델 또는 언어별로 필터링된 사용 가능한 모든 음성의 목록을 반환합니다.
쿼리 매개 변수
| 파라미터 | 종류 | 설명 |
|---|---|---|
| model | string | 모델 ID로 필터링(예: kokoro) |
| language | string | 언어 코드로 필터링(예: en) |
| gender | string | 성별별로 필터링: 남성, 여성, 중성 |
응답
{
"voices": [
{
"id": "af_bella",
"name": "Bella",
"model": "kokoro",
"language": "en",
"gender": "female",
"preview_url": "https://api.tts.ai/v1/voices/preview/af_bella.mp3"
}
],
"total": 142
}
자막 (SRT / VTT) 새
완료된 TTS 작업에 대해 동기화된 자막을 생성합니다. 오디오에 Whisper alignment를 실행하고 SRT 또는 WebVTT를 반환합니다. 결과는 디스크에 캐시되므로 같은 uuid에 대한 두 번째 호출은 디스크 읽기입니다.
쿼리 매개 변수
| 파라미터 | 필요 | 설명 |
|---|---|---|
| uuid | 네 | /v1/tts/ 또는 /v1/voice-clone/에 의해 반환된 작업 UUID. |
| format | 아니요 | srt (기본값) 또는 vtt. |
| download | 아니요 | 1 은 Content-Disposition: attachment 를 보내서 브라우저가 표시하는 대신 저장하도록 합니다. |
| language | 아니요 | 정렬 모델에 대한 힌트(누락된 경우 자동으로 감지됨). |
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt
발음 사전 새
TTS 엔진에 특정 단어의 발음을 알려주세요. 저장된 항목은 사용자가 제출하는 모든 TTS 요청에 자동으로 적용됩니다. 계정당 200개의 항목 제한.
요청 본문 (POST)
| 파라미터 | 종류 | 설명 |
|---|---|---|
| word | string | 덮어쓰기할 단어( 예: GIF, Anthropic). 단어 경계가 일치합니다. |
| replacement | string | 모델에 대한 철자법(예: jiff, ann THROP ick). |
| language | string | ISO 코드를 선택할 수 있습니다. 비어 있음 = 모든 언어에 적용됩니다. |
| case_sensitive | boolean | 기본값 false. true일 때 대소문자를 정확히 일치시킵니다. |
# Save an entry
curl -X POST https://tts.ai/api/v1/pronunciations/ \
-H "Authorization: Bearer sk-tts-..." \
-H "Content-Type: application/json" \
-d '{"word": "GIF", "replacement": "jiff"}'
# List your entries
curl https://tts.ai/api/v1/pronunciations/ -H "Authorization: Bearer sk-tts-..."
# Delete entry by id
curl -X DELETE "https://tts.ai/api/v1/pronunciations/?id=42" -H "Authorization: Bearer sk-tts-..."
또한 저장하지 않고 요청당 오버라이드를 전달할 수도 있습니다. /v1/tts/ 호출에 pronunciations 를 객체나 배열로 포함할 수 있습니다(TTS 엔드포인트 파라미터 참조).
기사 내레이터 새
어떤 기사 페이지에 단일 태그를 드롭하고 방문자는 클릭에 페이지를 설명 고정 리더 바를 얻을. 자동으로 기사 본문을 감지, 사용자 정의 음성 / 모델 / 위치 / 악센트 색상을 지원합니다.
<script src="https://tts.ai/narrator.js"
data-pk="pk-tts-your-publishable-key"
data-voice="af_bella"
data-model="kokoro"
data-extract="auto"
data-position="bottom"
data-color="#e60000"
data-locale="en"></script>
옵션
| 파라미터 | 설명 |
|---|---|
data-pk | 게시 가능한 키 (pk-tts-…). 도메인 제한은 키의 allowed_domains 필드를 통해 적용됩니다. |
data-voice | 음성 ID. 기본값 af_bella. |
data-model | TTS 모델 ID. 기본값 kokoro. |
data-extract | auto (기본값) — article/main/.post-content/.entry-content 선택자를 시도하고, 가장 밀집한 단락 클러스터로 돌아갑니다. 또는 특정 요소를 대상으로 CSS 선택자를 전달합니다. |
data-position | bottom (기본값) 또는 top. |
data-color | 악센트 색상 (CSS 색상). 기본값 #e60000. |
data-min-chars / data-max-chars | 기사가 최소 문자수( 기본값 200) 보다 짧으면 바를 건너뜁니다. 최대 문자수( 기본값 50,000) 에서 입력을 막습니다. |
리눅스 커널 버전 1.0.0.1 에서 리눅스 커널 버전 1.0.0.2 까지
듣기 단추 위젯Name
인라인 버튼 스타일 임베디드. 태그 옆에 렌더링되고 버튼으로 트리거되는 짧은 스니펫을 재생합니다. 위의 Article Narrator와는 다른 모양입니다(페이지 전체에 걸쳐 막대를 자동으로 삽입하고 전체 기사를 나레이션합니다).
<script src="https://tts.ai/widget.js"
data-voice="af_bella"
data-model="kokoro"
data-style="full"
data-theme="light"></script>
저장된 음성 (지속적인 클론)
참조 오디오를 한 번 업로드하고 영구적인 voice_id를 얻은 다음, 매번 통화할 때마다 오디오를 다시 업로드하는 대신 TTS 요청에서 해당 id를 참조합니다.
음성 업로드
POST
https://tts.ai/api/v1/user-voices/
인증 필요
필드: 파일 (필수, 5-30초 오디오), 이름 (필수), 언어 (선택사항, 기본값 en), 모델 (선택사항 — zh/ja/ko 혹은 openvoice의 경우 cosyvoice2를 자동으로 선택), consent_confirmed (필수, 모든 진실된 값).
curl -X POST https://tts.ai/api/v1/user-voices/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "file=@reference.wav" \
-F "name=My Narrator" \
-F "language=en" \
-F "consent_confirmed=true"
# Response:
{
"public_id": "uv_a1b2c3d4e5f6",
"id": 42,
"name": "My Narrator",
"model_name": "openvoice",
"language": "en",
"reference_audio_url": "https://tts.ai/media/user-voices/....wav",
"storage_status": "active",
"created_at": "2026-04-17T03:45:00+00:00"
}
TTS에서 저장된 음성 사용
user_voice_id 를 사용하여 /api/v1/tts/ 에 POST 합니다. (주의: 웹 VPS 호스트이며 api.tts.ai 는 아닙니다.) 저장된 오디오와 경로를 복제 파이프라인에 로드합니다.
curl -X POST https://tts.ai/api/v1/tts/ \
-H "Authorization: Bearer sk-tts-your-key" \
-H "Content-Type: application/json" \
-d '{"text":"Hello from my saved voice","user_voice_id":"uv_a1b2c3d4e5f6"}'
# Returns a queued job — poll /v1/speech/results/?uuid=... for the audio URL.
목록 / 삭제
GET https://tts.ai/api/v1/user-voices/ # list your saved voices + quota info
DELETE https://tts.ai/api/v1/user-voices/?public_id=uv_a1b2c3d4e5f6
아카이브 / 재활성화 (무료)
보관된 음성은 계정에 남아 있지만 TTS에서 사용할 수 없습니다. 휴면 상태의 최종 사용자에게 유용하므로 목록이 깨끗하게 유지됩니다.
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/archive/
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/reactivate/
코드 예제
텍스트에서 음성으로Name
import requests
API_KEY = "sk-tts-your-key"
# Text to Speech
response = requests.post(
"https://api.tts.ai/v1/tts/",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "kokoro",
"text": "Hello from TTS.ai!",
"voice": "af_bella",
"format": "mp3"
}
)
with open("output.mp3", "wb") as f:
f.write(response.content)
print(f"Credits used: {response.headers.get('X-Credits-Used')}")
음성을 텍스트로
# Speech to Text
with open("recording.mp3", "rb") as f:
response = requests.post(
"https://api.tts.ai/v1/stt/",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": f},
data={"model": "faster-whisper", "timestamps": "true"}
)
result = response.json()
print(result["text"])
음성 복제
# Voice Cloning
with open("reference.wav", "rb") as ref:
response = requests.post(
"https://api.tts.ai/v1/tts/clone/",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"reference_audio": ref},
data={
"text": "This speech uses a cloned voice.",
"model": "chatterbox"
}
)
with open("cloned_output.mp3", "wb") as f:
f.write(response.content)
텍스트에서 음성으로Name
const API_KEY = 'sk-tts-your-key';
// Text to Speech
const response = await fetch('https://api.tts.ai/v1/tts/', {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'kokoro',
text: 'Hello from TTS.ai!',
voice: 'af_bella',
format: 'mp3'
})
});
const audioBlob = await response.blob();
const audioUrl = URL.createObjectURL(audioBlob);
const audio = new Audio(audioUrl);
audio.play();
음성을 텍스트로
// Speech to Text
const formData = new FormData();
formData.append('file', audioFile);
formData.append('model', 'faster-whisper');
const response = await fetch('https://api.tts.ai/v1/stt/', {
method: 'POST',
headers: { 'Authorization': `Bearer ${API_KEY}` },
body: formData
});
const result = await response.json();
console.log(result.text);
텍스트에서 음성으로Name
# Text to Speech
curl -X POST https://api.tts.ai/v1/tts/ \
-H "Authorization: Bearer sk-tts-your-key" \
-H "Content-Type: application/json" \
-d '{"model":"kokoro","text":"Hello!","voice":"af_bella","format":"mp3"}' \
-o output.mp3
음성을 텍스트로
# Speech to Text
curl -X POST https://api.tts.ai/v1/stt/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "file=@recording.mp3" \
-F "model=faster-whisper" \
-F "timestamps=true"
음성 복제
# Voice Cloning
curl -X POST https://api.tts.ai/v1/tts/clone/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "reference_audio=@reference.wav" \
-F "text=This uses a cloned voice." \
-F "model=chatterbox" \
-o cloned.mp3
오디오 향상
# Audio Enhancement
curl -X POST https://api.tts.ai/v1/audio/enhance/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "file=@noisy_audio.mp3" \
-F "denoise=true" \
-F "enhance_clarity=true" \
-o enhanced.mp3
오류 코드
모든 오류는 JSON 응답을 반환합니다. error 필드
{
"error": {
"code": "insufficient_credits",
"message": "You do not have enough characters for this request.",
"characters_required": 4000,
"characters_available": 2000
}
}
| HTTP 상태 | 오류 코드 | 설명 |
|---|---|---|
| 400 | bad_request |
잘못된 요청 매개변수. 자세한 내용은 오류 메시지를 확인하십시오. |
| 401 | unauthorized |
API 키가 누락되었거나 잘못되었습니다. |
| 402 | insufficient_credits |
충분한 문자가 없습니다. /pricing/에서 더 구입하십시오. |
| 403 | forbidden |
이 리소스에 액세스할 권한이 없습니다(예: 다른 사용자의 작업을 폴링). API 액세스 자체는 모든 플랜에 포함되어 있습니다. |
| 404 | not_found |
모델 또는 음성을 찾을 수 없습니다. |
| 413 | file_too_large |
업로드된 파일이 크기 제한을 초과합니다. |
| 429 | rate_limited |
요청이 너무 많습니다. 속도 제한 헤더를 확인하십시오. |
| 500 | internal_error |
서버 오류. 나중에 다시 시도하십시오. |
| 503 | model_loading |
모델을 로드 중입니다. 몇 초 후에 다시 시도하십시오. |
웹훅
오랜 시간이 걸리는 작업(stem splitting, batch TTS)의 경우 webhook_url 매개변수를 제공할 수 있습니다. 작업이 완료되면 결과를 URL에 POST합니다.
{
"event": "task.completed",
"task_id": "task_abc123",
"status": "success",
"result_url": "https://api.tts.ai/v1/results/task_abc123",
"credits_used": 12,
"created_at": "2025-01-15T10:30:00Z",
"completed_at": "2025-01-15T10:30:45Z"
}
빌드할 준비가 되셨습니까?
API 키를 받아 TTS.ai을 애플리케이션에 통합하십시오.