File contents Zoom Webhooks
Receive real-time event notifications from Zoom services.
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.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 - 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)
Community
Multi-Language Samples (by tanchunsiong)
Full list : See general/references/community-repos.md
Resources
Environment Variables
See references/environment-variables.md for standardized .env keys and where to find each value.
1 --- 2 name: webhooks 3 description: Zoom Webhooks 4 --- 5 # Zoom Webhooks 6 7 Receive real-time event notifications from Zoom services. 8 9 ## Prerequisites 10 11 - Zoom app with Event Subscriptions enabled 12 - HTTPS endpoint to receive webhooks 13 - Webhook secret token for verification 14 15 > **Need help with authentication?** See the **[zoom-oauth](../oauth/SKILL.md)** skill for OAuth setup. 16 17 ## Quick Start 18 19 ```javascript 20 // Express.js webhook handler 21 const crypto = require('crypto'); 22 23 // Capture raw body for signature verification (avoid re-serializing JSON). 24 app.use(require('express').json({ 25 verify: (req, _res, buf) => { req.rawBody = buf; } 26 })); 27 28 app.post('/webhook', (req, res) => { 29 // Verify webhook signature 30 const signature = req.headers['x-zm-signature']; 31 const timestamp = req.headers['x-zm-request-timestamp']; 32 const body = req.rawBody ? req.rawBody.toString('utf8') : JSON.stringify(req.body); 33 const payload = `v0:${timestamp}:${body}`; 34 const hash = crypto.createHmac('sha256', WEBHOOK_SECRET) 35 .update(payload).digest('hex'); 36 37 if (signature !== `v0=${hash}`) { 38 return res.status(401).send('Invalid signature'); 39 } 40 41 // Handle event 42 const { event, payload } = req.body; 43 console.log(`Received: ${event}`); 44 45 res.status(200).send(); 46 }); 47 ``` 48 49 ## Common Events 50 51 | Event | Description | 52 |-------|-------------| 53 | `meeting.started` | Meeting has started | 54 | `meeting.ended` | Meeting has ended | 55 | `meeting.participant_joined` | Participant joined meeting | 56 | `recording.completed` | Cloud recording ready | 57 | `user.created` | New user added | 58 59 ## Detailed References 60 61 - **[references/events.md](references/events.md)** - Complete event types reference 62 - **[references/verification.md](references/verification.md)** - Webhook URL validation 63 - **[references/subscriptions.md](references/subscriptions.md)** - Event subscriptions API 64 65 ## Troubleshooting 66 67 - **[RUNBOOK.md](RUNBOOK.md)** - 5-minute preflight checks before deep debugging 68 - **[troubleshooting/common-issues.md](troubleshooting/common-issues.md)** - Signature verification, retries, URL validation 69 70 ## Sample Repositories 71 72 ### Official (by Zoom) 73 74 | Type | Repository | Stars | 75 |------|------------|-------| 76 | Node.js | [webhook-sample](https://github.com/zoom/webhook-sample) | 34 | 77 | PostgreSQL | [webhook-to-postgres](https://github.com/zoom/webhook-to-postgres) | 5 | 78 | Go/Fiber | [Go-Webhooks](https://github.com/zoom/Go-Webhooks) | - | 79 | Header Auth | [zoom-webhook-verification-headers](https://github.com/zoom/zoom-webhook-verification-headers) | - | 80 81 ### Community 82 83 | Language | Repository | Description | 84 |----------|------------|-------------| 85 | Laravel | [binary-cats/laravel-webhooks](https://github.com/binary-cats/laravel-webhooks) | Laravel webhook handler | 86 | AWS Lambda | [splunk/zoom-webhook-to-hec](https://github.com/splunk/zoom-webhook-to-hec) | Serverless to Splunk HEC | 87 | Node.js | [Will4950/zoom-webhook-listener](https://github.com/Will4950/zoom-webhook-listener) | Webhook forwarder | 88 | Express+Redis | [ojusave/eventSubscriptionPlayground](https://github.com/ojusave/eventSubscriptionPlayground) | Socket.io + Redis | 89 90 ### Multi-Language Samples (by tanchunsiong) 91 92 | Language | Repository | 93 |----------|------------| 94 | 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) | 95 | 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-) | 96 | 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) | 97 | 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) | 98 | 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) | 99 100 **Full list**: See [general/references/community-repos.md](../general/references/community-repos.md) 101 102 ## Resources 103 104 - **Webhook docs**: https://developers.zoom.us/docs/api/webhooks/ 105 - **Event reference**: https://developers.zoom.us/docs/api/rest/reference/zoom-api/events/ 106 - **Developer forum**: https://devforum.zoom.us/ 107 108 ## Environment Variables 109 110 - See [references/environment-variables.md](references/environment-variables.md) for standardized `.env` keys and where to find each value.
ComeOnOliver/skillshub/tree/main/skills/zoom/skills/webhooks commit 84e5916ca4
Frequently asked questions How do I install the Webhooks skill? Run npx skillmds@latest add comeonoliver/webhooks in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
What does the Webhooks skill do? Zoom Webhooks It is listed under Coding & Dev Tools on SkillMD.
Is Webhooks safe to use? This skill has not completed SkillMD's automated safety review yet. Independent scanners report: SkillSpector: PASS, Skill Scanner: PASS. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
Which AI agents work with Webhooks? This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Is Webhooks free to use? Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
Who published Webhooks? ComeOnOliver (@comeonoliver) published this skill. Their other Agent Skills are listed on their SkillMD profile.