Usage
Zoom APIs use pagination to organize large response datasets into manageable chunks. This approach helps you efficiently handle substantial data payloads when making GET requests that list large numbers of resources.
Response limits
The number of items returned per page varies based on the API and data retrieval level:
- Light data retrieval: Up to 300 items per page
- Heavy data retrieval: Up to 30, 50, or 100 items per page, depending on the specific API
For details on light and heavy APIs, see the Rate limits documentation.
Using next_page_token
Most Zoom APIs, including List Meeting participants and List Webinars, use the next_page_token parameter for pagination.
- If the initial API query returns a complete response, the
next_page_tokenvalue will be an empty string. - A non-empty
next_page_tokenvalue (e.g.,"abc3445rg") indicates that additional results are available.
To retrieve additional responses, include the next_page_token value in subsequent API requests using the same query parameters.
A request to the List Meetings API can return a response with a next_page_token similar to:
{
"from": "2024-02-07",
"meetings": [
{
"duration": "05:27",
"email": "jchill@example.com",
"end_time": "2024-02-15T23:30:19Z",
"has_recording": false,
"id": 123456,
"participants": 2,
"start_time": "2024-02-15T23:24:52Z",
"topic": "My Meeting",
"user_type": "Pro|Webinar1000",
"uuid": "abcd1234=="
}
],
"next_page_token": "def5678",
"page_count": 5,
"page_size": 1,
"to": "2024-03-07",
"total_records": 5
}
Example: List all users with next_page_token:
Reference: /docs/api/users
const axios = require("axios");
async function getAllUsers(baseUrl, accessToken) {
let allUsers = [];
let nextPageToken = "";
while (true) {
const headers = {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
};
const params = { page_size: 300 };
if (nextPageToken) {
params.next_page_token = nextPageToken;
}
try {
const response = await axios.get(baseUrl, { headers, params });
const data = response.data;
allUsers = allUsers.concat(data.users || []);
nextPageToken = data.next_page_token || "";
if (!nextPageToken) {
break;
}
} catch (error) {
console.error("Error fetching users:", error.message);
break;
}
}
return allUsers;
}
// Usage
const baseUrl = "https://api.zoom.us/v2/users";
const accessToken = "YOUR_ACCESS_TOKEN";
getAllUsers(baseUrl, accessToken)
.then((users) => console.log(`Total users retrieved: ${users.length}`))
.catch((error) => console.error("Error:", error.message));
import requests
def get_all_users(base_url, access_token):
all_users = []
next_page_token = ''
while True:
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
params = {"page_size": 300}
if next_page_token:
params["next_page_token"] = next_page_token
response = requests.get(base_url, headers=headers, params=params)
data = response.json()
all_users.extend(data.get('users', []))
next_page_token = data.get('next_page_token', '')
if not next_page_token:
break
return all_users
# Usage
base_url = "https://api.zoom.us/v2/users"
access_token = "YOUR_ACCESS_TOKEN"
users = get_all_users(base_url, access_token)
print(f"Total users retrieved: {len(users)}")
Legacy pagination: page numbers
Some Zoom APIs, like List Users, support pagination using page_size and page_number parameters. However, this method is being phased out in favor of next_page_token.
page_size: Number of records to return per pagepage_number: Specific page to retrieve
We recommend setting these values based on your needs, rather than relying on default values.
For example, a request to List Meetings with page_number and page_size parameters can return a response similar to:
{
"meetings": [
{
"agenda": "Weekly standup",
"created_at": "2024-03-14T21:14:55Z",
"duration": 60,
"id": 987654,
"join_url": "https://zoom.us/j/987654",
"start_time": "2024-03-15T22:00:00Z",
"topic": "Team Meeting",
"type": 2
}
],
"page_count": 1,
"page_number": 1,
"page_size": 1,
"total_records": 2
}
Example: List users with page numbers
const axios = require("axios");
async function getAllUsers(baseUrl, accessToken) {
let allUsers = [];
let pageNumber = 1;
const pageSize = 300;
while (true) {
const headers = {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
};
const params = {
page_size: pageSize,
page_number: pageNumber,
};
try {
const response = await axios.get(baseUrl, { headers, params });
const data = response.data;
allUsers = allUsers.concat(data.users || []);
if (pageNumber >= data.page_count) {
break;
}
pageNumber++;
} catch (error) {
console.error("Error fetching users:", error.message);
break;
}
}
return allUsers;
}
// Usage
const baseUrl = "https://api.zoom.us/v2/users";
const accessToken = "YOUR_ACCESS_TOKEN";
getAllUsers(baseUrl, accessToken)
.then((users) => console.log(`Total users retrieved: ${users.length}`))
.catch((error) => console.error("Error:", error.message));
import requests
def get_all_users(base_url, access_token):
all_users = []
page_number = 1
page_size = 300
while True:
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
params = {
"page_size": page_size,
"page_number": page_number
}
response = requests.get(base_url, headers=headers, params=params)
data = response.json()
all_users.extend(data.get('users', []))
if page_number >= data.get('page_count', 0):
break
page_number += 1
return all_users
# Usage
base_url = "https://api.zoom.us/v2/users"
access_token = "YOUR_ACCESS_TOKEN"
users = get_all_users(base_url, access_token)
print(f"Total users retrieved: {len(users)}")