Zurück zu den Leitfäden
Fehlerbehebung·5. August 2026·Aktualisiert am 30. September 2026·9 Min. Lesezeit

OpenAI-API-Ratenlimits – welches Limit Sie erreicht haben, wie Sie es lesen und welcher Retry es behebt

Ein 429 von OpenAI bedeutet, dass eine von fünf Obergrenzen überschritten wurde; je nach Obergrenze weisen die Lösungen in entgegengesetzte Richtungen. Hier erfahren Sie, wie Sie die Antwort direkt aus den Response-Headern lesen und welche Retry-Logik die Fehler tatsächlich beendet.

Zuletzt überprüft am .

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

MetrikMisstTypischerweise kritisch bei
RPMAnfragen pro MinuteViele kleine Aufrufe – Klassifizierung, Embeddings, Agentenschleifen
TPMTokens pro MinuteWenige große Aufrufe – RAG mit großem abgerufenem Kontext, lange Dokumente
RPDAnfragen pro TagFree- und niedrige Tiers; ein Batch-Job, der das Tageskontingent aufbraucht
TPDTokens pro TagDasselbe, in Tokens gemessen
IPMBilder pro MinuteWorkloads 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

Antwort (HTTP 429)
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.

HeaderBedeutung
retry-afterMindestanzahl an Sekunden, die vor einer Wiederholung gewartet werden muss
x-ratelimit-limit-requestsMaximal zulässige Anzahl von Anfragen, bevor das Limit erschöpft ist
x-ratelimit-remaining-requestsVerbleibende Anfragen, bevor das Limit erschöpft ist
x-ratelimit-limit-tokensMaximal zulässige Anzahl von Tokens
x-ratelimit-remaining-tokensVerbleibende Tokens
x-ratelimit-reset-requests / -reset-tokensZeit 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:

StufeVoraussetzungMonatliches Nutzungslimit
KostenlosNutzer in einer zugelassenen Region100 $ / Monat
Stufe 15 $ bezahlt100 $ / Monat
Stufe 250 $ bezahlt500 $ / Monat
Stufe 3100 $ bezahlt1.000 $ / Monat
Stufe 4250 $ bezahlt5.000 $ / Monat
Stufe 51.000 $ bezahlt200.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.

backoff.py
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:

backoff.ts
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.

observe_quota.py
# 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 object

Zwei 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:

gateway.py
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.