Zoom Meetings
Let an agent schedule and manage Zoom meetings: list a user's upcoming meetings, create, reschedule or cancel meetings, manage registrants, and see who attended a past meeting. Based on the Zoom API specification.
Connect this API to an AI agent Browse all specs
What you can do with Zoom Meetings 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} |
getUser | Get a Zoom user's profile and time zone (use me for the token owner) |
| GET | /users/{userId}/meetings |
listMeetings | List a user's scheduled, live or upcoming meetings |
| POST | /users/{userId}/meetings |
createMeeting | Schedule a new meeting for a user |
| GET | /meetings/{meetingId} |
getMeeting | Get a meeting's details, join link and settings |
| PATCH | /meetings/{meetingId} |
updateMeeting | Reschedule a meeting or change its topic, duration or settings |
| DELETE | /meetings/{meetingId} |
deleteMeeting | Cancel (delete) a scheduled meeting |
| GET | /meetings/{meetingId}/registrants |
listMeetingRegistrants | List people registered for a meeting |
| POST | /meetings/{meetingId}/registrants |
addMeetingRegistrant | Register a person for a meeting (returns their join link) |
| GET | /past_meetings/{meetingUUID} |
getPastMeeting | Get details of a meeting that has ended |
| GET | /past_meetings/{meetingUUID}/participants |
listPastMeetingParticipants | List who attended a past meeting |
Authentication
bearerAuth
Bearer token — sent as Authorization: Bearer <token>
Zoom API calls use an OAuth access token sent as Authorization: Bearer <token>.
How to get a credential
- Go to https://marketplace.zoom.us, choose Develop > Build App and create a Server-to-Server OAuth app (account admin or a role with that permission is required).
- Copy the Account ID, Client ID and Client Secret.
- Under Scopes, add the scopes in the table below, then Activate the app.
- Get a token:
POST https://zoom.us/oauth/token?grant_type=account_credentials&account_id=<Account ID>with HTTP Basic authClient ID:Client Secret. Theaccess_tokenis valid for 1 hour; request a new one when it expires.
Permissions used
| Scope (classic / granular) | Operations |
|---|---|
user:read:admin / user:read:user:admin |
getUser |
meeting:read:admin / meeting:read:meeting:admin, meeting:read:list_meetings:admin, meeting:read:list_registrants:admin |
listMeetings, getMeeting, listMeetingRegistrants |
meeting:write:admin / meeting:write:meeting:admin, meeting:update:meeting:admin, meeting:delete:meeting:admin, meeting:write:registrant:admin |
createMeeting, updateMeeting, deleteMeeting, addMeetingRegistrant |
meeting:read:admin / meeting:read:past_meeting:admin, meeting:read:list_past_participants:admin |
getPastMeeting, listPastMeetingParticipants |
Common errors
- 401 / code 124
Invalid access token: the token expired (1 hour) or was copied wrong; generate a new one. - 400 / code 4711 or 4700
Invalid access token, does not contain scopes: add the missing scope to the app and get a new token. - 404 / code 1001
User does not existor 3001Meeting does not exist: wronguserId(use an email, user id orme) or meeting id. - 400 / code 300: invalid field, e.g. a
start_timenot inyyyy-MM-ddTHH:mm:ssformat. - 429: rate limit (meeting create/update is limited per user per day); slow down.
Store the access token as a VX Agents credential (bearer token) and attach it to the agent; never paste it into chat.
Usage guide
Setup
- Connect a Zoom Server-to-Server OAuth access token (see the authentication section). It expires after 1 hour, so refresh the credential when calls return code 124.
- Preset
userId:mefor the token owner, or the email of the host whose calendar the agent manages (Server-to-Server tokens can act for any user in the account). - Call
getUseronce to learn the host'stimezone, and use it for all times you show the user.
Schedule a meeting
listMeetingswithtype=upcomingto check the host's existing meetings and avoid clashes (setpage_size, follownext_page_token).- Confirm topic, date, time, duration and time zone with the user.
createMeetingwithtopic,type: 2(scheduled),start_time(2026-10-20T15:00:00),timezone(Asia/Ho_Chi_Minh),durationin minutes, optionalagendaandsettings(waiting_room,join_before_host,auto_recording,approval_type: 0for automatic registration).- Share the
join_urlfrom the response. Never sharestart_url(it logs in as the host).
Change or cancel
getMeetingto read the current details;updateMeetingwith only the fields that change (returns 204 with no body).deleteMeetingcancels the meeting for everyone; setcancel_meeting_reminder=trueto email registrants. Ask the user first.- Recurring meetings: pass
occurrence_idto change or cancel a single occurrence.
Registrants and attendance
addMeetingRegistrant(email,first_name,last_name) returns that person's ownjoin_url; registration must be enabled on the meeting (settings.approval_type0 or 1).listMeetingRegistrantswithstatus=pending|approved|denied.- After the meeting ends:
getPastMeetingandlistPastMeetingParticipantswith the meetinguuid. If the UUID starts with/or contains//, URL-encode it twice.
Good to know
- Meeting ids are numbers (e.g.
85746065432); past-meeting endpoints take the UUID (e.g.aDYlohsHRtCd4ii1uC2+hA==). start_timewithoutZis read intimezone; withZit is UTC.- Creating, rescheduling or cancelling meetings notifies attendees: confirm with the user before calling.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “Zoom Meetings” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.