anthropics/knowledge-work-plugins8 files

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.

Specification
Skill ID
anthropics/knowledge-work-plugins/setup-zoom-webhooks
Publisher
anthropics
Repository
knowledge-work-plugins
Installs
0
Files
8
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

anthropics/knowledge-work-plugins/setup-zoom-webhooksInstalls these files
  • RUNBOOK.md
  • SKILL.md
  • references/environment-variables.md
  • references/events.md
  • references/signature-verification.md
  • references/subscriptions.md
  • references/verification.md
  • troubleshooting/common-issues.md

What this skill tells the agent

/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](../oauth/SKILL.md) 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

  • [references/events.md](references/events.md) - Complete event types reference
  • [references/verification.md](references/verification.md) - Webhook URL validation
  • [references/subscriptions.md](references/subscriptions.md) - Event subscriptions API

Troubleshooting

  • [RUNBOOK.md](RUNBOOK.md) - 5-minute preflight checks before deep debugging
  • [troubleshooting/common-issues.md](troubleshooting/common-issues.md) - Signature verification, retries, URL validation

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)

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

Resources

  • Webhook docs: https://developers.zoom.us/docs/api/webhooks/
  • Event reference: https://developers.zoom.us/docs/api/rest/reference/zoom-api/events/
  • Developer forum: https://devforum.zoom.us/

Environment Variables

  • See references/environment-variables.md for standardized .env keys and where to find each value.

Use this skill in a project

Open any RiverX project, search the Skills panel for anthropics/knowledge-work-plugins/setup-zoom-webhooks, and install it in one click.

Use this skill