Announcements

Below are upcoming and recent backwards compatible changes made to the Zoom Developer Platform. For other recent changes to the Zoom API, Marketplace and SDKs, refer to our Changelog.

Last updated April 19, 2020.

Upcoming Legacy Webhooks End of Life

In January 2019, Zoom announced it would begin sunsetting the Zoom v1 API framework along with our legacy webhooks and shifting our development resources to our new Marketplace Webhooks.

To prevent service interruptions, you must start using the webhooks currently available on the Marketplace by September 28th, 2020. No extensions will be granted.

During this time period and the end-of-support date, Zoom will not make any feature enhancements or additions to the legacy webhooks framework. After September 28th 2020, apps built or using legacy webhooks framework will no longer be available.

Migrating to our new marketplace webhooks will ensure your Zoom integrations continue to operate normally and give you access to the latest webhooks and updated payloads that align with Zooms ecosystem.

If you have any questions about these changes, or if your developers need technical support using the new Marketplace webhooks, please visit our Zoom Developer Forum and let us know how we can help.

Rate Limit Changes

This announcement defines new rate limits to go in effect on April 19, 2020.

To ensure long-term scalability and growth of our developer’s ever-increasing usage of the REST API and Marketplace apps, the Zoom API will implement new rate limit strategies.

For most endpoints, rate limits will be doubled for all Pro accounts and quadrupled for all Business, Enterprise, Education and Partner accounts.

What’s changing?

Rate limits will be defined by account plan, with higher limits available for all Business, Enterprise and Education accounts. As with the previous rate limit strategy, rate limits are applied at the account level. Rate limits will be shared by all apps created and installed on an account.

APIs will now be grouped by Request Type, with unique rate limits for each. A “Rate Limit Label” will be added on each section in our API Reference documentation for each endpoint.

Some APIs will have restrictions on concurrent operations performed at the resource level (for example: simultaneous updates to a single userID).

With these changes, rate limits will now vary depending on the account plan and the type of request that is being made. Use the table below to understand how rate limits will be applied:

Account Types

Type Description
Pro Accounts that have purchased the Pro plan.

Business and higher

Accounts that are on Business Plan, Education Plan, VIP Plan, API Partner Plan and Enterprise Plan.

Request Types

Type (Label) Description
Light Create, Retrieve, Update, Delete a single resource. Example: Get Details about a Specific User, Update User Status etc.
Medium This category includes Batch APIs and Chat APIs.

Batch APIs:
Create, Retrieve and Update multiple resources at once. Examples: List Group Members, Add Members to a Group etc.

Chat APIs:
Chat Contacts, Chat Messages and Chat Channels APIs.
Heavy This category includes all Reports APIs and most Dashboard APIs. Some Dashboard APIs have stricter rate limits than the Heavy APIs and these APIs can be identified by the Resource-intensive label.

Resource-intensive

This category includes Dashboard APIs with following endpoints:
GET /v2/metrics/meetings
GET /v2/metrics/webinars
GET/v2/metrics/zoomrooms
GET /v2/metrics/im

To ensure that you are incorporating the correct rate limits in your code, a “Rate Limit Label” section in the API reference document will be added for each endpoint you will be using. Use the table below to understand the upcoming rate limits by type.

Rate Limits

API Request Groups (Labels) Account Types and Corresponding Rate Limits

Pro Accounts

Business, Education, Enterprise and Partner Accounts

Light 30 requests/second 
 
80 requests/second 
Medium 20 requests/second  60 requests/second 
Heavy  10 requests/second 

A daily rate limit of 30,000 requests/day will be shared amongst Heavy and Resource-intensive APIs.
40 requests/second 

A daily rate limit of 60,000 requests/day will be shared amongst Heavy and Resource-intensive APIs.

Resource-intensive 

10 requests/minute 

A daily rate limit of 30,000 requests/day will be shared amongst Heavy and Resource-intensive APIs.
20 requests/minute 

