Use this file to discover all available pages before exploring further.
The ElevenLabs Agent Connector bridges ElevenLabs Agents with LiveAvatar. ElevenLabs handles the conversational AI while LiveAvatar renders the avatar video.
The ElevenLabs Agent Connector is not available with ElevenLabs free-tier API keys. ElevenLabs blocks third-party usage on free plans. You must have a paid ElevenLabs subscription to use this connector.
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
The ElevenLabs Agent Connector uses the FULL Mode event system, not standard LITE Mode events. The WebSocket command events described in the LITE Mode Events page do not apply here. See the Events section below for details.
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 avatar
agent-response — events the server sends to you
Two layers of events are exposed:
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.
The following FULL Mode response events fire on every ElevenLabs session, on the agent-response topic:
Event
Source
user.speak_started / user.speak_ended
LiveKit user-state changes
user.transcription_chunk / user.transcription
Streaming and final user STT (driven by ElevenLabs STT)
avatar.transcription_chunk / avatar.transcription
Streaming and final agent text
avatar.speak_started / avatar.speak_ended
Avatar TTS lifecycle
session_stopped
Session lifecycle (includes stop_reason)
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.
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.
Direction
Wrapper event
Topic
Payload
Server → client
elevenlabs_agent_event
agent-response
{"elevenlabs_event_type": "...", "data": {...}}
Client → server
elevenlabs_agent_command
agent-control
{"elevenlabs_event_type": "...", "data": {...}}
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.
Only the following inner types are accepted in elevenlabs_agent_command (the developer-facing whitelist):
elevenlabs_event_type
Description
user_message
Inject text as a user turn.
user_activity
Heartbeat / nudge to elicit a reply.
contextual_update
Push instructions or context without a user turn.
client_tool_result
Reply to an ElevenLabs client_tool_call.
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.
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 the elevenlabs_agent_event event. The original ElevenLabs payload is passed through verbatim under the data field, so your existing parsers can consume data as-is.