Dokumentasi API
Integrasikan TTS.ai ke dalam aplikasi anda dengan API REST kami. Format serasi OpenAI untuk migrasi mudah.
Ringkasan
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.
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
Semua permintaan API memerlukan pengesahan melalui token Bearer dalam Authorization pengepala.
Authorization: Bearer sk-tts-your-api-key-here
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:
| Pelan | Permintaan/minit | Concurrent | Panjang Teks Maksimum |
|---|---|---|---|
| Pro | 60 | 5 | 5,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 kredit | setiap 1,000 aksara |
| TTS (Model piawai: Kokoro, CosyVoice 2, dll.) | 2 kredit | setiap 1,000 aksara |
| TTS (model premium: Tortoise, Chatterbox, dll.) | 4 kredit | setiap 1,000 aksara |
| Tutur ke Teks | 2 kredit | per minit audio |
| Klon Suara | 4 kredit | setiap 1,000 aksara |
| Pengubah SuaraName | 3 kredit | per minit audio |
| Peningkatan Audio | 2 kredit | per minit audio |
| Penghapusan Vokal / Pemisahan Stem | 3-4 kredit | per minit audio |
| Penterjemah Perkataan | 5 kredit | per minit audio |
| Sembang Suara | 3 kredit | 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 | Ya | ID model (cth, kokoro, chatterbox, piper) |
| text | string | Ya | Teks untuk ditukar kepada ucapan (maksimum 5,000 aksara untuk Pro, 50,000 untuk Enterprise) |
| 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. |
| stream | boolean | Tidak | Aktifkan 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
Balasan
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
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 | Audio suara rujukan (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 pertuturan-ke-teks, terjemahan, dan teks-ke-tuturan 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 terjemahan. Dipilih secara automatik jika diabaikan. |
| preserve_voice | boolean | Tidak | Cuba untuk simpan pengerusi asal |
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 percakapan, emosi, atau penghantaran sambil mengekalkan kandungan. Berguna untuk menyelaraskan nada, irama, dan ekspresif.
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 ditukar 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 | Naikkan kualiti audio (piawai: salah) |
| strength integer | 1-3 (cerah, sederhana, kuat). Default: 2 |
Pisahkan vokal dari instrumental (pembersihan 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 respon. 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
}
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 Soalan
| 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
}
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 credits for this request.",
"credits_required": 4,
"credits_available": 2
}
}
| Status HTTP | Error Code | 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 kredit. Beli lagi di /pricing/. |
| 403 | forbidden |
Capaian API tidak tersedia pada rancangan anda. |
| 404 | not_found |
Model atau suara tidak dijumpai. |
| 413 | file_too_large |
Fail 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 mulakan mengintegrasikan TTS.ai ke dalam aplikasi anda.