build-zoom-rest-api-app

Par anthropics · knowledge-work-plugins

Compétence de référence pour l'API REST Zoom. À utiliser après avoir choisi un workflow basé sur une API, lorsque vous avez besoin de sélectionner des endpoints, de gérer des ressources, de comprendre les exigences OAuth, de prendre en compte les rate limits ou de déboguer des erreurs API.

npx skills add https://github.com/anthropics/knowledge-work-plugins --skill build-zoom-rest-api-app

/build-zoom-rest-api-app

Référence de contexte pour l'automatisation serveur déterministe Zoom et la gestion des ressources. Préférez plan-zoom-product, plan-zoom-integration, ou debug-zoom d'abord, puis routez ici pour les détails au niveau des endpoints.

Zoom REST API

Conseils d'experts pour construire des intégrations côté serveur avec l'API REST Zoom. Cette API fournit 600+ endpoints pour gérer les réunions, les utilisateurs, les webinaires, les enregistrements, les rapports et toutes les ressources de la plateforme Zoom par programmation.

Documentation officielle : https://developers.zoom.us/api-hub/ Référence API Hub : https://developers.zoom.us/api-hub/meetings/ Inventaires OpenAPI : https://developers.zoom.us/api-hub/<domain>/methods/endpoints.json

Liens rapides

Nouveau sur l'API REST Zoom ? Suivez ce chemin :

  1. Architecture API - URLs de base, URLs régionales, mot-clé me, ID vs UUID, formats de temps
  2. Flux d'authentification - Configuration OAuth (S2S, User, PKCE, Device Code)
  3. URLs de réunion vs Meeting SDK - Arrêtez de mélanger join_url avec Meeting SDK
  4. Cycle de vie de la réunion - Create → Update → Start → End → Delete avec webhooks
  5. Stratégie de limitation de débit - Niveaux de plan, limites par utilisateur, modèles de retry

Référence :

  • Réunions - CRUD réunions, types, paramètres
  • Utilisateurs - Provisionnement et gestion des utilisateurs
  • Enregistrements - Accès aux enregistrements cloud et téléchargement
  • Services IA - Inventaire des endpoints Scribe et surface actuelle des services IA
  • Requêtes GraphQL - API de requête alternative (bêta)
  • Index intégré - voir la section ci-dessous dans ce fichier

La plupart des fichiers de domaine sous references/ sont alignés avec les inventaires endpoints.json du hub API officiel. Traitez ces fichiers comme la source de vérité locale pour la découverte des méthodes/chemins.

Vous rencontrez des problèmes ?

Vous construisez des intégrations basées sur les événements ?

Démarrage rapide

Obtenir un jeton d'accès (OAuth Server-to-Server)

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"

Réponse :

{
  "access_token": "eyJhbGciOiJIUzI1NiJ9...",
  "token_type": "bearer",
  "expires_in": 3600,
  "scope": "meeting:read meeting:write user:read"
}

Créer une réunion

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
    }
  }'

Pour OAuth S2S, utilisez un ID utilisateur hôte explicite ou un email dans le chemin. N'utilisez pas me.

Lister les utilisateurs avec pagination

curl "https://api.zoom.us/v2/users?page_size=300&status=active" \
  -H "Authorization: Bearer ACCESS_TOKEN"

URL de base

https://api.zoom.us/v2

URLs de base régionales

Le champ api_url dans les réponses de token OAuth indique la région de l'utilisateur. Utilisez les URLs régionales pour la conformité à la résidence des données :

Région URL
Global (défaut) https://api.zoom.us/v2
Australie https://api-au.zoom.us/v2
Canada https://api-ca.zoom.us/v2
Union européenne https://api-eu.zoom.us/v2
Inde https://api-in.zoom.us/v2
Arabie saoudite https://api-sa.zoom.us/v2
Singapour https://api-sg.zoom.us/v2
Royaume-Uni https://api-uk.zoom.us/v2
États-Unis https://api-us.zoom.us/v2

