API 문서화

REST API를 사용하여 TTS.ai을 애플리케이션에 통합하십시오. 쉬운 마이그레이션을 위한 OpenAI 호환 형식.

REST API OpenAI 호환 가능 JSON 응답 스트리밍 지원

개요

TTS.ai API는 텍스트에서 음성으로 합성, 음성에서 텍스트로 전사, 음성 복제, 오디오 향상 등 모든 플랫폼 기능에 대한 프로그래밍 액세스를 제공합니다. API는 JSON 요청/응답 본문과 함께 표준 REST 규약을 사용합니다.

API 키

API 키 가져오기 계정 설정. Pro 및 Enterprise 플랜에서 사용할 수 있습니다.

기본 URL

https://api.tts.ai/v1/

인증

보유자 토큰 Authorization 헤더

인증

무료 계층 — 키가 필요하지 않습니다. 익명의 POST는 /v1/tts/ 무료 모델을 사용하여 IP당 하루 최대 5,000자까지 인증 없이 작업 (piper, vits, melotts, kokoro). 무료 계정에 가입하여 15,000개의 보너스 캐릭터와 프리미엄 모델에 액세스하세요.

프리미엄 모델과 더 높은 속도 제한의 경우, 메뉴에서 베어러 토큰으로 인증하십시오. Authorization 헤더.

HTTP 헤더
Authorization: Bearer sk-tts-your-api-key-here
API 키를 비밀로 유지하십시오. 클라이언트 코드, 공개 저장소 또는 로그에서 키를 공유하지 마세요. 계정 설정에서 키를 정기적으로 교체하세요.

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")
GitHub

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');
GitHub

기본 URL

기본 URL: https://api.tts.ai/v1/

모든 엔드포인트는 이 기본 URL에 상대적입니다. 예를 들어, TTS 엔드포인트는 다음과 같습니다.

POST https://api.tts.ai/v1/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

POST /v1/tts/

텍스트를 음성 오디오로 변환합니다. 요청한 형식의 오디오 파일을 반환합니다.

요청 본문

파라미터종류필요설명
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
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 태그

숫자, 날짜, 통화, 전화번호, 약어를

해석입력다음으로 말함
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."
}

응답

The TTS endpoint queues your request and returns a JSON response with a job UUID. You then poll for the result.

Step 1: Submit request

Response (JSON)
{
  "uuid": "77b71db532874ce98e84a69a2d740d4c",
  "job_id": "f21316bb-aefa-480d-8523-701d1e3184ce",
  "status": "queued",
  "credits_used": 11,
  "credits_remaining": 15000
}

Step 2: Poll for result

GET /v1/speech/results/?uuid=<job_uuid>

Poll this endpoint every 1-2 seconds until status is completed or failed.

Polling response (completed)
{
  "status": "completed",
  "result_url": "https://api.tts.ai/static/downloads/77b71db5.../output.mp3"
}
Polling response (still processing)
{
  "status": "processing"
}

Step 3: Download audio

Fetch the result_url from the completed response to download the audio file.

전체 예제

Python
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)

Streaming alternative: For supported models (Kokoro, MeloTTS), use POST /v1/tts/stream/ for real-time Server-Sent Events (SSE) streaming — no polling needed.

음성을 텍스트로

POST /v1/stt/

오디오를 텍스트로 변환합니다. 자동 감지로 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

응답

JSON 응답
{
  "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"
    }
  ]
}

음성 복제

POST /v1/tts/clone/

복제된 음성으로 음성을 생성합니다. 참조 오디오 및 텍스트를 업로드합니다.

