We gebruiken cookies. Cookies en browseropslag houden je ingelogd en onthouden je voorkeuren. Met je toestemming meten we ook hoe de site wordt gebruikt. Je kunt je wanneer je wilt. Zie ons cookiebeleid.

Rate limits

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

AbonnementRequests per minuut
Free5
Pro100
Team3000
Enterprise3000+

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:

LimietEffect
RPM-limietBegrenst het aantal requests per minuut voor deze key. De effectieve limiet is de laagste van de key-limiet en je abonnementslimiet.
Dagelijkse USD-limietZodra de key vandaag (UTC) dit bedrag heeft uitgegeven, geven volgende requests 429 daily_limit_reached terug tot de volgende dag.
Model-allowlistAlleen 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:

HeaderBetekenis
X-RateLimit-LimitToegestane verzoeken in het huidige venster van één minuut voor deze sleutel.
X-RateLimit-RemainingResterende verzoeken in het venster.
X-RateLimit-ResetSeconden 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-After en probeer opnieuw met exponentiële backoff en jitter.
  • Maak onderscheid tussen rate_limited (later opnieuw proberen) en daily_limit_reached en insufficient_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.