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
Semua permintaan API memerlukan pengesahan melalui token Bearer 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 | 100,000 aksara |
| Pro | 60 | 5 | 100,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 | Ya | ID model (cth, kokoro, chatterbox, piper) |
| text | string | Ya | Teks untuk ditukar kepada ucapan (maksimum 100,000 aksara per permintaan) |
| 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 | 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
Balasan
Kembalikan fail audio sebagai data binari dengan pengepala Content-Type yang sesuai (audio/mpeg, audio/wav, dll.).
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 | 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 | Optional URL to POST results when batch completes. |
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
}
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 |
Capaian API tidak tersedia pada rancangan anda. |
| 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.