Skip to content

A text-to-speech API built for live audio.

3

surfaces on one base URL

One base URL, three surfaces, one price. The request shape is the same on all three, and the bill does not move with how much you send.

Fig. 0, voice specimens · pre-rendered on the production API

generated 2026-08-05

  • Leo

    English

    “I've placed a temporary hold on the card ending four two one nine, because two charges came through this morning that don't fit your pattern at all. If both of those were you, I can lift the hold right now and you'll be able to use the card within a minute. If they weren't, I'll cancel it, order a replacement, and have the fraudulent charges reversed before we finish this call.”

    financial services · fraud hold

    19.7 s

  • Mia

    English

    “You're all set for Thursday at ten with Doctor Okafor, and I've texted the address along with the two intake forms so you can fill them in before you arrive rather than in the waiting room. If Thursday stops working, reply to that same message any time and I'll move the appointment, there's no fee for changing it, and I'll make sure the forms carry across so you're not filling them in twice.”

    healthcare · appointment line

    19.7 s

  • Mia

    English

    “Good news, your refund went through this morning, and the confirmation number is already sitting in your inbox. It usually settles back onto the card within two business days, though some banks take a little longer to show it. I have also cancelled the replacement order so you are not charged twice, and left a note on the account in case you call back and reach somebody else. Anything else I can take care of?”

    retail · returns desk

    20.4 s

  • Dane

    English

    “Your balance is about thirty days past due, and I would much rather work it out with you today than let it escalate any further. I can split it into two payments, one this Friday and the rest on the twenty-sixth, and the account comes current with no late mark against you. If Friday is tight, tell me now and we'll pick a date that actually works, because a plan you can keep is worth more to both of us.”

    collections · payment plan

    18.5 s

  • Lewis

    English

    “I've opened the claim for the water damage and assigned it to an adjuster, who will reach out to you within one business day to arrange a visit. Hold on to the photographs you took this morning, especially the ones showing the ceiling before anything was moved, those will move everything along faster. If the leak is still active, call a plumber tonight and keep the invoice, because emergency mitigation is covered under this policy.”

    insurance · first notice of loss

    20.9 s

  • Ava

    English

    “Good morning, and thank you for calling the front desk. I can check you in early if the room is ready, arrange a late checkout for Sunday, or book you a table for tonight, the restaurant fills up by seven on weekends, so it is worth deciding now rather than later. I can also have your bags taken up while you are at breakfast, and leave a key at reception under your name. What would help you most right now?”

    hospitality · front desk

    18.6 s

  • Dane

    English

    “Driver twelve is eight minutes out with two pallets, and dock four is clear, so you can send the forklift over whenever you're ready. I've dropped the manifest in your inbox so you can check the weights before he pulls in, there is one line item that came in heavier than the order sheet said, and I'd rather you saw it now than at the gate. Everything else on the load matches what you signed for.”

    logistics · dispatch

    17.4 s

  • Leo

    English

    “Your technician is booked for Tuesday between nine and eleven, and I'll send you a text when they're about thirty minutes out so you're not stuck waiting around all morning. They'll have the replacement part on the van already, which means this should be a single visit rather than two. If Tuesday morning stops working for you, reply to that text and I'll move it, there's no charge for rescheduling as long as it isn't the same day.”

    field service · scheduling

    19.9 s

  • Dane

    English

    “Ondansetron twice daily, with the subpoena scheduled to arrive on Thursday, and the charcuterie is from Worcestershire. The paraesthesia resolved after the anaesthetist adjusted the dosage, according to the otolaryngologist who reviewed the file in Cholmondeley last February. Quinoa, açaí and gnocchi appear on the same menu as the Chateauneuf-du-Pape, which the sommelier pronounced without hesitating once.”

    hard words, first try

    20.8 s

Six multilingual voices ship ready-made, and any voice you can record joins them: ten seconds of a consenting speaker becomes a voice on the same request. The library is not a catalogue you pick from, it is whatever you bring.

The three surfaces

  • POST /v1/tts/bytes returns one complete WAV. Use it for anything that is not live.
  • POST /v1/tts/sse streams base64 PCM chunks over one HTTP response. It runs on serverless.
  • wss://tts.gandr.ai/ws, one socket per call, an utterance per turn, binary PCM back with ttfa_ms and audio_ms metadata.

listing 01

the canonical request, same shape on every surface

curl -X POST https://tts.gandr.ai/v1/tts/bytes \
  -H "authorization: Bearer gnd_yourkey" \
  -H "content-type: application/json" \
  -d '{
    "transcript": "Chapter one. The tide was already turning.",
    "voice": {"mode": "clone",
              "wav_b64": "<ten seconds of one speaker>"},
    "language": "en",
    "output_format": {"sample_rate": 24000}
  }' --output turn.wav

# transcript · voice · output format, the voice rides in the
# request; there is no voice-management API to learn first

The figures and the bill

First audio byte in 146 ms over the open internet, 116 ms p50 first audio, server side warm. The same API answers on every rung: a free key, tokens at $10 a million, or a flat stream at $150 a month on a year and $180 month to month, with nothing on a stream counted.

Notes

What latency should I expect from the API?

First audio byte in 146 ms over the open internet, 116 ms p50 first audio, server side warm.

How does authentication work?

One key on every request, x-api-key: gnd_… or Authorization: Bearer gnd_…, either header works. Keys are self-serve: sign in, pay, and yours is on your dashboard the moment payment settles. Usage per key is readable at GET /v1/usage.

A key, one stream, your own script, nothing on it counted while you build.

Get a key, run your own script