The Speech API is a gateway. It speaks the OpenAI wire protocol and routes public
model ids to self-hosted backends, so an existing OpenAI client works unchanged
while inference runs on your hardware.
Point an existing client at it
Because the protocol matches, the OpenAI SDKs work as-is:
Always read the model list
Each tier is opt-in per environment — a backend with no SPEECH_BACKEND_*_URL
configured is hidden entirely, and a model that isn’t served answers
404 model_not_found. The set of models on your laptop, your staging cluster,
and production will differ, so read the list rather than assuming an id is
there.
The examples here name nur-tts-v1 — the pinned id. Its unversioned spelling,
nur-tts, is an alias and resolves too, but it follows whatever version is
current, so pin the one you tested against.
Every audio response is marked as AI-generated
The EU AI Act (Article 50(2), applicable since 2 August 2026) requires synthetic
audio to be machine-readable as artificially generated. Every audio byte this
API returns is model output, so every response carries a marker — you don’t opt
in, and you can’t turn it off.
The marker is compact JSON:
It names the producing model and when the audio was generated, and nothing else.
There is no voice id, no account, no session id in it — the audio it travels
with may be a cloned voice, and a marker carrying identity would be a tracking
beacon rather than a disclosure.
It reaches you two ways:
The container marker is standard metadata, so ordinary tools read it:
Or read it from the response header:
This is metadata, not a watermark. It survives copying and moving the file; it
does not survive a re-encode, a transcode, or a re-recording — one ffmpeg
command strips it. Use it to know that audio came from this API as generated
output. Do not rely on it to prove that audio found elsewhere is synthetic.
Where the compute runs
Deployments mix two tiers, chosen per environment:
- CPU, colocated with the API — cheap, fine for development and low volume.
- Dedicated GPUs reached over a private network — where the realtime stack
lives, because holding a conversation is a latency problem before it is a
throughput one.
The client never sees the difference. Swapping tiers is an environment-variable
change, which is also why the model list differs between your laptop and
production.
Next