New to Claude Skills? Learn how to install them →

anthropics on GitHub

Setup Zoom Webhooks

OfficialFree

Integrate Zoom event delivery into your applications.

Get this skill

Free · Opens the source repo

What Setup Zoom Webhooks does

The Setup Zoom Webhooks skill provides a comprehensive reference for implementing Zoom's event delivery system over HTTP. This skill is particularly useful for developers looking to handle various Zoom events such as meeting starts, participant joins, and recording completions through webhooks. By following the instructions provided, users can set up their applications to receive and verify webhook notifications from Zoom, ensuring that events are processed accurately and securely.

To get started, users need to have a Zoom app with Event Subscriptions enabled, an HTTPS endpoint to receive webhooks, and a webhook secret token for signature verification. The skill includes a quick start example using Express.js, demonstrating how to capture the raw body of incoming requests for signature verification. This is crucial for ensuring that the webhooks received are legitimate and not tampered with.

In addition to the quick start guide, the skill offers detailed references on common events, subscription management, and signature verification. This allows developers to understand the types of events they can subscribe to, how to validate incoming requests, and how to troubleshoot common issues that may arise during implementation. The provided common events table outlines key events such as when a meeting starts or ends, enabling developers to react appropriately within their applications.

Overall, this skill is designed for developers who need to integrate Zoom's webhook functionality into their applications, providing them with the necessary tools and references to do so effectively.

When to use it

Use this skill when you need to implement Zoom webhooks in your application to receive event notifications.

When not to use it

This skill may not be suitable if you are not working with Zoom's event-driven architecture or if you require a more complex event handling system beyond what is described.

What you can build with it

Setting Up a Webhook Receiver

Use this skill to quickly set up a webhook receiver for your application to handle Zoom events.

Validating Incoming Requests

Implement signature verification for incoming Zoom webhooks to ensure they are legitimate.

Handling Common Zoom Events

Subscribe to common Zoom events and implement logic to handle them in your application.

How to install Setup Zoom Webhooks

View source

1. Install with the skills CLI

npx skills add anthropics/knowledge-work-plugins/webhooks --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by anthropics

/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

Frequently asked questions about Setup Zoom Webhooks

Similar skills