File: C:/Users/fred/.codex/.tmp/plugins/plugins/zoom/skills/zoom-apps-sdk/references/events.md
# Zoom Apps SDK - Events Reference
Subscribe to events to respond to meeting, user, and app state changes.
**IMPORTANT**: Register event listeners AFTER successful `zoomSdk.config()` call. Events must be listed in the `capabilities` array.
## Subscribing to Events
```javascript
import zoomSdk from '@zoom/appssdk';
await zoomSdk.config({
capabilities: ['onMeeting', 'onParticipantChange', 'onAuthorized', ...],
version: '0.16'
});
zoomSdk.addEventListener('onMeeting', (event) => {
console.log('Meeting event:', event);
});
```
## Meeting Events
### onMeeting
Meeting lifecycle changes (start, end, etc.).
```javascript
zoomSdk.addEventListener('onMeeting', (event) => {
// event: { action: 'started' | 'ended' | ... }
});
```
### onParticipantChange
Participants join or leave.
```javascript
zoomSdk.addEventListener('onParticipantChange', (event) => {
const { participants, action } = event;
// action: 'join' | 'leave'
// participants: [{ participantId, screenName, role }]
});
```
### onActiveSpeakerChange
Active speaker changes.
```javascript
zoomSdk.addEventListener('onActiveSpeakerChange', (event) => {
const { participantId, screenName } = event;
});
```
### onBreakoutRoomChange
User moves between breakout rooms.
```javascript
zoomSdk.addEventListener('onBreakoutRoomChange', (event) => {
// Re-fetch meeting UUID and state for new room
});
```
## User Events
### onMyUserContextChange
Current user's context changes (role, name, mute status, etc.).
```javascript
zoomSdk.addEventListener('onMyUserContextChange', (event) => {
const { role, screenName } = event;
});
```
### onMyMediaChange
Current user's audio/video status changes.
```javascript
zoomSdk.addEventListener('onMyMediaChange', (event) => {
const { audio, video } = event;
// audio: { muted: true/false }
// video: { started: true/false }
});
```
## App Events
### onShareApp
App sharing status changes.
```javascript
zoomSdk.addEventListener('onShareApp', (event) => {
const { isShared } = event;
});
```
### onAppPopout
App popped out to separate window or back.
```javascript
zoomSdk.addEventListener('onAppPopout', (event) => {
const { isPopout } = event;
});
```
### onRunningContextChange
Running context changes (e.g., meeting starts while in main client).
```javascript
zoomSdk.addEventListener('onRunningContextChange', (event) => {
const { runningContext } = event;
});
```
## Authorization Events
### onAuthorized
In-Client OAuth authorization completed.
```javascript
zoomSdk.addEventListener('onAuthorized', (event) => {
const { code, state } = event;
// Send code to backend for token exchange
});
```
## Communication Events
### onConnect
Another app instance connected.
```javascript
zoomSdk.addEventListener('onConnect', (event) => {
console.log('Other instance connected');
});
```
### onMessage
Message received from connected instance.
```javascript
zoomSdk.addEventListener('onMessage', (event) => {
const data = JSON.parse(event.payload);
});
```
## Collaborate Events
### onCollaborateChange
Collaborate mode state changes.
```javascript
zoomSdk.addEventListener('onCollaborateChange', (event) => {
console.log('Collaborate state:', event);
});
```
## Layers Events
### onRenderedAppOpened
Immersive/camera rendering context opened.
```javascript
zoomSdk.addEventListener('onRenderedAppOpened', (event) => {
console.log('Rendering context ready');
});
```
## Reaction Events
### onReaction
Participant sends a reaction.
```javascript
zoomSdk.addEventListener('onReaction', (event) => {
const { participantId, reaction } = event;
});
```
## Removing Listeners
```javascript
const handler = (event) => { ... };
zoomSdk.addEventListener('onMeeting', handler);
// Later, remove it
zoomSdk.removeEventListener('onMeeting', handler);
```
## Resources
- **Events reference**: https://appssdk.zoom.us/