# 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](/docs/api/rate-limits) documentation. ## Using `next_page_token` Most Zoom APIs, including [List Meeting participants](/docs/api/accounts/#tag/dashboards/GET/metrics/meetings/{meetingId}/participants) and [List Webinars](/docs/api/accounts/#tag/dashboards/GET/metrics/webinars/{webinarId}/participants), use the `next_page_token` parameter for pagination. - If the initial API query returns a complete response, the `next_page_token` value will be an empty string. - A non-empty `next_page_token` value (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: ```json { "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`](/docs/api/users/#tag/users/GET/users) ```javascript 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)); ``` ```python 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](/docs/api/users/#tag/users/GET/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 page - `page_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](/docs/api/meetings/#tag/meetings/GET/users/{userId}/meetings) with `page_number` and `page_size` parameters can return a response similar to: ```json { "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 ```javascript 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)); ``` ```python 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)}") ```