๐ŸŽ™๏ธ ChatterboxGondal API

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
Your API key: sk_โ€ฆ (contact the owner to get one)

Engines

engineModelBest forSpeed (1 hr audio)
autopicks per languagedefaultโ€”
turboChatterbox TurboEnglish, top quality~4 min
multilingualChatterbox MTLes, fr, ja, hi + 20 more~6 min
omnivoiceOmniVoice646 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.

fieldtypenotes
textstringrequired. Any length โ€” it is chunked & batched internally.
voice_idstringa voice from GET /v1/voices (e.g. bella_pro). Omit for a default voice.
languagestringen, es, fr, ja, hi, โ€ฆ (default en)
enginestringauto (default), turbo, multilingual, omnivoice
exaggerationfloatChatterbox 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.

Studio (no code): chatterboxgondal.org โ€” browse voices, type, generate.