Account
Rate limits
Requests per minuut per abonnement, RPM- en dagelijkse USD-limieten per key, rate limit headers, Idempotency-Key en hoe je met 429 omgaat.
Rate limits beschermen je saldo en de dienst. Limieten worden geteld in requests per minuut (RPM) per API-key, en keys kunnen daarnaast een dagelijkse uitgavelimiet in USD hebben.
Limieten per abonnement
| Abonnement | Requests per minuut |
|---|---|
| Free | 5 |
| Pro | 100 |
| Team | 3000 |
| Enterprise | 3000+ |
Upgrade op de prijzenpagina om je limiet te verhogen.
Limieten per key
Wanneer je een key aanmaakt of bewerkt in API-keys, kun je het volgende instellen:
| Limiet | Effect |
|---|---|
| RPM-limiet | Begrenst het aantal requests per minuut voor deze key. De effectieve limiet is de laagste van de key-limiet en je abonnementslimiet. |
| Dagelijkse USD-limiet | Zodra de key vandaag (UTC) dit bedrag heeft uitgegeven, geven volgende requests 429 daily_limit_reached terug tot de volgende dag. |
| Model-allowlist | Alleen de vermelde model-id's kunnen met deze key worden gebruikt; andere geven 403 model_not_allowed terug. |
Het RPM-venster is één minuut en wordt per key geteld, dus aparte keys voor aparte apps delen geen limiet, maar elke key blijft begrensd door je abonnementslimiet.
Rate-limit-headers
Elk generatieantwoord (succes of fout) vertelt waar je staat, zodat je kunt vertragen voordat je de limiet raakt:
| Header | Betekenis |
|---|---|
X-RateLimit-Limit | Toegestane verzoeken in het huidige venster van één minuut voor deze sleutel. |
X-RateLimit-Remaining | Resterende verzoeken in het venster. |
X-RateLimit-Reset | Seconden tot het venster opnieuw begint. |
Browserclients kunnen ze ook lezen (ze staan in Access-Control-Expose-Headers).
Pieken en gelijktijdigheid
Verzoeken boven de limiet worden niet meteen geweigerd: ze wachten in een wachtrij en starten zodra het minuutvenster vrijkomt. Per account lopen maximaal 10 verzoeken tegelijk; de rest wacht tot er een klaar is. Voor de start wordt de geschatte maximale kosten van een verzoek samen met die van de lopende verzoeken van je saldo gereserveerd, zodat parallelle verzoeken nooit meer uitgeven dan je hebt. Een verzoek dat niet binnen 60 seconden kan starten, geeft 429 (rate_limited of concurrency_limit) met Retry-After; past de prijs niet meer in je saldo, dan volgt 402 insufficient_balance.
Veilig opnieuw proberen met Idempotency-Key
Na een netwerkfout weet je soms niet of het verzoek is aangekomen. Stuur een Idempotency-Key-header (een unieke tekenreeks tot 120 tekens, bijvoorbeeld een UUID) en probeer opnieuw met dezelfde sleutel: als het eerste verzoek al naar het model is gestuurd, geeft de herhaling 409 idempotency_conflict in plaats van de taak twee keer uit te voeren en te rekenen. Mislukte het eerste verzoek voordat het het model bereikte, dan komt de sleutel vrij en werkt de herhaling normaal. Een sleutel is 24 uur lang één keer per account bruikbaar.
curl https://api14.com/api/v1/images/generations \
-H "Authorization: Bearer $API14_KEY" \
-H "Idempotency-Key: 6f1c2a3e-order-1842" \
-H "Content-Type: application/json" \
-d '{"model": "black-forest-labs/flux-3-image", "prompt": "a red bicycle"}'
Als je een limiet bereikt
Te veel requests
HTTP/1.1 429 Too Many Requests
Retry-After: 60
{
"error": {
"message": "Rate limit of 5 requests per minute exceeded.",
"type": "rate_limit_error",
"code": "rate_limited"
}
}
Wacht het aantal seconden uit Retry-After af en probeer het dan opnieuw. De officiële OpenAI-SDK's proberen 429-responses automatisch opnieuw met backoff (standaard twee keer; in te stellen met maxRetries / max_retries).
Dagelijkse uitgavelimiet
{
"error": {
"message": "This API key reached its daily spend limit.",
"type": "rate_limit_error",
"code": "daily_limit_reached"
}
}
Opnieuw proberen helpt pas op de volgende UTC-dag. Verhoog of verwijder de dagelijkse limiet van de key in API-keys als dit verwacht verkeer is.
Upstream-limieten
Providers hebben hun eigen limieten, die strenger zijn voor :free-modelvarianten. Als een provider een request afknijpt, wordt zijn 429 aan je doorgegeven. Gebruik model-fallbacks of provider routing om de belasting over providers te verdelen.
Limieten afhandelen in code
- Respecteer
Retry-Afteren probeer opnieuw met exponentiële backoff en jitter. - Maak onderscheid tussen
rate_limited(later opnieuw proberen) endaily_limit_reachedeninsufficient_balance(opnieuw proberen helpt niet). - Zet achtergrondjobs in een wachtrij in plaats van ze allemaal tegelijk af te vuren.
- Stream lange responses: één gestreamde request telt als één request.
import time
from openai import OpenAI, RateLimitError
client = OpenAI(base_url="https://api14.com/api/v1", api_key="sk-api14-...", max_retries=0)
for attempt in range(5):
try:
r = client.chat.completions.create(model="openai/gpt-5-mini", messages=[{"role": "user", "content": "Hi"}])
break
except RateLimitError as e:
if e.code == "daily_limit_reached":
raise
time.sleep(int(e.response.headers.get("retry-after", 2 ** attempt)))
Zie Fouten voor alle statuscodes.