Dokumentasi API
Integre TTS.ai ke dalam aplikasi anda dengan API REST kami. Format serasi OpenAI untuk migrasi mudah.
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
/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.
Authorization: Bearer sk-tts-your-api-key-here
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")
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 Asas
Semua titik akhir adalah relatif kepada URL asas ini. Sebagai contoh, titik akhir TTS adalah:
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
Tukar teks ke audio pertuturan. Kembalikan fail audio dalam format yang diminta.
Tubuh Permintaan
| Parameter | Jenis | Diperlukan | Huraian |
|---|---|---|---|
| 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 -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 Format tarikh lalai kepada 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
tafsir Input Diucapkan 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 mdy untuk Bahasa Inggeris dan dmy di tempat lain; tulis ganti dengan 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."
}Balasan
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.Contoh lengkap
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.
Tutur ke Teks
Transkrip audio ke teks. Menyokong 99 bahasa dengan pengesanan automatik.
Tubuh Permintaan (multipart/form-data)
| Parameter | Jenis | Diperlukan | Huraian |
|---|---|---|---|
| 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
{
"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
Janakan percakapan dalam suara klon. Muat naik audio rujukan dan teks.
Tubuh Permintaan (multipart/form-data)
| Parameter | Jenis | Diperlukan | Huraian |
|---|---|---|---|
| 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
Tukar audio untuk berbunyi seperti suara lain. Muat naik audio sumber dan pilih suara sasaran.
Tubuh Permintaan (multipart/form-data)
| Parameter | Jenis | Diperlukan | Huraian |
|---|---|---|---|
| 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 -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
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)
| Parameter | Jenis | Diperlukan | Huraian |
|---|---|---|---|
| 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
{
"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
Tukar gaya ucapan, emosi, atau penghantaran sambil menyimpan kandungan. Berguna untuk menyelaraskan nada, irama, dan ekspresi.
Tubuh Permintaan (multipart/form-data)
| Parameter | Jenis | Diperlukan | Huraian |
|---|---|---|---|
| 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.
Meningkatkan kualiti audio: de-noise, meningkatkan ketelusan, resolusi super.
| file file | Fail audio untuk ditingkatkan |
| denoise boolean | Hidupkan pengurangan bunyi (piawai: benar) |
| enhance_clarity boolean | Meningkatkan ketelusan percakapan (piawai: benar) |
| super_resolution boolean | Kualiti audio naikskala (piawai: salah) |
| strength integer | 1-3 (cerah, sederhana, kuat). Default: 2 |
Pisahkan vokal dari instrumental (pembuang vokal) atau pisahkan ke dalam batang.
| file file | Fail audio untuk dipisahkan |
| model string | demucs (default) atau spleeter |
| stems integer | Bilangan batang: 2, 4, 5, atau 6 (piawai: 2) |
| format string | Format output: wav, mp3, flac |
Buang gema dan gegaran dari rakaman audio.
| file file | Fail audio untuk diproses |
| type string | echo or reverb (default: both) |
| intensity integer | 1-5 (default: 3) |
Menganalisis audio untuk mengesan kekunci, BPM, dan tandatangan masa.
| file file | Fail audio untuk dianalisis |
{
"key": "C",
"scale": "Major",
"bpm": 120.0,
"time_signature": "4/4",
"camelot": "8B",
"compatible_keys": ["C Major", "G Major", "F Major", "A Minor"]
}
Tukar audio antara format.
| file file | Fail audio untuk ditukar |
| format string | Format sasaran: mp3, wav, flac, ogg, m4a, aac |
| bitrate integer | Kadar bit output dalam kbps: 64, 128, 192, 256, 320 |
| sample_rate integer | Kadar sampel: 22050, 44100, 48000 |
| channels string | mono atau stereo |
Sembang Suara
Hantar audio atau teks dan terima respon AI dengan ucapan disintesis.
Tubuh Permintaan (multipart/form-data atau JSON)
| Parameter | Jenis | Diperlukan | Huraian |
|---|---|---|---|
| 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
{
"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
Hantarkan teks berbilang untuk penjanaan TTS selari. Secara opsyenal terima panggilan balik webhook apabila semua kerja selesai.
Parameter
| Parameter | Jenis | Huraian |
|---|---|---|
| texts | array | Array of objects: {text, model, voice}. Max 50 items. |
| webhook_url | string | URL opsyenal untuk POST hasil bila batch selesai. |
Balasan
{
"batch_id": "abc123",
"total": 3,
"completed": 0,
"status": "processing"
}
Progres poll dengan GET /v1/tts/batch/result/?batch_id=abc123
Pembentangan
Pra-hitung pembesaran suara dari audio rujukan. Guna embed_id dikembalikan dalam permintaan klon suara seterusnya untuk penjanaan hampir-segera.
Parameter
| Parameter | Jenis | Huraian |
|---|---|---|
| file | file | Reference audio file (WAV, MP3, FLAC). |
| model | string | Cloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts. |
Balasan
{
"embed_id": "emb_abc123",
"model": "chatterbox",
"duration_ms": 450
}
Periksa Kesihatan
Semak status pelayan GPU, model dimuatkan, dan saiz baris gilir. Tiada pengesahan diperlukan. Dicache untuk 30 saat.
Balasan
{
"status": "online",
"latency_ms": 45,
"queue_size": 3,
"models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}
Senarai Model
Kembalikan senarai semua model yang ada dengan keupayaan mereka.
Balasan
{
"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
Kembalikan senarai semua suara yang ada, secara opsyen ditapis mengikut model atau bahasa.
Parameter Pertanyaan
| Parameter | Jenis | Huraian |
|---|---|---|
| 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
{
"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
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
| Parameter | Diperlukan | Huraian |
|---|---|---|
| uuid | Ya | UUID kerja dikembalikan oleh /v1/tts/ atau /v1/voice-clone/. |
| format | Tidak | srt (piawai) atau vtt. |
| download | Tidak | 1 untuk menghantar Content-Disposition: attachment supaya pelayar menyimpan bukannya memapar. |
| language | Tidak | Petua kepada model penyelarasan (auto-kesan jika diabaikan). |
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt
Kamus Huruf baru
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)
| Parameter | Jenis | Huraian |
|---|---|---|
| word | string | Perkataan untuk ditandakan (cth. GIF, Anthropic). Had perkataan sepadan. |
| replacement | string | Bagaimana mengejanya untuk model (cth. jiff, ann THROP ick). |
| language | string | Kod ISO opsyenal. Kosong = terpakai kepada semua bahasa. |
| case_sensitive | boolean | false piawai. Padankan huruf besar/kecil tepat bila 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-..."
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 tunggal pada mana-mana halaman artikel dan pengunjung akan mendapat bar pembaca tetap yang menceritakan halaman pada klik. Auto-kesan badan artikel, menyokong suara / model / kedudukan / warna aksen tersendiri.
<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>
Opsyen
| Parameter | Huraian |
|---|---|
data-pk | Kekunci boleh diterbitkan (pk-tts-…). Penghantaran domain dikuatkuasakan melalui medan allowed_domains kekunci. |
data-voice | ID Suara. af_bella lalai. |
data-model | ID model TTS. kokoro lalai. |
data-extract | auto (piawai) — cuba pemilih artikel/main/.post-content/.entry-content, jatuh semula ke kumpulan perenggan paling padat. Atau lalukan pemilih CSS mana-mana untuk sasaran unsur tertentu. |
data-position | bawah (piawai) atau atas. |
data-color | Warna aksen (apa-apa warna CSS). Lalai #e60000. |
data-min-chars / data-max-chars | Langkau bar jika artikel lebih pendek daripada min-characters (piawai 200). Cap input pada max-characters (piawai 50,000). |
Widget Butang Dengar
Pembesaran gaya butang dalam baris. Dihasilkan di sebelah tag dan mainkan snippet pendek yang diaktifkan butang. Bentuk berbeza daripada Penutur Artikel di atas (yang auto-sedut bar meliputi halaman dan menceritakan keseluruhan artikel).
<script src="https://tts.ai/widget.js"
data-voice="af_bella"
data-model="kokoro"
data-style="full"
data-theme="light"></script>
Suara yang disimpan (Klon Persistent)
Muat naik audio rujukan sekali, dapatkan semula voice_id kekal, kemudian rujukan id itu dalam permintaan TTS berbanding memuat naik semula audio setiap panggilan. Ideal untuk integrasi volum tinggi.
Muat naik suara
POST
https://tts.ai/api/v1/user-voices/
Autentifikasi diperlukan
Bentuk berbilang bahagian. Medan: fail (diperlukan, audio 5-30s), nama (diperlukan), bahasa (opsyenal, piawai en), model (opsyenal — auto-pilih cosyvoice2 untuk zh/ja/ko jika tidak openvoice), consent_confirmed (diperlukan, nilai benar mana-mana).
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"
}
Guna suara yang disimpan dalam TTS
POST ke /api/v1/tts/ (PERHATIAN: hos web VPS, bukan api.tts.ai) dengan user_voice_id. Kami muatkan audio dan laluan yang disimpan ke paip klon.
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.
Senarai / Hapuskan
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
Arkib / aktifkan semula (bebas)
Suara yang diarkibkan kekal dalam akaun anda tetapi tidak boleh digunakan dalam TTS. Berguna untuk pengguna akhir yang tidur supaya senarai anda kekal bersih.
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/archive/
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/reactivate/
Contoh Kod
Teks ke Tutur
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')}")
Tutur ke Teks
# 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"])
Klon Suara
# 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)
Teks ke Tutur
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();
Tutur ke Teks
// 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);
Teks ke Tutur
# 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
Tutur ke Teks
# 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"
Klon Suara
# 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
Peningkatan Audio
# 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
Kod Ralat
Semua ralat mengembalikan maklum balas JSON dengan error medan.
{
"error": {
"code": "insufficient_credits",
"message": "You do not have enough characters for this request.",
"characters_required": 4000,
"characters_available": 2000
}
}
| Status HTTP | Kod Ralat | Huraian |
|---|---|---|
| 400 | bad_request |
Parameter permintaan tidak sah. Semak mesej ralat untuk perincian. |
| 401 | unauthorized |
Kekunci API hilang atau tidak sah. |
| 402 | insufficient_credits |
Tidak cukup aksara. Beli lebih di /pricing/. |
| 403 | forbidden |
Anda tidak mempunyai keizinan untuk mengakses sumber ini (contohnya, mengundi kerja pengguna lain). Akses API sendiri dimasukkan pada setiap rancangan. |
| 404 | not_found |
Model atau suara tidak dijumpai. |
| 413 | file_too_large |
Fail yang dimuat naik melebihi had saiz. |
| 429 | rate_limited |
Terlalu banyak permintaan. Semak pengepala had kadar. |
| 500 | internal_error |
Ralat pelayan. Cuba lagi kemudian. |
| 503 | model_loading |
Model sedang dimuatkan. Cuba lagi dalam beberapa saat. |
Webhook
Untuk tugas berjalan panjang (pemisahan pokok, TTS bakul), anda boleh berikan parameter webhook_url. Apabila tugas selesai, kami akan POST hasil ke URL anda.
{
"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"
}
Sedia untuk Bina?
Dapatkan kunci API anda dan mula mengintegrasikan TTS.ai ke dalam aplikasi anda.