Àkọsílẹ̀ API
Ṣàfikún TTS.ai nínú àwọn ìṣàmúlò-ètò rẹ̀ láti inú REST API wa. Ìṣàmúlò-ètò OpenAI-ọ̀fẹ̀ fun ìjánu-ìjánú rọ́ọ̀nù.
Àwọn ìṣàmúlò-ètò
TTS.ai API náà náà gba ìwọlé ìṣàmúlò-ètò fún àwọn àbùdá àwọn ààyè-iṣẹ́ gbogbó: àkọlé-si-ìbàlẹ̀, àkọlé-si-ìbàlẹ̀, ìṣàfarawe-ìbàlẹ̀, ìṣàfihàn àwọn àwòrán, àti àwọn mìíràn. API náà náà ló àwọn ìṣàmúlò-ètò REST ìṣàfarawe-ètò láti mú àwọn ẹ̀yàn ìṣàfihàn/ìjánú ìṣàfihàn JSON.
Bọ́tìnì API
Gba àwọn bọ́tìnì API rẹ̀ láti Àwọn Ààtòjú Àwọn Àwọn Àwọn Àwọn Àwọn Àwọn Àwọn Àwọn. Wa ni Pro ati Enterprise plans.
URL Ìdálẹ̀
https://api.tts.ai/v1/
Àwọn Àmì-ìwé
Àwọn Ìṣàmúlò-ètò Authorization àwọn àmì-ìwé
Àwọn Ìṣàmúlò-ètò
/v1/tts/ iṣẹ́ laisi àwọn ẹ̀yàn, lọ́wọ́lọ́wọ́ si 5,000 àwọn àmì-àṣírí/ọ̀jọ̀ kan nípa IP kan, nípa lòjútó àwọn módè́lì ọ̀fẹ́ wa (piper, vits, melotts, kokoro). Ṣabẹwo fun kaadi iroyin ọfẹ lati gba awọn aami 15,000 ti o dara julọ ati wọle si awọn awoṣe premium.
Fun àwọn ìṣàmúlò-ètò àti àwọn ìpéjúwé ìṣàmúlò-ètò tí o gà jú, ṣàfihàn láti ló tókè Béèrì nínú Authorization àwọn àmì-ìwé.
Authorization: Bearer sk-tts-your-api-key-here
Àwọn SDK
SDKs Oṣójọ́lẹ̀ ṣé ìmọ̀ràn láti fi TTS.ai pamọ́ sínú ìṣàmúlò-ètò rẹ̀. Wọ́n ní afẹ́fẹ́ àwọn ìṣàmúlò-ètò náà, àti àwọn náà ní a lè gba nípa 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 Ìdálẹ̀
Àwọn ààyè-iṣẹ́ ìparí gbogbó ní pàtó nípa URL̀ ìtọ́nà yìí. Fun ààyè-iṣẹ́ ìparí TTS ni:
Àwọn Ìdálẹ̀ Ìjánu-ìṣàmúlò-ètò
Àwọn ìdájọ́ àwọn ìṣàmúlò-ètò API nípa àwọn ìṣàmúlò-ètò:
| Àwọn ààyè-iṣẹ́ | Àwọn Ìtàn/minútùù | Àwọn ìṣàfarawé | Ìgbà pípẹ́ àkọlé pípẹ́ jú |
|---|---|---|---|
| Àìfẹ́ | 10 | 2 | Àwọn àmì-ìwé 500 |
| Àwọn Ìṣàmúlò-ètò | 30 | 3 | Àwọn àmì-ìwé 1,000,000 |
| Àwọn Àwọn Àwọn | 60 | 5 | Àwọn àmì-ìwé 1,000,000 |
| Àwọn Ìṣàfilọ́lẹ̀ | 300 | 20 | Àwọn àmì-ìwé 50,000 |
Àwọn àmì-ìwé-ìwé ìdáràn nínú àwọn ìsàlẹ̀-ilà gbogbo: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
Àwọn Ìṣàmúlò-ètò
| Àwọn Àṣẹ | Àwọn Irinṣẹ́ | Àwọn Ìgúnrégé |
|---|---|---|
| TTS (Móòdù Fẹ́ẹ̀: Piper, VITS, MeloTTS) | Àwọn àyọkà 1,000 | fún àwọn àmì-àṣírí 1,000 |
| TTS (Móòdù ìpèwọ̀n: Kokoro, CosyVoice 2, abbl.) | Àwọn àyọkà 2,000 | fún àwọn àmì-àṣírí 1,000 |
| TTS (Móòdù Premium: Tortoise, Chatterbox, abbl.) | Àwọn ìṣàmúlò-ètò | fún àwọn àmì-àṣírí 1,000 |
| Àwọn Àmì-ìwé | Àwọn àyọkà 2,000 | Àwọn àwọn àwòrán |
| Àwọn Àmì-ìwé | Àwọn ìṣàmúlò-ètò | fún àwọn àmì-àṣírí 1,000 |
| Àtòjọ-ẹ̀yàn Àwọn Àmì-ìwé | Àwọn àyọkà 3,000 | Àwọn àwọn àwòrán |
| Àwọn ìṣàfarawé àwòrán | Àwọn àyọkà 2,000 | Àwọn àwọn àwòrán |
| Ìjádè àwọn àmì-ìwé / Ìjádé àwọn àmì-ìwé | Àwọn àyọkà 3,000-4,000 | Àwọn àwọn àwòrán |
| Àwọn ìṣàfarawé kọ̀ǹpútà | Àwọn àyọkà 5,000 | Àwọn àwọn àwòrán |
| Àkọlé àwòrán | Àwọn àyọkà 3,000 | Àwọn ìṣàfarawé àwọn ààyè-iṣẹ́ |
| Alábòójútó Bọ́tìnì BPM | Àìfẹ́ | -- |
| Àwọn Ìjánu-ìṣàmúlò-ètò | Àìfẹ́ | -- |
Àkọlé sí Àkọ́kọ́
Ṣàfikún àyọkà náà sí àwòrán àkọlé. Ṣàfikún fáìlì àwòrán nínú ìrísí-lẹ́tà tí a beere.
Àwọn ìṣàmúlò-ètò
| Àwọn ìkúndùǹ | Àwọn Ìṣàmúlò-ètò | Tí a fẹ́ | Àkóónú |
|---|---|---|---|
| model | string | No | ID Móòdù (gẹ́gẹ́ bí kokoro, chatterbox, piper). Tí a bá fi pà, a á yan móòdù tí ó bá jẹ́ ìrànwọ́ àwọn àkànṣe tí a bì - kokoro fún en/ja/zh/ko/fr/de/it/pt/es/hi/ru, piper fún àwọn àkànṣe mìíràn tí a bá jẹ́ ìrànwọ́ (ar/pl/nl/cs/da/fi/el/hu/tr/uk/vi/etc.). |
| text | string | Yà | Àkọlé tí a fẹ́ láti yipada sí ìṣàfarawé (àwọn àmì-ìwé 100,000 lórí ìtàn) |
| voice | string | Yà | Àtòjọ Àwọn Àwòrán (lo /v1/voices/ láti ṣàfihàn àwọn àwòrán tí a ní) |
| format | string | No | Àwọn ìṣàmúlò-ètò àwọn ààtò: mp3 (ò̀tọ́), wav, flac, ogg |
| speed | float | No | Àwọn ìṣàfarawé ìpele ìṣàfihàn. Àwọn ìpéwọ̀n: 1.0. Àwọn ìpele: 0.5 sí 2.0 |
| language | string | No | Àtòjọ-ètò ìtàn (gẹ́gẹ́ bíi, en, es). Àtòjọ-ètò ìṣàfilọ́lẹ̀ láti inú ìṣàfilọ́lẹ̀. |
| instructions | string | No | Àwọn àwọn àgbékalẹ̀/àfilọ́lẹ̀ (àtí àwọn àmì-ìwé ≤500). e.g. \ |
| pronunciations | object | array | No | Àwọn ìṣàfarawé àwọn ìṣàfihàn-nípa-ìgbègbè. Àwọn {\ |
| stream | boolean | No | Fún àwọn àgbéwọlé ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu-ìjánu |
Àwọn ìṣàmúlò-ètò
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
Àwọn àmì-ìwé SSML
Wrap numbers, dates, currency, phone numbers, and acronyms in <say-as interpret-as="..."> tags so the model speaks them naturally instead of guessing.
| Àwọn àkọlé | Àwọn Ìjánu-ìwé | Tí a Fi Wí |
|---|---|---|
cardinal | 1234 | one thousand two hundred thirty-four |
ordinal | 21 | twenty-first |
date | 1999-12-31 | December thirty-first, nineteen ninety-nine |
time | 14:30 | two thirty PM |
telephone | +1-555-867-5309 | plus one five five five eight six seven… |
currency | $1,234.56 | one thousand two hundred thirty-four dollars and fifty-six cents |
spell-out | NASA | N A S A |
Date format defaults to mdy for English and dmy elsewhere; override with format="ymd|mdy|dmy". Currency auto-detects $/€/£/¥; pass currency="USD|EUR|GBP|JPY|CAD|AUD|MXN|INR|CNY" to set it explicitly. Tags work in any language; English is fully supported, other languages use num2words where available.
{
"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."
}
Àwọn ìsàlẹ̀-ilà
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
{
"uuid": "77b71db532874ce98e84a69a2d740d4c",
"job_id": "f21316bb-aefa-480d-8523-701d1e3184ce",
"status": "queued",
"credits_used": 11,
"credits_remaining": 15000
}
Step 2: Poll for result
Poll this endpoint every 1-2 seconds until status is completed or failed.
{
"status": "completed",
"result_url": "https://api.tts.ai/static/downloads/77b71db5.../output.mp3"
}
{
"status": "processing"
}
Step 3: Download audio
Fetch the 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)
Streaming alternative: For supported models (Kokoro, MeloTTS), use POST /v1/tts/stream/ for real-time Server-Sent Events (SSE) streaming — no polling needed.
Àwọn Àmì-ìwé
Ṣàfihàn àwòrán láti inú àkọsílẹ̀. Ṣàfihàn àwọn ètò 99 láti inú ìṣàfilọ́lẹ̀ àtòjọ-ètò.
Àwọn ìṣàmúlò-ètò (multipart/form-data)
| Àwọn ìkúndùǹ | Àwọn Ìṣàmúlò-ètò | Tí a fẹ́ | Àkóónú |
|---|---|---|---|
| file | file | Yà | Fáìlì àwòrán (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). Max 100MB. |
| model | string | No | Àwọn àwọn àwòrán STT: whisper (pípálẹ̀), faster-whisper, sensevoice |
| language | string | No | Àtòjọ-ẹ̀yàn. àtòjọ-ẹ̀yàn fún ìṣàfihàn-àtòjọ-ẹ̀yàn (píríǹtì). |
| timestamps | boolean | No | Ṣàfikún àwọn àkóónú àkóónú. Àtòjọ-ẹ̀yàn: fáìlì |
| diarize | boolean | No | Mú ìṣàfilọ́lẹ̀ àwọn àkọlé àwòrán ṣiṣẹ́. Àtòjọ-ẹ̀yàn: fáìlì |
Àwọn ìsàlẹ̀-ilà
{
"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"
}
]
}
Àwọn Àmì-ìwé
Ṣẹ̀dà àkọlé nínú àwòrán. Lọ́ọ̀kan àwòrán àti àyọkà ìṣàfilọ́lẹ̀.
Àwọn ìṣàmúlò-ètò (multipart/form-data)
| Àwọn ìkúndùǹ | Àwọn Ìṣàmúlò-ètò | Tí a fẹ́ | Àkóónú |
|---|---|---|---|
| reference_audio | file | Yà | Àwọn àwòrán àwòrán ìṣàfihàn (10-30 àwọn ìsàlẹ̀-ilà). Max 20MB. |
| text | string | Yà | Àkọlé láti sọ nínú ìrànwọ́ ìṣàfarawé. |
| model | string | No | Àwọn àwọn àwòrán: chatterbox (píríǹtì), cosyvoice2, gpt-sovits |
| format | string | No | Àwọn ìṣàmúlò-ètò àwọn ààtò: mp3 (pípálẹ̀), wav, flac |
| language | string | No | Àtòjọ-ètò ìsàlẹ̀-ilà. Ò ní ìyànfàn láti inú àwọn móòdù tí a yàn. |
Àwọn ìsàlẹ̀-ilà
Fi fáìlì ìsàlẹ̀-ilà àwọn ìṣàmúlò-ètò àwọn ìṣàmúlò-ètò àwọn ìṣàmúlò-ètò TTS padà.
Àtòjọ-ẹ̀yàn Àwọn Àmì-ìwé
Ṣàfikún àwòrán láti jẹ́ àwòrán ìṣàmúlò-ètò mìíràn. Ṣàfikún àwòrán ìṣàmúlò-ètò náà láti yan àwòrán ìṣàmúlò-ètò.
Àwọn ìṣàmúlò-ètò (multipart/form-data)
| Àwọn ìkúndùǹ | Àwọn Ìṣàmúlò-ètò | Tí a fẹ́ | Àkóónú |
|---|---|---|---|
| file | file | Yà | Fáìlì ìrísí-lẹ́tà (MP3, WAV, FLAC). Max 50MB. |
| target_voice | string | Yà | Àtòjọ-ẹ̀yàn àwòrán tí a fẹ́ láti yipada sí (lo /v1/voices/ láti ṣàfihàn àwòrán tí a nì) |
| model | string | No | Móòdù ìyipadà àwòrán: openvoice (píríǹtì), knn-vc |
| format | string | No | Àwọn ìṣàmúlò-ètò àtòjọ-ẹ̀yàn: wav (píríǹtì), mp3, flac |
Àwọn ìṣàmúlò-ètò
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
Àwọn ìsàlẹ̀-ilà
Fi fáìlì àwòrán tí a yipadà padà sí bí àwọn ààtòjọ-ẹ̀yàn àìṣàfilọ́lẹ̀.
Àwọn ìṣàfarawé kọ̀ǹpútà
Ṣàfihàn àwòrán tí a sọ láti inú ede kan sí mìíràn. Ṣàfihàn àwọn àkọlé-si-àkọlé, àwọn ìtumọ̀, àwọn àkọlé-si-àkọlé nínú awájú kan.
Àwọn ìṣàmúlò-ètò (multipart/form-data)
| Àwọn ìkúndùǹ | Àwọn Ìṣàmúlò-ètò | Tí a fẹ́ | Àkóónú |
|---|---|---|---|
| file | file | Yà | Fáìlì ìṣàmúlò-ètò ìsàlẹ̀-ètò nínú ìrísí-lẹ́tà ìṣàfarawé. Max 100MB. |
| target_language | string | Yà | Àtòjọ-ètò ìsàlẹ̀-ilà (gẹ́gẹ́ bíi es, fr, de, ja) |
| voice | string | No | Àwọn àwọn àyọkà ìṣàfihàn tí a tì tumọ̀. A yan nípa ìṣàfihàn látì jẹ́ pé a tì yọ̀. |
| preserve_voice | boolean | No | Àwọn ààyè-iṣẹ́ àwọn ìṣàfarawé àwọn àkọlé |
Àwọn ìsàlẹ̀-ilà
{
"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
}
Àwọn Àkọlé
Ṣàfikún àwọn ìṣàmúlò-ètò ìṣàfihàn, àwọn ìrànwọ́, tàbí ìgbàdálẹ̀ nígbà tí o bá tọju àwọn ìṣàfihàn. Lòòròlò fún ìṣàfihàn àwọn ìṣàfihàn, àwọn ìṣàfihàn, àwọn ìṣàfihàn.
Àwọn ìṣàmúlò-ètò (multipart/form-data)
| Àwọn ìkúndùǹ | Àwọn Ìṣàmúlò-ètò | Tí a fẹ́ | Àkóónú |
|---|---|---|---|
| file | file | Yà | Fáìlì àwòrán ìṣàfihàn. Max 50MB. |
| voice | string | Yà | Àwọn àwọn àmì-ìwé àwọn àmì-ìwé àwọn àwọn àmì-ìwé |
| model | string | No | Àwọn ìṣàmúlò-ètò: openvoice (píríǹtì), chatterbox |
| emotion | string | No | Àkọ́lé àwòrán: ọ̀fẹ́, ọ̀fẹ́, ọ̀pọ̀lú, ọ̀pọ̀lú, ọ̀pọ̀lú |
| speed | float | No | Àwọn ìṣàmúlò-ètò ìṣàfarawé ìrànwọ́. Àwọn ìpéwọ̀n: 1.0. Àwọn ìjánu-ìsún: 0.5 sí 2.0 |
Àwọn ìsàlẹ̀-ilà
Fi fáìlì àwòrán tí a tì yipadà padà sí bí àwọn ààtòjọ-ìdákọ àwọn ìṣàfarawé.
Àwọn Àtòjọ-ẹ̀yàn Àkọsílẹ̀
Àwọn ààyè-iṣẹ́ ìparí ìṣàfarawé àwòrán fún ìṣàfarawé, ìjánu-ìṣàmúlò-ètò, ìjánu-ìṣàfilọ́lẹ̀, àti àwọn mìíràn mìíràn.
Ṣàfihàn àwọn ìṣàmúlò-ètò àwòrán: denoise, ìṣàfihàn ìwọ̀n, àwọn ìṣàfihàn nla.
| file file | Fáìlì àwòrán tí a fẹ́ mú |
| denoise boolean | Ṣàfikún àwọn ìṣàmúlò-ètò tí a kò fẹ́ (òrò: òótọ́) |
| enhance_clarity boolean | Ṣẹ̀dà ìròyìn àkọlé ( ìpéwọ̀n: òótọ́) |
| super_resolution boolean | Ìdáràn àwọn ìṣàmúlò-ètò ìṣàfarawé àwọn ìṣàmúlò-ètò |
| strength integer | 1-3 (ìwọ̀n, ìsàlẹ̀-ilà, ìpéwọ̀n). Àtòjọ-ẹ̀yàn: 2 |
Ṣàfarawe àwọn àwòrán láti inú àwọn àkọlé (àwọ̀n àwòrán) tàbí fi àwọn àwọn àgbèwọlé pamọ́.
| file file | Fáìlì àwòrán láti ṣí |
| model string | demucs (Àwọn ìpéwọ̀n) tabi spleeter |
| stems integer | Àwọn àwọn ìṣàmúlò-ètò: 2, 4, 5, tàbí 6 (òòrò: 2) |
| format string | Àwọn ìṣàmúlò-ètò ìjánu-ìṣàfilọ́lẹ̀: wav, mp3, flac |
Ṣàfikún àgbègbè àti àgbègbè láti inú àwọn àkọsílẹ̀ àwòrán.
| file file | Fáìlì àwòrán láti ṣe ìṣàfarawé |
| type string | echo or reverb (default: both) |
| intensity integer | 1-5 (default: 3) |
Ṣàfihàn àwòrán láti ṣàfihàn bọ́tìnì, BPM, àti àwọn ìṣàmúlò-ètò àwọn ìṣàfihàn àkókò.
| file file | Fáìlì ìsàlẹ̀-ilà láti ṣàfihàn |
{
"key": "C",
"scale": "Major",
"bpm": 120.0,
"time_signature": "4/4",
"camelot": "8B",
"compatible_keys": ["C Major", "G Major", "F Major", "A Minor"]
}
Ṣàfikún àwòrán laarin àwọn ìrísí-lẹ́tà.
| file file | Fáìlì àwòrán láti yipada |
| format string | Àwọn ìgúnrégé àwọn àkọ́lé: mp3, wav, flac, ogg, m4a, aac |
| bitrate integer | Bítàrátì ìjánu-ìjánu nínú kbps: 64, 128, 192, 256, 320 |
| sample_rate integer | Àwọn ìṣàmúlò-ètò: |
| channels string | mono tabi stereo |
Àkọlé àwòrán
Fi àwòrán tàbí àkọlé pamọ́ ki o si gba ìjánu-íjánu AI nípa ìṣàfarawe-ìrọ̀.
Àwọn ìṣàmúlò-ètò (multipart/form-data tabi JSON)
| Àwọn ìkúndùǹ | Àwọn Ìṣàmúlò-ètò | Tí a fẹ́ | Àkóónú |
|---|---|---|---|
| audio | file | No* | Ààyè-iṣẹ́ àwòrán (yàni àwòrán tàbí àyọkà tí a fẹ́) |
| text | string | No* | Àwọn ìṣàmúlò-ètò àyọkà (ọ̀kan ninu àwòrán tàbí àwòrán tí a fẹ́) |
| voice | string | No | Àwòrán fún àgbékalẹ̀ AI. Àtòjọ-ẹ̀yàn: af_bella |
| tts_model | string | No | Àwọn ìṣàmúlò-ètò TTS fún àgbékalẹ̀. Àtòjọ-ẹ̀yàn: kokoro |
| system_prompt | string | No | Àwọn àgbèwọlé ìṣàmúlò-ètò fún AI |
| conversation_id | string | No | Lọ́wọ́lọ́wọ́ àkọlé tí wa |
Àwọn ìsàlẹ̀-ilà
{
"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
}
Àwọn àwọn àwọn àwọn àwọn
Fi àwọn àkọlé àwọn ìṣàmúlò-ètò láti fi pamọ́ fún ìṣàfihàn TTS. Lọ́wọ́lọ́wọ́ gba àgbègbè wẹ́ẹ̀bùhookù láti inú àwọn iṣẹ́ láti pari.
Àwọn Àtòjọ-ẹ̀yàn
| Àwọn Àtòjọ-ẹ̀yàn | Àwọn Ìṣàmúlò-ètò | Àwọn Àkọlé |
|---|---|---|
| texts | array | Array of objects: {text, model, voice}. Max 50 items. |
| webhook_url | string | Optional URL to POST results when batch completes. |
Àwọn ìsàlẹ̀-ilà
{
"batch_id": "abc123",
"total": 3,
"completed": 0,
"status": "processing"
}
Àwọn ìṣàmúlò-ètò ìṣàfihàn àti GET /v1/tts/batch/result/?batch_id=abc123
Ìṣàfilọ́lẹ̀ Àwọn Àmì-ìwé
Ṣàfikún ìṣàfilọ́lẹ̀ ìgbọ́ọ̀kan láti inú ìṣàfilọ́lẹ̀ ìgbọ́ọ̀kan. Lò àwọn àwọn ìṣàfilọ́lẹ̀_id tí a fi pamọ́ nínú àwọn ìtàn ìṣàfilọ́lẹ̀ ìgbọ́ọ̀kan láti mú ìṣàfilọ́lẹ̀ ìṣàfilọ́lẹ̀ láti inú ìṣàfilọ́lẹ̀.
Àwọn Àtòjọ-ẹ̀yàn
| Àwọn Àtòjọ-ẹ̀yàn | Àwọn Ìṣàmúlò-ètò | Àwọn Àkọlé |
|---|---|---|
| file | file | Reference audio file (WAV, MP3, FLAC). |
| model | string | Cloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts. |
Àwọn ìsàlẹ̀-ilà
{
"embed_id": "emb_abc123",
"model": "chatterbox",
"duration_ms": 450
}
Àwọn Àwọn Ààyè-iṣẹ́
Ṣayẹwo ìṣàmúlò-ètò àwọn ààtò GPU, àwọn àwọn ìṣàmúlò-ètò àti ìwọ̀n ìṣàmúlò-ètò. Kò ní ìṣàfihàn ìṣàfihàn. A fi àwọn ìṣàfihàn pamọ́ fún àwọn ìṣísẹ̀ 30.
Àwọn ìsàlẹ̀-ilà
{
"status": "online",
"latency_ms": 45,
"queue_size": 3,
"models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}
Àtòjọ àwọn ìṣàmúlò-ètò
Ṣàfihàn àtòjọ àwọn ìṣàmúlò-ètò tó lè wa nínú àwọn ìṣàmúlò-ètò wọn.
Àwọn ìsàlẹ̀-ilà
{
"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
}
]
}
Àwọn Àmì-ìwé Àtòjọ
Ṣàfihàn àtòjọ àwọn àwòrán tó lè wa ní pàtó, àti àwọn ìṣàmúlò-ètò ìṣàfihàn láti inú àwòrán tàbí àwòrán.
Àwọn Àlàyé Àwọn Àwọn Ààtò
| Àwọn ìkúndùǹ | Àwọn Ìṣàmúlò-ètò | Àkóónú |
|---|---|---|
| model | string | Píríǹtì láti inú ID ìṣàmúlò-ètò (gẹ́gẹ́ bíi kokoro) |
| language | string | Fi àwọn àmì-ìwé ìsàlẹ̀-ilà pamọ́ (gẹ́gẹ́ bíi en) |
| gender | string | Aṣàfilọ́lẹ̀ láti inú ìwọ̀n: ọmọkunrin, ọmọbinrin, ọ̀kan-ọ̀kan |
Àwọn ìsàlẹ̀-ilà
{
"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
}
Àwọn àkọlé (SRT / VTT) new
Generate synchronised subtitles for any completed TTS job. Runs Whisper alignment over the audio and returns SRT or WebVTT. Result is cached on disk so a second call for the same uuid is a disk read.
Àwọn Àlàyé Àwọn Àwọn Ààtò
| Àwọn ìkúndùǹ | Tí a fẹ́ | Àkóónú |
|---|---|---|
| uuid | Yà | UUID iṣẹ́ tí /v1/tts/ tàbí /v1/voice-clone/ fi pamọ́. |
| format | No | srt (píríǹtì) tàbí vtt. |
| download | No | 1 lati fi Ìṣàfihàn-Ìdákọ́ọ̀kan: àtòjọ-ẹ̀yàn ranṣẹ ki awáròyìn náà fipamọ́ láti inú àwọn ìṣàfihàn. |
| language | No | Àwọn ìṣàmúlò-ètò fún àwọn móòdù ìṣàfarawé (tí a bá gbọ́ nípa ìṣàfihàn). |
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt
Àwọn Àwọn Àkọlé new
Fi àwọn àwọn àgbéwọlé tí a fi pamọ́ pamọ́ sínú àwọn àgbéwọlé TTS. Àwọn àgbéwọlé tí a fi pamọ́ láti lo nípa àwọn ìṣàfilọ́lẹ̀ TTS gbogbò tí o ṣe. Ìgbà ìṣàfilọ́lẹ̀ 200 fun àwọn àgbéwọlé kan.
Àwọn ìṣàmúlò-ètò (POST)
| Àwọn ìkúndùǹ | Àwọn Ìṣàmúlò-ètò | Àkóónú |
|---|---|---|
| word | string | Word to override (e.g. GIF, Anthropic). Word-boundary matched. |
| replacement | string | Bii o ṣe le sọ ọ̀rọ̀ rẹ̀ fun àwọn móòdù (gẹ́gẹ́ bi jiff, ann THROP ick). |
| language | string | Àwọn ìkúndùǹ ISO tí a fẹ́. Tí kò bá jẹ́ = lò fún gbogbo àwọn ìtàn. |
| case_sensitive | boolean | Default false. Match case exactly when 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-..."
You can also pass per-request overrides without saving them — include pronunciations on any /v1/tts/ call as either an object or an array (see the TTS endpoint params).
Àwọn Àkọlé new
Drop a single <script> tag on any article page and visitors get a fixed reader bar that narrates the page on click. Auto-detects the article body, supports custom voice / model / position / accent color.
<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>
Àwọn Àtòjọ-ẹ̀yàn
| Àwọn ìkúndùǹ | Àkóónú |
|---|---|
data-pk | Bọ́tìnì àìfihàn (pk-tts-…). Àwọn ìdájọ́ dómìǹì tí a fi pamọ́ láti inú ààyè-iṣẹ́ àwọn_dómìǹì_tí a_fàyè gba bọ́tìnì náà. |
data-voice | Àwọn àmì-ìwé àwòrán. af_bella ìpèwọ̀n. |
data-model | TTS model ID. Default kokoro. |
data-extract | auto (default) — tries article/main/.post-content/.entry-content selectors, falls back to densest paragraph cluster. Or pass any CSS selector to target a specific element. |
data-position | bottom (píríǹtì) tàbí top. |
data-color | Àwọ́ àwọn àyọkà ìṣàfarawé (ọ̀kan àwòrán CSS). Àwọn ìpéwọ̀n #e60000. |
data-min-chars / data-max-chars | Lọ́nà àkànṣe náà tí àkọlé bá jú àwọn àmì-àṣírí ìsàlẹ̀-ilà tó kéré jú (òkù ìpéwọ̀n 200). Fẹ́ àwọn àmì-àṣírí láti inú àwọn àmì-àṣírí ìparí (òkù ìpéwọ̀n 50,000). |
Àkọlé àwòrán
Àwọn Àwọn Àtòjọ-ẹ̀yàn
Inline button-style embed. Renders next to its <script> tag and plays a button-triggered short snippet. Different shape from the Article Narrator above (which auto-injects a page-spanning bar and narrates the whole article).
<script src="https://tts.ai/widget.js"
data-voice="af_bella"
data-model="kokoro"
data-style="full"
data-theme="light"></script>
Àwọn Àwòrán Tí A Fi Pamọ́ (Àwọn Kọlọ̀nì Tí A Fẹ̀)
Fi àwòrán àwòrán ìṣàfihàn pamọ́ nígbà kan, gba àwòrán_àwòrán tí a tílẹ̀, láti rí àwòrán àwòrán náà nínú àwọn ìtàn TTS láti fi àwòrán àwòrán pamọ́ padà nígbà gbogbo. Ó jẹ́ ìṣàfihàn fún àwọn ìṣàfihàn ìpele-òkè.
Fi àwòrán pamọ́
POST
https://tts.ai/api/v1/user-voices/
Àwọn ìṣàfihàn
Multipart form. Fields: file (required, 5-30s audio), name (required), language (optional, default en), model (optional — auto-picks cosyvoice2 for zh/ja/ko else openvoice), consent_confirmed (required, any truthy value).
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"
}
Lo àwòrán tí a fi pamọ́ nínú TTS
POST sí /api/v1/tts/ (ÌṢẸ: wẹ́ẹ̀bù VPS ààyè, kò jẹ́ api.tts.ai) láti inú àwọn_àwòrán_àkọ́kọ́. A tí fi àwòrán tí a fi pamọ́ rẹ̀ pamọ́ sí ààyè ìṣàfarawé.
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.
Àtòjọ/Pamu
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
Àwọn àyọkà ìpamọ́/paṣẹ́ padà (laisí ẹ̀yàn)
Archived voices stay in your account but can't be used in TTS. Useful for dormant end users so your list stays clean.
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/archive/
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/reactivate/
Àwọn Ààtòjọ-ẹ̀yàn
Àkọlé sí Àkọ́kọ́
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')}")
Àwọn Àmì-ìwé
# 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"])
Àwọn Àmì-ìwé
# 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)
Àkọlé sí Àkọ́kọ́
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();
Àwọn Àmì-ìwé
// 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);
Àkọlé sí Àkọ́kọ́
# 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
Àwọn Àmì-ìwé
# 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"
Àwọn Àmì-ìwé
# 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
Àwọn ìṣàfarawé àwòrán
# 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
Àwọn Àmì-ìwé Àṣìṣe
Àwọn àṣìṣe gbogbò náà ń fi àwọn àgbékalẹ̀ JSON pamọ́ sí error Àwọn ààyè-iṣẹ́
{
"error": {
"code": "insufficient_credits",
"message": "You do not have enough characters for this request.",
"characters_required": 4000,
"characters_available": 2000
}
}
| Ààyè HTTP | Àwọn Àṣìṣe | Àkóónú |
|---|---|---|
| 400 | bad_request |
Àwọn ìpéwọ̀n ìtàn tí kò tọ́. Wòye àkọlé àṣẹ fún àwọn ìròyìn. |
| 401 | unauthorized |
Bọ́tìnì API tí kò wa tàbí kò tọ́. |
| 402 | insufficient_credits |
Kò ní àwọn àmì-àṣírí tòjú. Ràwọ́lù nínú /pricing/. |
| 403 | forbidden |
O kò ní ìṣẹ̀dà láti gba ààyè-iṣẹ́ yìí (gẹ́gẹ́ bíi, ìṣàfihàn iṣẹ́ òǹlò mìíràn). Ààyè-iṣẹ́ API ní pàtó nínú àwọn ìṣàmúlò-ètò nípa. |
| 404 | not_found |
A kò rí àwọn ìṣàmúlò-ètò àti àwòrán. |
| 413 | file_too_large |
Àwọn fáìlì tí a fi pamọ́ tí wọ́ inú àwọn ìwọ̀n ìwọ̀n. |
| 429 | rate_limited |
Àwọn ìtàn tí o jù lọ. Ṣayẹwo àwọn àwọn àkọlé àwọn ìdájú àwọn ìṣàmúlò-ètò. |
| 500 | internal_error |
Àṣìṣe àwọn sáà. Wá lẹ́ẹ̀kan nínú ìtàn. |
| 503 | model_loading |
Àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn àwọn |
Àwọn wẹ́ẹ̀bù
Fún àwọn iṣẹ́ tí n lọ́wọ́lọ́wọ́ jú lọ́wọ́lọ́wọ́ lọ́wọ́lọ́wọ́, o lè ṣàfihàn ààtòjọ-ẹ̀yàn webhook_url. Nígbà tí iṣẹ́ náà bá parí, a á fi ààtòjọ-ẹ̀yàn náà pamọ́ sí URL rẹ̀.
{
"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"
}
Tí O Tí Ìjánú Rẹ́?
Gba bọ́tìnì API rẹ̀ láti bẹrẹ ìdapọ TTS.ai nínú àwọn ìṣàmúlò-ètò rẹ̀.