Aller au contenu principal

Limites de débit

Les limites de débit s'appliquent par endpoint sur une fenêtre glissante de 60 secondes. Chaque endpoint a son propre compteur, donc atteindre la limite sur une route n'affecte jamais une autre. Dépasser une limite renvoie 429 Too Many Requests.

Fonctionnement

  • La fenêtre est de 1 minute pour chaque endpoint.
  • Les limites sont isolées par endpoint — list-boards et send-message comptent séparément.
  • Chaque réponse porte des en-têtes de limite de débit pour que vous puissiez vous réguler avant d'atteindre le plafond.

En-têtes de réponse

En-têteDescription
X-RateLimit-LimitNombre maximum de requêtes autorisées pour cet endpoint par fenêtre.
X-RateLimit-RemainingRequêtes restantes dans la fenêtre en cours.
X-RateLimit-ResetMoment de réinitialisation de la fenêtre en cours.
Retry-AfterSecondes à attendre avant de réessayer (envoyé sur 429 uniquement).

Limites par catégorie

Les limites se regroupent en quelques niveaux. Le plafond exact dépend de la lourdeur de l'opération.

CatégorieLimite typique (par minute)Exemples
Lectures50Lister boards, obtenir une ligne, lister channels, lister notifications, lister bookings
Lectures plus lourdes30Arbre docs, arbre drive, toutes les lectures /workspace/*
Écritures30Créer/mettre à jour/supprimer lignes, docs, commentaires, dossiers ; URLs d'upload pré-signées
Écritures lourdes20Écritures Markdown (ligne, colonne, doc), démarrage/finalisation d'upload multipart
Search60L'endpoint cross-entité /search (docs/drive search sont à 50)
Mutations de notifications60Marquer lu/non lu, supprimer
Messagerie100Envoyer un message de channel, envoyer un message direct
Export10Export de table async (l'endpoint le plus restreint)

Limites d'endpoints représentatives

EndpointMéthodeLimite / min
/board/list-boardsGET50
/board/{boardId}/table/{tableId}/rowsGET50
/board/{boardId}/table/{tableId}/rowPOST30
/board/{boardId}/table/{tableId}/row/{rowId}/mdPOST20
/board/{boardId}/table/{tableId}/exportPOST10
/docs/treeGET30
/docs/{docId}/mdPOST20
/drive/files/upload/multipart/startPOST20
/searchGET60
/notificationsGET50
/notifications/{notificationId}PATCH / DELETE60
/workspace/infoGET30
/chat/channelsGET50
/chat/channel/{channelId}/send-messagePOST100
note

Ces chiffres sont exacts au moment de la rédaction mais peuvent changer. Lisez toujours les en-têtes X-RateLimit-* à l'exécution plutôt que de coder les limites en dur — et consultez la Référence de l'API pour la valeur actuelle sur un endpoint spécifique.

La réponse 429

Lorsque vous dépassez une limite, l'endpoint renvoie :

{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Too many requests, please try again later",
"retryAfter": 27
}

L'en-tête Retry-After porte la même valeur (en secondes) que le champ retryAfter du corps — le temps jusqu'à la réinitialisation de la fenêtre.

Conseils de backoff

  • Honorez Retry-After. Sur un 429, attendez le nombre de secondes qu'il spécifie avant de réessayer.
  • Utilisez un backoff exponentiel en secours. Si aucun Retry-After n'est présent (par exemple sur un 5xx), reculez de façon exponentielle : 1s, 2s, 4s, …
  • Surveillez X-RateLimit-Remaining. Ralentissez de façon proactive lorsqu'il approche de zéro au lieu d'attendre un 429.
  • Étalez le travail en masse. Lorsque vous parcourez de grandes listes ou créez des lignes par lots, ajoutez un petit délai entre les appels pour rester sous le plafond par minute.
  • Plafonnez les retries. Abandonnez après quelques tentatives et remontez l'erreur plutôt que de réessayer indéfiniment.

Voir Gestion des erreurs pour un exemple de retry complet.