Ein 429 von OpenAI bedeutet, dass Sie eine von fünf Obergrenzen überschritten haben – und die erste Aufgabe besteht darin, herauszufinden, welche, denn die Lösungen weisen in entgegengesetzte Richtungen. Diese Seite erklärt, was jedes Limit misst, wie Sie die Antwort direkt aus den Response-Headern ablesen, welche Wiederholungslogik die Fehler tatsächlich beendet und was zu tun ist, wenn korrektes Backoff nicht ausreicht.
Verifiziert 30. September 2026 anhand der Dokumentation zu OpenAI-Ratenlimits.
Fünf Limits, von denen jedes einzelne auslösen kann
| Metrik | Misst | Typischerweise kritisch bei |
|---|---|---|
| RPM | Anfragen pro Minute | Viele kleine Aufrufe – Klassifizierung, Embeddings, Agentenschleifen |
| TPM | Tokens pro Minute | Wenige große Aufrufe – RAG mit großem abgerufenem Kontext, lange Dokumente |
| RPD | Anfragen pro Tag | Free- und niedrige Tiers; ein Batch-Job, der das Tageskontingent aufbraucht |
| TPD | Tokens pro Tag | Dasselbe, in Tokens gemessen |
| IPM | Bilder pro Minute | Workloads zur Bildgenerierung |
Das zuerst erschöpfte Limit löst den Fehler aus. Daher ist „wir sind noch weit vom Tokenlimit entfernt“ kein Grund, ein Ratenlimit auszuschließen – möglicherweise sind Sie noch weit von TPM entfernt und liegen exakt auf RPM. Limits gelten pro Organisation und pro Modell, nicht pro Schlüssel: Das Erstellen zusätzlicher Schlüssel erstellt kein zusätzliches Kontingent.
Wie ein 429 aussieht
HTTP/1.1 429 Too Many Requests
retry-after: 12
x-ratelimit-limit-requests: 500
x-ratelimit-remaining-requests: 0
x-ratelimit-reset-requests: 12s
x-ratelimit-limit-tokens: 200000
x-ratelimit-remaining-tokens: 143820
x-ratelimit-reset-tokens: 17s
{
"error": {
"message": "Rate limit reached for gpt-5.4 in organization org-... on requests per min (RPM).",
"type": "requests",
"code": "rate_limit_exceeded"
}
}Alles, was Sie brauchen, befindet sich in dieser Antwort. Der Body nennt die Dimension („requests per min (RPM)“), und die Header geben die genaue Obergrenze, den verbleibenden Spielraum und den Zeitpunkt der Erholung an.
| Header | Bedeutung |
|---|---|
retry-after | Mindestanzahl an Sekunden, die vor einer Wiederholung gewartet werden muss |
x-ratelimit-limit-requests | Maximal zulässige Anzahl von Anfragen, bevor das Limit erschöpft ist |
x-ratelimit-remaining-requests | Verbleibende Anfragen, bevor das Limit erschöpft ist |
x-ratelimit-limit-tokens | Maximal zulässige Anzahl von Tokens |
x-ratelimit-remaining-tokens | Verbleibende Tokens |
x-ratelimit-reset-requests / -reset-tokens | Zeit bis zum Zurücksetzen jedes Zählers – sie werden unabhängig zurückgesetzt |
Nutzungstiers
Ihre Obergrenzen werden durch Ihr Nutzungstier festgelegt, das OpenAI automatisch hochstuft, sobald sich die kumulierten Ausgaben erhöhen:
| Stufe | Voraussetzung | Monatliches Nutzungslimit |
|---|---|---|
| Kostenlos | Nutzer in einer zugelassenen Region | 100 $ / Monat |
| Stufe 1 | 5 $ bezahlt | 100 $ / Monat |
| Stufe 2 | 50 $ bezahlt | 500 $ / Monat |
| Stufe 3 | 100 $ bezahlt | 1.000 $ / Monat |
| Stufe 4 | 250 $ bezahlt | 5.000 $ / Monat |
| Stufe 5 | 1.000 $ bezahlt | 200.000 $ / Monat |
Die RPM- und TPM-Zahlen pro Modell werden hier bewusst nicht wiedergegeben. Sie unterscheiden sich je nach Modell, ändern sich mit der Veröffentlichung neuer Modelle und können pro Konto angepasst werden. Jede Tabelle mit diesen Werten auf einer Drittanbieter-Seite ist daher eine datierte Vermutung. Die beiden maßgeblichen Quellen für Ihr eigenes Konto sind die Limits-Seite im OpenAI-Dashboard und die x-ratelimit-*-Header jeder Antwort, die Sie bereits senden. Lesen Sie die Header.
Die Lösung: Retry-After beachten, dann Jitter
Die dokumentierte Empfehlung von OpenAI lautet exponentielles Backoff mit Jitter, wobei Retry-After befolgt wird, wenn die Antwort diesen Header enthält. Beide Teile sind wichtig. Ohne den Header wiederholen Sie die Anfrage möglicherweise zu früh; ohne Jitter wiederholt jeder Client, der im selben Moment ausgefallen ist, die Anfrage ebenfalls im selben Moment und fällt gemeinsam aus – ein Thundering-Herd-Effekt, der aus einer schlechten Sekunde eine schlechte Minute macht.
import random, time
import openai
client = openai.OpenAI()
def call_with_backoff(fn, *, max_attempts=6, base=0.5, cap=30.0):
"""Retry 429s: honour Retry-After when present, jittered backoff otherwise."""
for attempt in range(max_attempts):
try:
return fn()
except openai.RateLimitError as err:
if attempt == max_attempts - 1:
raise
# The server's own answer beats any formula you invent.
retry_after = (err.response.headers or {}).get("retry-after")
if retry_after:
delay = float(retry_after)
else:
# Full jitter: sleep a random point in [0, 2^n * base], capped.
# Without the randomness every client that failed at the same
# instant retries at the same instant and fails again together.
delay = random.uniform(0, min(cap, base * 2**attempt))
time.sleep(delay)
resp = call_with_backoff(lambda: client.responses.create(
model="gpt-5.4",
input="Summarise this changelog in three bullets.",
))Dieselbe Struktur in TypeScript:
import OpenAI from "openai";
const client = new OpenAI();
const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));
export async function callWithBackoff<T>(
fn: () => Promise<T>,
{ maxAttempts = 6, baseMs = 500, capMs = 30_000 } = {},
): Promise<T> {
for (let attempt = 0; ; attempt++) {
try {
return await fn();
} catch (err) {
const status = (err as { status?: number }).status;
if (status !== 429 || attempt === maxAttempts - 1) throw err;
const retryAfter = (err as { headers?: Headers }).headers?.get("retry-after");
const delay = retryAfter
? Number(retryAfter) * 1000
: Math.random() * Math.min(capMs, baseMs * 2 ** attempt);
await sleep(delay);
}
}
}
const resp = await callWithBackoff(() =>
client.responses.create({ model: "gpt-5.4", input: "Hello" }),
);Die offiziellen SDKs wiederholen Anfragen bei 429-Fehlern bereits automatisch für Sie. Die meisten Anwendungen benötigen dies daher nur, wenn sie Aufrufe in einen eigenen HTTP-Client einbinden oder ein anderes Verhalten wünschen – eine längere maximale Wartezeit für Hintergrundaufgaben oder ein sofortiges Fehlschlagen einer nutzerseitigen Anfrage, bei der 12 Sekunden Wartezeit schlimmer sind als ein Fehler.
Überwachen, bevor es ausfällt
Die Zähler befinden sich in jeder Antwort, nicht nur in Fehlerantworten. Wenn Sie die verbleibenden Werte protokollieren, wird Ratenbegrenzung von einem Vorfall zu einer Messgröße – Sie sehen, wie der Spielraum Tage vor einer Erschöpfung durch einen Launch schrumpft.
# Log the remaining counters on every response, not just on failures.
# By the time you see a 429 the useful signal is already an hour old.
resp = client.responses.with_raw_response.create(model="gpt-5.4", input="…")
h = resp.headers
log.info(
"openai_quota model=%s req_left=%s tok_left=%s reset_req=%s reset_tok=%s",
"gpt-5.4",
h.get("x-ratelimit-remaining-requests"),
h.get("x-ratelimit-remaining-tokens"),
h.get("x-ratelimit-reset-requests"),
h.get("x-ratelimit-reset-tokens"),
)
parsed = resp.parse() # the normal response objectZwei Gewohnheiten lohnen sich zusätzlich: Alarmieren Sie, wenn x-ratelimit-remaining-tokens unter einen bestimmten Anteil des Limits fällt, statt nur auf die Anzahl der 429-Fehler zu reagieren, und fügen Sie Jitter zu Zeitplänen hinzu, nicht nur zu Wiederholungen. Ein Cronjob, der alles um :00 ausführt, erzeugt seine eigene Spitze.
Wenn Backoff nicht die Antwort ist
Korrektes Backoff behebt Spitzen. Bei anhaltender Nachfrage oberhalb Ihrer Obergrenze bewirkt es nichts – dort verschieben Wiederholungen den Fehler nur nach hinten. Die strukturellen Lösungen, grob nach Aufwand geordnet:
- Output begrenzen. Reasoning-Tokens werden berechnet und als Output gezählt. Eine unbegrenzte Generierung ist daher der schnellste Weg, TPM aufzubrauchen.
- Abgerufenen Kontext kürzen. Bei einer TPM-Obergrenze verdoppelt das Halbieren der abgerufenen Chunks Ihren Durchsatz kostenlos.
- Das Modell passend dimensionieren. Ein Klassifizierungsschritt benötigt kein Frontier-Modell, und kleine Modelle haben ihr eigenes separates Budget.
- Workloads trennen. Batch-Jobs und latenzkritischer Traffic, die um eine Obergrenze auf Organisationsebene konkurrieren, sind die häufigste selbst verursachte Variante dieses Problems.
- Tier erhöhen. Tiers steigen mit kumulierten Ausgaben, daher geschieht dies häufig ohnehin bereits.
Last über Modellfamilien verteilen
Der letzte Punkt dieser Liste ist der Bereich, in dem ein Gateway seinen Nutzen zeigt. Kunavo stellt eine OpenAI-kompatible API bereit – dasselbe SDK, dieselbe Aufrufform, ein Schlüssel – über mehrere Modellfamilien hinweg. Dadurch wird das Verlagern einer Workload von einer ausgelasteten Obergrenze zu einer Änderung des Modellstrings statt zu einer zweiten Integration:
from openai import OpenAI
client = OpenAI(
api_key="sk-kn-...",
base_url="https://api.kunavo.com/v1",
)
# Same SDK, same call shape — the model string chooses the family.
client.chat.completions.create(
model="gpt-5-6-terra", # or claude-sonnet-5, claude-haiku-4-5, …
messages=[{"role": "user", "content": "Hello"}],
)Konkret: Der Batch-Job zur Zusammenfassung, der mit Ihrem Produktions-Traffic konkurriert hat, kann auf claude-haiku-4-5 zu $0.70 / $3.50 pro 1 Mio. laufen, während der latenzkritische Pfad auf gpt-5-6-terra ($0.70 / $4.20) oder claude-sonnet-5 ($1.40 / $7.00) bleibt. Andere Familie, andere Warteschlange.
Machen Sie sich klar, was dies leistet und was nicht. Es beseitigt den Engpass „ein Konto – ein Modell“ und bietet Ihnen eine Ausweichmöglichkeit. Es erzeugt keine Kapazität: Wenn Ihr Gesamtvolumen tatsächlich das übersteigt, was ein einzelnes Tier erlaubt, müssen Sie weiterhin das Tier erhöhen oder weniger Arbeit ausführen. Die Preise für jedes Modell finden Sie auf der Preisseite; die entsprechende Anleitung für die Limits von Anthropic finden Sie unter Claude API 429 rate_limit_error.
Häufig gestellte Fragen
Wie hoch sind die API-Ratenlimits von OpenAI?
OpenAI misst gleichzeitig fünf Dimensionen – RPM (Anfragen pro Minute), TPM (Tokens pro Minute), RPD (Anfragen pro Tag), TPD (Tokens pro Tag) und IPM (Bilder pro Minute) – und gibt HTTP 429 zurück, sobald eine davon überschritten wird. Die tatsächlichen Obergrenzen hängen von Ihrem Nutzungstier und dem jeweiligen Modell ab. Die maßgeblichen Zahlen für Ihr Konto finden Sie daher auf der Limits-Seite Ihrer Organisation im OpenAI-Dashboard sowie in den x-ratelimit-*-Headern jeder Antwort, nicht in einer veröffentlichten Tabelle.
Welche OpenAI-Nutzungstiers gibt es?
Mit Stand 30. September 2026 dokumentiert OpenAI sechs Tiers, die jeweils durch kumulierte Ausgaben freigeschaltet werden und jeweils ein monatliches Nutzungslimit haben: Free (in unterstützten Regionen verfügbar, 100 $/Monat), Tier 1 nach 5 $ Zahlung (100 $/Monat), Tier 2 nach 50 $ Zahlung (500 $/Monat), Tier 3 nach 100 $ Zahlung (1.000 $/Monat), Tier 4 nach 250 $ Zahlung (5.000 $/Monat) und Tier 5 nach 1.000 $ Zahlung (200.000 $/Monat). Die Hochstufung erfolgt automatisch, sobald sich die Ausgaben summieren.
Wie behebe ich ein 429 rate_limit_exceeded von OpenAI?
Beachten Sie den Retry-After-Header, wenn die Antwort einen enthält. Andernfalls wiederholen Sie die Anfrage mit exponentiellem Backoff und zufälligem Jitter – das ist die eigene dokumentierte Empfehlung von OpenAI. Die offiziellen SDKs führen Wiederholungen bereits automatisch durch; ein selbst implementierter HTTP-Client muss dies übernehmen. Wenn 429-Fehler trotz korrektem Backoff bestehen bleiben, überschreiten Sie tatsächlich Ihr Kontingent, statt nur kurzzeitig Spitzen zu erzeugen. Die strukturellen Lösungen sind: kleinere Batches, eine Begrenzung der maximalen Output-Tokens, das Verteilen geplanter Jobs über die Minute oder der Wechsel in ein höheres Tier.
Welches Ratenlimit habe ich tatsächlich erreicht?
Lesen Sie die Header. Ein Wert von null bei x-ratelimit-remaining-requests bedeutet, dass Sie das Anfragelimit erreicht haben; null bei x-ratelimit-remaining-tokens bedeutet, dass Sie das Tokenlimit erreicht haben. Beide werden unabhängig zurückgesetzt – x-ratelimit-reset-requests und x-ratelimit-reset-tokens zeigen an, wann sich die jeweiligen Werte erholen. Auch der Nachrichtentext nennt die Dimension. Zwischen beiden zu raten kostet Zeit, denn die Lösungen sind entgegengesetzt: Anfragelimits erfordern Warteschlangen, Tokenlimits kleinere Prompts.
Gelten Ratenlimits pro Schlüssel oder pro Organisation?
Pro Organisation und pro Modell, nicht pro Schlüssel. Das Erstellen zusätzlicher API-Schlüssel schafft kein zusätzliches Kontingent. Deshalb konkurrieren eine ausgelastete Produktions-Workload und ein Batch-Job in derselben Organisation um dieselbe Obergrenze – und deshalb ist ihre Isolierung wichtiger als das Hinzufügen von Schlüsseln.
Kann ein Gateway bei OpenAI-Ratenlimits helfen?
Es hilft in dem Fall, dass die modellbezogene Obergrenze eines Kontos zum Engpass wird, denn ein Gateway ermöglicht es, Arbeit hinter demselben Schlüssel und mit demselben SDK auf eine andere Modellfamilie zu verlagern – ein Batch-Job zur Zusammenfassung muss nicht in derselben Warteschlange wie latenzkritischer Traffic sitzen. Kapazität aus dem Nichts schafft es nicht: Wenn das Gesamtvolumen tatsächlich über dem liegt, was ein einzelnes Tier erlaubt, müssen Sie weiterhin das Tier erhöhen oder den Arbeitsumfang reduzieren.
Warum werde ich bei einem brandneuen Konto gedrosselt?
Free- und Tier-1-Konten haben tägliche Obergrenzen (RPD und TPD), die höhere Tiers nicht haben. Daher kann ein kleines Testskript das Tageskontingent an einem Nachmittag aufbrauchen. Tier 1 wird ab einer kumulierten Zahlung von 5 $ freigeschaltet.
Kostet mich ein 429 etwas?
Nein – eine abgelehnte Anfrage wird nicht verarbeitet und nicht berechnet. Was sie kostet, ist Latenz sowie das, was Ihre Wiederholungslogik mit dieser Latenz macht.
Bekomme ich mit mehr API-Schlüsseln mehr Durchsatz?
Nein. Die Limits gelten pro Organisation und pro Modell. Zusätzliche Schlüssel sind für Zuordnung und Widerruf nützlich, nicht für zusätzliche Kapazität.
Soll ich 429 abfangen oder das SDK damit umgehen lassen?
Lassen Sie das SDK den Normalfall behandeln, und fangen Sie den Fehler selbst ab, wenn das Standardverhalten für Sie nicht passt: etwa bei einer nutzerseitigen Anfrage, die schnell fehlschlagen soll, oder bei einem Hintergrundjob, der eine deutlich längere Wartezeit als das Standardlimit verträgt.
Was ist mit 429-Fehlern, die eigentlich auf ein ausgeschöpftes Kontingent hinweisen?
Auch ein erschöpftes monatliches Nutzungslimit äußert sich als 429, und kein Backoff kann es beheben – der Nachrichtentext unterscheidet die beiden Fälle. Wenn die Zähler in den Headern unauffällig sind, Ihre Anfrage aber weiterhin abgelehnt wird, prüfen Sie die Abrechnung, bevor Sie Ihren Wiederholungscode ändern.