The OpenAI-compatible endpoint.
POST /v1/audio/speech implements OpenAI's speech API. If your tool speaks to OpenAI TTS, point it at Gandr and nothing else changes.
The whole integration
One base URL change in the tools you already use.
curl -X POST https://tts.gandr.ai/v1/audio/speech \
-H "x-api-key: gnd_..." \
-H "content-type: application/json" \
-d '{"input":"Hello from Gandr.","model":"tts-1","voice":"alloy"}' \
--output speech.wav
Open WebUI, LibreChat and AnythingLLM each take the base URL https://tts.gandr.ai in settings. OpenAI voice names map onto Gandr voices, or use Gandr ids directly.
What it needs
What it takes
| A base URL | https://tts.gandr.ai in the tool settings |
| A key | x-api-key or Authorization: Bearer gnd_... |
| A voice | alloy, shimmer, nova, onyx, echo, fable, or a gandr- id |
| response_format | mp3 default; wav or pcm optional |
The tools you already run, one URL change
Open WebUI, LibreChat and AnythingLLM each take a base URL in settings. Point them at https://tts.gandr.ai and the tools keep working, now speaking with Gandr voices on a Gandr key.
The endpoint maps the OpenAI voice names, alloy, shimmer, nova, onyx, echo, fable, onto Gandr voices, or you can use a gandr- id directly. The response format is mp3 unless you ask for wav or pcm.
What the flat stream changes
A chat tool that speaks every reply burns characters fast on a per-character meter. On a flat stream the tool talks as much as its users need and nothing is counted.
- One base URL change, no code
- OpenAI voice names map onto Gandr voices, or use gandr- ids
- One stream carries every user of the tool
Notes
Do I need to change my code?
No. The endpoint implements the OpenAI speech API, so tools that already speak to OpenAI TTS work with a base URL change.
Which voices can I use?
The OpenAI voice names map onto Gandr voices, or you can pass a gandr- id directly.
A key and one stream, and every OpenAI TTS tool you already run speaks Gandr.
Get a keyFull API reference , gandr.ai/docs