Note : Vous pouvez toujours utiliser l'URL globale https://api.zoom.us indépendamment de la valeur api_url.

Fonctionnalités clés

Fonctionnalité Description
Gestion des réunions Créer, lire, mettre à jour, supprimer des réunions avec contrôle d'ordonnancement complet
Provisionnement utilisateur Cycle de vie automatisé des utilisateurs (créer, mettre à jour, désactiver, supprimer)
Opérations webinaire CRUD webinaire, gestion des inscrits, contrôle des panélistes
Enregistrements cloud Lister, télécharger, supprimer des enregistrements avec filtrage par type de fichier
Rapports et analyses Rapports d'utilisation, données des participants, statistiques quotidiennes
Team Chat Gestion des canaux, messagerie, intégration de chatbot
Zoom Phone Gestion des appels, messagerie vocale, routage des appels
Zoom Rooms Gestion des salles, contrôle des appareils, ordonnancement
Webhooks Notifications d'événements en temps réel pour 100+ types d'événements
WebSockets Streaming d'événements persistant sans endpoints publics
GraphQL (Bêta) - Requêtes flexibles à endpoint unique à v3/graphql
AI Companion Résumés de réunion, transcriptions, contenu généré par l'IA
Services IA / Scribe Transcription de fichiers et d'archives via endpoints authentifiés JWT de plateforme Build

Prérequis

  • Compte Zoom (le niveau gratuit a accès aux APIs avec des limites de débit plus basses)
  • Application enregistrée sur Zoom App Marketplace
  • Identifiants OAuth (OAuth Server-to-Server ou OAuth User)
  • Scopes appropriés pour les endpoints cibles

Besoin d'aide avec l'authentification ? Voir le skill zoom-oauth pour l'implémentation complète du flux OAuth.

Pièges critiques et bonnes pratiques

⚠️ Le type d'application JWT est déprécié

Le type d'application JWT est déprécié. Migrez vers OAuth Server-to-Server. Cela N'affecte PAS les signatures de token JWT utilisées dans Video SDK — uniquement le type d'application "JWT" de la Marketplace pour l'accès à l'API REST.

// ANCIEN (type d'application JWT - DÉPRÉCIÉ)
const token = jwt.sign({ iss: apiKey, exp: expiry }, apiSecret);

// NOUVEAU (OAuth Server-to-Server)
const token = await getServerToServerToken(accountId, clientId, clientSecret);

⚠️ Les règles du mot-clé me

  • Applications OAuth au niveau utilisateur : DOIVENT utiliser me à la place de userId (sinon : erreur de token invalide)
  • Applications OAuth Server-to-Server : NE DOIVENT PAS utiliser me — fournissez le userId ou l'email réel
  • Applications OAuth au niveau compte : Peuvent utiliser soit me soit userId

⚠️ ID de réunion vs UUID — Double encodage

Les UUIDs qui commencent par / ou contiennent // doivent être double URL-encodés :

// UUID: /abc==
// Encodage simple : %2Fabc%3D%3D
// Double encodage : %252Fabc%253D%253D  ← UTILISEZ CECI

const uuid = '/abc==';
const encoded = encodeURIComponent(encodeURIComponent(uuid));
const url = `https://api.zoom.us/v2/meetings/${encoded}`;

⚠️ Formats de temps

  • yyyy-MM-ddTHH:mm:ssZheure UTC (notez le suffixe Z)
  • yyyy-MM-ddTHH:mm:ssheure locale (pas de Z, utilise le champ timezone)
  • Certaines APIs de rapport n'acceptent que UTC. Vérifiez la référence API pour chaque endpoint.

⚠️ Les limites de débit sont par compte, pas par application

Toutes les applications sur le même compte Zoom partagent les limites de débit. Une application lourde peut impacter les autres. Surveillez proactivement les en-têtes X-RateLimit-Remaining.

