13 KiB
Events Reference
Complete reference for all events in the Zoom Video SDK for Web.
Event Registration
// Register
client.on('event-name', (payload) => { /* handle */ });
// Unregister
client.off('event-name', handler);
Session Events
connection-change
Fired when connection state changes.
client.on('connection-change', (payload: {
state: 'Connected' | 'Connecting' | 'Reconnecting' | 'Closed' | 'Fail';
reason?: string;
}) => {});
| State | Description |
|---|---|
Connected |
Successfully connected to session |
Connecting |
Attempting to connect |
Reconnecting |
Lost connection, attempting reconnect |
Closed |
Disconnected from session |
Fail |
Connection failed |
Participant Events
user-added
Fired when participant(s) join the session.
client.on('user-added', (payload: Participant[]) => {});
interface Participant {
userId: number;
displayName: string;
avatar?: string;
isHost: boolean;
isManager: boolean;
bVideoOn: boolean;
muted: boolean;
// ... more properties
}
user-removed
Fired when participant(s) leave the session.
client.on('user-removed', (payload: Participant[]) => {});
user-updated
Fired when participant properties change (name, mute, video, etc.).
client.on('user-updated', (payload: Participant[]) => {});
Video Events
peer-video-state-change
Fired when a remote participant starts or stops video.
client.on('peer-video-state-change', (payload: {
action: 'Start' | 'Stop';
userId: number;
}) => {});
Critical: Use this to render/remove remote videos.
video-capturing-change
Fired when local video capture state changes.
client.on('video-capturing-change', (payload: {
state: 'Started' | 'Stopped' | 'Failed';
}) => {});
video-active-change
Fired when video becomes active/inactive.
client.on('video-active-change', (payload: {
state: VideoActiveState;
userId: number;
}) => {});
video-dimension-change
Fired when received video dimensions change.
client.on('video-dimension-change', (payload: {
width: number;
height: number;
type: 'received';
}) => {});
video-detailed-data-change
Fired when video quality details change.
client.on('video-detailed-data-change', (payload: {
userId: number;
width?: number;
height?: number;
fps?: number;
quality?: VideoQuality;
}) => {});
video-spotlight-change
Fired when spotlight list changes.
client.on('video-spotlight-change', (payload: {
spotlightList: { userId: number }[];
}) => {});
Audio Events
current-audio-change
Fired when local audio state changes.
client.on('current-audio-change', (payload: {
action: 'join' | 'leave' | 'muted' | 'unmuted';
type?: 'computer' | 'phone';
source?: MutedSource | LeaveAudioSource;
}) => {});
| Action | Description |
|---|---|
join |
Joined audio (computer or phone) |
leave |
Left audio |
muted |
Audio muted |
unmuted |
Audio unmuted |
| Source | Description |
|---|---|
active |
User action |
passive(mute all) |
Host muted all |
passive(mute one) |
Host muted you |
passive |
Host unmuted you |
host-ask-unmute-audio
Fired when host asks you to unmute.
client.on('host-ask-unmute-audio', (payload: {
reason: 'Unmute' | 'Spotlight' | 'Allow to talk';
}) => {});
active-speaker
Fired when active speakers change.
client.on('active-speaker', (payload: {
userId: number;
displayName: string;
}[]) => {});
Array is sorted by volume (loudest first).
auto-play-audio-failed
Fired when browser blocks audio autoplay.
client.on('auto-play-audio-failed', () => {});
current-audio-level-change
Fired when local audio level changes.
client.on('current-audio-level-change', (payload: {
level: number;
}) => {});
speaking-while-muted
Fired when speaking while muted is detected.
client.on('speaking-while-muted', () => {});
Screen Share Events
active-share-change
Fired when someone starts/stops sharing.
client.on('active-share-change', (payload: {
state: 'Active' | 'Inactive';
userId: number;
}) => {});
peer-share-state-change
Fired when peer share state changes.
client.on('peer-share-state-change', (payload: {
action: 'Start' | 'Stop';
userId: number;
}) => {});
passively-stop-share
Fired when you're forced to stop sharing.
client.on('passively-stop-share', (payload: PassiveStopShareReason) => {});
// Reasons: 'PrivilegeChange', 'AnotherShareStarted', etc.
share-content-change
Fired when sharer switches windows/tabs.
client.on('share-content-change', (payload: {
userId: number;
}) => {});
share-content-dimension-change
Fired when share dimensions change.
client.on('share-content-dimension-change', (payload: {
width: number;
height: number;
type: 'received' | 'sended';
}) => {});
share-privilege-change
Fired when share privilege changes.
client.on('share-privilege-change', (payload: {
privilege: SharePrivilege;
}) => {});
share-audio-change
Fired when share audio state changes.
client.on('share-audio-change', (payload: {
state: 'on' | 'off';
}) => {});
Chat Events
chat-on-message
Fired when a chat message is received.
client.on('chat-on-message', (payload: {
id: string;
message: string;
sender: { userId: number; name: string; avatar?: string };
receiver: { userId: number; name: string } | 'everyone';
timestamp: number;
isPrivate: boolean;
}) => {});
chat-privilege-change
Fired when chat privilege changes.
client.on('chat-privilege-change', (payload: {
chatPrivilege: ChatPrivilege;
}) => {});
chat-file-upload-progress
Fired during file upload.
client.on('chat-file-upload-progress', (payload: {
fileName: string;
fileSize: number;
progress: number;
status: ChatFileUploadStatus;
receiverId: number;
retryToken?: string;
}) => {});
chat-file-download-progress
Fired during file download.
client.on('chat-file-download-progress', (payload: {
fileName: string;
fileSize: number;
progress: number;
status: ChatFileDownloadStatus;
fileUrl: string;
fileBlob?: Blob;
senderId: number;
}) => {});
Recording Events
recording-change
Fired when cloud recording state changes.
client.on('recording-change', (payload: {
state: RecordingStatus;
}) => {});
| Status | Description |
|---|---|
Recording |
Recording in progress |
Paused |
Recording paused |
Stopped |
Recording stopped |
individual-recording-change
Fired for individual recording consent.
client.on('individual-recording-change', (payload: {
state: RecordingStatus | 'Ask' | 'Accept' | 'Decline';
userId?: number;
}) => {});
Live Transcription Events
caption-message
Fired when transcription text is received.
client.on('caption-message', (payload: {
msgId: string;
text: string;
userId: number;
displayName: string;
source: 'caption' | 'translation';
language: string;
done: boolean; // true = final, false = interim
timestamp: number;
}) => {});
caption-status
Fired when caption status changes.
client.on('caption-status', (payload: {
autoCaption: boolean;
language?: string;
lang?: number;
sessionLanguage?: string;
translationStarted?: boolean;
}) => {});
caption-enable
Fired when captions are enabled/disabled.
client.on('caption-enable', (isEnabled: boolean) => {});
caption-language-lock
Fired when language is locked/unlocked.
client.on('caption-language-lock', (isLocked: boolean) => {});
caption-host-disable
Fired when host disables captions.
client.on('caption-host-disable', (isDisabled: boolean) => {});
Device Events
device-change
Fired when devices are added/removed.
client.on('device-change', () => {});
device-permission-change
Fired when device permissions change.
client.on('device-permission-change', (payload: {
name: 'microphone' | 'camera';
state: 'granted' | 'denied' | 'prompt';
}) => {});
Network & Quality Events
network-quality-change
Fired when network quality changes.
client.on('network-quality-change', (payload: {
userId: number;
type: 'uplink' | 'downlink';
level: number; // 0-5 (0=unknown, 1=bad, 5=excellent)
}) => {});
video-statistic-data-change
Fired when video statistics change.
client.on('video-statistic-data-change', (payload: {
type: 'VIDEO_QOS_DATA';
data: {
encoding: boolean; // true=send, false=receive
width: number;
height: number;
fps: number;
bitrate: number;
avg_loss: number;
max_loss: number;
jitter: number;
rtt: number;
};
}) => {});
audio-statistic-data-change
Fired when audio statistics change.
client.on('audio-statistic-data-change', (payload: {
type: 'AUDIO_QOS_DATA';
data: {
encoding: boolean;
bitrate: number;
avg_loss: number;
max_loss: number;
jitter: number;
rtt: number;
sample_rate: number;
};
}) => {});
Command Channel Events
command-channel-status
Fired when command channel status changes.
client.on('command-channel-status', (payload: ConnectionState) => {});
command-channel-message
Fired when command channel message is received.
client.on('command-channel-message', (payload: {
msgid: string;
senderId: string;
senderName: string;
text: string;
timestamp: number;
}) => {});
Live Stream Events
live-stream-status
Fired when live stream status changes.
client.on('live-stream-status', (status: LiveStreamStatus) => {});
Far End Camera Control Events
far-end-camera-request-control
Fired when someone requests camera control.
client.on('far-end-camera-request-control', (payload: {
userId: number;
displayName: string;
currentControllingUserId?: number;
currentControllingDisplayName?: string;
}) => {});
far-end-camera-response-control
Fired with camera control response.
client.on('far-end-camera-response-control', (payload: {
userId: number;
displayName: string;
isApproved: boolean;
reason?: FarEndCameraControlDeclinedReason;
}) => {});
far-end-camera-capability-change
Fired when camera capabilities change.
client.on('far-end-camera-capability-change', (payload: {
userId: number;
ptz: PTZCameraCapability;
}) => {});
Subsession Events
subsession-invite-to-join
Fired when invited to join subsession.
client.on('subsession-invite-to-join', (payload: {
subsessionId: string;
subsessionName: string;
}) => {});
subsession-broadcast-message
Fired when broadcast message received.
client.on('subsession-broadcast-message', (payload: {
message: string;
}) => {});
subsession-state-change
Fired when subsession state changes.
client.on('subsession-state-change', (payload: {
status: SubsessionStatus;
}) => {});
Whiteboard Events
whiteboard-status-change
Fired when whiteboard status changes.
client.on('whiteboard-status-change', (status: WhiteboardStatus) => {});
peer-whiteboard-state-change
Fired when peer whiteboard state changes.
client.on('peer-whiteboard-state-change', (payload: {
action: 'Start' | 'Stop';
userId: number;
}) => {});
Event Categories Quick Reference
| Category | Events |
|---|---|
| Session | connection-change |
| Participants | user-added, user-removed, user-updated |
| Video | peer-video-state-change, video-capturing-change, video-dimension-change, video-active-change |
| Audio | current-audio-change, host-ask-unmute-audio, active-speaker, auto-play-audio-failed |
| Share | active-share-change, passively-stop-share, share-privilege-change, share-content-change |
| Chat | chat-on-message, chat-privilege-change, chat-file-*-progress |
| Recording | recording-change, individual-recording-change |
| Transcription | caption-message, caption-status, caption-enable |
| Device | device-change, device-permission-change |
| Network | network-quality-change, *-statistic-data-change |