A daily rate limit of 60,000 requests/day will be shared amongst Heavy and Resource-intensive APIs.

Additional Rate Limits for Concurrent Requests

If concurrent requests (GET/DELETE/PATCH/POST/PUT) are being made on a single resource, the request may fail and you will recieve an error message along with a 429 HTTP status code.

Concurrent rate limits error will occur in rare cases such as when your app makes multiple requests in a short period of interval to disassociate a user from your account. In this scenario, you will receive the following error message:
Too many concurrent requests. A request to disassociate this user has already been made.

Similarly, you can not create/update more than 100 meetings for a user in a single day.

Best Practices for Handling Errors

When you exceed the rate limits allowed for an API request, you will receive a “429 Too Many Requests” error. The best way to handle rate limits is to be on the lookout for 429 status codes and build in a retry mechanism that makes reduced number of requests to the server in a given timeframe.

For APIs that have daily rate limits, a Retry-After header will be included to the response indicating how long you must wait before making the next request. The table below lists the errors that you might encounter when you reach the rate limits.

Rate Limit Type HTTP Status Codes Error Messages

Regular Rate Limit

429

You have reached the maximum per-second rate limit for this API. Try again later.

Daily Rate Limit

429

You have reached the maximum daily rate limit for this API. Refer to the response header for details on when you can make another request.

Example Response Header:

X-RateLimit-Limit: 30000
X-RateLimit-Remaining: 10000
Retry-After: 2019-10-31T00:00:00Z

Cache responses whenever possible instead of frequently making the same request. We also highly recommend that you use Webhooks instead of polling for changes whenever applicable. Instead of making repeated calls to pull data frequently from the Zoom API, you can use Webhooks to get information on events that happen in a Zoom account. Learn more from the Webhook Reference guide.

To prevent abuse and handle API request traffic efficiently, we may alter these limits if required.

Recent Backward Incompatible Changes

To ensure reliability of our service, we have made some backward incompatible changes in our APIs in accordance to the changes in our product. The following changes will take effect starting April 03, 2020, unless otherwise noted.

API Enhancements

  • Removed file_transfer field from the following APIs:
    • GET/v2/accounts/{accountId}/settings
    • PATCH /v2/accounts/{accountId}/settings
    • GET /v2/accounts/{accountId}/lock_settings
    • PATCH /v2/accounts/{accountId}/lock_settings
    • GET /v2/groups/{groupId}/settings
    • PATCH /v2/groups/{groupId}/settings
    • GET /v2/groups/{groupId}/lock_settings
    • PATCH /v2/groups/{groupId}/lock_settings
    • GET /v2/users/{userId}/settings
    • PATCH /v2/users/{userId}/settings
  • Added new response field(authentication_name) to Meeting/Webinar APIs

    • POST /v2/users/{userId}/meetings
    • GET /v2/meetings/{meetingId}
    • POST /v2/users/{userId}/webinars
    • GET /v2/webinars/{webinarId}
  • Added new response field(room_id) to Zoom Room APIs

    • GET /v2/rooms
    • POST /v2/rooms
  • Deprecated the field(attentiveness_score) in Meeting/Webinar Participants Report APIs, it will always return an empty value.

    • GET /v2/report/meetings/{meetingId}/participants
    • GET /v2/report/webinars/{webinarId}/participants
  • Starting 2020-04-04, password-related settings can no longer be modified for both Meetings and Webinars for Whitelisted free K12 education accounts. This means that the value for these settings will always be “true” for these accounts and cannot be modified. By default, these settings will also be enabled for non K-12 free accounts and Pro accounts (with a single host license) but for these non K-12 accounts, the settings can be modified by the accounts. Learn more here.

    1. The value of fields (require_password_for_scheduling_new_meetings, require_password_for_instant_meetings,require_password_for_pmi_meetings) can no longer be modified by Whitelisted K-12 accounts via the following APIs:

      • GET /v2/accounts/{accountId}/settings
      • PATCH /v2/accounts/{accountId}/settings
      • GET /v2/accounts/{accountId}/lock_settings
      • PATCH /v2/accounts/{accountId}/lock_settings
      • GET /v2/groups/{groupId}/settings
      • PATCH /v2/groups/{groupId}/settings
      • GET /v2/groups/{groupId}/lock_settings
      • PATCH /v2/groups/{groupId}/lock_settings
      • GET /v2/users/{userId}/settings
      • PATCH /v2/users/{userId}/settings
    2. The value of field(pstn_password_protected) can no longer be modified by Whitelisted K-12 accounts via the following APIs:

      • GET /v2/groups/{groupId}/settings
      • PATCH /v2/groups/{groupId}/settings
      • GET /v2/groups/{groupId}/lock_settings
      • PATCH /v2/groups/{groupId}/lock_settings
      • GET /v2/users/{userId}/settings
      • PATCH /v2/users/{userId}/settings
    3. The value of field (pmi_password) can no longer be modified by Whitelisted K-12 accounts via the following APIs:

      • GET /v2/users/{userId}/settings
      • PATCH /v2/users/{userId}/settings

