Dokumentasi API
Integrate TTS.ai ke aplikasi Anda dengan API RAT kami. Format yang kompatibel dengan OpenAI untuk migrasi mudah.
Ringkasan
API TTS.ai menyediakan akses programmatis ke semua fitur platform: sintesis text-to-speech, transkripsi bicara-ke-teks, kloning suara, peningkatan audio, dan lebih. API menggunakan konvensi REST standar dengan permintaan JSON/reponse tubuh.
Kunci API
Dapatkan kunci API Anda dari Pengaturan Akun. Tersedia pada rencana Pro dan Enterprise.
URL Dasar
https://api.tts.ai/v1/
Auth
Token pembawa melalui Authorization tajuk
Otentikasi
/v1/tts/ bekerja tanpa auth apapun, hingga 5.000 karakter/hari per IP, menggunakan salah satu model gratis kami (piper, vits, melotts, kokoro). Daftarkan akun gratis untuk mendapatkan 15.000 karakter bonus dan akses ke model premium.
Untuk model premium dan batas tingkat yang lebih tinggi, otentikasi dengan token Bearer dalam Authorization tajuk.
Authorization: Bearer sk-tts-your-api-key-here
SDK
Official SDKs make it easy to integrate TTS.ai into your application. Both are open source and available on 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 Dasar
Semua titik akhir relatif terhadap URL dasar ini. Sebagai contoh, titik akhir TTS adalah:
Batas Laju
Batas tingkat API bervariasi menurut rencana:
| Rencana | Permintaan/min | Bersama | Panjang Teks Max |
|---|---|---|---|
| Bebas | 10 | 2 | 500 karakter |
| Pemulai | 30 | 3 | 1.000.000 karakter |
| Pro | 60 | 5 | 1.000.000 karakter |
| Enterprise | 300 | 20 | 50.000 karakter |
Tingkat batas header termasuk dalam setiap respon: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
Biaya Kredit
| Layanan | Biaya | Unit |
|---|---|---|
| TTS (model gratis: Piper, VITS, Melotts) | 1.000 karakter | per 1.000 karakter |
| TTS (model Standard: Kokoro, CosyVoice 2, dsb.) | 2.000 karakter | per 1.000 karakter |
| TTS (model Premium: Tortoise, Chatterbox, dll) | 4.000 karakter | per 1.000 karakter |
| Pidato ke Teks | 2.000 karakter | per menit audio |
| Kloning Suara | 4.000 karakter | per 1.000 karakter |
| Voice Changer | 3.000 karakter | per menit audio |
| Peningkatan Audio | 2.000 karakter | per menit audio |
| Vokal Removal / Stem Splitting | 3.000-4.000 karakter | per menit audio |
| Terjemahan Tutur Kata | 5.000 karakter | per menit audio |
| Percakapan Suara | 3.000 karakter | per putaran |
| Pencari Tombol & BPM | Bebas | -- |
| Pengkonversi Audio | Bebas | -- |
Teks ke Pidato
Ubah teks ke audio pidato. Mengembalikan berkas audio dalam format yang diminta.
Badan Permintaan
| Parameter | Tipe | Diperlukan | Deskripsi |
|---|---|---|---|
| model | string | Tidak | Model ID (e.g., , |
| text | string | Ya | Teks untuk dikonversi ke pidato. Per-request cap: 500 karakter (anonim), 5.000 (akun bebas), 1.000.000 (rencana berbayar). masukan panjang adalah auto-chounded server-side. |
| voice | string | Ya | ID suara (gunakan |
| format | string | Tidak | Format keluaran: wav, ogg |
| speed | float | Tidak | Speaking speed multiplier. Baku: |
| language | string | Tidak | Kode bahasa (mis., |
| instructions | string | Tidak | Tanda penyampaian / akting (500 karakter). mis. |
| pronunciations | object | array | Tidak | Per-request pengucapan overrides. Either {\ |
| stream | boolean | Tidak | Aktifkan respon streaming. Baku: |
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
Wrap nomor, tanggal, mata uang, nomor telepon, dan akronim dalam Format tanggal baku ke 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
interpretasi sebagai Masukan Disampaikan sebagai cardinal1234one thousand two hundred thirty-four ordinal21twenty-first date1999-12-31December thirty-first, nineteen ninety-nine 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 {
"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."
}Tanggapan
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.Full example
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.
Pidato ke Teks
Transkrip audio ke teks. Mendukung 99 bahasa dengan auto-deteksi.
Badan Permintaan (multipart/form-data)
| Parameter | Tipe | Diperlukan | Deskripsi |
|---|---|---|---|
| file | file | Ya | Berkas audio (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). Max 100MB. |
| model | string | Tidak | STT model: wissper (baku), pe-whisper, |
| language | string | Tidak | Kode bahasa. |
| timestamps | boolean | Tidak | Sertakan penanda waktu tingkat kata. Baku: |
| diarize | boolean | Tidak | Aktifkan diarisasi speaker. Baku: |
Tanggapan
{
"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"
}
]
}
Kloning Suara
Hasilkan pidato dalam suara kloning. Unggah sebuah referensi audio dan teks.
Badan Permintaan (multipart/form-data)
| Parameter | Tipe | Diperlukan | Deskripsi |
|---|---|---|---|
| reference_audio | file | Ya | Audio suara referensi (10-30 detik direkomendasikan). Max 20MB. |
| text | string | Ya | Teks untuk berbicara dalam suara kloning. |
| model | string | Tidak | Model Clone: Chatterbox (baku), cocyvoice2, gpt-sovits |
| format | string | Tidak | Format keluaran: |
| language | string | Tidak | Kode bahasa target. Harus didukung oleh model yang dipilih. |
Tanggapan
Mengembalikan berkas audio sebagai data biner, sama seperti titik akhir TTS.
Voice Changer
Ubah audio ke suara lain. Unggah audio sumber dan pilih suara target.
Badan Permintaan (multipart/form-data)
| Parameter | Tipe | Diperlukan | Deskripsi |
|---|---|---|---|
| file | file | Ya | Berkas audio sumber (MP3, WAV, FLAC). Max 50MB. |
| target_voice | string | Ya | Target ID suara untuk dikonversi ke (gunakan |
| model | string | Tidak | Model konversi suara: |
| format | string | Tidak | Format keluaran: |
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
Tanggapan
Mengembalikan berkas audio yang dikonversi sebagai data biner.
Terjemahan Tutur Kata
Terjemahkan audio yang digunakan dari satu bahasa ke bahasa lain. Combined speech-to-text, terjemahan, dan teks-to-peech dalam satu panggilan.
Badan Permintaan (multipart/form-data)
| Parameter | Tipe | Diperlukan | Deskripsi |
|---|---|---|---|
| file | file | Ya | Berkas audio sumber dalam bahasa asli. Max 100MB. |
| target_language | string | Ya | Target kode bahasa (e.g., fr, |
| voice | string | Tidak | Suara untuk keluaran terjemahan. Dipilih otomatis bila diabaikan. |
| preserve_voice | boolean | Tidak | Mencoba mempertahankan karakteristik suara pembicara asli. Baku: |
Tanggapan
{
"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 Kata
Ubah gaya bicara, emosi, atau pengiriman sewaktu menyimpan isi. Berguna untuk menyesuaikan nada, kecepatan, dan ekspresif.
Badan Permintaan (multipart/form-data)
| Parameter | Tipe | Diperlukan | Deskripsi |
|---|---|---|---|
| file | file | Ya | Berkas audio pidato sumber. Max 50MB. |
| voice | string | Ya | Target ID suara untuk pidato keluaran |
| model | string | Tidak | Model: |
| emotion | string | Tidak | Emosi target: |
| speed | float | Tidak | Penyesuaian kecepatan. Baku: |
Tanggapan
Mengembalikan berkas audio yang diubah sebagai data biner.
Perkakas Audio
Titik akhir pemrosesan audio untuk peningkatan, penghapusan vokal, pemisahan batang, dan masih banyak lagi.
Tingkatkan kualitas audio: denoise, meningkatkan kejelasan, resolusi super.
| file file | Berkas audio yang akan ditambahkan |
| denoise boolean | Aktifkan denoising (baku: benar) |
| enhance_clarity boolean | Tingkatkan kejelasan ucapan (baku: benar) |
| super_resolution boolean | Kualitas audio kelas atas (baku: salah) |
| strength integer | 1-3 (cahaya, sedang, kuat). Baku: 2 |
Pisahkan vokal dari instrumental (penghapusanvokal) atau pecah menjadi batang.
| file file | Berkas audio untuk dipisahkan |
| model string | demucs (baku) atau spleeter |
| stems integer | Jumlah batang: 2, 4, 5, atau 6 (baku: 2) |
| format string | Format keluaran: |
Hapus gema dan reverb dari rekaman audio.
| file file | Berkas audio untuk diproses |
| type string | echo or reverb (default: both) |
| intensity integer | 1-5 (default: 3) |
Analisis audio untuk mendeteksi kunci, BPM, dan tanda tangan waktu.
| file file | Berkas audio untuk dianalisa |
{
"key": "C",
"scale": "Major",
"bpm": 120.0,
"time_signature": "4/4",
"camelot": "8B",
"compatible_keys": ["C Major", "G Major", "F Major", "A Minor"]
}
Ubah audio antar format.
| file file | Berkas audio untuk dikonversi |
| format string | Format target: |
| bitrate integer | Bitrate keluaran di kbps: 64, 128, 192, 256, 320 |
| sample_rate integer | Laju sampel: 22050, 44100, 48 000 |
| channels string | mono atau stereo |
Percakapan Suara
Kirim audio atau teks dan terima jawaban AI dengan pidato yang disintesis.
Badan Permintaan (multipart/form-data atau JSON)
| Parameter | Tipe | Diperlukan | Deskripsi |
|---|---|---|---|
| audio | file | Tidak* | Masukan audio (yang dibutuhkan |
| text | string | Tidak* | Masukan teks (baik |
| voice | string | Tidak | Suara untuk respon AI. Baku: |
| tts_model | string | Tidak | Model TTS untuk respon. Baku: |
| system_prompt | string | Tidak | Prompt sistem gubahan bagi AI |
| conversation_id | string | Tidak | Lanjutkan percakapan yang sudah ada |
Tanggapan
{
"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
Kirim beberapa teks untuk pembuatan TTS paralel. Pilihannya menerima panggilan webhook ketika semua pekerjaan selesai.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
| texts | array | Array of objects: {text, model, voice}. Max 50 items. |
| webhook_url | string | Optional URL to POST results when batch completes. |
Tanggapan
{
"batch_id": "abc123",
"total": 3,
"completed": 0,
"status": "processing"
}
Kemajuan polon dengan GET /v1/tts/batch/result/?batch_id=abc123
Embedding Suara
Pra-compate sebuah embedding suara dari audio referensi. Gunakan embed_id yang dikembalikan dalam permintaan kloning suara selanjutnya untuk generasi dekat-instant.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
| file | file | Reference audio file (WAV, MP3, FLAC). |
| model | string | Cloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts. |
Tanggapan
{
"embed_id": "emb_abc123",
"model": "chatterbox",
"duration_ms": 450
}
Pemeriksaan Kesehatan
Periksa status server GPU, model yang dimuat, dan ukuran antrian. Tak diperlukan otentikasi. Cached selama 30 detik.
Tanggapan
{
"status": "online",
"latency_ms": 45,
"queue_size": 3,
"models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}
Daftar Model
Mengembalikan daftar semua model yang tersedia dengan kemampuan mereka.
Tanggapan
{
"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
}
]
}
Daftar Suara
Mengembalikan daftar semua suara yang tersedia, dengan pilihan tersaring berdasarkan model atau bahasa.
Parameter Kuiri
| Parameter | Tipe | Deskripsi |
|---|---|---|
| model | string | Filter menurut model ID (misalnya, |
| language | string | Filter oleh kode bahasa (mis, |
| gender | string | Filter by gender: women, |
Tanggapan
{
"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
}
Teks (SRT / VTT) baru
Hasilkan subtitel yang disinkronkan untuk pekerjaan TTS yang telah selesai. Jalankan Whisper alignment atas audio dan mengembalikan SRT atau WebVTT. Hasil dicache di disk sehingga panggilan kedua untuk uuid yang sama adalah sebuah baca disk.
Parameter Kuiri
| Parameter | Diperlukan | Deskripsi |
|---|---|---|
| uuid | Ya | UUID Job dikembalikan oleh /v1/tts/atau /v1/voice-clone/. |
| format | Tidak | |
| download | Tidak | |
| language | Tidak | Petunjuk ke model perataan (oto-dideteksi jika diabaikan). |
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt
Kamus Pengucapan baru
Beritahu mesin TTS bagaimana mengucapkan kata-kata spesifik. Masukan disimpan otomatis ke setiap TTS meminta Anda membuat. Batas per-akun 200-entry.
Badan Permintaan (POST)
| Parameter | Tipe | Deskripsi |
|---|---|---|
| word | string | Kata untuk menimpa (mis. |
| replacement | string | Bagaimana mengejanya untuk model (mis. |
| language | string | Kode ISO opsional. Kosong = berlaku untuk semua bahasa. |
| case_sensitive | boolean | Default |
# 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 dapat melewati overrides per-request tanpa menyimpannya termasuk
Artikel Narator baru
Jatuhkan satu tag
<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>
Opsi
| Parameter | Deskripsi |
|---|---|
data-pk | Kunci yang dapat diterbitkan (pk-tts-...). Pembatasan domain dipaksakan melalui kunci |
data-voice | ID suara. Default |
data-model | ID model TTS. Default |
data-extract | |
data-position | |
data-color | Warna sen (semua warna CSS). Baku |
data-min-chars / data-max-chars | Lewati bar jika artikel lebih pendek dari min-chars (baku 200). Cap masukan di max-chars (baku 50.000). |
Widget Tombol Dengar
Inline tombol-style embed. Renders di samping
<script src="https://tts.ai/widget.js"
data-voice="af_bella"
data-model="kokoro"
data-style="full"
data-theme="light"></script>
Disimpan Suara (Kloning Pesisten)
Unggah suatu audio referensi sekali, dapatkan kembali voice_id yang persisten, lalu referensikan id dalam TTS permintaan bukan memuat ulang audio setiap panggilan. Ideal untuk integrasi volume tinggi.
Unggah suatu suara
POST
https://tts.ai/api/v1/user-voices/
Diperlukan Auth
Formulir multipart. Fields: berkas (dibutuhkan, audio 5-30s), nama (diperlukan), bahasa (opsional, baku en), model (opsional ▪ pemungut-otomatis kosyvoice2 untuk zh/ja/ko lainnya openvoice), persetujuan_confirmed (dibutuhkan, nilai kebenaran).
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"
}
Gunakan suara yang disimpan dalam TTS
POST ke /api/v1/tts/ (NOTE: web VPS host, bukan api.tts.ai) dengan user_voice_id. Kami memuat audio dan rute anda yang tersimpan ke jaringan pipa kloning.
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.
Daftar / hapus
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
Arsip / diaktifkan (bebas)
Suara yang diarsipkan tetap di akun Anda tetapi tidak dapat digunakan dalam TTS. Berguna untuk pengguna akhir aktif sehingga daftar Anda tetap bersih.
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/archive/
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/reactivate/
Contoh Kode
Teks ke Pidato
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')}")
Pidato 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"])
Kloning 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 Pidato
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();
Pidato 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 Pidato
# 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
Pidato 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"
Kloning 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
Kode Galat
Semua kesalahan mengembalikan respon JSON dengan error lapangan.
{
"error": {
"code": "insufficient_credits",
"message": "You do not have enough characters for this request.",
"characters_required": 4000,
"characters_available": 2000
}
}
| Status HTTP | Kode Galat | Deskripsi |
|---|---|---|
| 400 | bad_request |
Parameter permintaan tak valid. Periksa pesan galat untuk rincian. |
| 401 | unauthorized |
Hilang atau kunci API tak valid. |
| 402 | insufficient_credits |
Tak cukup karakter. |
| 403 | forbidden |
Anda tidak memiliki hak akses ke sumber daya ini (mis. polling pekerjaan pengguna lain). Akses API termasuk pada setiap rencana. |
| 404 | not_found |
Model atau suara tidak ditemukan. |
| 413 | file_too_large |
Berkas yang diunggah melebihi batas ukuran. |
| 429 | rate_limited |
Terlalu banyak permintaan. Periksa batas tingkat header. |
| 500 | internal_error |
Galat server. Coba lagi nanti. |
| 503 | model_loading |
Model sedang dimuat. coba lagi dalam beberapa detik. |
Webhook
Untuk tugas yang berjalan panjang (stem split, batch TTS), Anda dapat menyediakan webhook_url parameter. Ketika 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"
}
Siap Membangun?
Ambil kunci API Anda dan mulai mengintegrasikan TTS.ai ke dalam aplikasi Anda.