/v1/audio/speech and
/v1/audio/transcriptions endpoints. It has no chat, /responses, or
embeddings API, so those endpoints return invalid_request_error for
ElevenLabs-routed models.
Configure
config.yaml:
Voices are IDs, not names
Unlike OpenAI’s fixed voice names (alloy, verse, …), ElevenLabs has no
built-in named voices — every voice is an ID from your ElevenLabs voice
library (built-in, cloned, or shared). Pass that ID as the OpenAI-compatible
voice field:
elevenlabs is added to
ENABLED_PASSTHROUGH_PROVIDERS) at /p/elevenlabs/v2/voices — the newer
GET /v2/voices search endpoint. /p/elevenlabs/v1/voices does not currently
work: GoModel’s provider-passthrough router treats a leading v1/ segment in
the path as an alias for providers whose base URL already embeds /v1 (e.g.
OpenAI), and strips it before forwarding. ElevenLabs’ base URL is
https://api.elevenlabs.io with no /v1, so every /p/elevenlabs/v1/...
passthrough call currently 404s. This affects all of ElevenLabs’ native /v1
surface via passthrough, not just voice listing — see “Not implemented” below.
Supported speech formats
response_format accepts mp3 (default), opus, pcm, and wav; each maps
to a fixed ElevenLabs output_format (mp3_44100_128, opus_48000_128,
pcm_24000, wav_44100). aac and flac are not supported and return
invalid_request_error. speed, when set, is clamped to ElevenLabs’ 0.7-1.2
voice setting range (OpenAI accepts 0.25-4.0); instructions is not
supported.
Speech-to-text models and timestamps
Transcription models (scribe_v2, current; scribe_v1, still valid) are a
separate model family from the text-to-speech catalog and are not returned by
ElevenLabs’ /v1/models listing — GoModel adds them to /v1/models output
itself. response_format accepts json (default), text, and
verbose_json; srt/vtt are not supported. Requesting verbose_json, or
word in timestamp_granularities, asks ElevenLabs for word-level timing,
which GoModel maps into the OpenAI words array. prompt is not supported.
Not supported by ElevenLabs
All of these returninvalid_request_error rather than silently dropping the
option:
- Chat completions,
/v1/responses, and embeddings. - Speech
instructions, andresponse_formatvalues other thanmp3/opus/pcm/wav. - Transcription
prompt, andresponse_formatvalues other thanjson/text/verbose_json.
Not implemented
GoModel only implements the two ElevenLabs capabilities that map onto OpenAI-compatible endpoints: text-to-speech and speech-to-text. Everything else ElevenLabs offers has no typed support in GoModel today:- Speech-to-speech (voice changer) —
POST /v1/speech-to-speech/{voice_id}has no OpenAI-compatible equivalent to translate from, so there’s no typed endpoint for it. It could be added as a native passthrough route in the future, but passthrough for it does not currently work either — see the/v1alias limitation above; speech-to-speech has no/v2path to work around it with, so it is entirely unreachable through GoModel right now. - Dubbing, voice cloning/design, projects (Studio), and conversational AI
(agents) — same reasoning: no OpenAI-compatible shape to translate to, and
(for the
/v1-only parts of these APIs) the same passthrough limitation applies. These are reasonable candidates for future native passthrough support once that limitation is fixed. - Realtime/streaming TTS and STT (
/v1/text-to-speech/{voice_id}/stream, WebSocket streaming) — GoModel’s/v1/audio/speechand/v1/audio/transcriptionsare synchronous request/response; no streaming variant is implemented for ElevenLabs.