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.
Security Assessment
About setup-zoom-webhooks
This is a background reference skill for implementing Zoom event delivery over HTTP webhooks. It addresses the practical work of receiving, verifying, and handling Zoom events reliably, covering subscriptions, HMAC signature verification, delivery handling, retries, and event-type selection. It is meant to be consulted after a workflow skill has routed the developer to an event-driven approach.
The skill provides a quick-start Express.js handler that captures the raw request body and verifies the x-zm-signature header by computing an HMAC-SHA256 over a v0:timestamp:body payload using a webhook secret token, rejecting mismatches with a 401. It documents common event types (meeting.started, meeting.ended, participant joined, recording.completed, user.created), how to configure subscriptions both through the Zoom Marketplace portal and programmatically via the Webhook Subscriptions API, and skill-chaining patterns that combine REST API calls with event-driven flows. Supporting reference files cover environment variables (ZOOM_WEBHOOK_SECRET and aliases stored server-side only), full event catalogs, URL validation, and troubleshooting, plus a curated list of official and community sample repositories across Node.js, Go, PHP, Java, Python, C#, and more.
It targets backend developers and integrators building Zoom automations such as real-time meeting tracking, automated recording pipelines, and user lifecycle management. The signature-verification and secret-handling guidance is security-conscious, recommending keeping the webhook secret in server-side secret storage.
FAQ
What are the prerequisites?
A Zoom app with Event Subscriptions enabled, a publicly accessible HTTPS endpoint to receive webhooks, and a webhook secret token for signature verification.
How does it verify webhook authenticity?
It computes an HMAC-SHA256 over a v0:timestamp:raw-body payload using the webhook secret and compares it against the x-zm-signature header, returning 401 on mismatch. It captures the raw body to avoid re-serializing JSON.
How do I configure which events I receive?
Either through the Zoom Marketplace portal under Feature then Event Subscriptions, or programmatically via the Webhook Subscriptions API (POST/GET/PATCH /webhooks/options) with a notification endpoint URL and an events array.
Where should the webhook secret be stored?
In server-side secret storage only, using ZOOM_WEBHOOK_SECRET (or the WEBHOOK_SECRET_TOKEN alias); the legacy verification token is only for older app configs.
Are there sample implementations?
Yes. It links official Zoom samples (Node.js, PostgreSQL, Go, header-auth) plus community and multi-language samples across Laravel, AWS Lambda, C#, Java, Python, and PHP.
Install setup-zoom-webhooks
Quick Setup:
- Copy the skill folder to
.claude/skills/ - Claude will automatically detect and use the skill
Repository
anthropics/knowledge-work-plugins