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

# Limites de débit

> 100 requêtes par minute et par clé, un compteur séparé pour le checkout, et comment réagir à une 429.

Pour protéger la plateforme et vos clients, l'API limite le nombre de requêtes **par clé**, pas par adresse IP : des outils comme Zapier ou Make partagent leurs adresses, et une limite par IP les pénaliserait injustement.

| Compteur | Limite | S'applique à |
| - | - | - |
| Général | 100 requêtes par minute | Tous les endpoints sauf le checkout |
| Checkout | 100 requêtes par minute, **compteur séparé** | `POST /checkout` |

Le compteur du checkout est indépendant : une synchronisation massive de ventes ne bloquera jamais la création d'un lien de paiement.

## Lire votre consommation

Chaque réponse indique où vous en êtes :

```http theme={null}
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1793290470
```

`X-RateLimit-Reset` est la fin de la fenêtre, en secondes Unix.

## Quand la limite est dépassée

```http theme={null}
HTTP/1.1 429 Too Many Requests
Retry-After: 23
```

```json theme={null}
{ "message": "Too Many Attempts.", "code": "rate_limited", "errors": [] }
```

Attendez `Retry-After` secondes, puis réessayez. Si l'en-tête manque, utilisez une attente croissante (1 s, 2 s, 4 s, 8 s) avec un peu d'aléatoire.

```javascript Node.js theme={null}
async function call(url, options, tries = 5) {
  for (let i = 0; i < tries; i++) {
    const res = await fetch(url, options);
    if (res.status !== 429) return res;
    const wait = Number(res.headers.get("retry-after")) || 2 ** i;
    await new Promise((r) => setTimeout(r, (wait + Math.random()) * 1000));
  }
  throw new Error("Limite de débit persistante");
}
```

```python Python theme={null}
import random, time, requests

def call(method, url, tries=5, **kw):
    for i in range(tries):
        r = requests.request(method, url, **kw)
        if r.status_code != 429:
            return r
        wait = int(r.headers.get("Retry-After", 2 ** i))
        time.sleep(wait + random.random())
    raise RuntimeError("Limite de débit persistante")
```

## Réduire votre consommation

* Utilisez `per_page=100` plutôt que dix petites pages.
* Ne scrutez pas : abonnez-vous à un [Pulse](https://docs.pulse-sell.com/pulses/overview.md) et recevez l'événement quand il se produit.
* Mettez en cache les données qui changent peu (produits, boutique).
* Si vous avez un besoin durable de volumes plus élevés, contactez-nous avec votre cas d'usage.

> [!NOTE]
>
> Les tentatives avec une clé invalide sont limitées à 30 par minute et par adresse IP, pour protéger vos clés contre les essais en rafale.


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