Skip to content

Product · Spex-TTS

every number below is published

Builtto answer.

Spex-TTS grew out of a production live-translation product. Every feature below exists because a live call needed it — and every number beside it is published, not promised.

01 · Cloning

Instant voice cloning

A reference clip of about ten seconds. No training job, no per-voice fee. The identity holds across all 23 languages — including ones the reference never spoke; that held up in blind listening tests.

reference ≈ 10 s of audio

~1.5 MB cap

fingerprinted and cached after first use

no training job

no per-voice fee

six stock voices ready-made, all multilingual

How cloning works →

02 · Streaming

WebSocket, SSE, raw bytes

Persistent sockets for conversations, server-sent events for streams, one-shot WAV for everything else. Pick the surface per call site — the request body barely changes.

wss://

one socket per live call, an utterance per turn

POST /v1/tts/sse

base64 PCM chunks, {"done": true} to close

POST /v1/tts/bytes

one-shot WAV

PCM or WAV

any output sample rate

Streaming in depth →
POST /v1/tts/sse · one request
curl -N -X POST https://tts.gandr.ai/v1/tts/sse \
  -H "x-api-key: gnd_yourkey" \
  -d '{"transcript": "Streaming in about
       a hundred milliseconds.",
       "voice": {"mode": "clone", "wav_b64": "<ref>"}}'
text/event-stream · base64 PCM

03 · Drop-in

Familiar request shapes

If you've integrated another TTS API, you already know this schema: transcript, voice, output format. The switch is a diff, not a rewrite.

transcript · voice · language · output_format

x-api-key or Authorization: Bearer

either header

requests cap at 2,000 characters

usage per key at GET /v1/usage

The full request shape →
POST /v1/tts/bytes · the whole request
# either header works
x-api-key: gnd_yourkey

{
  "transcript": "Dock four is clear.",
  "voice": {"mode": "id",
            "voice_id": "jenny"},
  "language": "en",
  "output_format": {"container": "wav",
                    "sample_rate": 24000}
}

→ 200 · audio/wav · 24,000 Hz

04 · Reliability

Three serving tiers

Primary GPU fleet, warm spill, and an independent fallback behind one endpoint. A full fleet outage costs you latency, not availability.

one endpoint, three tiers behind it

past capacity: 503 at_capacity, retryable

a busy signal, not a hang

clients retry in milliseconds; the fleet scales in seconds

standby failover lines beside your current provider

Why latency stays flat →
one endpointGPU FLEETprimaryWARM SPILLpast capacityFALLBACKindependent503 at_capacityretry → spill

05 · Languages

23 languages, one identity

Clone a voice once and it speaks all 23 — the identity survives translation, which is what a live-translation product needed first. Eight have published specimens; the rest run live on the call.

23 languages from a single reference clip

identity holds in languages the reference never spoke

blind listening tests, not vibes

eight specimen languages published

Hear the languages →

Jenny — one clone

one reference · three scripts · rendered on the production API

ENThanks for holding — I found your file, and everything is set for tomorrow's visit.
4.9s
ARشكرًا لانتظارك — وجدت ملفك، وكل شيء جاهز لزيارتك غدًا.
5.9s
JAお待たせいたしました。お客様のファイルが見つかりました。明日のご来店の準備はすべて整っております。
6.1s

06 · Privacy

No training on your data

Customer text and reference audio never enter a training set. Usage is visible per key and auditable via the API.

no training on customer text or reference audio

usage visible per key, auditable via the API

provenance watermark on every clip, every tier

The signed clip →
audible · what the caller hears48 kHz
watermark · inaudible, applied at generationevery tier

training set: — customer text and reference audio never enter

The datasheet — published, not promised

First audio
107 ms p50 · 108 ms p95, single stream
Languages
23 from one cloned voice
Stock voices
6 — all multilingual
Clone reference
≈ 10 s of audio, ~1.5 MB cap
Request cap
2,000 characters per request
Output
PCM or WAV · any sample rate
Surfaces
WebSocket · SSE · one-shot bytes
Auth
x-api-key or Authorization: Bearer
Past capacity
503 at_capacity · retryable
Cold start
~23 s measured, one automatic retry rides the boot

Provenance

Every clip leaves signed.

An inaudible provenance watermark is embedded in every sample at generation time, on every serving tier. When a clip of your agent surfaces somewhere it shouldn’t, you can prove where it came from — and where it didn’t.

voice Leo · 11.3s · 2026-07-16
watermark inaudible · applied on every tier