⚠️ Limites quotidiennes par utilisateur

Les opérations de création/mise à jour de réunion/webinaire sont limitées à 100 par jour par utilisateur (réinitialisation à 00:00 UTC). Distribuez les opérations sur différents utilisateurs hôtes lors des opérations en masse.

⚠️ Les URLs de téléchargement nécessitent une authentification et suivent les redirections

Les valeurs download_url des enregistrements nécessitent une authentification par token Bearer et peuvent rediriger. Suivez toujours les redirections :

curl -L -H "Authorization: Bearer ACCESS_TOKEN" "https://zoom.us/rec/download/..."

Utilisez les webhooks au lieu du polling

// À NE PAS FAIRE : Polling toutes les minutes (gaspille le quota API)
setInterval(() => getMeetings(), 60000);

// À FAIRE : Recevez les événements webhook en temps réel
app.post('/webhook', (req, res) => {
  if (req.body.event === 'meeting.started') {
    handleMeetingStarted(req.body.payload);
  }
  res.status(200).send();
});

Détails de configuration webhook : Voir le skill zoom-webhooks pour l'implémentation complète des webhooks.

Bibliothèque de documentation complète

Ce skill inclut des guides complets organisés par catégorie :

Concepts fondamentaux

Exemples complets

Dépannage

  • Erreurs courantes - Codes d'état HTTP, codes d'erreur Zoom, formats de réponse d'erreur
  • Problèmes courants - Limites de débit, refresh de token, pièges de pagination, gotchas

Références (39 fichiers couvrant tous les domaines API Zoom)

APIs principales

Communication

Infrastructure

Avancé

Domaines API supplémentaires

Exemples de dépôts

Officiels (par Zoom)

Type Repository
Exemple OAuth oauth-sample-app
Starter S2S OAuth server-to-server-oauth-starter-api
OAuth utilisateur user-level-oauth-starter
Token S2S server-to-server-oauth-token
Librairie Rivet rivet-javascript
Exemple WebSocket websocket-js-sample
Exemple Webhook webhook-sample-node.js
S2S Python server-to-server-python-sample

Ressources


Besoin d'aide ? Commencez par la section Index intégré ci-dessous pour une navigation complète.


Index intégré

Cette section a été migrée de SKILL.md.

Chemin de démarrage rapide

Si vous êtes nouveau sur l'API REST Zoom, suivez cet ordre :

  1. Exécutez d'abord les vérifications préalablesRUNBOOK.md

  2. Comprenez la conception de l'APIconcepts/api-architecture.md

    • URLs de base, endpoints régionaux, règles du mot-clé me
    • ID de réunion vs UUID, double-encodage, formats de temps
  3. Configurez l'authentificationconcepts/authentication-flows.md

    • OAuth Server-to-Server (automatisation backend)
    • OAuth User avec PKCE (applications orientées utilisateur)
    • Référence croisée : zoom-oauth
  4. Créez votre première réunionexamples/meeting-lifecycle.md

    • CRUD complet avec exemples curl et Node.js
    • Intégration d'événements webhook
  5. Gérez les limites de débitconcepts/rate-limiting-strategy.md

    • Limites basées sur le plan, modèles de retry, mise en file d'attente des requêtes
  6. Configurez les webhooksexamples/webhook-server.md

    • Validation CRC, vérification de signature, gestion d'événements
  7. Dépannez les problèmestroubleshooting/common-issues.md

    • Refresh de token, pièges de pagination, gotchas courants

Structure de la documentation

