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 GitHubReal-TimeWebRTCAudioVideoOpen-SourceAI AgentsVoiceCloudAsyncAPIEventsWebSockets
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.
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.