Zoom Webinars & Registrants
Who signed up, who got approved, and who actually showed? Run Zoom webinars end to end: schedule or edit a webinar, add and approve registrants, read the registration questions and tracking sources behind each sign-up, then pull past participants, absentees and the attendance report for follow-up.
Connect this API to an AI agent Browse all specs
What you can do with Zoom Webinars & Registrants via MCP
Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.
| Method | Path | Operation | Description |
|---|---|---|---|
| GET | /users/{userId}/webinars |
listWebinars | List a host's scheduled or upcoming webinars |
| POST | /users/{userId}/webinars |
createWebinar | Schedule a new webinar for a host |
| GET | /webinars/{webinarId} |
getWebinar | Get a webinar's time, agenda, join and registration links |
| PATCH | /webinars/{webinarId} |
updateWebinar | Change a webinar's topic, time, agenda or settings |
| GET | /webinars/{webinarId}/registrants |
listRegistrants | List registrants by status (pending, approved, denied) |
| POST | /webinars/{webinarId}/registrants |
addRegistrant | Register a person for a webinar |
| GET | /webinars/{webinarId}/registrants/{registrantId} |
getRegistrant | Get one registrant's answers and join link |
| PUT | /webinars/{webinarId}/registrants/status |
updateRegistrantStatus | Approve, deny or cancel registrants |
| GET | /webinars/{webinarId}/registrants/questions |
listRegistrationQuestions | See the questions asked on the registration form |
| GET | /webinars/{webinarId}/tracking_sources |
listTrackingSources | See which tracking links brought in registrations |
| GET | /past_webinars/{webinarId}/instances |
listPastWebinarInstances | List the past sessions of a webinar |
| GET | /past_webinars/{webinarId}/participants |
listPastParticipants | List who attended a past webinar |
| GET | /past_webinars/{webinarId}/absentees |
listAbsentees | List registrants who did not attend |
| GET | /report/webinars/{webinarId}/participants |
getAttendanceReport | Attendance report with join and leave times per participant |
Authentication
zoom_oauth
OAuth 2.0
Scopes: webinar:read:list_webinars webinar:read:webinar webinar:write:webinar webinar:update:webinar webinar:read:list_registrants webinar:read:registrant webinar:read:list_registration_questions webinar:read:list_tracking_sources webinar:write:registrant webinar:update:registrant_status webinar:read:list_past_instances webinar:read:list_past_participants webinar:read:list_absentees report:read:list_webinar_participants:admin
Zoom OAuth 2.0 (authorization code) for a user-managed Zoom app.
How to get a credential
- Sign in to the Zoom App Marketplace (https://marketplace.zoom.us) and choose Develop > Build App > General App.
- Set it to User-managed, and add the VX Agents OAuth redirect URL shown on the credential form.
- Under Scopes, add the webinar and report scopes in the table below.
- Copy the Client ID and Client Secret into a VX Agents OAuth2 credential and sign in with the Zoom user who hosts the webinars. The host needs a Zoom Webinars license; the report scope also needs a Pro or higher account and report access.
Permissions used
| Scope | Operations |
|---|---|
webinar:read:list_webinars, webinar:read:webinar |
listWebinars, getWebinar |
webinar:write:webinar, webinar:update:webinar |
createWebinar, updateWebinar |
webinar:read:list_registrants, webinar:read:registrant, webinar:read:list_registration_questions, webinar:read:list_tracking_sources |
listRegistrants, getRegistrant, listRegistrationQuestions, listTrackingSources |
webinar:write:registrant, webinar:update:registrant_status |
addRegistrant, updateRegistrantStatus |
webinar:read:list_past_instances, webinar:read:list_past_participants, webinar:read:list_absentees |
listPastWebinarInstances, listPastParticipants, listAbsentees |
report:read:list_webinar_participants:admin |
getAttendanceReport |
Common errors
| Status | Meaning | Fix |
|---|---|---|
| 401 | Token expired or revoked | Reconnect the credential; access tokens last one hour and are refreshed automatically. |
| 403 | Scope missing or no Webinars license | Add the scope above to the app and reconnect; check the host has a Webinars license. |
| 404 | Webinar or registrant not found | Use ids from listWebinars / listRegistrants; past-webinar calls need a webinar that has ended. |
| 400 | Bad field or registration closed | Check required fields (email, first_name) and that registration is enabled. |
| 429 | Rate limit | Wait and retry; report calls have lower daily limits. |
Store it as a VX Agents OAuth2 credential.
Usage guide
Setup
- Connect a Zoom OAuth2 credential (user-managed General App) with the webinar scopes, signed in as the webinar host. The host needs a Zoom Webinars license.
- Pin
userIdtomefor the signed-in host (or a host's email / user id if the app is admin-managed).
Run a webinar campaign
listWebinars(type=scheduledorupcoming) to find the webinar;getWebinarfor its time,registration_urlandsettings.approval_type.- To schedule one, confirm topic, start time, time zone and duration with the user, then
createWebinar(type5 = one-time,start_timeISO 8601,settings.approval_type0 automatic / 1 manual).updateWebinarchanges only the fields you send. listRegistrationQuestionsshows the form fields;listRegistrantswithstatus=pendinglists people awaiting approval;getRegistrantshows one person's answers.- To approve or deny, confirm the list with the user, then
updateRegistrantStatuswith{"action": "approve", "registrants": [{"id": "..."}]}(denyandcancelalso work). Zoom emails each registrant. - To sign someone up, confirm, then
addRegistrantwith at leastemailandfirst_nameplus any required questions; the response has theirjoin_url. listTrackingSourcesshows registrations and visits per tracking link.
After the webinar
listPastWebinarInstancesgives each session'suuid(use it aswebinarIdfor a single occurrence of a recurring webinar).listPastParticipantslists who joined;listAbsenteeslists registrants who did not, ready for a follow-up list.getAttendanceReportadds join and leave times and duration per person (needs the report scope).
Good to know
- Webinar ids are numbers; a past-instance
uuidthat starts with/or contains//must be double URL-encoded. - Times are ISO 8601;
start_timewithoutZuses the webinar'stimezone. - Past-webinar and report data appear only after the session ends and may lag by a few minutes; reports keep about 12 months.
- Lists page with
next_page_token(page_sizeup to 300). - Creating webinars and changing registrant status send emails: always confirm first. Deleting webinars or registrants is not part of this spec.
Source: Zoom Meetings API reference, Webinars and Reports sections (https://developers.zoom.us/docs/api/meetings/), checked 2026-10-20.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “Zoom Webinars & Registrants” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.