429 Too Many RequestsConcurrency limit exceeded for user, please retry laterA batch script that works with 1 worker and fails with 20An agent that fails only when it starts several subtasks at onceTwo apps on the same account that break each otherLe message vient de sub2api, la passerelle open source sur laquelle tournent beaucoup de services de relais d'API, donc vous pouvez le croiser chez plusieurs fournisseurs. La limite est fixée par compte utilisateur, pas par clé : deux clés du même compte puisent dans le même réservoir. La valeur par défaut de sub2api est de 5 requêtes simultanées.
La passerelle ne rejette pas la sixième requête tout de suite. Elle la met en file d'attente et la lance dès qu'une place se libère. Nous l'avons mesuré sur notre propre passerelle le 14 octobre 2026 avec une limite de 5 : 10 requêtes en même temps, les 10 ont réussi et la plus lente a pris 8,3 secondes ; 25 en même temps, les 25 ont réussi et la plus lente a pris 18,8 secondes. Les requêtes en trop ont attendu au lieu d'échouer. Quand vous voyez cette erreur, vous n'avez donc pas dépassé la limite un instant : vous êtes resté au-dessus assez longtemps pour qu'une requête n'obtienne pas de place à temps.
C'est pourquoi elle apparaît avec des requêtes longues plutôt qu'avec beaucoup de courtes. Une réponse en streaming, un modèle de raisonnement qui réfléchit une minute ou un agent qui attend un outil garde sa place tout ce temps. Cinq comme ça en même temps remplissent le compte, et tout ce qui suit attend jusqu'à abandonner.
Envoyez dix requêtes identiques en même temps et regardez les durées :
seq 1 10 | xargs -P 10 -I{} curl -s -o /dev/null \
-w '%{http_code} %{time_total}s\n' \
'YOUR_BASE_URL/chat/completions' \
-H 'Authorization: Bearer YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"model":"YOUR_MODEL","messages":[{"role":"user","content":"Count from 1 to 150."}]}'
Si les premières reviennent vite et le reste par vagues ensuite, ces vagues sont votre limite. Si certaines renvoient 429 avec ce message, la file a débordé : baissez la valeur de -P jusqu'à ce qu'aucune ne le fasse. C'est le parallélisme que votre compte supporte vraiment.
asyncio.Semaphore(5) en Python, p-limit en Node. Une boucle de relance plus lente ne règle rien ; la limite compte les requêtes ouvertes, seules moins de requêtes ouvertes aident.| Requêtes envoyées en même temps | Réussies | Réponse la plus lente |
|---|---|---|
| 10 (limite 5) | 10 sur 10 | 8,3 s |
| 25 (limite 5) | 25 sur 25 | 18,8 s |
Dernière vérification le 2026-10-14. Rédigé à partir de problèmes diagnostiqués sur une passerelle compatible OpenAI en production, pas compilé à partir d'autres sites.