Knowledge-work-plugins setup-zoom-webhooks
Reference skill for Zoom webhooks. Use after routing to an event-driven workflow when implementing subscriptions, signature verification, delivery handling, retries, or event-type selection.
install
source · Clone the upstream repo
git clone https://github.com/anthropics/knowledge-work-plugins
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/anthropics/knowledge-work-plugins "$T" && mkdir -p ~/.claude/skills && cp -r "$T/partner-built/zoom-plugin/skills/webhooks" ~/.claude/skills/anthropics-knowledge-work-plugins-setup-zoom-webhooks && rm -rf "$T"
manifest:
partner-built/zoom-plugin/skills/webhooks/SKILL.mdsource content
/setup-zoom-webhooks
Background reference for Zoom event delivery over HTTP. Prefer workflow skills first, then use this file for verification, subscription, and delivery details.
Prerequisites
- Zoom app with Event Subscriptions enabled
- HTTPS endpoint to receive webhooks
- Webhook secret token for verification
Need help with authentication? See the zoom-oauth skill for OAuth setup.
Quick Start
// Express.js webhook handler const crypto = require('crypto'); // Capture raw body for signature verification (avoid re-serializing JSON). app.use(require('express').json({ verify: (req, _res, buf) => { req.rawBody = buf; } })); app.post('/webhook', (req, res) => { // Verify webhook signature const signature = req.headers['x-zm-signature']; const timestamp = req.headers['x-zm-request-timestamp']; const body = req.rawBody ? req.rawBody.toString('utf8') : JSON.stringify(req.body); const payload = `v0:${timestamp}:${body}`; const hash = crypto.createHmac('sha256', WEBHOOK_SECRET) .update(payload).digest('hex'); if (signature !== `v0=${hash}`) { return res.status(401).send('Invalid signature'); } // Handle event const { event, payload } = req.body; console.log(`Received: ${event}`); res.status(200).send(); });
Common Events
| Event | Description |
|---|---|
| Meeting has started |
| Meeting has ended |
| Participant joined meeting |
| Cloud recording ready |
| New user added |
Detailed References
- references/events.md - Complete event types reference
- references/verification.md - Webhook URL validation
- references/subscriptions.md - Event subscriptions API
Troubleshooting
- RUNBOOK.md - 5-minute preflight checks before deep debugging
- troubleshooting/common-issues.md - Signature verification, retries, URL validation
Sample Repositories
Official (by Zoom)
| Type | Repository | Stars |
|---|---|---|
| Node.js | webhook-sample | 34 |
| PostgreSQL | webhook-to-postgres | 5 |
| Go/Fiber | Go-Webhooks | - |
| Header Auth | zoom-webhook-verification-headers | - |
Community
| Language | Repository | Description |
|---|---|---|
| Laravel | binary-cats/laravel-webhooks | Laravel webhook handler |
| AWS Lambda | splunk/zoom-webhook-to-hec | Serverless to Splunk HEC |
| Node.js | Will4950/zoom-webhook-listener | Webhook forwarder |
| Express+Redis | ojusave/eventSubscriptionPlayground | Socket.io + Redis |
Multi-Language Samples (by tanchunsiong)
Full list: See general/references/community-repos.md
Resources
- Webhook docs: https://developers.zoom.us/docs/api/webhooks/
- Event reference: https://developers.zoom.us/docs/api/rest/reference/zoom-api/events/
- Developer forum: https://devforum.zoom.us/
Environment Variables
- See references/environment-variables.md for standardized
keys and where to find each value..env