PluginBench
Skill
Official
Pass
Audit score 90

setup-zoom-webhooks

anthropics/knowledge-work-plugins

Reference for implementing Zoom webhooks with signature verification and event subscriptions.

What is setup-zoom-webhooks?

This skill provides reference documentation for setting up Zoom event-driven webhooks over HTTPS. Use it after routing to an event workflow to implement webhook signature verification, subscription management, delivery handling, and event-type selection.

  • Verify webhook signatures using HMAC-SHA256 and x-zm-signature headers
  • Handle common Zoom events (meeting lifecycle, participant joins, recording completion, user creation)
  • Implement HTTPS endpoint configuration for webhook delivery
  • Manage event subscriptions and filtering
  • Implement retry and delivery handling patterns

How to install setup-zoom-webhooks

npx skills add https://github.com/anthropics/knowledge-work-plugins --skill setup-zoom-webhooks
Prerequisites
  • Zoom app with Event Subscriptions enabled
  • HTTPS endpoint to receive webhooks
  • Webhook secret token for signature verification
Claude Code
Cursor
Windsurf
Cline

How to use setup-zoom-webhooks

  1. 1.Set up an HTTPS endpoint (e.g., Express.js route) to receive POST requests
  2. 2.Extract x-zm-signature and x-zm-request-timestamp headers from incoming requests
  3. 3.Reconstruct the payload as v0:timestamp:body and compute HMAC-SHA256 hash using your webhook secret
  4. 4.Compare computed hash against the signature header; reject if mismatch
  5. 5.Parse the event type and payload from req.body and route to appropriate handler
  6. 6.Return HTTP 200 to acknowledge receipt; implement retry logic for transient failures

Use cases

Good for
  • Trigger automated workflows when Zoom meetings start, end, or participants join
  • Process cloud recordings automatically when recording.completed events fire
  • Log and audit Zoom user creation events in real-time
  • Build event-driven integrations that respond to Zoom meeting state changes
  • Validate webhook authenticity before processing events
Who it's for
  • Backend engineers building Zoom integrations
  • DevOps engineers setting up event-driven workflows
  • Full-stack developers implementing meeting automation
  • Integration architects designing Zoom-connected systems

setup-zoom-webhooks FAQ

How do I verify Zoom webhook signatures?

Extract the x-zm-signature and x-zm-request-timestamp headers, construct the payload as v0:timestamp:body, compute HMAC-SHA256 using your webhook secret, and compare the result against the signature header prefixed with v0=.

What events can I subscribe to?

Common events include meeting.started, meeting.ended, meeting.participant_joined, recording.completed, and user.created. See the complete event types reference in references/events.md.

Do I need OAuth for webhooks?

Webhooks use a separate secret token for verification, not OAuth. See the zoom-oauth skill if you need to authenticate API calls separately.

How should I handle webhook retries?

Zoom will retry failed deliveries. Always return HTTP 200 to acknowledge receipt, even if you process asynchronously. See troubleshooting/common-issues.md for retry patterns.

Can I test webhooks locally?

You need an HTTPS endpoint accessible from the internet. Use ngrok or similar tunneling tools to expose a local server, or deploy to a staging environment first.

Full instructions (SKILL.md)

Source of truth, from anthropics/knowledge-work-plugins.


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 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

EventDescription
meeting.startedMeeting has started
meeting.endedMeeting has ended
meeting.participant_joinedParticipant joined meeting
recording.completedCloud recording ready
user.createdNew user added

Detailed References

Troubleshooting

Sample Repositories

Official (by Zoom)

TypeRepositoryStars
Node.jswebhook-sample34
PostgreSQLwebhook-to-postgres5
Go/FiberGo-Webhooks-
Header Authzoom-webhook-verification-headers-

Community

LanguageRepositoryDescription
Laravelbinary-cats/laravel-webhooksLaravel webhook handler
AWS Lambdasplunk/zoom-webhook-to-hecServerless to Splunk HEC
Node.jsWill4950/zoom-webhook-listenerWebhook forwarder
Express+Redisojusave/eventSubscriptionPlaygroundSocket.io + Redis

Multi-Language Samples (by tanchunsiong)

LanguageRepository
Node.jsZoom-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-
JavaZoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-Java-Spring-Boot
PythonZoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-Python
PHPZoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-PHP

Full list: See general/references/community-repos.md

Resources

Environment Variables