# Limites et quotas

> 120 requêtes par minute et par clé, les quotas de ton offre sur chaque période, et les quelques plafonds qui protègent Rustine et les sites scannés.

## Le débit : 120 requêtes par minute et par clé

Chaque réponse le dit dans ses en-têtes : `X-RateLimit-Limit` (le plafond), `X-RateLimit-Remaining` (ce qu'il reste dans la minute) et `X-RateLimit-Reset` (quand la fenêtre repart, en secondes Unix). Au-delà, l'API répond `429 rate_limited` avec `Retry-After` : attends ce délai et reprends. Le serveur MCP suit la même limite.

Pour suivre un scan, une requête toutes les 3 à 5 secondes suffit largement.

## Les quotas de ton offre

Ton offre te donne des scans rapides, des audits complets et des correctifs **par projet**, sur une période de 30 jours ; chaque projet en plus ajoute sa part. Une fois le quota de la période épuisé, Rustine prend sur tes crédits de packs s'il t'en reste. Sinon, l'action répond `402` (`scan_quota_exceeded`, `audit_quota_exceeded` ou `fix_quota_exceeded`) avec `upgrade_url`. [Ton offre et tes quotas](https://docs.rustine.io/api/account.md) te dit où tu en es.

Ce qui ne coûte rien :

- lire tes projets, tes scans et tes problèmes ;
- relire un correctif déjà débloqué ;
- relancer un scan du même type sur le même site dans l'heure : Rustine renvoie le résultat récent (`reused: true`) sans rien décompter ;
- analyser un dépôt GitHub ;
- revérifier un problème, dans la limite de 60 revérifications par projet et par jour.

## Les plafonds de Rustine

Quelques plafonds protègent la plateforme et les sites scannés. Tu ne devrais pas les croiser, mais ton code doit savoir quoi faire :

- **Trop de scans en même temps sur Rustine**, ou plafond du jour atteint pour toute la plateforme : un nouveau scan reçoit `503 platform_busy`. Réessaie dans quelques minutes ; rien n'a été décompté.
- **Revérifications** : 60 par projet et par jour, puis `429 recheck_limit_reached`.
- **Analyses de dépôt** : un nombre limité par espace sur 24 heures, poussées comprises, puis `429 repository_analyses_limit_reached`. Une revérification sur un dépôt relance au plus une analyse par quart d'heure.

Ces plafonds peuvent être resserrés en cas d'abus, sans préavis : traite toujours `429` et `503` comme « réessaie plus tard ».

| Offre | Projets compris | Scans rapides | Audits complets | Correctifs | Adresses par projet | API et MCP |
| --- | --- | --- | --- | --- | --- | --- |
| Gratuit | 1 | 10 | 0 | 3 offerts, une fois | 1 | non |
| Solo | 1 | 30 | 60 | 15 | 5 | essai de 14 jours |
| Pro | 3 | 100 | 60 | 30 | 20 | inclus |

Scans rapides, audits complets, correctifs : par projet et par mois.

## Exemples

### curl

```bash
curl -i https://api.rustine.io/v1/projects \
  -H "Authorization: Bearer $RUSTINE_API_KEY"
```

### Réponse : 429 Too Many Requests

```http
HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1792061520

{
  "error": {
    "type": "rate_limited",
    "code": "rate_limited",
    "message": "Trop de requêtes pour cette clé (120 par minute).",
    "doc_url": "https://docs.rustine.io/api/errors#rate_limited"
  }
}
```
