setup-zoom-webhooks — Claude Code skill: install
A reference for Zoom webhooks, covering subscriptions, signature checks, and event delivery. Use it when building an HTTP integration with Zoom.
npx skills add anthropics/knowledge-work-plugins --skill setup-zoom-webhooks -a claude-code
npx skills add anthropics/knowledge-work-plugins --skill webhooks -a claude-codeWhat setup-zoom-webhooks does
This skill covers Zoom event delivery over HTTP after an event-driven workflow has been selected. It explains subscriptions, event-type selection, signature verification, webhook handling, and delivery retries. The reference includes common events such as meetings starting or ending, participants joining, recordings becoming ready, and users being created.
The included Express.js example captures the raw request body, reads x-zm-signature and x-zm-request-timestamp, builds an HMAC SHA-256 value, and rejects an invalid signature. Supporting material covers event types, subscription APIs, URL validation, environment variables, and troubleshooting for retries and verification failures.
You need a Zoom app with Event Subscriptions enabled, an HTTPS endpoint, and a webhook secret token. For the reader, the raw-body requirement matters: re-serializing the JSON before verification can invalidate the signature.
What it helps with
- verify an incoming Zoom webhook signature
- select event types for a Zoom subscription
- receive events and return an HTTP response
- handle repeated webhook deliveries
- debug URL validation and signature failures
Example prompts for the agent
- Set up an `Express.js` Zoom webhook handler that checks `x-zm-signature` and `x-zm-request-timestamp`.
- Show how to subscribe to `recording.completed` and process a completed cloud recording.
- Investigate a failed Zoom webhook signature check and verify that the raw request body is preserved.
How to install setup-zoom-webhooks
1Skills CLI (Vercel)
npx skills add anthropics/knowledge-work-plugins --skill setup-zoom-webhooks -a claude-codenpx skills add anthropics/knowledge-work-plugins --skill webhooks -a claude-code2Manually: put the files in place
~/.claude/skills/webhooks/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/webhooks/
1Skills CLI (Vercel)
npx skills add anthropics/knowledge-work-plugins --skill webhooks -a codex2Manually: put the files in place
.agents/skills/webhooks/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add anthropics/knowledge-work-plugins --skill webhooks -a cursor2Manually: put the files in place
.cursor/skills/webhooks/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install anthropics/knowledge-work-plugins webhooks2Manually: put the files in place
.github/skills/webhooks/SKILL.md1Skills CLI (Vercel)
npx skills add anthropics/knowledge-work-plugins --skill webhooks -a gemini-cli2Platform CLI
gemini skills install https://github.com/anthropics/knowledge-work-plugins --path partner-built/zoom-plugin/skills/webhooksManually: put the files in place
.devin/skills/webhooks/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add anthropics/knowledge-work-plugins --skill webhooks -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set133
The whole set →Similar
Questions about setup-zoom-webhooks
How do I install setup-zoom-webhooks in Claude Code?
Run npx skills add anthropics/knowledge-work-plugins --skill setup-zoom-webhooks -a claude-code, then run npx skills add anthropics/knowledge-work-plugins --skill webhooks -a claude-code. The installed file is at ~/.claude/skills/webhooks/SKILL.md.
What does setup-zoom-webhooks do?
It documents Zoom webhook subscriptions, event selection, HMAC signature verification, and delivery handling. It also includes an Express.js handler example and reference material.
What do I need before using Zoom webhooks?
Prepare a Zoom app with Event Subscriptions enabled, an HTTPS endpoint that receives webhooks, and a webhook secret token for verification.
Source text
SKILL.md · Apache-2.0
---
name: setup-zoom-webhooks
description: 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.
triggers:
- "zoom webhook"
- "webhook signature"
- "x-zm-signature"
- "event subscription"
- "recording completed webhook"
---
# /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](../oauth/SKILL.md)** skill for OAuth setup.
## Quick Start
```javascript
// 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.started` | Meeting has started |
| `meeting.ended` | Meeting has ended |
| `meeting.participant_joined` | Participant joined meeting |
| `recording.completed` | Cloud recording ready |
| `user.created` | New user added |
## Detailed References
- **[references/events.md](references/events.md)** - Complete event types reference
- **[references/verification.md](references/verification.md)** - Webhook URL validation
- **[references/subscriptions.md](references/subscriptions.md)** - Event subscriptions API
## Troubleshooting
- **[RUNBOOK.md](RUNBOOK.md)** - 5-minute preflight checks before deep debugging
- **[troubleshooting/common-issues.md](troubleshooting/common-issues.md)** - Signature verification, retries, URL validation
## Sample Repositories
### Official (by Zoom)
| Type | Repository | Stars |
|------|------------|-------|
| Node.js | [webhook-sample](https://github.com/zoom/webhook-sample) | 34 |
| PostgreSQL | [webhook-to-postgres](https://github.com/zoom/webhook-to-postgres) | 5 |
| Go/Fiber | [Go-Webhooks](https://github.com/zoom/Go-Webhooks) | - |
| Header Auth | [zoom-webhook-verification-headers](https://github.com/zoom/zoom-webhook-verification-headers) | - |
### Community
| Language | Repository | Description |
|----------|------------|-------------|
| Laravel | [binary-cats/laravel-webhooks](https://github.com/binary-cats/laravel-webhooks) | Laravel webhook handler |
| AWS Lambda | [splunk/zoom-webhook-to-hec](https://github.com/splunk/zoom-webhook-to-hec) | Serverless to Splunk HEC |
| Node.js | [Will4950/zoom-webhook-listener](https://github.com/Will4950/zoom-webhook-listener) | Webhook forwarder |
| Express+Redis | [ojusave/eventSubscriptionPlayground](https://github.com/ojusave/eventSubscriptionPlayground) | Socket.io + Redis |
### Multi-Language Samples (by tanchunsiong)
| Language | Repository |
|----------|------------|
| Node.js | [Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-NodeJS](https://github.com/tanchunsiong/Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-NodeJS) |
| C# | [Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-ASP.NET-Core-C-](https://github.com/tanchunsiong/Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-ASP.NET-Core-C-) |
| Java | [Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-Java-Spring-Boot](https://github.com/tanchunsiong/Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-Java-Spring-Boot) |
| Python | [Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-Python](https://github.com/tanchunsiong/Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-Python) |
| PHP | [Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-PHP](https://github.com/tanchunsiong/Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-PHP) |
**Full list**: See [general/references/community-repos.md](../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](references/environment-variables.md) for standardized `.env` keys and where to find each value.
© anthropics · Apache-2.0 · anthropics/knowledge-work-plugins