Dokumentasi API

Integre TTS.ai ke dalam aplikasi anda dengan API REST kami. Format serasi OpenAI untuk migrasi mudah.

API REST Sesuai dengan OpenAI Balasan JSON Sokongan Strim

Lihat

API TTS.ai menyediakan akses program kepada semua ciri-ciri platform: sintesis teks-ke-tutur, transkripsi ucapan-ke-teks, klon suara, peningkatan audio, dan lain-lain. API menggunakan konvensyen REST piawai dengan badan permintaan/balas JSON.

Kekunci API

Dapatkan kekunci API anda dari Tetapan Akaun. Tersedia pada rancangan Pro dan Enterprise.

URL Asas

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

Auth

Token pemegang melalui Authorization pengepala

Pengesahan

Aras bebas — tiada kekunci diperlukan. POST Tanpa Nama ke /v1/tts/ bekerja tanpa sebarang kebenaran, sehingga 5,000 aksara/hari per IP, menggunakan mana-mana model percuma kami (piper, vits, melotts, kokoro). Daftar untuk akaun percuma untuk mendapatkan 15,000 karakter bonus dan akses kepada model premium.

Untuk model premium dan had kadar yang lebih tinggi, sahih dengan token Pemegang dalam Authorization pengepala.

Pengepala HTTP
Authorization: Bearer sk-tts-your-api-key-here
Simpan kunci API anda rahsia. Jangan kongsi ia dalam kod sisi klien, repositori awam, atau log. Putar kekunci secara berkala dari tetapan akaun anda.

SDK

SDK rasmi menjadikannya mudah untuk mengintegrasikan TTS.ai ke dalam aplikasi anda. Kedua-duanya adalah sumber terbuka dan tersedia di 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 Asas

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

Semua titik akhir adalah relatif kepada URL asas ini. Sebagai contoh, titik akhir TTS adalah:

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

Had Kadar

Had kadar API berbeza mengikut rancangan:

Plan Permintaan/minit Selari Panjang Teks Maksimum
Bebas 10 2 500 aksara
Pelancar 30 3 1,000,000 aksara
Pro 60 5 1,000,000 aksara
Enterprise 300 20 50,000 aksara

Pengepala had kadar dimasukkan dalam setiap jawapan: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Kos Kredit

Servis Kos Unit
TTS (model percuma: Piper, VITS, MeloTTS) 1,000 aksara setiap 1,000 aksara
TTS (Model piawai: Kokoro, CosyVoice 2, dll.) 2,000 aksara setiap 1,000 aksara
TTS (model premium: Tortoise, Chatterbox, dll.) 4,000 aksara setiap 1,000 aksara
Tutur ke Teks 2,000 aksara per minit audio
Klon Suara 4,000 aksara setiap 1,000 aksara
Pengubah SuaraName 3,000 aksara per minit audio
Peningkatan Audio 2,000 aksara per minit audio
Pembersihan Vokal / Pemisahan Stem 3,000-4,000 aksara per minit audio
Penterjemah Perkataan 5,000 aksara per minit audio
Sembang Suara 3,000 aksara setiap pusingan
Pencari Kekunci & BPM Bebas --
Penukar Audio Bebas --

Teks ke Tutur

POST /v1/tts/

Tukar teks ke audio pertuturan. Kembalikan fail audio dalam format yang diminta.

Tubuh Permintaan

ParameterJenisDiperlukanHuraian
model string Tidak ID model (cth, kokoro, chatterbox, piper). Jika diabaikan, kami akan memilih secara automatik model yang menyokong bahasa yang diminta — kokoro untuk en/ja/zh/ko/fr/de/it/pt/es/hi/ru, piper untuk bahasa lain yang disokong (ar/pl/nl/cs/da/fi/el/hu/tr/uk/vi/etc.).
text string Ya Teks untuk ditukarkan ke ucapan. Had per-permintaan: 500 aksara (anonymous), 5,000 (account percuma), 1,000,000 (plan berbayar). Input panjang dipotong secara automatik di sisi pelayan.
voice string Ya ID Suara (guna /v1/voices/ untuk senaraikan suara yang ada)
format string Tidak Format output: mp3 (piawai), wav, flac, ogg
speed float Tidak Pengganda kelajuan bercakap. Lalai: 1.0. Julat: 0.5 hingga 2.0
language string Tidak Kod bahasa (cth, en, es). Dikesan secara automatik jika diabaikan.
instructions string Tidak Tindakan / cues penghantaran (≤500 aksara). cth. \
pronunciations object | array Tidak Per-permintaan pengucapan menetapkan semula. Sama ada {\
stream boolean Tidak Benarkan respon strim. Lalai: false

Permintaan Contoh

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

Tag SSML

Lilitkan nombor, tarikh, matawang, nombor telefon, dan akronim dalam

tafsirInputDiucapkan sebagai
cardinal1234one thousand two hundred thirty-four
ordinal21twenty-first
date1999-12-3131 Disember, 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

Format tarikh lalai kepada mdy untuk Bahasa Inggeris dan dmy di tempat lain; tulis ganti dengan format=\

Contoh
{
  "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."
}

Balasan

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.

Contoh lengkap

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.

Tutur ke Teks

POST /v1/stt/

Transkrip audio ke teks. Menyokong 99 bahasa dengan pengesanan automatik.

Tubuh Permintaan (multipart/form-data)

ParameterJenisDiperlukanHuraian
file file Ya Fail audio (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). Maksimum 100MB.
model string Tidak Model STT: whisper (piawai), faster-whisper, sensevoice
language string Tidak Kod bahasa. auto untuk pengesanan automatik (piawai).
timestamps boolean Tidak Termasuk setem masa aras-perkataan. Lalai: false
diarize boolean Tidak Hidupkan diarisasi pengerusi. Lalai: false

Balasan

Balasan 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"
    }
  ]
}

