API Reference
One key-protected REST API for three local TTS engines โ OmniVoice, Chatterbox Turbo, and Chatterbox Multilingual. Submit a job, poll for the result. Runs on our own GPU; you just call the URL.
โ queue-based โ 3 engines โ 25+ languages โ voice cloning
Base URL & Auth
Base URL: https://tts.chatterboxgondal.org/v1
Every request (except /v1/health) needs your key in a header:
xi-api-key: YOUR_API_KEY
sk_โฆ (contact the owner to get one)
Engines
| engine | Model | Best for | Speed (1 hr audio) |
|---|---|---|---|
auto | picks per language | default | โ |
turbo | Chatterbox Turbo | English, top quality | ~4 min |
multilingual | Chatterbox MTL | es, fr, ja, hi + 20 more | ~6 min |
omnivoice | OmniVoice | 646 languages, fastest | ~2 min |
auto: English โ Turbo, other Chatterbox languages โ Multilingual, everything else โ OmniVoice.
Endpoints
POST /v1/tts
Queue a voiceover job. Returns a task_id immediately.
| field | type | notes |
|---|---|---|
text | string | required. Any length โ it is chunked & batched internally. |
voice_id | string | a voice from GET /v1/voices (e.g. bella_pro). Omit for a default voice. |
language | string | en, es, fr, ja, hi, โฆ (default en) |
engine | string | auto (default), turbo, multilingual, omnivoice |
exaggeration | float | Chatterbox expression 0.25โ1 (default 0.5) |
curl -X POST "https://tts.chatterboxgondal.org/v1/tts" \
-H "xi-api-key: $API_KEY" \
-F text="Hello world, this is my cloned voice." \
-F voice_id="bella_pro" \
-F language="en" \
-F engine="auto"
# โ {"success":true,"task_id":"task_ab12...","engine":"turbo","queue_position":1}
GET /v1/task/{task_id}
Poll until status is done, then download audio_url.
curl "https://tts.chatterboxgondal.org/v1/task/task_ab12..." \
-H "xi-api-key: $API_KEY"
# โ {"success":true,"status":"done",
# "audio_url":"https://tts.chatterboxgondal.org/v1/files/task_ab12....mp3",
# "audio_sec":12.4,"credit_cost":12}
status: queued โ processing โ done (or failed with error).
GET /v1/voices
List available voices (id, name, language, engine).
GET /v1/credits
Your remaining credits (1 credit โ 1 second of audio).
GET /v1/health
Engine status & current queue depth (no key needed).
Full example (Python)
import requests, time
API = "https://tts.chatterboxgondal.org/v1"
H = {"xi-api-key": "YOUR_API_KEY"}
# 1. submit
r = requests.post(f"{API}/tts", headers=H, data={
"text": "This is a long voiceover. It will be chunked and batched for speed.",
"voice_id": "bella_pro", "language": "en", "engine": "auto"})
tid = r.json()["task_id"]
# 2. poll
while True:
j = requests.get(f"{API}/task/{tid}", headers=H).json()
if j["status"] in ("done", "failed"): break
time.sleep(2)
# 3. download
if j["status"] == "done":
audio = requests.get(j["audio_url"]).content
open("out.mp3", "wb").write(audio)
print("saved out.mp3", j["audio_sec"], "sec")
How concurrency works
All requests โ from any user, for any engine โ enter a single queue and are processed one at a time on the GPU. This avoids memory clashes and keeps every job at full speed. Because generation is batched, each job finishes in seconds, so the queue moves fast. If the queue is full you get 429 โ retry shortly.