Early Notice: Changes coming to Batch List APIs

To provide for greater scalability of our Batch List APIs and provide for more consistent pagination methods, the pagination keys used for Batch List APIs will be changed from a page_number key to next_page_token.

Starting Q2, 2020, and over the subsequent three months, a new pagination page field (next_page_token) will be added to all REST API requests and responses under the following schedule:

Q2 2020:

Subsequent Releases Beginning May 2020:

Once all of the above APIs have support for next_page_token, you will have a six (6) month period to migrate from page_number to next_page_token. After the six month adoption window, the page_number field will no longer operate.

A notice will be sent once all Batch List APIs have been updated to support next_page_token, at which time the six month adoption window will begin.

Developer Readiness Guide:

Batch List API requests:

Currently, a page_number is used:

curl --location --request GET 'https://api.zoom.us/v2/groups/<GROUP_ID>/members?page_size=30&page_number=2'

During the adoption window, either a page_number or next_page_token can be used as a query param:

curl --location --request GET 'https://api.zoom.us/v2/groups/<GROUP_ID>/members?page_size=30&page_number=1'
curl --location --request GET 'https://api.zoom.us/v2/groups/<string>/members?page_size=30&next_page_token=lVSwjkBWxRCOXXNKdaezEViAQvCw1d37uq3'

After the six (6) month adoption window, only a next_page_token can be used:

curl --location --request GET 'https://api.zoom.us/v2/groups/<string>/members?page_size=30&next_page_token=lVSwjkBWxRCOXXNKdaezEViAQvCw1d37uq3'

Batch List API responses:

Currently, a page_number is sent in a Batch List response:

{
		"members": [
				{
						"email": "",
						"first_name": "Ram",
						"id": "3542342",
						"last_name": "Ghale",
						"type": 1
				}
		],
		"page_count": 3,
		"page_number": 2,
		"page_size": 100,
		"total_records": 300
}

During the adoption window, both a page_number and next_page_token will be used:

{
		"members": [
				{
						"email": "",
						"first_name": "Ram",
						"id": "3542342",
						"last_name": "Ghale",
						"type": 1
				}
		],
		"page_count": 3,
		"page_number": 2,
		"next_page_token": “lVSwjkBWxRCOXXNKdaezEViAQvCw1d37uq3”,
		"page_size": 100,
		"total_records": 300
}

After the six (6) month adoption window, only a next_page_token will be sent:

{
		"members": [
				{
						"email": "",
						"first_name": "Ram",
						"id": "3542342",
						"last_name": "Ghale",
						"type": 1
				}
		],
		"page_count": 3,
		"next_page_token": “lVSwjkBWxRCOXXNKdaezEViAQvCw1d37uq3”,
		"page_size": 100,
		"total_records": 300
}

Need help?

The first place to look is on our Developer Forum. If you can't find the answer or your request includes sensitive information, contact Developer Support.