Klon Suara

POST /v1/tts/clone/

Janakan percakapan dalam suara klon. Muat naik audio rujukan dan teks.

Tubuh Permintaan (multipart/form-data)

ParameterJenisDiperlukanHuraian
reference_audio file Ya Rujukan suara audio (10-30 saat disyorkan). Maksimum 20MB.
text string Ya Teks untuk diucapkan dalam suara klon.
model string Tidak Model klon: chatterbox (piawai), cosyvoice2, gpt-sovits
format string Tidak Format output: mp3 (piawai), wav, flac
language string Tidak Kod bahasa sasaran. Mesti disokong oleh model yang dipilih.

Balasan

Kembalikan fail audio sebagai data binari, sama seperti titik akhir TTS.

Pengubah SuaraName

POST /v1/voice-convert/

Tukar audio untuk berbunyi seperti suara lain. Muat naik audio sumber dan pilih suara sasaran.

Tubuh Permintaan (multipart/form-data)

ParameterJenisDiperlukanHuraian
file file Ya Fail audio sumber (MP3, WAV, FLAC). Maksimum 50MB.
target_voice string Ya ID suara sasaran untuk ditukar kepada (guna /v1/voices/ untuk senaraikan suara yang ada)
model string Tidak Model penukaran suara: openvoice (piawai), knn-vc
format string Tidak Format output: wav (piawai), mp3, flac

Permintaan Contoh

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

Balasan

Kembalikan fail audio yang ditukar sebagai data binari.

Penterjemah Perkataan

POST /v1/speech-translate/

Terjemahkan audio yang diucapkan dari satu bahasa ke bahasa lain. Menggabungkan percakapan-ke-teks, terjemahan, dan teks-ke-percakapan dalam satu panggilan.

Tubuh Permintaan (multipart/form-data)

ParameterJenisDiperlukanHuraian
file file Ya Fail audio sumber dalam bahasa asal. Maksimum 100MB.
target_language string Ya Kod bahasa sasaran (cth, es, fr, de, ja)
voice string Tidak Suara untuk output diterjemah. Dipilih secara automatik jika diabaikan.
preserve_voice boolean Tidak Cuba untuk menyimpan ciri-ciri suara pengerusi asal. Lalai: false

Balasan

Balasan 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
}

Tutur ke Tutur

POST /v1/speech-to-speech/

Tukar gaya ucapan, emosi, atau penghantaran sambil menyimpan kandungan. Berguna untuk menyelaraskan nada, irama, dan ekspresi.

Tubuh Permintaan (multipart/form-data)

ParameterJenisDiperlukanHuraian
file file Ya Fail audio pertuturan sumber. Maksimum 50MB.
voice string Ya ID suara sasaran untuk ucapan output
model string Tidak Model: openvoice (piawai), chatterbox
emotion string Tidak Emosi sasaran: neutral, happy, sad, angry, excited
speed float Tidak Laras kelajuan. Lalai: 1.0. Julat: 0.5 hingga 2.0

Balasan

Kembalikan fail audio yang diubah sebagai data binari.

Alat Audio

Titik akhir pemprosesan audio untuk penambahbaikan, penghapusan vokal, pemisahan stem, dan lain-lain.

POST /v1/audio/enhance/

Meningkatkan kualiti audio: de-noise, meningkatkan ketelusan, resolusi super.

file fileFail audio untuk ditingkatkan
denoise booleanHidupkan pengurangan bunyi (piawai: benar)
enhance_clarity booleanMeningkatkan ketelusan percakapan (piawai: benar)
super_resolution booleanKualiti audio naikskala (piawai: salah)
strength integer1-3 (cerah, sederhana, kuat). Default: 2
POST /v1/audio/separate/

Pisahkan vokal dari instrumental (pembuang vokal) atau pisahkan ke dalam batang.

file fileFail audio untuk dipisahkan
model stringdemucs (default) atau spleeter
stems integerBilangan batang: 2, 4, 5, atau 6 (piawai: 2)
format stringFormat output: wav, mp3, flac
POST /v1/audio/dereverb/

