Migrate from ElevenLabs
Concept mapping
1. WebSocket URL
The primary interface you are porting.
2. Authentication
WebSocket handshake
Pass the API key as a header or as the token query param. For Smallest, both options work for every agent. ElevenLabs requires a signed URL for private agents.
ElevenLabs (private agent, signed URL)
Smallest Atoms
Create a Smallest API key at app.smallest.ai/dashboard/api-keys.
REST calls
3. Client to server messages
4. Server to client events
Smallest adds two events not present in the ElevenLabs protocol:
agent_start_talking: fires once per agent turn, before the firstoutput_audio.deltaof that turn.agent_stop_talking: fires when the agent turn ends.
Full protocol: Realtime Agent API reference.
5. WebSocket SDK (JavaScript / TypeScript)
Most ElevenLabs Conversational AI integrations use the official browser client. The minimal port:
ElevenLabs
Smallest Atoms
For the full API surface (configuration, methods, events, push-to-talk, text input, error handling, smoke test), see the WebSocket SDK reference.
6. Node.js (raw WebSocket)
For server-side or non-browser JS runtimes.
ElevenLabs
Smallest Atoms
7. Python (raw WebSocket)
Replace API_KEY and AGENT_ID with your own values.
8. Creating an agent (one-time setup)
ElevenLabs creates an agent with a single REST call. Smallest splits creation and configuration into four calls because config is versioned. See Agent Versioning for the full model.
ElevenLabs
Smallest Atoms
The first call auto-publishes V1 with defaults. Future config changes flow through drafts and publish a new immutable version each time.
9. Voices
ElevenLabs voice IDs (for example aMSt68OGf4xUZAnLpTU8) do not port. Pick a TTS voice ID from the Lightning v3.1 catalog:
Full reference: GET voices. The Voice Cloning dashboard also lists available voice IDs in a UI.
For a custom voice, clone one from a short audio sample. Cloned voice IDs are prefixed with voice_.
To set the voice on an agent, include it in the draft config payload:

