Everything an AI agent can do with the Zoom API.

A reference guide for building AI agents: every method, how to authenticate, and the permissions each one needs.

Endpoints25
API versionv2
Last updated23 June 2026
Orientation

How the Zoom API works.

The Zoom API is how an app or AI agent works with a Zoom account: scheduling a meeting, listing and updating meetings, ending a running one, reading cloud recordings and transcripts, and pulling reports on who attended. Access is granted through an OAuth access token, and a set of scopes decides which areas a call can read or write and how far across the account it reaches. Zoom can also push events, like a meeting starting or a recording finishing, to a registered endpoint.

25Endpoints
6Capability groups
13Read
12Write
25Permissions
Authentication
Every call carries a one-hour OAuth access token sent as 'Authorization: Bearer '. A Server-to-Server OAuth app fetches its own token with the account_credentials grant, with no user login or refresh token, and an administrator authorizes its scopes. A user-managed OAuth app uses the authorization-code flow, where a Zoom user consents and the app receives an access token plus a refresh token to renew it. Zoom retired its older JWT app type, so OAuth is the path for new integrations.
Permissions
Each method requires a specific OAuth scope. Zoom now uses granular scopes, named resource:action:object, such as meeting:read:meeting to read a meeting, meeting:write:meeting to create one, cloud_recording:read:recording for recordings, and report:read:list_meeting_participants for participant reports. These replace the older classic scopes like meeting:read and meeting:write. An :admin suffix, such as meeting:read:list_meetings:admin, lets a call reach any user on the account rather than only the token's own user. A request that lacks the needed scope is rejected and names the missing scope.
Versioning
The REST API is version 2, served from a single current version rather than dated snapshots. Zoom ships new methods, scope changes, and deprecations through its developer changelog, so an integration tracks the changelog rather than pinning a version. The move from classic to granular scopes is the largest recent change, with a migration path for existing apps.
Data model
The API is resource-oriented JSON over HTTPS at https://api.zoom.us/v2. Core resources are meetings and webinars, which belong to a user, plus users, cloud recordings, and reports. A meeting is identified by a numeric meeting ID, while recording and report calls also accept a meeting UUID for a specific past instance. Lists page with a next_page_token, and Zoom can push events such as meeting.started and recording.completed to a webhook.
Connect & authenticate

Connection & authentication methods.

How an app or AI agent connects to Zoom determines what it can reach. There is a route for an internal app that authenticates with its own credentials, a route for an app that acts on behalf of a Zoom user, a hosted server that exposes Zoom tools to agents, and an event stream, each governed by the access token behind it and the scopes that token carries.

Ways to connect

Server-to-Server OAuth

An internal app authenticates with its own credentials and the account_credentials grant, with no user login, redirect, or refresh token. An account administrator authorizes the scopes the app may use. The access token lasts one hour and is fetched again when it expires.

Best forConnecting an app or AI agent to its own Zoom account.
Governed byThe access token and the scopes the administrator granted.
Docs ↗

OAuth 2.0 (user-authorized)

A user-managed app sends a Zoom user through the standard OAuth 2.0 authorization-code flow to consent to a set of scopes. The app exchanges the code for an access token, valid for one hour, plus a refresh token to renew it. The token acts on behalf of that user.

Best forConnecting an app or AI agent to Zoom accounts it does not own.
Governed byThe access token and the scopes the user consented to.
Docs ↗

MCP server (Model Context Protocol)

Zoom's hosted Model Context Protocol server at https://mcp.zoom.us/mcp/zoom/streamable exposes Zoom meetings, recordings, transcripts, summaries, and assets to AI agents, with focused servers for Docs and Whiteboard alongside it. It authenticates with an OAuth access token sent as a Bearer token, scoped the same way as the REST API.

Best forConnecting an AI agent to Zoom through MCP.
Governed byThe OAuth access token and the scopes it carries.
Docs ↗

Webhooks

Zoom POSTs an event to an HTTPS endpoint registered on an app for the chosen events. The receiver validates each delivery against the app's secret token to confirm it came from Zoom. An app can hold up to 20 event subscriptions, and each event still requires the matching read scope.

Best forReceiving Zoom events at an app or AI agent.
Governed byThe app's secret token and the scopes on the events.
Docs ↗
Authentication

Server-to-Server OAuth

An internal app fetches an access token with its account ID, client ID, and client secret using the account_credentials grant. There is no user login, redirect, or refresh token, and an administrator authorizes the available scopes. The token lasts one hour.

TokenOAuth access token (account_credentials grant)
Best forServer-side access to the app's own account
Docs ↗

OAuth 2.0 (user-managed)

A published or user-managed app uses the authorization-code flow, where a Zoom user consents to scopes in a browser. The app receives an access token valid for one hour and a refresh token to renew it, and the token acts as that user.

TokenOAuth access token plus refresh token
Best forActing on behalf of Zoom users on other accounts
Docs ↗
Endpoint reference

Every Zoom API method.

Filter by method, access, or permission, or search any path. Select a row for version detail, rate limits, the related webhook event, and the source.

MethodEndpointWhat it doesAccessPermissionVersion

Meetings

List, create, read, update, and delete a user's meetings, and end a running meeting.6

Classic scope: meeting:read. The :admin variant (meeting:read:list_meetings:admin) lists meetings for any user on the account.

Acts onmeeting
Permission (capability)meeting:read:list_meetings
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitMedium

Classic scope: meeting:write. Counted against the limit of 100 meeting create or update requests per user per day.

Acts onmeeting
Permission (capability)meeting:write:meeting
VersionAvailable since the API’s base version
Webhook eventmeeting.created
Rate limitMedium

Classic scope: meeting:read.

Acts onmeeting
Permission (capability)meeting:read:meeting
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitLight

Classic scope: meeting:write. Counted against the limit of 100 meeting create or update requests per user per day.

Acts onmeeting
Permission (capability)meeting:update:meeting
VersionAvailable since the API’s base version
Webhook eventmeeting.updated
Rate limitMedium

Classic scope: meeting:write. Only one delete can run at a time per user. A meeting in progress cannot be deleted.

Acts onmeeting
Permission (capability)meeting:delete:meeting
VersionAvailable since the API’s base version
Webhook eventmeeting.deleted
Rate limitLight

Classic scope: meeting:write. The only supported action is end; the call returns 204 No Content on success.

Acts onmeeting
Permission (capability)meeting:update:status
VersionAvailable since the API’s base version
Webhook eventmeeting.ended
Rate limitLight

Meeting registrants

List a meeting's registrants, add a registrant, and approve, deny, or cancel registrations.3

Classic scope: meeting:read. Registrant records include names and email addresses.

Acts onregistrant
Permission (capability)meeting:read:list_registrants
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitLight

Classic scope: meeting:write. Adds a real person to the meeting and can trigger a confirmation email.

Acts onregistrant
Permission (capability)meeting:write:registrant
VersionAvailable since the API’s base version
Webhook eventmeeting.registration_created
Rate limitLight

Granular scope: meeting:update:registrant_status. Classic scope: meeting:write. The action is approve, deny, or cancel.

Acts onregistrant
Permission (capability)meeting:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitLight

Webinars

List, create, read, update, and delete webinars, and manage their registrants.7

Classic scope: webinar:read. Webinars require a paid Zoom Webinars plan on the host's account.

Acts onwebinar
Permission (capability)webinar:read:list_webinars
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitMedium

Classic scope: webinar:write. Requires a Zoom Webinars plan on the host's account.

Acts onwebinar
Permission (capability)webinar:write:webinar
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitMedium

Classic scope: webinar:read.

Acts onwebinar
Permission (capability)webinar:read:webinar
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitLight

Classic scope: webinar:write.

Acts onwebinar
Permission (capability)webinar:update:webinar
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitLight

Classic scope: webinar:write.

Acts onwebinar
Permission (capability)webinar:delete:webinar
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitLight

Classic scope: webinar:read. Registrant records include names and email addresses.

Acts onregistrant
Permission (capability)webinar:read:list_registrants
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitLight

Classic scope: webinar:write. Adds a real person and can trigger a confirmation email.

Acts onregistrant
Permission (capability)webinar:write:registrant
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitLight

Users

List the users on an account, read a single user's profile, and create a user.3

Classic scope: user:read:admin. Returns names and email addresses for users on the account.

Acts onuser
Permission (capability)user:read:list_users
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitMedium

Classic scope: user:read. Returns the user's ID and email address.

Acts onuser
Permission (capability)user:read:user
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitLight

Classic scope: user:write:admin. Creates a real account and can send an activation email.

Acts onuser
Permission (capability)user:write:user
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitMedium

Cloud recordings

List a user's cloud recordings, read a meeting's recordings, and delete a meeting's recordings.3

Granular scope: cloud_recording:read:list_user_recordings. Classic scope: recording:read. Cloud recording requires a paid plan with cloud recording enabled.

Acts onrecording
Permission (capability)recording:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitMedium

Classic scope: recording:read. The response holds download URLs for the recording files.

Acts onrecording
Permission (capability)cloud_recording:read:recording
VersionAvailable since the API’s base version
Webhook eventrecording.completed
Rate limitHeavy

Granular scope: cloud_recording:delete:meeting_recording. Classic scope: recording:write. The action can move files to trash or delete permanently.

Acts onrecording
Permission (capability)recording:write
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitHeavy

Reports

Read a user's past meetings, a meeting's detail report, and the list of participants in a past meeting.3

Classic scope: report:read:admin. Reports require a Pro or higher plan.

Acts onreport
Permission (capability)report:read:list_meetings
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitHeavy

Classic scope: report:read:admin. Reports require a Pro or higher plan.

Acts onreport
Permission (capability)report:read:meeting
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitHeavy

Granular scope: report:read:list_meeting_participants. Classic scope: report:read:admin. Returns participant display names and, for users on the account, email addresses.

Acts onreport
Permission (capability)report:read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitHeavy
No endpoints match those filters.
Webhooks

Webhook events.

Zoom can notify an app or AI agent when something happens in an account, like a meeting starting, a participant joining, or a cloud recording finishing. Zoom posts the event to a webhook URL that has been registered for the chosen events, so an integration learns about activity without polling.

EventWhat it signalsTriggered by
meeting.createdFires when a meeting is scheduled./users/{userId}/meetings
meeting.updatedFires when a meeting's topic, time, or settings change./meetings/{meetingId}
meeting.deletedFires when a scheduled meeting is deleted./meetings/{meetingId}
meeting.startedFires when a meeting starts.In-app only
meeting.endedFires when a meeting ends, whether it timed out or was ended through the API./meetings/{meetingId}/status
meeting.participant_joinedFires when a participant joins a meeting. The matching read scope on the participant is required to subscribe.In-app only
meeting.participant_leftFires when a participant leaves a meeting.In-app only
meeting.registration_createdFires when someone registers for a meeting that has registration enabled./meetings/{meetingId}/registrants
recording.completedFires when a cloud recording finishes processing and is ready to download. The matching cloud recording read scope is required to subscribe.In-app only
No events match that search.
Rate limits & pagination

Rate limits, pagination & request size.

Zoom limits how fast and how much an app or AI agent can call, by sorting each method into a request type and metering it per second, with a separate daily cap on the heaviest calls, both scaled to the account's plan.

Request rate

Zoom sorts each method into one of four request types that decide its limit: Light, Medium, Heavy, and Resource-intensive. Getting a meeting and adding a registrant are Light, listing or creating a meeting is Medium, getting or deleting recordings and reading reports are Heavy, and listing all account recordings or daily usage reports are Resource-intensive. The per-second ceiling for each type scales with the account plan: a Free or Basic account gets 4 Light, 2 Medium, and 1 Heavy request per second; a Pro account gets 30, 20, and 10; and a Business, Education, Enterprise, or Partner account gets 80, 60, and 40. Free and Basic accounts also carry daily caps of 6,000 Light, 2,000 Medium, and 1,000 Heavy requests, while Pro accounts share a 30,000-per-day cap and Business and higher a 60,000-per-day cap across Heavy and Resource-intensive calls. Separately, each user is limited to 100 meeting or webinar create and update requests per day, resetting at 00:00 UTC. Going over returns HTTP 429, and the X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Type, and X-RateLimit-Reset headers report the current state.

Pagination

List endpoints page through results with a page size set by page_size, which tops out at 300 and defaults to 30. A response returns a next_page_token, and passing it on the next request fetches the following page; the token expires after about 15 minutes. Some older endpoints instead use a 1-based page_number, which is being phased out in favor of the token.

Request size

List endpoints return at most 300 records per page through page_size. A next_page_token is valid for roughly 15 minutes. Report endpoints accept a date range of up to one month per request.

Errors

Status codes & error handling.

The status codes an agent should handle, and what to do about each.

StatusCodeMeaningWhat to do
124Invalid access tokenThe access token is missing, malformed, or expired. Zoom returns this with HTTP 401 and the body code 124. An access token lasts one hour.Fetch a fresh access token, for a Server-to-Server OAuth app with the account_credentials grant, or for a user app by refreshing the token, then retry.
401UnauthorizedAuthentication failed. The token is invalid or expired, often reported with the body code 124.Confirm the Authorization header carries a valid Bearer token for the right app, and refresh it if it has expired.
400Bad RequestThe request is invalid or a required scope is missing. Zoom often reports a missing scope with the body code 4711, naming the scope the request needs.Read the message, add the named scope to the app and re-authorize, or correct the request body, then resend.
300Validation / invalid parameterA request parameter is invalid, for example a malformed meeting setting. Zoom returns this with the body code 300.Correct the named parameter and resend; the request is not retryable as-is.
404Not FoundThe meeting, user, or other resource does not exist or is not visible to this token. A user not on the account returns the body code 1001.Confirm the ID is correct and the token's account or user can see the resource.
429Too Many RequestsA rate limit was exceeded. The message names whether a per-second or daily limit was hit, and the X-RateLimit headers report the limit, the type, and when it resets.For a per-second limit, back off until the X-RateLimit-Reset time; for a daily limit, wait for the Retry-After time, which is the next UTC midnight.
Versioning & freshness

Version history.

Zoom serves a single current version of its REST API, version 2, and ships dated changes through a developer changelog rather than minting new version numbers.

Version history

What changed, and when

Latest versionv2
v2Current version
Current REST API (version 2)

Version 2 is the current Zoom REST API, served from https://api.zoom.us/v2 with OAuth access tokens. Rather than minting dated versions, Zoom ships new methods, scope changes, and deprecations through its developer changelog, so an integration tracks the changelog. The largest recent change is the move from classic scopes to granular scopes, named resource:action:object, with a migration path for existing apps.

What changed
  • Granular and optional scopes released for general availability, replacing the coarser classic scopes.
  • Migration path published for moving an app from classic to granular scopes.
  • Expanded Model Context Protocol servers for meetings, recordings, transcripts, summaries, Docs, and Whiteboard.
  • JWT app type retired in favor of OAuth and Server-to-Server OAuth.
2026-05-18Feature update
MCP server capabilities expanded

Zoom expanded its Model Context Protocol server so AI agents can reach meeting summaries, transcripts, recordings, notes, action items, and collaboration history across supported AI platforms, with agentic search across Zoom Meetings, Chat, and Phone. The capabilities were announced as available on 18 May 2026.

What changed
  • Conversation intelligence: meeting summaries, transcripts, recordings, notes, and action items exposed to AI platforms.
  • Agentic search across Zoom Meetings, Chat, Phone, and connected third-party platforms.
  • Plugins for OpenAI Codex and Anthropic Claude.
Earlier
Granular scopes introduced

Zoom introduced granular and optional scopes, a finer permission model named resource:action:object, alongside the existing classic scopes, and published a migration guide. Granular scopes let an app request one operation on one object rather than a broad classic scope covering many operations.

