mcpField
S
setup-zoom-webhooks

setup-zoom-webhooks

github.com/anthropicsDevelopment33.6k2.1k installsUpdated 1d ago
Repository

About setup-zoom-webhooks

A reference skill for Zoom developers implementing HTTP event delivery through webhooks. It covers endpoint prerequisites, verification, subscriptions, and common event types.

Key features

  1. 01Webhook prerequisites
  2. 02Event type reference
  3. 03Endpoint verification guidance
  4. 04Event subscription reference
  5. 05Signature and retry troubleshooting

Use cases

  1. 01Receive meeting start and end notifications
  2. 02Handle participant-joined events
  3. 03Trigger follow-up work when a recording completes
  4. 04Respond to Zoom user creation events

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/anthropics/knowledge-work-plugins --skill setup-zoom-webhooks

After installing, type/setup-zoom-webhooksin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

RUNBOOK.md
references/
environment-variables.md
events.md
signature-verification.md
subscriptions.md
verification.md
troubleshooting/
common-issues.md

Details

From the project README

/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

Comments

Markdown supported