skill
Setup Zoom Websockets
Reference skill for Zoom WebSockets. Use after routing to a low-latency event workflow when persistent connections, faster event delivery, or security constraints make WebSockets preferable to webhooks.
About
# /setup-zoom-websockets
Background reference for persistent Zoom event streams. Prefer workflow routing first, then use this file when WebSockets are plausibly better than webhooks.
## WebSockets vs Webhooks
| Aspect | WebSockets | Webhooks | |--------|------------|----------| | **Connection** | Persistent, bidirectional | One-time HTTP POST | | **Latency** | Lower (no HTTP overhead) | Higher (new connection per event) | | **Security** | Direct connection, no exposed endpoint | Requires endpoint validation, IP whitelisting | | **Model** | Pull (you connect to Zoom) | Push (Zoom connects to you) | | **State** | Stateful (maintains connection) | Stateless (each event independent) | | **Setup** | More complex (access token, connection) | Simpler (just endpoint URL) |
**Choose WebSockets when:** - Real-time, low-latency updates are critical - Security is paramount (banking, healthcare, finance) - You don't want to expose a public endpoint - You need bidirectional communication
**Choose Webhooks when:** - Simpler setup is preferred - Small number of event notifications - Existing HTTP infrastructure
## Prerequisites
- Server-to-Server OAuth app in [Zoom Marketplace](https://marketplace.zoom.us/) - Account ID, Client ID, and Client Secret - WebSocket subscription with events enabled
> **Need help with S2S OAuth?** See the **[zoom-oauth](../oauth/SKILL.md)** skill for complete authentication flows.
> **Start troubleshooting fast:** Use the **[5-Minute Runbook](RUNBOOK.md)** before deep debugging.
## Quick Start
### 1. Create Server-to-Server OAuth App
1. Go to [Zoom Marketplace](https://marketplace.zoom.us/develop/create) 2. Create a **Server-to-Server OAuth** app 3. Copy Account ID, Client ID, Client Secret
### 2. Enable WebSocket Subscription
1. In your app, go to **Feature** → **Event Subscriptions** 2. Add an Event Subscription 3. Select **WebSockets** as the method type 4. Select events to subscribe to (e.g., `meeting.created`, `meeting.started`) 5. Save - an endpoint URL will be generated
### 3. Connect via WebSocket
```javascript const WebSocket = require('ws'); const axios = require('axios');
// Step 1: Get access token async function getAccessToken() { const credentials = Buffer.from(`${CLIENT_ID}:${CLIENT_SECRET}`).toString('base64'); const response = await axios.post( 'https://zoom.us/oauth/token', new URLSearchParams({ grant_type: 'account_credentials', account_id: ACCOUNT_ID }), { headers: { 'Authorization': `Basic ${credentials}`, 'Content-Type': 'application/x-www-form-urlencoded' } } ); return response.data.access_token; }
// Step 2: Connect to WebSocket async function connectWebSocket() { const accessToken = await getAccessToken(); // WebSocket URL from your subscription settings const wsUrl = `wss://ws.zoom.us/ws?subscriptionId=${SUBSCRIPTION_ID}&access_token=${accessToken}`; const ws = new WebSocket(wsUrl); ws.on('open', () => { console.log('WebSocket connection established'); }); ws.on('message', (data) => { const event = JSON.parse(data); console.log('Event received:', event.event); // Handle different event types switch (event.event) { case 'meeting.started': console.log(`Meeting started: ${event.payload.object.topic}`); break; case 'meeting.ended': console.log(`Meeting ended: ${event.payload.object.uuid}`); break; case 'meeting.participant_joined': console.log(`Participant joined: ${event.payload.object.participant.user_name}`); break; } }); ws.on('close', (code, reason) => { console.log(`Connection closed: ${code} - ${reason}`); // Implement reconnection logic }); ws.on('error', (error) => { console.error('WebSocket error:', error); }); return ws; }
connectWebSocket(); ```
## Event Format
Events received via WebSocket have the same format as webhook events:
```json { "event": "meeting.started", "event_ts": 1706123456789, "payload": { "account_id": "abcD3ojkdbjfg", "object": { "id": 1234567890, "uuid": "abcdefgh-1234-5678-abcd-1234567890ab", "host_id": "xyz789", "topic": "Team Standup", "type": 2, "start_time": "2024-01-25T10:00:00Z", "timezone": "America/Los_Angeles" } } } ```
## Common Events
| Event | Description | |-------|-------------| | `meeting.created` | Meeting scheduled | | `meeting.updated` | Meeting settings changed | | `meeting.deleted` | Meeting deleted | | `meeting.started` | Meeting begins | | `meeting.ended` | Meeting ends | | `meeting.participant_joined` | Participant joins meeting | | `meeting.participant_left` | Participant leaves meeting | | `recording.completed` | Cloud recording ready | | `user.created` | New user added | | `user.updated` | User details changed |
## Connection Management
### Keep-Alive
WebSocket connections require periodic heartbeats. Zo
Install
Run this command
git clone https://github.com/anthropics/knowledge-work-plugins && cp -r knowledge-work-plugins/partner-built/zoom-plugin/skills/websockets ~/.claude/skills/Works with
Manual steps
Clone the repository and copy the `partner-built/zoom-plugin/skills/websockets` folder into your Claude skills directory. Compatible with Claude Code, Cursor, Codex, and any Agent Skills-compatible agent.
Frequently asked questions
What is the Setup Zoom Websockets skill?
Reference skill for Zoom WebSockets. Use after routing to a low-latency event workflow when persistent connections, faster event delivery, or security constraints make WebSockets preferable to webhooks.
How do I install Setup Zoom Websockets?
Run this in your terminal:
git clone https://github.com/anthropics/knowledge-work-plugins && cp -r knowledge-work-plugins/partner-built/zoom-plugin/skills/websockets ~/.claude/skills/Which AI tools does Setup Zoom Websockets work with?
It works with claude_app, claude_code, claude_api, cursor, codex, windsurf, cline, zed.
Who made Setup Zoom Websockets?
Zoom, released under the MIT license.
Is Setup Zoom Websockets free?
Yes, it is free to use under the MIT license.
npx skills add prisma/skills
npx skills add prisma/skills
npx skills add prisma/skills
npx skills add stablyai/orca
npx skills add wind-alice/alicemarket
npx skills add stablyai/orca
Audit before you install
Run any source through our checks - AI visibility, security, performance, and stack detection.
Automated Web Security Scan
security
PageSpeed Analyzer
performance
AI Content Quality Test
arabic content
AI Agent / MCP Server Tester
ai testing
Site Stack Detector
migration
AI SEO / AEO / GEO Audit
ai visibility
llms.txt Generator
ai visibility
Readability Score
arabic content
Schema / JSON-LD Builder
ai visibility
AI Cost Calculator
ai testing
Headline Analyzer
arabic content