The two lines
What maps to what
Voices are not names
This is the one real difference in the request body. OpenAI ships a fixed set of voice names (alloy, nova, …). On EESI a voice is
always a stored reference clip — built-in voices carry human names, and
cloned voices are ev_-prefixed ids from your own library:
What you gain
These are extra fields on the same endpoint — ignored by models that don’t support them, so adding one never breaks a fallback path.
Two response headers have no OpenAI equivalent:
X-Synthetic-Audio— every response declares itself AI-generated, which is an EU AI Act Article 50(2) obligation rather than a nicety.X-EESI-Generation-Id— the history entry this audio became.
/v1/voices), diarized transcripts, and a
replayable history of every
generation, none of which have an OpenAI counterpart.
What to check before you cut over
- Formats. Each model advertises its own
formatslist.mp3is universal;opus,aac,flac,wavandpcmdepend on the model. - Billing. EESI meters prepaid credits, and requests fail with
402at zero rather than invoicing later. See Billing. - Concurrency. Realtime sessions are capped per organization by plan, and a refused session returns cleanly rather than degrading a live one.
- Rate limits.
429means the plan’s request rate; retry with backoff.