Buang gema dan gegaran dari rakaman audio.

file fileFail audio untuk diproses
type stringecho or reverb (default: both)
intensity integer1-5 (default: 3)
POST /v1/audio/analyze/ Bebas

Menganalisis audio untuk mengesan kekunci, BPM, dan tandatangan masa.

file fileFail audio untuk dianalisis
Balasan
{
  "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/ Bebas

Tukar audio antara format.

file fileFail audio untuk ditukar
format stringFormat sasaran: mp3, wav, flac, ogg, m4a, aac
bitrate integerKadar bit output dalam kbps: 64, 128, 192, 256, 320
sample_rate integerKadar sampel: 22050, 44100, 48000
channels stringmono atau stereo

Sembang Suara

POST /v1/voice-chat/

Hantar audio atau teks dan terima respon AI dengan ucapan disintesis.

Tubuh Permintaan (multipart/form-data atau JSON)

ParameterJenisDiperlukanHuraian
audio file Tidak* Input audio (audio atau text diperlukan)
text string Tidak* Input teks (audio atau text diperlukan)
voice string Tidak Suara bagi respon AI. Lalai: af_bella
tts_model string Tidak Model TTS untuk maklum balas. Lalai: kokoro
system_prompt string Tidak Prompt sistem tersendiri untuk AI
conversation_id string Tidak Teruskan perbualan sedia ada

Balasan

Balasan 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
}

Batch TTS

POST /v1/tts/batch/

Hantarkan teks berbilang untuk penjanaan TTS selari. Secara opsyenal terima panggilan balik webhook apabila semua kerja selesai.

Parameter

ParameterJenisHuraian
textsarrayArray of objects: {text, model, voice}. Max 50 items.
webhook_urlstringURL opsyenal untuk POST hasil bila batch selesai.

Balasan

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

Progres poll dengan GET /v1/tts/batch/result/?batch_id=abc123

Pembentangan

POST /v1/voice-embed/

Pra-hitung pembesaran suara dari audio rujukan. Guna embed_id dikembalikan dalam permintaan klon suara seterusnya untuk penjanaan hampir-segera.

Parameter

ParameterJenisHuraian
filefileReference audio file (WAV, MP3, FLAC).
modelstringCloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts.

Balasan

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

Periksa Kesihatan

GET /v1/health/

Semak status pelayan GPU, model dimuatkan, dan saiz baris gilir. Tiada pengesahan diperlukan. Dicache untuk 30 saat.

Balasan

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

Senarai Model

GET /v1/models/

Kembalikan senarai semua model yang ada dengan keupayaan mereka.

Balasan

Balasan 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
    }
  ]
}

Senarai Bunyi

GET /v1/voices/

Kembalikan senarai semua suara yang ada, secara opsyen ditapis mengikut model atau bahasa.

Parameter Pertanyaan

ParameterJenisHuraian
model string Penapis mengikut ID model (cth, kokoro)
language string Penapis mengikut kod bahasa (cth, en)
gender string Penapis mengikut jantina: lelaki, wanita, neutral

Balasan

Balasan 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
}

Subtitles (SRT / VTT) baru

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

Janakan subtajuk disegerakkan untuk sebarang kerja TTS yang selesai. Jalankan penyelarasan Whisper ke atas audio dan kembalikan SRT atau WebVTT. Hasilnya disimpan cache pada cakera supaya panggilan kedua untuk uuid yang sama adalah bacaan cakera.

Parameter Pertanyaan

ParameterDiperlukanHuraian
uuidYaUUID kerja dikembalikan oleh /v1/tts/ atau /v1/voice-clone/.
formatTidaksrt (piawai) atau vtt.
downloadTidak1 untuk menghantar Content-Disposition: attachment supaya pelayar menyimpan bukannya memapar.
languageTidakPetua kepada model penyelarasan (auto-kesan jika diabaikan).
cURL
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt

Kamus Huruf baru

GET POST DELETE /api/v1/pronunciations/

Beritahu enjin TTS bagaimana untuk mengucapkan perkataan tertentu. Entri yang disimpan akan dilaksanakan secara automatik pada setiap permintaan TTS yang anda buat. Had masukan 200 per akaun.

Tubuh Permintaan (POST)

ParameterJenisHuraian
wordstringPerkataan untuk ditandakan (cth. GIF, Anthropic). Had perkataan sepadan.
replacementstringBagaimana mengejanya untuk model (cth. jiff, ann THROP ick).
languagestringKod ISO opsyenal. Kosong = terpakai kepada semua bahasa.
case_sensitivebooleanfalse piawai. Padankan huruf besar/kecil tepat bila 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-..."

Anda juga boleh hantar gantian per-permintaan tanpa menyimpannya — termasuk pronunciations pada sebarang panggilan /v1/tts/ sama ada sebagai objek atau aras (lihat parameter titik akhir TTS).

Penutur Artikel baru

Letakkan tag