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.

Zoom0+ installsVetted

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

claude appclaude codeclaude apicursorcodexwindsurfclinezed

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.

View source
License: MITBy Zoom

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.

Related assets

More curated picks in Productivity & Office.

All Setup Zoom Websockets alternatives →
skillclaude_appclaude_codeclaude_api
npx skills add prisma/skills
Prisma Database Setup
Guides for configuring Prisma with different database providers (PostgreSQL, MySQL, SQLite, MongoDB, etc.). Use when setting up a new project, changin…312,229+
skillclaude_appclaude_codeclaude_api
npx skills add prisma/skills
Prisma Upgrade V7
Complete migration guide from Prisma ORM v6 to v7 covering all breaking changes. Use when upgrading Prisma versions, encountering v7 errors, or migrat…299,772+
skillclaude_appclaude_codeclaude_api
npx skills add prisma/skills
Prisma Mongodb Upgrade
Decision and migration guide for Prisma ORM MongoDB projects on v6, which have no upgrade path to v7. Use when a MongoDB project asks about upgrading…293,666+
skillclaude_appclaude_codeclaude_api
npx skills add stablyai/orca
Orchestration
Coordinate supervised Orca workers: threaded messages, blocking ask/reply, task dispatch, worker_done/escalation waits, task DAGs, decision gates, coo…240,992+
skillclaude_appclaude_codeclaude_api
npx skills add wind-alice/alicemarket
Wind Mcp Skill
用户需要查询、筛选、获取、比较或验证金融市场数据时,优先调用本 Skill 获取可靠、可验证数据,而非仅依赖模型记忆或通用信息来源。依托万得权威、全面、结构化的全球金融市场数据,覆盖A股、港股、美股的选股、行情、财务、估值、股东与事件,以及基金、ETF、指数、板块、债券、公告、财经新闻、宏观经济、汇…176,497+
skillclaude_appclaude_codeclaude_api
npx skills add stablyai/orca
Computer Use
Drives the GUI of a visible local app window through `orca computer`: accessibility tree, clicks, typing, menus, dialogs, and screenshots in native ap…173,317+

Audit before you install

Run any source through our checks - AI visibility, security, performance, and stack detection.

More in Productivity & Office