요청 본문 (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

POST /v1/voice-convert/

다른 목소리처럼 들리도록 오디오를 변환합니다. 소스 오디오를 업로드하고 대상 목소리를 선택합니다.

요청 본문 (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
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

응답

변환된 오디오 파일을 바이너리 데이터로 반환합니다.

음성 번역

POST /v1/speech-translate/

한 언어에서 다른 언어로 말하는 오디오를 번역합니다. 음성에서 텍스트로, 번역에서 텍스트로, 음성에서 텍스트로를 하나의 통화로 결합합니다.

요청 본문 (multipart/form-data)

파라미터종류필요설명
file file 원본 언어로 된 오디오 파일. 최대 100MB.
target_language string 대상 언어 코드(예: es, fr, de, ja)
voice string 아니요 번역 출력을 위한 음성. 생략하면 자동으로 선택됩니다.
preserve_voice boolean 아니요 원래 발음자의 음성 특성을 보존하려고 시도합니다. 기본값: false

응답

JSON 응답
{
  "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
}

음성에서 음성으로

POST /v1/speech-to-speech/

콘텐츠를 유지하면서 연설 스타일, 감정 또는 전달을 변화시킵니다. 음색, 페이스, 표현력을 조정하는 데 유용합니다.

요청 본문 (multipart/form-data)

파라미터종류필요설명
file file 소스 음성 오디오 파일. 최대 50MB.
voice string 출력 음성에 대한 대상 음성 ID
model string 아니요 형식: openvoice (기본값), chatterbox
emotion string 아니요 대상 감정: 중립, 행복, 슬픔, 분노, 흥분
speed float 아니요 속도 조정. 기본값: 1.0. 범위: 0.5에서 2.0까지

응답

변환된 오디오 파일을 바이너리 데이터로 반환합니다.

오디오 도구Name

향상, 보컬 제거, 스템 분할 등을 위한 오디오 처리 엔드포인트.

POST /v1/audio/enhance/

오디오 품질 향상: 소음 제거, 선명도 향상, 슈퍼 해상도.

file file향상시킬 오디오 파일
denoise boolean소음 제거 사용하기 (기본값: true)
enhance_clarity boolean음성 명확도 향상 (기본값: true)
super_resolution boolean오디오 품질 업스케일 (기본값: false)
strength integer1- 3 (가벼운, 중간, 강한). 기본값: 2
POST /v1/audio/separate/

보컬을 악기에서 분리하거나 (보컬 제거) 줄기로 나누어 넣습니다.

file file분리할 오디오 파일
model stringdemucs (기본값) 또는 spleeter
stems integer줄기 수: 2, 4, 5, 또는 6 (기본값: 2)
format string출력 형식: wav, mp3, flac
POST /v1/audio/dereverb/

오디오 녹음에서 에코와 잔향을 제거합니다.

file file처리할 오디오 파일
type stringecho or reverb (default: both)
intensity integer1-5 (default: 3)
POST /v1/audio/analyze/ 자유

오디오를 분석하여 키, 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"]
}
POST /v1/audio/convert/ 자유

형식 간에 오디오를 변환합니다.

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 stringmono 또는 stereo

음성 채팅

POST /v1/voice-chat/

오디오 또는 텍스트를 보내고 합성 음성으로 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 아니요 기존 대화 계속하기

응답

JSON 응답
{
  "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

POST /v1/tts/batch/

병렬 TTS 생성을 위해 여러 개의 텍스트를 제출합니다. 모든 작업이 완료되면 웹훅 콜백을 받을 수 있습니다.

파라미터

파라미터종류설명
textsarrayArray of objects: {text, model, voice}. Max 50 items.
webhook_urlstring배치가 완료될 때 POST 결과를 보내는 URL 선택 사항.

응답

JSON 응답
{
  "batch_id": "abc123",
  "total": 3,
  "completed": 0,
  "status": "processing"
}

GET /v1/tts/batch/result/?batch_id=abc123 를 사용하여 투표 진행 상태를 확인합니다.

음성 포함

POST /v1/voice-embed/

참조 오디오에서 음성 임베딩을 사전 계산합니다. 거의 즉각적인 생성을 위해 후속 음성 복제 요청에서 반환된 embed_id를 사용합니다.

파라미터

파라미터종류설명
filefileReference audio file (WAV, MP3, FLAC).
modelstringCloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts.

응답

JSON 응답
{
  "embed_id": "emb_abc123",
  "model": "chatterbox",
  "duration_ms": 450
}

상태 검사

GET /v1/health/

GPU 서버 상태, 로드된 모델, 큐 크기 확인. 인증 필요 없음. 30초 동안 캐시됨.

응답

JSON 응답
{
  "status": "online",
  "latency_ms": 45,
  "queue_size": 3,
  "models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}

모델 목록

GET /v1/models/

사용 가능한 모든 모델과 그 기능의 목록을 반환합니다.

응답

JSON 응답
{
  "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
    }
  ]
}

목록 보이스

GET /v1/voices/

모델 또는 언어별로 필터링된 사용 가능한 모든 음성의 목록을 반환합니다.

쿼리 매개 변수

파라미터종류설명
model string 모델 ID로 필터링(예: kokoro)
language string 언어 코드로 필터링(예: en)
gender string 성별별로 필터링: 남성, 여성, 중성

응답

JSON 응답
{
  "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)

GET /v1/speech/subtitles/?uuid=<job_uuid>&format=srt|vtt&download=1

완료된 TTS 작업에 대해 동기화된 자막을 생성합니다. 오디오에 Whisper alignment를 실행하고 SRT 또는 WebVTT를 반환합니다. 결과는 디스크에 캐시되므로 같은 uuid에 대한 두 번째 호출은 디스크 읽기입니다.

쿼리 매개 변수

파라미터필요설명
uuid/v1/tts/ 또는 /v1/voice-clone/에 의해 반환된 작업 UUID.
format아니요srt (기본값) 또는 vtt.
download아니요1Content-Disposition: attachment 를 보내서 브라우저가 표시하는 대신 저장하도록 합니다.
language아니요정렬 모델에 대한 힌트(누락된 경우 자동으로 감지됨).
cURL
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt

발음 사전

GET POST DELETE /api/v1/pronunciations/

TTS 엔진에 특정 단어의 발음을 알려주세요. 저장된 항목은 사용자가 제출하는 모든 TTS 요청에 자동으로 적용됩니다. 계정당 200개의 항목 제한.

요청 본문 (POST)

파라미터종류설명
wordstring덮어쓰기할 단어( 예: GIF, Anthropic). 단어 경계가 일치합니다.
replacementstring모델에 대한 철자법(예: jiff, ann THROP ick).
languagestringISO 코드를 선택할 수 있습니다. 비어 있음 = 모든 언어에 적용됩니다.
case_sensitiveboolean기본값 false. true일 때 대소문자를 정확히 일치시킵니다.
cURL
# 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 엔드포인트 파라미터 참조).

기사 내레이터

어떤 기사 페이지에 단일