What changed
  • Granular scopes added across the Meeting, Webinar, User, Cloud Recording, and Report APIs.
  • Optional scopes added so an app can request some permissions only when needed.
  • Classic-to-granular migration guide published in the developer docs.

An integration tracks the changelog for new methods, scope changes, and deprecations.

Zoom developer changelog ↗
Questions

Zoom API, answered.

Server-to-Server OAuth or user OAuth, which should I use?+
Server-to-Server OAuth suits an internal app acting on its own Zoom account. It fetches a token from the account's own credentials with the account_credentials grant, with no user login, no redirect, and no refresh token, and an administrator authorizes its scopes. User-managed OAuth suits an app that acts for Zoom users on accounts it does not own, sending each user through a consent screen and receiving an access token plus a refresh token. Both tokens last one hour.
What are granular scopes, and how do they differ from classic scopes?+
Granular scopes are Zoom's current permission model, named resource:action:object, such as meeting:read:meeting or cloud_recording:read:recording. They replace the older classic scopes, which were coarser names like meeting:read covering many operations at once. A granular scope grants one operation on one object, so a token can be scoped tightly. Existing apps have a migration path from classic to granular scopes, and the developer docs list the granular scope for each method.
What does the :admin suffix on a scope mean?+
A scope without a suffix reaches only the user the token represents, so meeting:read:list_meetings lists that user's own meetings. The :admin variant, meeting:read:list_meetings:admin, lets the call reach any user on the account, which an account-level Server-to-Server app uses to act across the whole account. A :master variant exists for partner apps that manage multiple accounts. The wider the reach, the more an account administrator should review before granting it.
How do the rate limits work?+
Zoom puts each method into a request type, Light, Medium, Heavy, or Resource-intensive, and meters it per second, with the ceiling set by the account plan. A Free or Basic account gets 4 Light, 2 Medium, and 1 Heavy request per second; a Pro account gets 30, 20, and 10; and Business and higher get 80, 60, and 40. Heavy and Resource-intensive calls also share a daily cap, 30,000 on Pro and 60,000 on Business and higher. Separately, each user can make only 100 meeting or webinar create and update requests per day. Going over returns HTTP 429 with X-RateLimit headers that say when to retry.
How do I receive events instead of polling?+
Webhooks deliver events without polling. A receiver URL is registered on an app and a set of events is chosen, such as meeting.started, meeting.participant_joined, meeting.ended, or recording.completed. Zoom POSTs a JSON payload when each event fires, and the receiver validates it against the app's secret token to confirm it came from Zoom. Each event still requires the matching read scope on the app, and an app can hold up to 20 event subscriptions.
Why am I getting a 124 Invalid access token error?+
A 124 means the access token is missing, malformed, or expired. Zoom access tokens last one hour, so a long-running integration must refresh. A Server-to-Server OAuth app fetches a new token with the account_credentials grant; a user app exchanges its refresh token for a new access token. Confirm the Authorization header sends 'Bearer ' for the right app, then retry.
Can an AI agent connect to Zoom through MCP?+
Yes. Zoom publishes a hosted Model Context Protocol server at https://mcp.zoom.us/mcp/zoom/streamable that exposes Zoom meetings, recordings, transcripts, summaries, and assets to AI agents, with focused servers for Docs and Whiteboard. The client authenticates with an OAuth access token sent as a Bearer token, and the same scopes that govern the REST API govern what the MCP server can reach.
Related

More communication API guides for agents

What is Bollard AI?

Control what every AI agent can do in Zoom.

Bollard AI sits between a team's AI agents and Zoom. Grant each agent exactly the access it needs, read or write, resource by resource, and every call is checked and logged.

  • Set read, write, or full access per agent, never a shared Zoom key.
  • Denied by default, so an agent reaches only what has been explicitly allowed.
  • Every call recorded in plain English: who, what, where, and the decision.
Zoom
Meeting Agent
Schedule meetings ActionOffReadFull use
Read recordings & transcripts ResourceOffReadFull use
Delete meetings ActionOffReadFull use
Per-agent access, set in Bollard AI, not in Zoom