> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chataigne.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Limites de débit

> Comprenez les quotas de requêtes, les en-têtes de limite et les nouvelles tentatives sûres.

L’API Chataigne autorise actuellement **10 000 requêtes par tranche de 60 secondes pour chaque clé API**. Cette limite protège la disponibilité du service et empêche une intégration de le surcharger.

## En-têtes de réponse

Chaque réponse indique l’état actuel de la limite de la clé :

| En-tête                 | Signification                                          |
| ----------------------- | ------------------------------------------------------ |
| `X-RateLimit-Limit`     | Nombre maximal de requêtes dans la période actuelle.   |
| `X-RateLimit-Remaining` | Nombre de requêtes restantes dans la période actuelle. |
| `X-RateLimit-Reset`     | Moment auquel la période actuelle est réinitialisée.   |

Utilisez ces en-têtes pour la supervision et pour ralentir les traitements volumineux avant d’épuiser le quota.

## Lorsque la limite est dépassée

L’API renvoie `429 Too Many Requests` avec un corps `rate_limit_error` et un en-tête `Retry-After`. Ne retentez pas la requête avant l’expiration de ce délai.

```text theme={null}
HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 0
```

## Réessayer en toute sécurité

1. Respectez `Retry-After` lorsqu’il est présent.
2. Ajoutez un petit délai aléatoire pour éviter que plusieurs processus retentent au même instant.
3. Limitez le nombre de tentatives.
4. Utilisez les [clés d’idempotence](/fr/concepts/idempotency) lorsque vous retentez une création de ressource.
5. Réduisez la concurrence des imports par lots et utilisez une taille de [pagination](/fr/concepts/pagination) adaptée.

```javascript Node.js theme={null}
async function fetchWithRateLimitRetry(url, options, attempts = 4) {
  for (let attempt = 0; attempt < attempts; attempt += 1) {
    const response = await fetch(url, options);
    if (response.status !== 429) return response;

    const retryAfter = Number(response.headers.get('retry-after') ?? 1);
    const jitterMs = Math.floor(Math.random() * 250);
    await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000 + jitterMs));
  }
  throw new Error('Nombre maximal de nouvelles tentatives atteint');
}
```

<Note>
  Les limites peuvent évoluer. Lisez les en-têtes de réponse au lieu d’inscrire le quota actuel en dur dans la logique de votre application.
</Note>
