API 문서화

REST API로 TTS.ai를 애플리케이션에 통합하세요. 쉬운 마이그레이션을 위한 OpenAI 호환 형식.

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

개요

The TTS.ai API provides programmatic access to all platform features: text-to-speech synthesis, speech-to-text transcription, voice cloning, audio enhancement, and more. The API uses standard REST conventions with JSON request/response bodies.

API 키

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

기본 URL

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

인증

보유자 토큰 Authorization 헤더

인증

모든 API 요청은 다음에서 Bearer 토큰을 통한 인증이 필요합니다. Authorization 헤더.

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

기본 URL

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

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

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

속도 제한

API 속도 제한은 플랜에 따라 다릅니다.

계획 요청/분 Concurrent 최대 텍스트 길이
전문가 60 5 5,000자
엔터프라이즈 300 20 50,000자

속도 제한 헤더는 모든 응답에 포함됩니다. X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

신용 비용

서비스 비용 단위
TTS (무료 모델: 파이퍼, VITS, MeloTTS) 1 크레딧 1,000자당
TTS (표준 모델: Kokoro, CosyVoice 2 등) 2 크레딧 1,000자당
TTS (프리미엄 모델: Tortoise, Chatterbox 등) 4 크레딧 1,000자당
음성을 텍스트로 2 크레딧 분당 오디오
음성 복제 4 크레딧 1,000자당
음성 변경기Name 3 크레딧 분당 오디오
오디오 향상 2 크레딧 분당 오디오
보컬 제거 / 줄기 분할 3-4 크레딧 분당 오디오
음성 번역 5 크레딧 분당 오디오
음성 채팅 3 크레딧 턴당
키( BPM) 찾기 자유 --
오디오 변환기Name 자유 --

텍스트에서 음성으로Name

POST /v1/tts/

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

요청 본문

파라미터종류필수설명
model string 모델 ID(예: kokoro, chatterbox, piper)
text string 음성으로 변환할 텍스트(Pro의 경우 최대 5,000자, Enterprise의 경우 50,000자)
voice string 음성 ID(/v1/voices/를 사용하여 사용 가능한 음성을 나열)
format string 아니요 출력 형식: mp3 (기본값), wav, flac, ogg
speed float 아니요 말하기 속도 곱셈. 기본값: 1.0. 범위: 0.5에서 2.0까지
language string 아니요 언어 코드 (예: en, es). 생략하면 자동으로 감지됩니다.
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

응답

Returns the audio file as binary data with appropriate Content-Type header (audio/mpeg, audio/wav, etc.).

응답 헤더
Content-Type: audio/mpeg
Content-Length: 48256
X-Credits-Used: 2
X-Credits-Remaining: 498

음성을 텍스트로

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 아니요 원래 스피커를 보존하려고 시도

응답

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 fileAudio file to analyze
응답
{
  "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
}

모델 목록

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
}

코드 예제

텍스트에서 음성으로Name

Python - requests
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')}")

음성을 텍스트로

Python - requests
# 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"])

음성 복제

Python - requests
# 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

JavaScript - fetch
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();

음성을 텍스트로

JavaScript - fetch
// 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

cURL
# 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

음성을 텍스트로

cURL
# 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"

음성 복제

cURL
# 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

오디오 향상

cURL
# 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 credits for this request.",
    "credits_required": 4,
    "credits_available": 2
  }
}
HTTP 상태Error Code설명
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"
}
웹훅 결과는 완료 후 24시간 동안 다운로드할 수 있습니다. 즉시 다운로드하십시오.

빌드할 준비가 되셨습니까?

API 키를 받아 TTS.ai를 애플리케이션에 통합하세요.