AsyncAPI description of LiveKit's signaling WebSocket protocol. LiveKit clients connect to a LiveKit server (Cloud or self-hosted) over a WebSocket at the `/rtc` endpoint. Once connected, the client and server exchange Protocol Buffer encoded messages. By convention the client sends a `SignalRequest` and the server replies with a `SignalResponse`; both sides can send messages asynchronously at any time. Source of truth: `livekit/protocol` repository (`livekit_rtc.proto` and `livekit_models.proto`) and the public docs at https://docs.livekit.io/reference/internals/client-protocol/. All message schemas mirror the on-the-wire protobuf definitions; field numbers from the `.proto` files are preserved in `x-proto-field` extensions where useful for cross-referencing.
View SpecView on GitHubRealtimeWebRTCAudioVideoOpen SourceAI AgentsVoiceCloudAsyncAPIWebhooksEvents
Channels
/rtc
publishsendSignalRequest
Client-to-server signal messages (SignalRequest oneof variants).
Bi-directional signaling channel. The client publishes `SignalRequest` envelopes; the server publishes `SignalResponse` envelopes. Each envelope is a `oneof` carrying exactly one of the signal variants defined in `livekit_rtc.proto`.
Messages
✉
OfferRequest
Offer (publisher)
Client sends an SDP offer to the publisher peer connection.
✉
AnswerRequest
Answer (subscriber)
Client SDP answer in response to a server-sent subscriber offer.
✉
TrickleRequest
Trickle ICE
ICE candidate exchanged in either direction.
✉
AddTrack
Add Track
Request to publish a new track.
✉
MuteTrack
Mute Track (client)
Mute or unmute a published track.
✉
UpdateSubscription
Update Subscription
Subscribe to or unsubscribe from one or more tracks.
✉
UpdateTrackSettings
Update Track Settings
Adjust quality/dimensions/fps of subscribed tracks.
✉
Leave
Leave (client)
Client requests session termination.
✉
UpdateLayers
Update Video Layers (deprecated)
Update published video track dimensions (deprecated).
✉
UpdateSubscriptionPermission
Update Subscription Permissions
Update which participants can subscribe to which of this participant's tracks.
✉
SyncState
Sync State
Synchronize subscription / publish state when resuming a session.
✉
Simulate
Simulate Scenario
Trigger a client validation scenario on the server.
✉
PingLegacy
Ping (deprecated)
Legacy client keep-alive ping (int64 timestamp, deprecated by ping_req).
✉
UpdateMetadata
Update Participant Metadata
Update local participant metadata, name, or attributes.
Update audio feature flags (DTX, RED, stereo, etc.) on a published audio track.
✉
UpdateLocalVideoTrack
Update Local Video Track
Update dimensions for a published video track.
✉
PublishDataTrack
Publish Data Track
Publish a new data track.
✉
UnpublishDataTrack
Unpublish Data Track
Remove a previously published data track.
✉
UpdateDataSubscription
Update Data Track Subscription
Subscribe or unsubscribe from data tracks.
✉
Join
Join Response
Server confirms the client has joined the room.
✉
AnswerResponse
Answer (publisher response)
Server SDP answer to the publisher offer.
✉
OfferResponse
Offer (subscriber)
Server SDP offer for the subscriber peer connection.
✉
TrickleResponse
Trickle ICE (server)
Server-sent ICE candidate.
✉
Update
Participant Update
Notification of remote participants joining, leaving, or changing.
✉
TrackPublished
Track Published
Confirms a track publication and returns the assigned track info.
✉
LeaveResponse
Leave (server)
Server instructs the client to disconnect, resume, or reconnect.
✉
MuteResponse
Mute Track (server)
Server-initiated mute/unmute notification.
✉
SpeakersChanged
Speakers Changed
Delta list of active speakers.
✉
RoomUpdate
Room Update
Room metadata change.
✉
ConnectionQuality
Connection Quality Update
Connection quality updates for one or more participants.
✉
StreamStateUpdate
Stream State Update
Track-level stream state (active or paused) updates.
✉
SubscribedQualityUpdate
Subscribed Quality Update
Updates the set of enabled video qualities for a subscribed track.
✉
SubscriptionPermissionUpdate
Subscription Permission Update
Notification that a participant's subscription permission to a track has changed.
✉
RefreshToken
Refresh Token
Server-issued replacement access token before the current token expires.
✉
TrackUnpublished
Track Unpublished
A previously published track has been unpublished.
✉
PongLegacy
Pong (deprecated)
Legacy server pong (int64 timestamp, deprecated by pong_resp).
✉
Reconnect
Reconnect Response
Sent during a successful WebSocket resume with updated ICE servers and config.
✉
Pong
Pong
Server response to client `Ping` (current).
✉
SubscriptionResponse
Subscription Response
Result of a subscription operation (success or error).
✉
RequestResponse
Request Response
Server response to a request identified by `request_id` (mute, add_track, etc.).
✉
TrackSubscribed
Track Subscribed
Notification that a subscribed track is now ready for media.
✉
RoomMoved
Room Moved
The participant has been migrated to a different room/server.
✉
MediaSectionsRequirement
Media Sections Requirement
Required number of audio and video media sections for the publisher.
✉
SubscribedAudioCodecUpdate
Subscribed Audio Codec Update
Updates the audio codec subscription preferences for a track.
✉
PublishDataTrackResponse
Publish Data Track Response
Server response after publishing a data track.
✉
UnpublishDataTrackResponse
Unpublish Data Track Response
Server response after unpublishing a data track.
✉
DataTrackSubscriberHandles
Data Track Subscriber Handles
Mapping from incoming packet handles to subscribed data track SIDs.
Servers
wss
productionwss://{host}/rtc
LiveKit signaling WebSocket endpoint. `host` is the LiveKit server host (Cloud project URL or self-hosted deployment). Protocol Buffers are sent over the WebSocket as binary frames; some clients negotiate JSON-encoded protobuf for text frames.