Requirements
- ElevenLabs API key with permissions:
convai_read,user_read,voices_read - ElevenLabs Agent ID
- Audio output configured as PCM 24K
Setup
1. Register your ElevenLabs API key:How it works
- A LiveKit room is automatically created (no WebSocket endpoint returned)
- LiveAvatar dispatches a worker that handles interaction with your ElevenLabs Agent
- Agent audio drives avatar animation in real time
Events
The ElevenLabs Agent Connector wraps the ElevenLabs Agent in LiveKit. Events are exchanged over the LiveKit data channel and differentiated by LiveKit room topic:agent-control— commands you send to the avataragent-response— events the server sends to you
- LiveAvatar events — a subset of the FULL Mode response events, so existing FULL Mode integrations work unchanged.
- ElevenLabs passthrough events — the underlying ElevenLabs Conversational AI protocol, wrapped and forwarded in both directions.
LiveAvatar events
The following FULL Mode response events fire on every ElevenLabs session, on theagent-response topic:
When the ElevenLabs Agent cleanly closes the WebSocket (e.g. agent hangs up), the session ends with a
session_stopped event carrying stop_reason: AGENT_HANG_UP. There is no separate conversation_ended event on the wire.
ElevenLabs passthrough events
Raw ElevenLabs Conversational AI events are wrapped and forwarded in both directions, giving you direct access to the underlying agent protocol without per-feature plumbing.
In both directions,
elevenlabs_event_type is the original ElevenLabs event type and data is the raw payload. For inbound commands, data must not include a type field — the wrapper’s elevenlabs_event_type is authoritative.
Outbound (server → client)
The following ElevenLabs server events are forwarded aselevenlabs_agent_event:
The following are not forwarded:
Inbound (client → server)
Only the following inner types are accepted inelevenlabs_agent_command (the developer-facing whitelist):
conversation_initiation_client_data and pong are blocked because they are managed by LiveAvatar and forwarding them would corrupt the protocol. Any other inner type is dropped.
Listening for ElevenLabs events
If migrating from an existing ElevenLabs agent implementation, note that the ElevenLabs agent WebSocket is not exposed by this connector. Subscribe to the LiveKit data channel and parse theelevenlabs_agent_event event. The original ElevenLabs payload is passed through verbatim under the data field, so your existing parsers can consume data as-is.
Sending ElevenLabs commands
Billing
- LiveAvatar: 1 credit per session minute (avatar video only)
- ElevenLabs: charges separately for agent usage