Limites de débit
Concevez votre intégration en tenant compte des limites exactes par clé selon le forfait, des en-têtes de réponse et des comportements de nouvelle tentative sûrs.
Concevez votre intégration en tenant compte des limites exactes par clé selon le forfait, des en-têtes de réponse et des comportements de nouvelle tentative sûrs.
L'API publique applique un compteur de requêtes sur une minute glissante à chaque clé API ou jeton d'accès OAuth. Créer davantage de clés pour contourner une limite n'est pas pris en charge et peut entraîner des restrictions sur vos identifiants ou votre compte.
Limites par forfait#
| Forfait actif | Requêtes par clé et par minute |
|---|---|
| Launch | 120 |
| Operate | 600 |
| Scale | 1 800 |
Un identifiant dont le compte n'a aucun forfait payant actif reçoit une erreur 403 subscription_required avant que toute capacité de débit ne lui soit accordée. Make Agent Fast peut introduire des limites plus basses, propres à certains endpoints, pour les opérations particulièrement coûteuses ; le cas échéant, la référence de l'endpoint les indiquera explicitement.
Une réponse limitée en débit#
Lorsque le quota est épuisé, l'API renvoie 429 rate_limit_exceeded avec :
HTTP/1.1 429 Too Many Requests
Retry-After: 17
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 0
X-Request-Id: 6c0b2f2e-...
Content-Type: application/jsonRetry-After indique le nombre minimal de secondes à attendre. Chaque réponse authentifiée inclut également X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset (un horodatage Unix), ce qui permet aux applications de limiter leur débit avant d'obtenir une erreur 429.
Implémenter les nouvelles tentatives#
Utilisez un backoff exponentiel avec un jitter aléatoire, respectez une valeur de Retry-After plus élevée et plafonnez le nombre total de tentatives.
async function requestWithRetry(url: string, init: RequestInit, attempts = 4) {
for (let attempt = 0; attempt < attempts; attempt += 1) {
const response = await fetch(url, init);
if (response.status !== 429 && response.status < 500) return response;
if (attempt === attempts - 1) return response;
const retryAfter = Number(response.headers.get("retry-after") ?? 0) * 1_000;
const exponential = 500 * 2 ** attempt;
const jitter = Math.random() * 250;
await new Promise((resolve) =>
setTimeout(resolve, Math.max(retryAfter, exponential + jitter)),
);
}
throw new Error("unreachable");
}Pour POST, PATCH et DELETE, conservez la même clé Idempotency-Key valide à chaque nouvelle tentative, qu'elle fasse suite à une erreur réseau ou serveur. Une nouvelle clé d'idempotence peut répéter un effet de bord déjà exécuté.
Réduire le volume de requêtes#
- Mettez en cache les lectures de compte, de site et de configuration qui n'exigent pas une fraîcheur en temps réel.
- Demandez jusqu'à
100enregistrements par page plutôt que de solliciter à répétition de très petites pages. - Traitez les événements de webhook au lieu d'interroger régulièrement les conversations, les leads ou les diffusions.
- Limitez la concurrence des workers par clé API : une rafale provenant de nombreuses invocations serverless partage le même compteur.
- Utilisez des clés distinctes pour des services distincts afin d'assurer l'isolation et la traçabilité, et non pour multiplier la capacité d'une même charge de travail.
Tableau des réponses à retenter ou non#
| Réponse | Nouvelle tentative ? | Condition |
|---|---|---|
429 | Oui | Attendez la durée indiquée par Retry-After, ajoutez du jitter et plafonnez le nombre de tentatives |
500 | Parfois | Lectures sûres ou mutations protégées par la même clé d'idempotence |
409 conflit de traitement | Oui | Attendez la durée de son en-tête Retry-After: 2 et conservez la même clé d'idempotence |
Autre 409 | Pas immédiatement | Lisez l'état actuel de la ressource et résolvez le conflit |
503 outcome_unknown | Non | La mutation a peut-être abouti ; vérifiez la ressource avant d'utiliser une nouvelle clé d'idempotence |
400, 401, 403, 404, 415 | Non | Corrigez d'abord les données saisies, les identifiants, les droits d'accès, le chemin ou le type de contenu |
Si une charge de travail soutenue dépasse légitimement le quota de son forfait, réduisez l'interrogation régulière, regroupez les traitements ou contactez le support en fournissant des identifiants de requête représentatifs et le trafic attendu, plutôt que d'ajouter une boucle de nouvelles tentatives sans limite.