Автоматизация Zoom через REST API
Справочник по Zoom REST API: выбор конечных точек, управление встречами и пользователями, OAuth, ограничения частоты запросов и ошибки.
- Что делает
- Справочник по Zoom REST API: выбор конечных точек, управление встречами и пользователями, OAuth, ограничения частоты запросов и ошибки.
- Когда брать
- Когда нужно автоматизировать Zoom на сервере: создавать встречи, управлять пользователями и записями, разбирать ошибки API.
- Когда не брать
- Если нужно встроить встречу в приложение (Meeting SDK) или получать медиа в реальном времени (RTMS).
- Пример запроса
- Напиши скрипт, который каждое утро создаёт встречу в Zoom для нашей команды и скачивает вчерашние записи.
- Нужно подключить
- терминал, учётные данные приложения Zoom
Входит в плагин zoom-plugin. В Cowork и Claude Code можно поставить плагин целиком.
Как включить
- Скачайте архив и распакуйте его.
- Положите папку
build-zoom-rest-api-appв~/.claude/skills/. - Откройте Claude Code и опишите задачу своими словами: Claude подхватит скилл по описанию.
Текст
---
name: build-zoom-rest-api-app
description: "Справочный скилл по Zoom REST API. Используй после выбора процесса на основе API, когда нужны выбор конечных точек, шаблоны управления ресурсами, требования OAuth, учёт ограничений частоты запросов и отладка ошибок API."
triggers:
- "api call"
- "rest api"
- "api create meeting"
- "api get meeting"
- "api list meetings"
- "api update meeting"
- "api delete meeting"
- "meeting endpoint"
- "/v2/meetings"
- "create user"
- "zoom api"
- "api endpoint"
- "recordings api"
- "users api"
- "webinars api"
- "server-to-server oauth"
- "account_credentials"
- "account id"
- "invalid access token"
- "does not contain scopes"
- "access token is expired"
- "webhook verification"
- "crc"
- "download_url"
---
/build-zoom-rest-api-app
Справочный материал по детерминированной серверной автоматизации Zoom и управлению ресурсами. Сначала предпочитай plan-zoom-product, plan-zoom-integration или debug-zoom, а затем переходи сюда за подробностями на уровне конечных точек.
Zoom REST API
Экспертное руководство по созданию серверных интеграций с Zoom REST API. Этот API предоставляет более 600 конечных точек для программного управления встречами, пользователями, вебинарами, записями, отчётами и всеми ресурсами платформы Zoom.
Официальная документация: https://developers.zoom.us/api-hub/ Справочник API Hub: https://developers.zoom.us/api-hub/meetings/ Перечни OpenAPI: https://developers.zoom.us/api-hub/<domain>/methods/endpoints.json
Быстрые ссылки
Впервые работаешь с Zoom REST API? Иди по этому пути:
- [Архитектура API](concepts/api-architecture.md) — базовые и региональные URL, ключевое слово
me, ID и UUID, форматы времени - [Потоки авторизации](concepts/authentication-flows.md) — настройка OAuth (S2S, пользовательский, PKCE, Device Code)
- [URL встреч и Meeting SDK](concepts/meeting-urls-and-sdk-joining.md) — хватит путать
join_urlс Meeting SDK - [Жизненный цикл встречи](examples/meeting-lifecycle.md) — создание → обновление → запуск → завершение → удаление с вебхуками
- [Стратегия работы с ограничениями частоты запросов](concepts/rate-limiting-strategy.md) — уровни тарифов, ограничения на пользователя, шаблоны повторных попыток
Справочные материалы:
- [Встречи](references/meetings.md) — CRUD встреч, типы, настройки
- [Пользователи](references/users.md) — создание и управление пользователями
- [Записи](references/recordings.md) — доступ к облачным записям и их скачивание
- [AI Services](references/ai-services.md) — перечень конечных точек Scribe и текущий набор путей AI Services
- [Запросы GraphQL](examples/graphql-queries.md) — альтернативный API запросов (бета)
- Сводный указатель — см. раздел ниже в этом файле
Большинство файлов по предметным областям в references/ приведены в соответствие с официальными перечнями endpoints.json в API Hub. Считай эти файлы локальным источником истины для поиска методов и путей.
Что-то не работает?
- Начни с предварительных проверок → [пятиминутный чек-лист](RUNBOOK.md)
- 401 Unauthorized → [Потоки авторизации](concepts/authentication-flows.md) (проверь срок действия токена и области доступа)
- 429 Too Many Requests → [Стратегия работы с ограничениями частоты запросов](concepts/rate-limiting-strategy.md)
- Коды ошибок → [Частые ошибки](troubleshooting/common-errors.md)
- Путаница с постраничной выдачей → [Частые проблемы](troubleshooting/common-issues.md)
- Вебхуки не приходят → [Сервер вебхуков](examples/webhook-server.md)
- Вопросы и ответы из форума → [Главные вопросы форума](troubleshooting/forum-top-questions.md)
- Сбои токенов и областей доступа → [Сборник решений по токенам и областям доступа](troubleshooting/token-scope-playbook.md)
Создаёшь интеграции на событиях?
- [Сервер вебхуков](examples/webhook-server.md) — сервер на Express.js с проверкой CRC
- [Конвейер записей](examples/recording-pipeline.md) — автоматическое скачивание по событиям вебхуков
Быстрый старт
Получение токена доступа (Server-to-Server OAuth)
curl -X POST "https://zoom.us/oauth/token" \
-H "Authorization: Basic $(echo -n 'CLIENT_ID:CLIENT_SECRET' | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=account_credentials&account_id=ACCOUNT_ID"
Ответ:
{
"access_token": "eyJhbGciOiJIUzI1NiJ9...",
"token_type": "bearer",
"expires_in": 3600,
"scope": "meeting:read meeting:write user:read"
}
Создание встречи
curl -X POST "https://api.zoom.us/v2/users/HOST_USER_ID/meetings" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"topic": "Team Standup",
"type": 2,
"start_time": "2025-03-15T10:00:00Z",
"duration": 30,
"settings": {
"join_before_host": false,
"waiting_room": true
}
}'
Для S2S OAuth указывай в пути явный идентификатор или адрес электронной почты организатора. Не используй me.
Список пользователей с постраничной выдачей
curl "https://api.zoom.us/v2/users?page_size=300&status=active" \
-H "Authorization: Bearer ACCESS_TOKEN"
Базовый URL
https://api.zoom.us/v2
Региональные базовые URL
Поле api_url в ответах OAuth с токеном указывает регион пользователя. Используй региональные URL, чтобы соблюдать требования к месту хранения данных:
| Регион | URL |
|---|---|
| Глобальный (по умолчанию) | https://api.zoom.us/v2 |
| Австралия | https://api-au.zoom.us/v2 |
| Канада | https://api-ca.zoom.us/v2 |
| Европейский союз | https://api-eu.zoom.us/v2 |
| Индия | https://api-in.zoom.us/v2 |
| Саудовская Аравия | https://api-sa.zoom.us/v2 |
| Сингапур | https://api-sg.zoom.us/v2 |
| Великобритания | https://api-uk.zoom.us/v2 |
| США | https://api-us.zoom.us/v2 |
Примечание: глобальный URL https://api.zoom.us можно использовать всегда, независимо от значения api_url.
Основные возможности
| Возможность | Описание |
|---|---|
| Управление встречами | Создание, чтение, обновление и удаление встреч с полным контролем над расписанием |
| Управление пользователями | Автоматизированный жизненный цикл пользователя (создание, обновление, деактивация, удаление) |
| Работа с вебинарами | CRUD вебинаров, управление регистрантами, управление докладчиками |
| Облачные записи | Просмотр списка, скачивание и удаление записей с фильтром по типу файла |
| Отчёты и аналитика | Отчёты об использовании, данные об участниках, ежедневная статистика |
| Team Chat | Управление каналами, обмен сообщениями, интеграция чат-ботов |
| Zoom Phone | Управление звонками, голосовая почта, маршрутизация звонков |
| Zoom Rooms | Управление комнатами, управление устройствами, планирование |
| Вебхуки | Уведомления о событиях в реальном времени для более чем 100 типов событий |
| WebSockets | Постоянная потоковая передача событий без публичных конечных точек |
| GraphQL (бета) | Гибкие запросы через единую конечную точку v3/graphql |
| AI Companion | Резюме встреч, расшифровки, контент, созданный ИИ |
| AI Services / Scribe | Расшифровка файлов и архивов через конечные точки с JWT-авторизацией платформы Build |
Предварительные требования
- Аккаунт Zoom (на бесплатном тарифе API доступен, но с более низкими ограничениями частоты запросов)
- Приложение, зарегистрированное в Zoom App Marketplace
- Учётные данные OAuth (Server-to-Server OAuth или пользовательский OAuth)
- Подходящие области доступа для нужных конечных точек
Нужна помощь с авторизацией? Полная реализация потоков OAuth — в скилле [zoom-oauth](../oauth/SKILL.md).
Критичные подводные камни и лучшие практики
⚠️ Тип приложения JWT устарел
Тип приложения JWT устарел. Переходи на Server-to-Server OAuth. Это НЕ затрагивает подписи JWT-токенов, используемые в Video SDK, — только тип приложения «JWT» в Marketplace для доступа к REST API.
// OLD (JWT app type - DEPRECATED)
const token = jwt.sign({ iss: apiKey, exp: expiry }, apiSecret);
// NEW (Server-to-Server OAuth)
const token = await getServerToServerToken(accountId, clientId, clientSecret);
⚠️ Правила для ключевого слова me
- Приложения OAuth уровня пользователя: ОБЯЗАТЕЛЬНО использовать
meвместоuserId(иначе — ошибка недействительного токена) - Приложения Server-to-Server OAuth: НЕЛЬЗЯ использовать
me— указывай настоящийuserIdили адрес электронной почты - Приложения OAuth уровня аккаунта: можно использовать и
me, иuserId
⚠️ ID встречи и UUID — двойное кодирование
UUID, которые начинаются с / или содержат //, нужно дважды закодировать как URL:
// UUID: /abc==
// Single encode: %2Fabc%3D%3D
// Double encode: %252Fabc%253D%253D ← USE THIS
const uuid = '/abc==';
const encoded = encodeURIComponent(encodeURIComponent(uuid));
const url = `https://api.zoom.us/v2/meetings/${encoded}`;
⚠️ Форматы времени
yyyy-MM-ddTHH:mm:ssZ— время UTC (обрати внимание на суффиксZ)yyyy-MM-ddTHH:mm:ss— местное время (безZ, используется полеtimezone)- Некоторые API отчётов принимают только UTC. Проверяй справочник API для каждой конечной точки.
⚠️ Ограничения частоты запросов действуют на аккаунт, а не на приложение
Все приложения одного аккаунта Zoom делят общие ограничения частоты запросов. Одно «тяжёлое» приложение может повлиять на остальные. Заранее следи за заголовками X-RateLimit-Remaining.
⚠️ Суточные ограничения на пользователя
Операции создания и обновления встреч и вебинаров ограничены 100 в сутки на пользователя (сбрасывается в 00:00 UTC). При массовых операциях распределяй их между разными организаторами.
⚠️ Ссылки для скачивания требуют авторизации и перенаправляют
Значения download_url для записей требуют авторизации токеном Bearer и могут перенаправлять. Всегда следуй перенаправлениям:
curl -L -H "Authorization: Bearer ACCESS_TOKEN" "https://zoom.us/rec/download/..."
Используй вебхуки вместо опроса
// DON'T: Poll every minute (wastes API quota)
setInterval(() => getMeetings(), 60000);
// DO: Receive webhook events in real-time
app.post('/webhook', (req, res) => {
if (req.body.event === 'meeting.started') {
handleMeetingStarted(req.body.payload);
}
res.status(200).send();
});
Подробности настройки вебхуков: полная реализация вебхуков — в скилле [zoom-webhooks](../webhooks/SKILL.md).
Полная библиотека документации
Этот скилл включает подробные руководства, сгруппированные по категориям:
Основные концепции
- [Архитектура API](concepts/api-architecture.md) — устройство REST, базовые URL, региональная маршрутизация, ключевое слово
me, ID и UUID, форматы времени - [Потоки авторизации](concepts/authentication-flows.md) — все потоки OAuth (S2S, пользовательский, PKCE, Device Code)
- [Стратегия работы с ограничениями частоты запросов](concepts/rate-limiting-strategy.md) — ограничения по тарифам, шаблоны повторных попыток, очередь запросов
Полные примеры
- [Жизненный цикл встречи](examples/meeting-lifecycle.md) — полный путь создание → обновление → запуск → завершение → удаление с событиями вебхуков
- [Управление пользователями](examples/user-management.md) — CRUD пользователей, список с постраничной выдачей, массовые операции
- [Конвейер записей](examples/recording-pipeline.md) — скачивание записей через вебхуки и API
- [Сервер вебхуков](examples/webhook-server.md) — сервер на Express.js с проверкой CRC и подписи
- [Запросы GraphQL](examples/graphql-queries.md) — запросы GraphQL, мутации, постраничная выдача по курсору
Устранение неполадок
- [Частые ошибки](troubleshooting/common-errors.md) — коды состояния HTTP, коды ошибок Zoom, форматы ответов с ошибками
- [Частые проблемы](troubleshooting/common-issues.md) — ограничения частоты запросов, обновление токенов, ловушки постраничной выдачи, подводные камни
Справочные материалы (39 файлов по всем предметным областям Zoom API)
Основные API
- [references/meetings.md](references/meetings.md) — CRUD встреч, типы, настройки
- [references/users.md](references/users.md) — создание пользователей, типы, области доступа
- [references/webinars.md](references/webinars.md) — управление вебинарами, регистранты
- [references/recordings.md](references/recordings.md) — доступ к облачным записям
- [references/reports.md](references/reports.md) — отчёты об использовании, аналитика
- [references/accounts.md](references/accounts.md) — управление аккаунтом
Коммуникации
- [references/team-chat.md](references/team-chat.md) — обмен сообщениями в Team Chat
- [references/chatbot.md](references/chatbot.md) — интерактивные чат-боты
- [references/phone.md](references/phone.md) — Zoom Phone
- [references/mail.md](references/mail.md) — Zoom Mail
- [references/calendar.md](references/calendar.md) — Zoom Calendar
Инфраструктура
- [references/rooms.md](references/rooms.md) — Zoom Rooms
- [references/scim2.md](references/scim2.md) — API для создания учётных записей SCIM 2.0
- [references/rate-limits.md](references/rate-limits.md) — подробности об ограничениях частоты запросов
- [references/qss.md](references/qss.md) — подписка на данные о качестве связи (Quality of Service Subscription)
Расширенные возможности
- [references/graphql.md](references/graphql.md) — GraphQL API (бета)
- [references/ai-companion.md](references/ai-companion.md) — функции ИИ
- [references/authentication.md](references/authentication.md) — справочник по авторизации
- [references/openapi.md](references/openapi.md) — спецификации OpenAPI, Postman, генерация кода
Дополнительные предметные области API
- [references/events.md](references/events.md) — API Events и платформы событий
- [references/scheduler.md](references/scheduler.md) — API Zoom Scheduler
- [references/tasks.md](references/tasks.md) — API Tasks
- [references/whiteboard.md](references/whiteboard.md) — API Whiteboard
- [references/video-management.md](references/video-management.md) — API управления видео
- [references/video-sdk-api.md](references/video-sdk-api.md) — REST API Video SDK
- [references/marketplace-apps.md](references/marketplace-apps.md) — управление приложениями Marketplace
- [references/commerce.md](references/commerce.md) — API торговли и биллинга
- [references/contact-center.md](references/contact-center.md) — API Contact Center
- [references/quality-management.md](references/quality-management.md) — API управления качеством
- [references/workforce-management.md](references/workforce-management.md) — API управления персоналом
- [references/healthcare.md](references/healthcare.md) — API для здравоохранения
- [references/auto-dialer.md](references/auto-dialer.md) — API автодозвона
- [references/number-management.md](references/number-management.md) — API управления номерами
- [references/revenue-accelerator.md](references/revenue-accelerator.md) — API Revenue Accelerator
- [references/virtual-agent.md](references/virtual-agent.md) — API Virtual Agent
- [references/cobrowse-sdk-api.md](references/cobrowse-sdk-api.md) — API Cobrowse SDK
- [references/crc.md](references/crc.md) — API Cloud Room Connector
- [references/clips.md](references/clips.md) — API Clips
- [references/zoom-docs.md](references/zoom-docs.md) — документы Zoom и ссылки на источники
Репозитории с примерами
Официальные (от Zoom)
| Тип | Репозиторий |
|---|---|
| Пример OAuth | oauth-sample-app |
| Стартовый набор S2S OAuth | server-to-server-oauth-starter-api |
| Пользовательский OAuth | user-level-oauth-starter |
| Токен S2S | server-to-server-oauth-token |
| Библиотека Rivet | rivet-javascript |
| Пример WebSocket | websocket-js-sample |
| Пример вебхука | webhook-sample-node.js |
| Python S2S | server-to-server-python-sample |
Ресурсы
- Справочник API: https://developers.zoom.us/api-hub/
- Песочница GraphQL: https://nws.zoom.us/graphql/playground
- Коллекция Postman: https://marketplace.zoom.us/docs/api-reference/postman
- Форум разработчиков: https://devforum.zoom.us/
- Журнал изменений: https://developers.zoom.us/changelog/
- Страница статуса: https://status.zoom.us/
Нужна помощь? Начни с раздела «Сводный указатель» ниже — там полная навигация.
Сводный указатель
_Этот раздел перенесён из SKILL.md._
Путь быстрого старта
Если ты впервые работаешь с Zoom REST API, иди в таком порядке:
- Сначала выполни предварительные проверки → [RUNBOOK.md](RUNBOOK.md)
- Пойми устройство API → [concepts/api-architecture.md](concepts/api-architecture.md)
- Базовые URL, региональные конечные точки, правила для ключевого слова
me - ID и UUID встречи, двойное кодирование, форматы времени
- Настрой авторизацию → [concepts/authentication-flows.md](concepts/authentication-flows.md)
- Server-to-Server OAuth (серверная автоматизация)
- Пользовательский OAuth с PKCE (приложения для пользователей)
- Перекрёстная ссылка: [zoom-oauth](../oauth/SKILL.md)
- Создай первую встречу → [examples/meeting-lifecycle.md](examples/meeting-lifecycle.md)
- Полный CRUD с примерами на curl и Node.js
- Интеграция событий вебхуков
- Учти ограничения частоты запросов → [concepts/rate-limiting-strategy.md](concepts/rate-limiting-strategy.md)
- Ограничения по тарифам, шаблоны повторных попыток, очередь запросов
- Настрой вебхуки → [examples/webhook-server.md](examples/webhook-server.md)
- Проверка CRC, проверка подписи, обработка событий
- Устрани проблемы → [troubleshooting/common-issues.md](troubleshooting/common-issues.md)
- Обновление токенов, ловушки постраничной выдачи, частые подводные камни
Структура документации
rest-api/
├── SKILL.md # Обзор основного скилла + быстрый старт
├── SKILL.md # Этот файл — навигационное руководство
│
├── concepts/ # Основные архитектурные концепции
│ ├── api-architecture.md # Устройство REST, URL, идентификаторы, форматы времени
│ ├── authentication-flows.md # Потоки OAuth (S2S, пользовательский, PKCE, Device)
│ └── rate-limiting-strategy.md # Ограничения по тарифам, повторные попытки, очередь
│
├── examples/ # Полные рабочие примеры кода
│ ├── meeting-lifecycle.md # Создание→Обновление→Запуск→Завершение→Удаление
│ ├── user-management.md # CRUD пользователей, постраничная выдача, массовые операции
│ ├── recording-pipeline.md # Скачивание записей через вебхуки
│ ├── webhook-server.md # Express.js: CRC + проверка подписи
│ └── graphql-queries.md # Запросы GraphQL, мутации, постраничная выдача
│
├── troubleshooting/ # Устранение проблем
│ ├── common-errors.md # Таблица кодов HTTP и кодов ошибок Zoom
│ └── common-issues.md # Ограничения частоты запросов, токены, ловушки постраничной выдачи
│
└── references/ # 39 справочных файлов по предметным областям
├── authentication.md # Справочник по способам авторизации
├── meetings.md # Конечные точки встреч
├── users.md # Конечные точки управления пользователями
├── webinars.md # Конечные точки вебинаров
├── recordings.md # Конечные точки облачных записей
├── reports.md # Отчёты и аналитика
├── accounts.md # Управление аккаунтом
├── rate-limits.md # Подробности об ограничениях частоты запросов
├── graphql.md # GraphQL API (бета)
├── zoom-team-chat.md # Обмен сообщениями в Team Chat
├── chatbot.md # Интеграция чат-ботов
├── phone.md # Zoom Phone
├── rooms.md # Zoom Rooms
├── calendar.md # Zoom Calendar
├── mail.md # Zoom Mail
├── ai-companion.md # Функции ИИ
├── openapi.md # Спецификации OpenAPI
├── qss.md # Качество связи (Quality of Service)
├── contact-center.md # Contact Center
├── events.md # Zoom Events
├── whiteboard.md # Whiteboard
├── clips.md # Zoom Clips
├── scheduler.md # Scheduler
├── scim2.md # SCIM 2.0
├── marketplace-apps.md # Управление приложениями
├── zoom-video-sdk-api.md # REST Video SDK
└── ... (всего 39 файлов)
По сценариям использования
Хочу создавать встречи и управлять ими
- [Архитектура API](concepts/api-architecture.md) — базовый URL, форматы времени
- [Жизненный цикл встречи](examples/meeting-lifecycle.md) — полный CRUD и события вебхуков
- [Справочник по встречам](references/meetings.md) — все конечные точки, типы, настройки
Хочу программно управлять пользователями
- [Управление пользователями](examples/user-management.md) — CRUD, постраничная выдача, массовые операции
- [Справочник по пользователям](references/users.md) — конечные точки, типы пользователей, области доступа
Хочу автоматически скачивать записи
- [Конвейер записей](examples/recording-pipeline.md) — скачивание по вебхукам
- [Справочник по записям](references/recordings.md) — типы файлов, авторизация при скачивании
Хочу получать события в реальном времени
- [Сервер вебхуков](examples/webhook-server.md) — проверка CRC, проверка подписи
- Перекрёстная ссылка: [zoom-webhooks](../webhooks/SKILL.md) — подробная документация по вебхукам
- Перекрёстная ссылка: [zoom-websockets](../websockets/SKILL.md) — события WebSocket
Хочу использовать GraphQL вместо REST
- [Запросы GraphQL](examples/graphql-queries.md) — запросы, мутации, постраничная выдача
- [Справочник по GraphQL](references/graphql.md) — доступные сущности, области доступа, ограничения частоты запросов
Хочу настроить авторизацию
- [Потоки авторизации](concepts/authentication-flows.md) — все способы OAuth
- Перекрёстная ссылка: [zoom-oauth](../oauth/SKILL.md) — полная реализация OAuth
Упираюсь в ограничения частоты запросов
- [Стратегия работы с ограничениями частоты запросов](concepts/rate-limiting-strategy.md) — ограничения по тарифам, стратегии
- [Справочник по ограничениям частоты запросов](references/rate-limits.md) — подробные таблицы
- [Частые проблемы](troubleshooting/common-issues.md) — практические решения
Получаю ошибки
- [Частые ошибки](troubleshooting/common-errors.md) — таблицы кодов ошибок
- [Частые проблемы](troubleshooting/common-issues.md) — порядок диагностики
Хочу работать с вебинарами
- [Справочник по вебинарам](references/webinars.md) — конечные точки, типы, регистранты
- [Жизненный цикл встречи](examples/meeting-lifecycle.md) — применимы похожие шаблоны
Хочу интегрировать Zoom Phone
- [Справочник по Phone](references/phone.md) — конечные точки API Phone
- [Стратегия работы с ограничениями частоты запросов](concepts/rate-limiting-strategy.md) — отдельные ограничения частоты запросов для Phone
Самые важные документы
1. Архитектура API (ОСНОВА)
[concepts/api-architecture.md](concepts/api-architecture.md)
Необходимые знания перед любым вызовом API:
- Базовые URL и региональные конечные точки
- Правила для ключевого слова
me(для разных типов приложений разные!) - Двойное кодирование ID встречи и UUID
- Форматы времени ISO 8601 (UTC и местное)
- Авторизация при обращении к URL для скачивания
2. Стратегия работы с ограничениями частоты запросов (САМАЯ ЧАСТАЯ ПРОБЛЕМА В ПРОДАКШЕНЕ)
[concepts/rate-limiting-strategy.md](concepts/rate-limiting-strategy.md)
Ограничения частоты запросов действуют на аккаунт и общие для всех приложений:
- Бесплатный: 4/с лёгкие (Light), 2/с средние (Medium), 1/с тяжёлые (Heavy)
- Pro: 30/с лёгкие, 20/с средние, 10/с тяжёлые
- Business и выше: 80/с лёгкие, 60/с средние, 40/с тяжёлые
- На пользователя: 100 созданий или обновлений встреч в сутки
3. Жизненный цикл встречи (САМАЯ ЧАСТАЯ ЗАДАЧА)
[examples/meeting-lifecycle.md](examples/meeting-lifecycle.md)
Полный CRUD с интеграцией вебхуков — шаблон, который большинству разработчиков нужен в первую очередь.
Ключевые выводы
Критичные открытия:
- Тип приложения JWT устарел — используй Server-to-Server OAuth
- Устарел именно *тип приложения* JWT в Marketplace, а НЕ подписи JWT-токенов
- См.: [Потоки авторизации](concepts/authentication-flows.md)
- **Ключевое слово
meведёт себя по-разному в зависимости от типа приложения** - Пользовательский OAuth: ОБЯЗАТЕЛЬНО использовать
me - S2S OAuth: НЕЛЬЗЯ использовать
me - См.: [Архитектура API](concepts/api-architecture.md)
- Ограничения частоты запросов устроены тоньше (не считай, что есть единое глобальное правило)
- Ограничения могут различаться по конечным точкам и применяться на уровне аккаунта, приложения или пользователя
- Считай, что квоты могут быть общими для всего аккаунта, и реализуй отсрочку повторов (backoff)
- Следи за заголовками ответа об ограничениях (например,
X-RateLimit-Remaining) - См.: [Стратегия работы с ограничениями частоты запросов](concepts/rate-limiting-strategy.md)
- 100 созданий встреч на пользователя в сутки
- Это жёсткое ограничение на пользователя, не связанное с ограничениями частоты запросов
- При массовых операциях распределяй нагрузку между организаторами
- См.: [Стратегия работы с ограничениями частоты запросов](concepts/rate-limiting-strategy.md)
- Для некоторых UUID необходимо двойное кодирование
- UUID, начинающиеся с
/или содержащие//, нужно кодировать дважды - См.: [Архитектура API](concepts/api-architecture.md)
- **Постраничная выдача: используй
next_page_token, а неpage_number** page_number— устаревший способ, его постепенно отключаютnext_page_token— рекомендуемый подход- См.: [Частые проблемы](troubleshooting/common-issues.md)
- **GraphQL находится по адресу
/v3/graphql, а не/v2/** - Единая конечная точка, постраничная выдача по курсору
- Ограничения частоты запросов действуют на каждое поле (каждое поле = один эквивалент REST)
- См.: [Запросы GraphQL](examples/graphql-queries.md)
Краткий справочник
«401 Unauthorized»
→ [Потоки авторизации](concepts/authentication-flows.md) — токен просрочен или неверные области доступа
«429 Too Many Requests»
→ [Стратегия работы с ограничениями частоты запросов](concepts/rate-limiting-strategy.md) — в заголовках смотри время сброса
«Недействительный токен» при использовании userId
→ [Архитектура API](concepts/api-architecture.md) — приложения с пользовательским OAuth должны использовать me
«Как разбить результаты на страницы?»
→ [Частые проблемы](troubleshooting/common-issues.md) — используй next_page_token
«Вебхуки не приходят»
→ [Сервер вебхуков](examples/webhook-server.md) — проверка CRC обязательна
«Не скачивается запись»
→ [Конвейер записей](examples/recording-pipeline.md) — авторизация Bearer + следование перенаправлениям
«Как создать встречу?»
→ [Жизненный цикл встречи](examples/meeting-lifecycle.md) — полные рабочие примеры
Связанные скиллы
| Скилл | Когда использовать |
|---|---|
| [zoom-oauth](../oauth/SKILL.md) | Реализация потоков OAuth, управление токенами |
| [zoom-webhooks](../webhooks/SKILL.md) | Подробная реализация вебхуков, каталог событий |
| [zoom-websockets](../websockets/SKILL.md) | Потоковая передача событий по WebSocket |
| [zoom-general](../general/SKILL.md) | Шаблоны для нескольких продуктов, репозитории сообщества |
Основано на Zoom REST API v2 (актуальная версия) и GraphQL v3 (бета)
Переменные окружения
- Стандартные ключи
.envи то, где найти каждое значение, — в [references/environment-variables.md](references/environment-variables.md).
Перевод: iiuniversitet. Оригинал: https://github.com/anthropics/knowledge-work-plugins/tree/main/partner-built/zoom-plugin/skills/rest-api, лицензия MIT. Изменения: перевод на русский язык.
Оригинал на английском
---
name: build-zoom-rest-api-app
description: "Reference skill for Zoom REST API. Use after choosing an API-based workflow when you need endpoint selection, resource-management patterns, OAuth requirements, rate-limit awareness, or API error debugging."
triggers:
- "api call"
- "rest api"
- "api create meeting"
- "api get meeting"
- "api list meetings"
- "api update meeting"
- "api delete meeting"
- "meeting endpoint"
- "/v2/meetings"
- "create user"
- "zoom api"
- "api endpoint"
- "recordings api"
- "users api"
- "webinars api"
- "server-to-server oauth"
- "account_credentials"
- "account id"
- "invalid access token"
- "does not contain scopes"
- "access token is expired"
- "webhook verification"
- "crc"
- "download_url"
---
# /build-zoom-rest-api-app
Background reference for deterministic server-side Zoom automation and resource management. Prefer `plan-zoom-product`, `plan-zoom-integration`, or `debug-zoom` first, then route here for endpoint-level detail.
# Zoom REST API
Expert guidance for building server-side integrations with the Zoom REST API. This API provides 600+ endpoints for managing meetings, users, webinars, recordings, reports, and all Zoom platform resources programmatically.
**Official Documentation**: https://developers.zoom.us/api-hub/
**API Hub Reference**: https://developers.zoom.us/api-hub/meetings/
**OpenAPI Inventories**: `https://developers.zoom.us/api-hub/<domain>/methods/endpoints.json`
## Quick Links
**New to Zoom REST API? Follow this path:**
1. **[API Architecture](concepts/api-architecture.md)** - Base URLs, regional URLs, `me` keyword, ID vs UUID, time formats
2. **[Authentication Flows](concepts/authentication-flows.md)** - OAuth setup (S2S, User, PKCE, Device Code)
3. **[Meeting URLs vs Meeting SDK](concepts/meeting-urls-and-sdk-joining.md)** - Stop mixing `join_url` with Meeting SDK
3. **[Meeting Lifecycle](examples/meeting-lifecycle.md)** - Create → Update → Start → End → Delete with webhooks
4. **[Rate Limiting Strategy](concepts/rate-limiting-strategy.md)** - Plan tiers, per-user limits, retry patterns
**Reference:**
- **[Meetings](references/meetings.md)** - Meeting CRUD, types, settings
- **[Users](references/users.md)** - User provisioning and management
- **[Recordings](references/recordings.md)** - Cloud recording access and download
- **[AI Services](references/ai-services.md)** - Scribe endpoint inventory and current AI Services path surface
- **[GraphQL Queries](examples/graphql-queries.md)** - Alternative query API (beta)
- **Integrated Index** - see the section below in this file
Most domain files under `references/` are aligned to the official API Hub `endpoints.json` inventories. Treat those files as the local source of truth for method/path discovery.
**Having issues?**
- Start with preflight checks → [5-Minute Runbook](RUNBOOK.md)
- 401 Unauthorized → [Authentication Flows](concepts/authentication-flows.md) (check token expiry, scopes)
- 429 Too Many Requests → [Rate Limiting Strategy](concepts/rate-limiting-strategy.md)
- Error codes → [Common Errors](troubleshooting/common-errors.md)
- Pagination confusion → [Common Issues](troubleshooting/common-issues.md)
- Webhooks not arriving → [Webhook Server](examples/webhook-server.md)
- Forum-derived FAQs → [Forum Top Questions](troubleshooting/forum-top-questions.md)
- Token/scope failures → [Token + Scope Playbook](troubleshooting/token-scope-playbook.md)
**Building event-driven integrations?**
- [Webhook Server](examples/webhook-server.md) - Express.js server with CRC validation
- [Recording Pipeline](examples/recording-pipeline.md) - Auto-download via webhook events
## Quick Start
### Get an Access Token (Server-to-Server OAuth)
```bash
curl -X POST "https://zoom.us/oauth/token" \
-H "Authorization: Basic $(echo -n 'CLIENT_ID:CLIENT_SECRET' | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=account_credentials&account_id=ACCOUNT_ID"
```
Response:
```json
{
"access_token": "eyJhbGciOiJIUzI1NiJ9...",
"token_type": "bearer",
"expires_in": 3600,
"scope": "meeting:read meeting:write user:read"
}
```
### Create a Meeting
```bash
curl -X POST "https://api.zoom.us/v2/users/HOST_USER_ID/meetings" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"topic": "Team Standup",
"type": 2,
"start_time": "2025-03-15T10:00:00Z",
"duration": 30,
"settings": {
"join_before_host": false,
"waiting_room": true
}
}'
```
For S2S OAuth, use an explicit host user ID or email in the path. Do not use `me`.
### List Users with Pagination
```bash
curl "https://api.zoom.us/v2/users?page_size=300&status=active" \
-H "Authorization: Bearer ACCESS_TOKEN"
```
## Base URL
```
https://api.zoom.us/v2
```
### Regional Base URLs
The `api_url` field in OAuth token responses indicates the user's region. Use regional URLs for data residency compliance:
| Region | URL |
|--------|-----|
| Global (default) | `https://api.zoom.us/v2` |
| Australia | `https://api-au.zoom.us/v2` |
| Canada | `https://api-ca.zoom.us/v2` |
| European Union | `https://api-eu.zoom.us/v2` |
| India | `https://api-in.zoom.us/v2` |
| Saudi Arabia | `https://api-sa.zoom.us/v2` |
| Singapore | `https://api-sg.zoom.us/v2` |
| United Kingdom | `https://api-uk.zoom.us/v2` |
| United States | `https://api-us.zoom.us/v2` |
**Note:** You can always use the global URL `https://api.zoom.us` regardless of the `api_url` value.
## Key Features
| Feature | Description |
|---------|-------------|
| **Meeting Management** | Create, read, update, delete meetings with full scheduling control |
| **User Provisioning** | Automated user lifecycle (create, update, deactivate, delete) |
| **Webinar Operations** | Webinar CRUD, registrant management, panelist control |
| **Cloud Recordings** | List, download, delete recordings with file-type filtering |
| **Reports & Analytics** | Usage reports, participant data, daily statistics |
| **Team Chat** | Channel management, messaging, chatbot integration |
| **Zoom Phone** | Call management, voicemail, call routing |
| **Zoom Rooms** | Room management, device control, scheduling |
| **Webhooks** | Real-time event notifications for 100+ event types |
| **WebSockets** | Persistent event streaming without public endpoints |
| **GraphQL (Beta)** | Single-endpoint flexible queries at `v3/graphql` |
| **AI Companion** | Meeting summaries, transcripts, AI-generated content |
| **AI Services / Scribe** | File and archive transcription via Build-platform JWT-authenticated endpoints |
## Prerequisites
- Zoom account (Free tier has API access with lower rate limits)
- App registered on [Zoom App Marketplace](https://marketplace.zoom.us/)
- OAuth credentials (Server-to-Server OAuth or User OAuth)
- Appropriate scopes for target endpoints
> **Need help with authentication?** See the **[zoom-oauth](../oauth/SKILL.md)** skill for complete OAuth flow implementation.
## Critical Gotchas and Best Practices
### ⚠️ JWT App Type is Deprecated
The JWT app type is deprecated. Migrate to **Server-to-Server OAuth**. This does NOT affect JWT token signatures used in Video SDK — only the Marketplace "JWT" app type for REST API access.
```javascript
// OLD (JWT app type - DEPRECATED)
const token = jwt.sign({ iss: apiKey, exp: expiry }, apiSecret);
// NEW (Server-to-Server OAuth)
const token = await getServerToServerToken(accountId, clientId, clientSecret);
```
### ⚠️ The `me` Keyword Rules
- **User-level OAuth apps**: MUST use `me` instead of `userId` (otherwise: invalid token error)
- **Server-to-Server OAuth apps**: MUST NOT use `me` — provide the actual `userId` or email
- **Account-level OAuth apps**: Can use either `me` or `userId`
### ⚠️ Meeting ID vs UUID — Double Encoding
UUIDs that begin with `/` or contain `//` must be **double URL-encoded**:
```javascript
// UUID: /abc==
// Single encode: %2Fabc%3D%3D
// Double encode: %252Fabc%253D%253D ← USE THIS
const uuid = '/abc==';
const encoded = encodeURIComponent(encodeURIComponent(uuid));
const url = `https://api.zoom.us/v2/meetings/${encoded}`;
```
### ⚠️ Time Formats
- `yyyy-MM-ddTHH:mm:ssZ` — **UTC time** (note the `Z` suffix)
- `yyyy-MM-ddTHH:mm:ss` — **Local time** (no `Z`, uses `timezone` field)
- Some report APIs only accept UTC. Check the API reference for each endpoint.
### ⚠️ Rate Limits Are Per-Account, Not Per-App
All apps on the same Zoom account **share** rate limits. One heavy app can impact others. Monitor `X-RateLimit-Remaining` headers proactively.
### ⚠️ Per-User Daily Limits
Meeting/Webinar create/update operations are limited to **100 per day per user** (resets at 00:00 UTC). Distribute operations across different host users when doing bulk operations.
### ⚠️ Download URLs Require Auth and Follow Redirects
Recording `download_url` values require Bearer token authentication and may redirect. Always follow redirects:
```bash
curl -L -H "Authorization: Bearer ACCESS_TOKEN" "https://zoom.us/rec/download/..."
```
### Use Webhooks Instead of Polling
```javascript
// DON'T: Poll every minute (wastes API quota)
setInterval(() => getMeetings(), 60000);
// DO: Receive webhook events in real-time
app.post('/webhook', (req, res) => {
if (req.body.event === 'meeting.started') {
handleMeetingStarted(req.body.payload);
}
res.status(200).send();
});
```
> **Webhook setup details:** See the **[zoom-webhooks](../webhooks/SKILL.md)** skill for comprehensive webhook implementation.
## Complete Documentation Library
This skill includes comprehensive guides organized by category:
### Core Concepts
- **[API Architecture](concepts/api-architecture.md)** - REST design, base URLs, regional routing, `me` keyword, ID vs UUID, time formats
- **[Authentication Flows](concepts/authentication-flows.md)** - All OAuth flows (S2S, User, PKCE, Device Code)
- **[Rate Limiting Strategy](concepts/rate-limiting-strategy.md)** - Limits by plan, retry patterns, request queuing
### Complete Examples
- **[Meeting Lifecycle](examples/meeting-lifecycle.md)** - Full Create → Update → Start → End → Delete flow with webhook events
- **[User Management](examples/user-management.md)** - CRUD users, list with pagination, bulk operations
- **[Recording Pipeline](examples/recording-pipeline.md)** - Download recordings via webhooks + API
- **[Webhook Server](examples/webhook-server.md)** - Express.js server with CRC validation and signature verification
- **[GraphQL Queries](examples/graphql-queries.md)** - GraphQL queries, mutations, cursor pagination
### Troubleshooting
- **[Common Errors](troubleshooting/common-errors.md)** - HTTP status codes, Zoom error codes, error response formats
- **[Common Issues](troubleshooting/common-issues.md)** - Rate limits, token refresh, pagination pitfalls, gotchas
### References (39 files covering all Zoom API domains)
#### Core APIs
- **[references/meetings.md](references/meetings.md)** - Meeting CRUD, types, settings
- **[references/users.md](references/users.md)** - User provisioning, types, scopes
- **[references/webinars.md](references/webinars.md)** - Webinar management, registrants
- **[references/recordings.md](references/recordings.md)** - Cloud recording access
- **[references/reports.md](references/reports.md)** - Usage reports, analytics
- **[references/accounts.md](references/accounts.md)** - Account management
#### Communication
- **[references/team-chat.md](references/team-chat.md)** - Team Chat messaging
- **[references/chatbot.md](references/chatbot.md)** - Interactive chatbots
- **[references/phone.md](references/phone.md)** - Zoom Phone
- **[references/mail.md](references/mail.md)** - Zoom Mail
- **[references/calendar.md](references/calendar.md)** - Zoom Calendar
#### Infrastructure
- **[references/rooms.md](references/rooms.md)** - Zoom Rooms
- **[references/scim2.md](references/scim2.md)** - SCIM 2.0 provisioning APIs
- **[references/rate-limits.md](references/rate-limits.md)** - Rate limit details
- **[references/qss.md](references/qss.md)** - Quality of Service Subscription
#### Advanced
- **[references/graphql.md](references/graphql.md)** - GraphQL API (beta)
- **[references/ai-companion.md](references/ai-companion.md)** - AI features
- **[references/authentication.md](references/authentication.md)** - Auth reference
- **[references/openapi.md](references/openapi.md)** - OpenAPI specs, Postman, code generation
#### Additional API Domains
- **[references/events.md](references/events.md)** - Events and event platform APIs
- **[references/scheduler.md](references/scheduler.md)** - Zoom Scheduler APIs
- **[references/tasks.md](references/tasks.md)** - Tasks APIs
- **[references/whiteboard.md](references/whiteboard.md)** - Whiteboard APIs
- **[references/video-management.md](references/video-management.md)** - Video management APIs
- **[references/video-sdk-api.md](references/video-sdk-api.md)** - Video SDK REST APIs
- **[references/marketplace-apps.md](references/marketplace-apps.md)** - Marketplace app management
- **[references/commerce.md](references/commerce.md)** - Commerce and billing APIs
- **[references/contact-center.md](references/contact-center.md)** - Contact Center APIs
- **[references/quality-management.md](references/quality-management.md)** - Quality management APIs
- **[references/workforce-management.md](references/workforce-management.md)** - Workforce management APIs
- **[references/healthcare.md](references/healthcare.md)** - Healthcare APIs
- **[references/auto-dialer.md](references/auto-dialer.md)** - Auto dialer APIs
- **[references/number-management.md](references/number-management.md)** - Number management APIs
- **[references/revenue-accelerator.md](references/revenue-accelerator.md)** - Revenue Accelerator APIs
- **[references/virtual-agent.md](references/virtual-agent.md)** - Virtual Agent APIs
- **[references/cobrowse-sdk-api.md](references/cobrowse-sdk-api.md)** - Cobrowse SDK APIs
- **[references/crc.md](references/crc.md)** - Cloud Room Connector APIs
- **[references/clips.md](references/clips.md)** - Clips APIs
- **[references/zoom-docs.md](references/zoom-docs.md)** - Zoom docs and source references
## Sample Repositories
### Official (by Zoom)
| Type | Repository |
|------|------------|
| OAuth Sample | [oauth-sample-app](https://github.com/zoom/oauth-sample-app) |
| S2S OAuth Starter | [server-to-server-oauth-starter-api](https://github.com/zoom/server-to-server-oauth-starter-api) |
| User OAuth | [user-level-oauth-starter](https://github.com/zoom/user-level-oauth-starter) |
| S2S Token | [server-to-server-oauth-token](https://github.com/zoom/server-to-server-oauth-token) |
| Rivet Library | [rivet-javascript](https://github.com/zoom/rivet-javascript) |
| WebSocket Sample | [websocket-js-sample](https://github.com/zoom/websocket-js-sample) |
| Webhook Sample | [webhook-sample-node.js](https://github.com/zoom/webhook-sample-node.js) |
| Python S2S | [server-to-server-python-sample](https://github.com/zoom/server-to-server-python-sample) |
## Resources
- **API Reference**: https://developers.zoom.us/api-hub/
- **GraphQL Playground**: https://nws.zoom.us/graphql/playground
- **Postman Collection**: https://marketplace.zoom.us/docs/api-reference/postman
- **Developer Forum**: https://devforum.zoom.us/
- **Changelog**: https://developers.zoom.us/changelog/
- **Status Page**: https://status.zoom.us/
---
**Need help?** Start with Integrated Index section below for complete navigation.
---
## Integrated Index
_This section was migrated from `SKILL.md`._
## Quick Start Path
**If you're new to the Zoom REST API, follow this order:**
1. **Run preflight checks first** → [RUNBOOK.md](RUNBOOK.md)
2. **Understand the API design** → [concepts/api-architecture.md](concepts/api-architecture.md)
- Base URLs, regional endpoints, `me` keyword rules
- Meeting ID vs UUID, double-encoding, time formats
3. **Set up authentication** → [concepts/authentication-flows.md](concepts/authentication-flows.md)
- Server-to-Server OAuth (backend automation)
- User OAuth with PKCE (user-facing apps)
- Cross-reference: [zoom-oauth](../oauth/SKILL.md)
4. **Create your first meeting** → [examples/meeting-lifecycle.md](examples/meeting-lifecycle.md)
- Full CRUD with curl and Node.js examples
- Webhook event integration
5. **Handle rate limits** → [concepts/rate-limiting-strategy.md](concepts/rate-limiting-strategy.md)
- Plan-based limits, retry patterns, request queuing
6. **Set up webhooks** → [examples/webhook-server.md](examples/webhook-server.md)
- CRC validation, signature verification, event handling
7. **Troubleshoot issues** → [troubleshooting/common-issues.md](troubleshooting/common-issues.md)
- Token refresh, pagination pitfalls, common gotchas
---
## Documentation Structure
```
rest-api/
├── SKILL.md # Main skill overview + quick start
├── SKILL.md # This file - navigation guide
│
├── concepts/ # Core architectural concepts
│ ├── api-architecture.md # REST design, URLs, IDs, time formats
│ ├── authentication-flows.md # OAuth flows (S2S, User, PKCE, Device)
│ └── rate-limiting-strategy.md # Limits by plan, retry, queuing
│
├── examples/ # Complete working code
│ ├── meeting-lifecycle.md # Create→Update→Start→End→Delete
│ ├── user-management.md # CRUD users, pagination, bulk ops
│ ├── recording-pipeline.md # Download recordings via webhooks
│ ├── webhook-server.md # Express.js CRC + signature verification
│ └── graphql-queries.md # GraphQL queries, mutations, pagination
│
├── troubleshooting/ # Problem solving
│ ├── common-errors.md # HTTP codes, Zoom error codes table
│ └── common-issues.md # Rate limits, tokens, pagination pitfalls
│
└── references/ # 39 domain-specific reference files
├── authentication.md # Auth methods reference
├── meetings.md # Meeting endpoints
├── users.md # User management endpoints
├── webinars.md # Webinar endpoints
├── recordings.md # Cloud recording endpoints
├── reports.md # Reports & analytics
├── accounts.md # Account management
├── rate-limits.md # Rate limit details
├── graphql.md # GraphQL API (beta)
├── zoom-team-chat.md # Team Chat messaging
├── chatbot.md # Chatbot integration
├── phone.md # Zoom Phone
├── rooms.md # Zoom Rooms
├── calendar.md # Zoom Calendar
├── mail.md # Zoom Mail
├── ai-companion.md # AI features
├── openapi.md # OpenAPI specs
├── qss.md # Quality of Service
├── contact-center.md # Contact Center
├── events.md # Zoom Events
├── whiteboard.md # Whiteboard
├── clips.md # Zoom Clips
├── scheduler.md # Scheduler
├── scim2.md # SCIM 2.0
├── marketplace-apps.md # App management
├── zoom-video-sdk-api.md # Video SDK REST
└── ... (39 total files)
```
---
## By Use Case
### I want to create and manage meetings
1. [API Architecture](concepts/api-architecture.md) - Base URL, time formats
2. [Meeting Lifecycle](examples/meeting-lifecycle.md) - Full CRUD + webhook events
3. [Meetings Reference](references/meetings.md) - All endpoints, types, settings
### I want to manage users programmatically
1. [User Management](examples/user-management.md) - CRUD, pagination, bulk ops
2. [Users Reference](references/users.md) - Endpoints, user types, scopes
### I want to download recordings automatically
1. [Recording Pipeline](examples/recording-pipeline.md) - Webhook-triggered downloads
2. [Recordings Reference](references/recordings.md) - File types, download auth
### I want to receive real-time events
1. [Webhook Server](examples/webhook-server.md) - CRC validation, signature check
2. Cross-reference: [zoom-webhooks](../webhooks/SKILL.md) for comprehensive webhook docs
3. Cross-reference: [zoom-websockets](../websockets/SKILL.md) for WebSocket events
### I want to use GraphQL instead of REST
1. [GraphQL Queries](examples/graphql-queries.md) - Queries, mutations, pagination
2. [GraphQL Reference](references/graphql.md) - Available entities, scopes, rate limits
### I want to set up authentication
1. [Authentication Flows](concepts/authentication-flows.md) - All OAuth methods
2. Cross-reference: [zoom-oauth](../oauth/SKILL.md) for full OAuth implementation
### I'm hitting rate limits
1. [Rate Limiting Strategy](concepts/rate-limiting-strategy.md) - Limits by plan, strategies
2. [Rate Limits Reference](references/rate-limits.md) - Detailed tables
3. [Common Issues](troubleshooting/common-issues.md) - Practical solutions
### I'm getting errors
1. [Common Errors](troubleshooting/common-errors.md) - Error code tables
2. [Common Issues](troubleshooting/common-issues.md) - Diagnostic workflow
### I want to build webinars
1. [Webinars Reference](references/webinars.md) - Endpoints, types, registrants
2. [Meeting Lifecycle](examples/meeting-lifecycle.md) - Similar patterns apply
### I want to integrate Zoom Phone
1. [Phone Reference](references/phone.md) - Phone API endpoints
2. [Rate Limiting Strategy](concepts/rate-limiting-strategy.md) - Separate Phone rate limits
---
## Most Critical Documents
### 1. API Architecture (FOUNDATION)
**[concepts/api-architecture.md](concepts/api-architecture.md)**
Essential knowledge before making any API call:
- Base URLs and regional endpoints
- The `me` keyword rules (different per app type!)
- Meeting ID vs UUID double-encoding
- ISO 8601 time formats (UTC vs local)
- Download URL authentication
### 2. Rate Limiting Strategy (MOST COMMON PRODUCTION ISSUE)
**[concepts/rate-limiting-strategy.md](concepts/rate-limiting-strategy.md)**
Rate limits are per-account, shared across all apps:
- Free: 4/sec Light, 2/sec Medium, 1/sec Heavy
- Pro: 30/sec Light, 20/sec Medium, 10/sec Heavy
- Business+: 80/sec Light, 60/sec Medium, 40/sec Heavy
- Per-user: 100 meeting create/update per day
### 3. Meeting Lifecycle (MOST COMMON TASK)
**[examples/meeting-lifecycle.md](examples/meeting-lifecycle.md)**
Complete CRUD with webhook integration — the pattern most developers need first.
---
## Key Learnings
### Critical Discoveries:
1. **JWT app type is deprecated** — use Server-to-Server OAuth
- The JWT *app type* on Marketplace is deprecated, NOT JWT token signatures
- See: [Authentication Flows](concepts/authentication-flows.md)
2. **`me` keyword behaves differently by app type**
- User OAuth: MUST use `me`
- S2S OAuth: MUST NOT use `me`
- See: [API Architecture](concepts/api-architecture.md)
3. **Rate limiting is nuanced (don’t assume a single global rule)**
- Limits can vary by endpoint and may be enforced at account/app/user levels
- Treat quotas as potentially shared across your account and implement backoff
- Monitor rate limit response headers (for example `X-RateLimit-Remaining`)
- See: [Rate Limiting Strategy](concepts/rate-limiting-strategy.md)
4. **100 meeting creates per user per day**
- This is a hard per-user limit, not related to rate limits
- Distribute across host users for bulk operations
- See: [Rate Limiting Strategy](concepts/rate-limiting-strategy.md)
5. **UUID double-encoding is required for certain UUIDs**
- UUIDs starting with `/` or containing `//` must be double-encoded
- See: [API Architecture](concepts/api-architecture.md)
6. **Pagination: use `next_page_token`, not `page_number`**
- `page_number` is legacy and being phased out
- `next_page_token` is the recommended approach
- See: [Common Issues](troubleshooting/common-issues.md)
7. **GraphQL is at `/v3/graphql`, not `/v2/`**
- Single endpoint, cursor-based pagination
- Rate limits apply per-field (each field = one REST equivalent)
- See: [GraphQL Queries](examples/graphql-queries.md)
---
## Quick Reference
### "401 Unauthorized"
→ [Authentication Flows](concepts/authentication-flows.md) - Token expired or wrong scopes
### "429 Too Many Requests"
→ [Rate Limiting Strategy](concepts/rate-limiting-strategy.md) - Check headers for reset time
### "Invalid token" when using userId
→ [API Architecture](concepts/api-architecture.md) - User OAuth apps must use `me`
### "How do I paginate results?"
→ [Common Issues](troubleshooting/common-issues.md) - Use `next_page_token`
### "Webhooks not arriving"
→ [Webhook Server](examples/webhook-server.md) - CRC validation required
### "Recording download fails"
→ [Recording Pipeline](examples/recording-pipeline.md) - Bearer auth + follow redirects
### "How do I create a meeting?"
→ [Meeting Lifecycle](examples/meeting-lifecycle.md) - Full working examples
---
## Related Skills
| Skill | Use When |
|-------|----------|
| **[zoom-oauth](../oauth/SKILL.md)** | Implementing OAuth flows, token management |
| **[zoom-webhooks](../webhooks/SKILL.md)** | Deep webhook implementation, event catalog |
| **[zoom-websockets](../websockets/SKILL.md)** | WebSocket event streaming |
| **[zoom-general](../general/SKILL.md)** | Cross-product patterns, community repos |
---
**Based on Zoom REST API v2 (current) and GraphQL v3 (beta)**
## Environment Variables
- See [references/environment-variables.md](references/environment-variables.md) for standardized `.env` keys and where to find each value.
Источник: anthropics/knowledge-work-plugins / zoom-plugin / build-zoom-rest-api-app ↗. Ссылка проверена 2026-10-10.