Help us improve
Share bugs, ideas, or general feedback.
From zoom-plugin
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.
npx claudepluginhub anthropics/claude-plugins-official --plugin zoom-pluginHow this skill is triggered — by the user, by Claude, or both
Slash command
/zoom-plugin:webhooksThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Background reference for Zoom event delivery over HTTP. Prefer workflow skills first, then use this file for verification, subscription, and delivery details.
Guides technical evaluation of code review feedback: read fully, restate for understanding, verify against codebase, respond with reasoning or pushback before implementing.
Share bugs, ideas, or general feedback.
Background reference for Zoom event delivery over HTTP. Prefer workflow skills first, then use this file for verification, subscription, and delivery details.
Need help with authentication? See the zoom-oauth skill for OAuth setup.
// 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();
});
| 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 |
| Type | Repository | Stars |
|---|---|---|
| Node.js | webhook-sample | 34 |
| PostgreSQL | webhook-to-postgres | 5 |
| Go/Fiber | Go-Webhooks | - |
| Header Auth | zoom-webhook-verification-headers | - |
| 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 |
Full list: See general/references/community-repos.md
.env keys and where to find each value.