rest-api/
├── SKILL.md                              # Aperçu du skill principal + démarrage rapide
├── SKILL.md                              # Ce fichier - guide de navigation
│
├── concepts/                             # Concepts architecturaux fondamentaux
│   ├── api-architecture.md              # Design REST, URLs, IDs, formats de temps
│   ├── authentication-flows.md          # Flux OAuth (S2S, User, PKCE, Device)
│   └── rate-limiting-strategy.md        # Limites par plan, retry, mise en file
│
├── examples/                             # Code complet fonctionnel
│   ├── meeting-lifecycle.md             # Create→Update→Start→End→Delete
│   ├── user-management.md              # CRUD utilisateurs, pagination, ops en masse
│   ├── recording-pipeline.md           # Téléchargement d'enregistrements via webhooks
│   ├── webhook-server.md               # Express.js CRC + vérification de signature
│   └── graphql-queries.md              # Requêtes GraphQL, mutations, pagination
│
├── troubleshooting/                      # Résolution de problèmes
│   ├── common-errors.md                # Codes HTTP, table des codes d'erreur Zoom
│   └── common-issues.md               # Limites de débit, tokens, pièges de pagination
│
└── references/                           # 39 fichiers de référence spécifiques au domaine
    ├── authentication.md                # Référence des méthodes d'authentification
    ├── meetings.md                      # Endpoints de réunions
    ├── users.md                         # Endpoints de gestion d'utilisateurs
    ├── webinars.md                      # Endpoints webinaire
    ├── recordings.md                    # Endpoints d'enregistrement cloud
    ├── reports.md                       # Rapports et analyses
    ├── accounts.md                      # Gestion de compte
    ├── rate-limits.md                   # Détails des limites de débit
    ├── graphql.md                       # API GraphQL (bêta)
    ├── zoom-team-chat.md                     # Messagerie Team Chat
    ├── chatbot.md                       # Intégration de chatbot
    ├── phone.md                         # Zoom Phone
    ├── rooms.md                         # Zoom Rooms
    ├── calendar.md                      # Zoom Calendar
    ├── mail.md                          # Zoom Mail
    ├── ai-companion.md                  # Fonctionnalités IA
    ├── openapi.md                       # Spécifications 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              # Gestion des applications
    ├── zoom-video-sdk-api.md                 # REST Video SDK
    └── ... (39 fichiers au total)

Par cas d'usage

Je veux créer et gérer des réunions

  1. Architecture API - URL de base, formats de temps
  2. Cycle de vie de la réunion - CRUD complet + événements webhook
  3. Référence des réunions - Tous les endpoints, types, paramètres

Je veux gérer les utilisateurs par programmation

  1. Gestion des utilisateurs - CRUD, pagination, ops en masse
  2. Référence des utilisateurs - Endpoints, types d'utilisateurs, scopes

Je veux télécharger les enregistrements automatiquement

  1. Pipeline d'enregistrement - Téléchargements déclenchés par webhook
  2. Référence des enregistrements - Types de fichiers, authentification de téléchargement

Je veux recevoir des événements en temps réel

  1. Serveur Webhook - Validation CRC, vérification de signature
  2. Référence croisée : zoom-webhooks pour la documentation complète des webhooks
  3. Référence croisée : zoom-websockets pour les événements WebSocket

Je veux utiliser GraphQL à la place de REST

  1. Requêtes GraphQL - Requêtes, mutations, pagination
  2. Référence GraphQL - Entités disponibles, scopes, limites de débit

Je veux configurer l'authentification

  1. Flux d'authentification - Toutes les méthodes OAuth
  2. Référence croisée : zoom-oauth pour l'implémentation OAuth complète

Je suis en train de heurter les limites de débit

  1. Stratégie de limitation de débit - Limites par plan, stratégies
  2. Référence des limites de débit - Tableaux détaillés
  3. Problèmes courants - Solutions pratiques

J'obtiens des erreurs

  1. Erreurs courantes - Tables de codes d'erreur
  2. Problèmes courants - Flux de diagnostic

Je veux construire des webinaires

  1. Référence des webinaires - Endpoints, types, inscrits
  2. Cycle de vie de la réunion - Des modèles similaires s'appliquent

Je veux intégrer Zoom Phone

  1. Référence Phone - Endpoints API Phone
  2. Stratégie de limitation de débit - Limites de débit séparées pour Phone

