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).
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 β callGET /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.
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 theopenai-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.status is ready, pass the ev_* id as the voice on any cloning-capable
model:
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.