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

# Limites de débit

> Combien de requêtes vous pouvez envoyer et comment gérer les réponses 429.

> [!NOTE]
>
> L'API GetQR est en version bêta et réservée à certains espaces de travail. Certains détails peuvent changer avant la disponibilité générale.

L'API GetQR limite le nombre de requêtes que chaque clé API peut envoyer, pour qu'une seule intégration ne puisse pas ralentir l'API pour tout le monde.

## Limites

| Limite | Valeur |
| - | - |
| Requêtes par clé API | 600 par minute |

La limite est calculée sur une fenêtre glissante d'une minute et s'applique à tous les endpoints ensemble. La [vérification de l'état](https://docs.getqr.com/fr/api/endpoints/health.md) ne nécessite pas de clé et n'est pas comptée.

## En-têtes de limite de débit

Les réponses aux requêtes avec une clé API valide incluent ces en-têtes, y compris les réponses d'erreur :

| En-tête | Description |
| - | - |
| `X-RateLimit-Limit` | Nombre maximal de requêtes par fenêtre. |
| `X-RateLimit-Remaining` | Requêtes restantes dans la fenêtre en cours. |
| `X-RateLimit-Reset` | Moment où la fenêtre se réinitialise, sous forme de timestamp Unix en millisecondes. |
| `Retry-After` | Secondes avant la réinitialisation de la fenêtre, arrondies à l'entier supérieur. Attendez ce délai avant de réessayer. |

## En cas de dépassement de la limite

Au-delà de la limite, l'API répond `429` avec le code `rate_limit_exceeded` et les mêmes en-têtes :

```http theme={null}
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1792764060000
Retry-After: 37

{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Too many requests.",
    "doc_url": "https://getqr.com/account/api-docs#error-rate_limit_exceeded"
  }
}
```

Attendez l'heure de réinitialisation avant d'envoyer d'autres requêtes. Ajoutez un délai aléatoire (jitter) pour que plusieurs workers ne réessaient pas au même moment, et appliquez un backoff exponentiel sur les erreurs `5xx` :

```javascript theme={null}
async function getqrFetch(url, options = {}, maxRetries = 5) {
  for (let attempt = 0; ; attempt++) {
    const res = await fetch(url, {
      ...options,
      headers: {
        Authorization: `Bearer ${process.env.GETQR_API_KEY}`,
        ...options.headers,
      },
    });

    const retryable = res.status === 429 || res.status >= 500;
    if (!retryable || attempt >= maxRetries) return res;

    // On 429, wait for Retry-After (seconds). Otherwise back off: 1s, 2s, 4s…
    const retryAfter = Number(res.headers.get("Retry-After"));
    const wait =
      res.status === 429 && retryAfter > 0
        ? retryAfter * 1000
        : 1000 * 2 ** attempt;
    const jitter = Math.random() * 250;

    await new Promise((r) => setTimeout(r, wait + jitter));
  }
}
```

> [!TIP]
>
> Ne relancez `POST /api/v1/qrs` qu'avec un en-tête `Idempotency-Key`. Ainsi, une nouvelle tentative ne crée jamais de second QR code. Consultez [Idempotence](https://docs.getqr.com/fr/api/introduction.md#idempotence).

## Rester sous la limite

* Surveillez `X-RateLimit-Remaining` et ralentissez avant qu'il n'atteigne 0.
* Utilisez les [créations en masse](https://docs.getqr.com/fr/api/endpoints/bulk-qr-creations.md) plutôt qu'une requête par QR code.
* Récupérez jusqu'à 100 résultats par page avec `pageSize=100`. Consultez [Pagination](https://docs.getqr.com/fr/api/introduction.md#pagination).
* Mettez en cache les images de QR codes : les téléchargements renvoient un `ETag`, vous pouvez donc envoyer `If-None-Match` et obtenir `304 Not Modified` si rien n'a changé.

## Et ensuite

> [card] [Erreurs](https://docs.getqr.com/fr/api/errors.md)

> [card] [QR codes](https://docs.getqr.com/fr/api/endpoints/qr-codes.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.