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

Text to speech

Speech to text

Realtime

Voices