Documents les plus critiques

1. Architecture API (FONDATION)

concepts/api-architecture.md

Connaissances essentielles avant d'effectuer tout appel API :

  • URLs de base et endpoints régionaux
  • Règles du mot-clé me (différentes par type d'application !)
  • Double-encodage ID de réunion vs UUID
  • Formats de temps ISO 8601 (UTC vs local)
  • Authentification des URLs de téléchargement

2. Stratégie de limitation de débit (PROBLÈME DE PRODUCTION LE PLUS COURANT)

concepts/rate-limiting-strategy.md

Les limites de débit sont par compte, partagées entre toutes les applications :

  • Gratuit : 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
  • Par utilisateur : 100 créations/mises à jour de réunions par jour

3. Cycle de vie de la réunion (TÂCHE LA PLUS COURANTE)

examples/meeting-lifecycle.md

CRUD complet avec intégration webhook — le modèle que la plupart des développeurs ont besoin en premier.


Apprentissages clés

Découvertes critiques :

  1. Le type d'application JWT est déprécié — utilisez OAuth Server-to-Server

    • Le type d'application JWT sur la Marketplace est déprécié, PAS les signatures de token JWT
    • Voir : Flux d'authentification
  2. Le mot-clé me se comporte différemment selon le type d'application

    • OAuth User : DOIT utiliser me
    • OAuth S2S : NE DOIT PAS utiliser me
    • Voir : Architecture API
  3. La limitation de débit est nuancée (ne supposez pas une règle globale unique)

    • Les limites peuvent varier selon l'endpoint et être appliquées au niveau du compte/application/utilisateur
    • Traitez les quotas comme potentiellement partagés sur votre compte et implémentez un backoff
    • Surveillez les en-têtes de réponse des limites de débit (par exemple X-RateLimit-Remaining)
    • Voir : Stratégie de limitation de débit
  4. 100 créations de réunions par utilisateur par jour

    • Ceci est une limite stricte par utilisateur, non liée aux limites de débit
    • Distribuez entre les utilisateurs hôtes pour les opérations en masse
    • Voir : Stratégie de limitation de débit
  5. Le double-encodage UUID est requis pour certains UUIDs

    • Les UUIDs commençant par / ou contenant // doivent être double-encodés
    • Voir : Architecture API
  6. Pagination : utilisez next_page_token, pas page_number

    • page_number est un héritage et est progressivement supprimé
    • next_page_token est l'approche recommandée
    • Voir : Problèmes courants
  7. GraphQL est à /v3/graphql, pas /v2/

    • Endpoint unique, pagination basée sur curseur
    • Les limites de débit s'appliquent par champ (chaque champ = un équivalent REST)
    • Voir : Requêtes GraphQL

Référence rapide

"401 Unauthorized"

Flux d'authentification - Token expiré ou mauvais scopes

"429 Too Many Requests"

Stratégie de limitation de débit - Vérifiez les en-têtes pour le temps de réinitialisation

"Invalid token" lors de l'utilisation de userId

Architecture API - Les applications OAuth User doivent utiliser me

"Comment paginer les résultats ?"

Problèmes courants - Utilisez next_page_token

"Webhooks non reçus"

Serveur Webhook - Validation CRC requise

"Téléchargement d'enregistrement échoue"

Pipeline d'enregistrement - Authentification Bearer + suivez les redirections

"Comment créer une réunion ?"

Cycle de vie de la réunion - Exemples complets fonctionnels


Skills connexes

Skill Utiliser quand
zoom-oauth Implémentation des flux OAuth, gestion des tokens
zoom-webhooks Implémentation approfondie des webhooks, catalogue d'événements
zoom-websockets Streaming d'événements WebSocket
zoom-general Modèles multi-produits, repos communautaires

Basé sur l'API REST Zoom v2 (actuelle) et GraphQL v3 (bêta)

Variables d'environnement

Skills similaires