The EESI Speech API is a drop-in replacement for OpenAI’s audio APIs. Point any OpenAI SDK at your EESI base URL with an sk-eesi- key and audio.speech, audio.transcriptions, models.list, and the Realtime WebSocket all work unchanged β€” backed by EESI’s own models (Supertonic, Kokoro, Parakeet, Whisper, OmniVoice, and a realtime speech-to-speech pipeline).
The only change from OpenAI is the base_url and the key. Everything below β€” fields, response formats, streaming events, and the error envelope ({"error": {"message", "type", "param", "code"}}) β€” matches OpenAI exactly.

Endpoints

Models

Model availability depends on what your deployment has configured β€” call GET /v1/models (or GET /v1/audio/models for capability flags) to see the live set. OpenAI model names are accepted as aliases so existing code keeps working. OpenAI voice names (alloy, nova, …) map to the model’s default voice, so voice="alloy" never fails on a model that has its own preset voices.

Text to speech

POST /v1/audio/speech β€” full reference.
Set stream_format="sse" to receive audio as speech.audio.delta events instead of a raw byte stream.

Transcription

POST /v1/audio/transcriptions β€” full reference. Multipart upload, up to 25 MB, with the exact OpenAI field set (file, model, language, prompt, response_format, temperature, timestamp_granularities[], stream).
stream=true returns Server-Sent Events (transcript.text.delta / transcript.text.done). Models whose upstream can’t stream still honor stream=true β€” EESI runs the batch call and emits the transcript as a single delta, so streaming client code works against every model.

Realtime speech-to-speech

WS /v1/realtime?model=eesi-s2s-mini speaks the OpenAI Realtime protocol: send input_audio_buffer.append with base64 PCM16 @ 16 kHz, receive conversation.item.input_audio_transcription.delta, response.output_audio.delta, and barge-in via response.done (status: "cancelled", reason: "turn_detected"). Authentication accepts every channel OpenAI clients use:
  • Server SDKs send Authorization: Bearer sk-eesi-... on the handshake.
  • Browser clients send ?token=<clerk-jwt> / ?api_key=sk-eesi-..., or the openai-insecure-api-key.<key> WebSocket subprotocol.

Voice cloning

Clone a voice once and use it everywhere β€” the Playground, your agents, and the Realtime API. Upload 3–10 seconds of reference audio; EESI transcribes it automatically if you don’t supply a transcript.
Once status is ready, pass the ev_* id as the voice on any cloning-capable model:
See Create a voice for the full flow.

Billing

Free-tier models (kokoro, supertonic, whisper-small, parakeet-tdt-0.6b-v3, eesi-s2s-mini) are never metered. Paid-tier models draw from your prepaid credit balance and require credits to start; an empty balance returns 429 with code: "insufficient_quota", exactly like OpenAI. Self-hosted deployments with no billing configured never gate.