ElevenLabs compatibility
Use the ElevenLabs SDK with AllModels for speech generation, transcription, realtime audio, Speech Engine, and voice discovery.
AllModels implements the ElevenLabs SDK surface used for speech generation, transcription, realtime audio, Speech Engine, and voice discovery. Point the official SDK at https://api.allmodels.io/el and use your AllModels API key.
Supported SDK surface
| Capability | ElevenLabs SDK method | AllModels route |
|---|---|---|
| Generate speech | textToSpeech.convert() / text_to_speech.convert() | POST /el/v1/text-to-speech/{voice_id} |
| Stream generated speech | textToSpeech.stream() / text_to_speech.stream() | POST /el/v1/text-to-speech/{voice_id}/stream |
| Stream text into TTS | Python text_to_speech.convert_realtime() | WS /el/v1/text-to-speech/{voice_id}/stream-input |
| Transcribe a file | speechToText.convert() / speech_to_text.convert() | POST /el/v1/speech-to-text |
| Transcribe live audio | speechToText.realtime.connect() | WS /el/v1/speech-to-text/realtime |
| Create a Speech Engine | speechEngine.create() / speech_engine.create() | POST /el/v1/speech-engine |
| Start a Speech Engine conversation | Conversation.startSession() / Conversation.start_session() | WS /el/v1/convai/conversation |
| List voices | voices.getAll() / voices.get_all() | GET /el/v1/voices |
| Search voices | voices.search() | GET /el/v2/voices |
Not implemented
AllModels implements the audio surface above. The rest of the ElevenLabs SDK is not implemented:
| Area | ElevenLabs SDK surface |
|---|---|
| Voice management | voices.get() for a single voice, voice create/edit/delete, voice settings, and shared-voice discovery |
| Account | models.list, user, and user.subscription |
| Audio tools | Dubbing, sound generation, speech-to-speech (voice changer), and audio isolation |
| Content | Projects, history, and pronunciation dictionaries |
| Agents | Agent management, tools, knowledge bases, telephony, and other Conversational AI endpoints outside the supported Speech Engine surface |
Any other path under /el returns 501 with the status not_implemented in the ElevenLabs { "detail": { ... } } envelope, plus an x-should-retry: false header. Authentication and balance errors (401, 402, 403) are evaluated first, so a keyless call to an unimplemented path fails with 401 rather than 501. See Errors.
Configure the client
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
const client = new ElevenLabsClient({
apiKey: process.env.ALLMODELS_API_KEY,
baseUrl: "https://api.allmodels.io/el"
});The SDK sends the configured key as xi-api-key. Keep it on a server; do not expose a long-lived tenant key in browser code.
Models and providers
Use the model names returned by GET /v1/providers. Canonical names such as deepgram/nova-3 select both the provider and model when the SDK method accepts arbitrary model strings.
For HTTP-based SDK methods, submit provider preferences through the request. JavaScript adds provider through the method's query parameters; Python adds it to the JSON request body:
const audio = await client.textToSpeech.convert("pNInz6obpgDQGcFmaJgB", {
text: "Route this through Fal.",
modelId: "elevenlabs/eleven-turbo-v2-5",
outputFormat: "mp3_44100_128"
}, {
queryParams: {
provider: { only: ["fal"] },
provider_options: { speed: 1.1 }
}
});For realtime STT, use a canonical <provider>/<model> value, such as deepgram/nova-3, to select the provider on the connection.
Supported request controls
The compatibility routes normalize the common ElevenLabs controls below. A provider-specific control is applied only when the selected provider supports it.
| Capability | Controls |
|---|---|
| TTS | Voice ID, model_id, output_format, voice settings, language, text normalization, and provider options such as speed. |
| Streaming-input TTS | Incremental text, flush/close, voice settings, generation settings, inactivity timeout, and output format. |
| File STT | model_id, language, word or character timestamps, diarization, and provider options. |
| Realtime STT | Audio format and sample rate, language, keyterms, manual or VAD commits, timestamp events, non-verbatim mode, and VAD tuning. |
| Voices | Legacy get_all and v2 search, including page_size. |
SDK constraints
- The JavaScript SDK validates some model and output-format values before sending a request. File transcription through
speechToText.convert()is limited to model IDs recognized by the installed SDK; the Python SDK accepts arbitrary AllModels model names. - The JavaScript SDK does not currently expose a streaming-input TTS client. The Python SDK supports this route through
convert_realtime(). - A model must support the requested placement: one-shot TTS, streaming TTS, file transcription, or realtime transcription. The model catalog identifies those capabilities.
- Provider-specific options vary by provider. Use the generated API reference for the exact fields accepted by each route.
