Alle Beiträge

FourA Digest, 17. Juli bis 24. Juli 2026

Quota-Ablehnungen liefern nun HTTP 429 mit Retry-After. Die Preisübersicht zeigt die Bandbreite für alle öffentlichen Pläne: Unbegrenzt. Und ein sauberer 403 für Geo-Targeting.

Highlights

Antworten bei überschrittenem Kontingent liefern jetzt HTTP 429 mit einem Retry-After Header, passend zu dem, was OpenAI, GitHub und Cloudflare senden. Die Preisseite hat eine Bandbreiten-Zeile erhalten (jeder öffentliche Plan ist unlimitiert). Und Anfragen, die nach exitCountries in einem Plan ohne Geo-Targeting verlangen, erhalten jetzt einen sauberen 403-Fehler, der den Parameter und die Lösung nennt.

Was ist neu

Quota-Limits nutzen jetzt HTTP 429, nicht 402

Wenn du ein Plan-Limit erreichst (Credits oder Bandbreite), lautet die Antwort 429 Too Many Requests mit Retry-After bei jeder Antwort und resets_at im Body, der auf das Ende deines Abrechnungszeitraums verweist. Das Feld reason sagt dir, welches Limit du erreicht hast (plan_limit_credits oder plan_limit_bandwidth), damit es nicht mit den Ratenlimits pro Minute kollidiert.

Warum die Änderung? 402 klingt richtig ("Payment Required"), aber in der Praxis meldet Stripe so fehlgeschlagene Zahlungen, und einige HTTP-Clients und Proxys verarbeiten es falsch. OpenAI, GitHub, Twilio und Cloudflare lehnen alle überschrittenen Quotas mit 429 und einem eigenen Fehlercode ab. Dem Standard zu folgen, ist hier der richtige Weg: Jede Retry-Bibliothek auf dem Planeten weiß bereits, was mit unseren Antworten zu tun ist.

Der Wert Retry-After ist auf 24 Stunden begrenzt für Leute, die Sleep-and-Retry nutzen. Wenn du die echte Reset-Zeit willst, lies resets_at aus dem JSON-Body.

Bandbreite auf der Preisseite: Unlimitiert

/prices hat eine Bandbreiten-Zeile in der Vergleichsmatrix erhalten. Jeder öffentliche Plan bietet unlimitierte Bandbreite, und die Matrix sagt das jetzt deutlich. Das braucht man erst, wenn ein Interessent fragt und man die Zahl nicht findet. Jetzt steht es auf der Seite.

Benutzerdefinierte Pläne, die die Bandbreite begrenzen, zeigen ihren GB-Wert in derselben Zeile.

Geo-Targeting sperrt sich selbst mit einem sauberen Fehler

Wenn eine Anfrage exitCountries sendet, während der Plan das Geo-Targeting-Feature nicht enthält, lautet die Antwort 403 mit einer Nachricht, die den Parameter und die Lösung nennt. Vorher ging die Anfrage durch, als ob Geo-Targeting erlaubt wäre. Jetzt schlägt sie direkt fehl.

Anfragen ohne exitCountries bleiben unberührt. Dies greift nur, wenn du das Feature tatsächlich anforderst.

Kleine Dashboard-Fixes bei Limits und Abrechnung

Drei Quality-of-Life-Fixes:

  • Limits-Tab. Der gespeicherte Sub-Tab (Übersicht / API Keys / Limits & Features) wird vor dem Rendern wiederhergestellt, sodass du beim Neuladen kein Flackern des falschen Tabs mehr siehst.
  • API Keys. Die Suchbox nutzt das kanonische Suchmuster anstelle eines einfachen Inputs.
  • Billing. Die Meta-Zeilen unter der Zahlungsmethode werden jetzt mit dem richtigen Styling gerendert (sie wurden vorher ungestylt angezeigt).

Unter der Haube

Die Durchsetzungsmodi für Plan-Limits können jetzt live umgeschaltet werden. Jedes der sechs Data-Plane-Limits (Concurrency pro Produkt, Rate pro Minute, Browser pro Tag, Credits, Bandbreite, Features) sowie die Key-Create-Prüfung der Management-Plane kann über ein von unserem Team gesteuertes Einstellungs-Panel zwischen Aus, Signal und Durchsetzen umgeschaltet werden. Kein Redeploy nötig. Ein Hintergrundprozess ruft die Einstellung alle 60 Sekunden ab, und der Hot Path bleibt synchron.

Warum ist das für dich wichtig? Wenn sich ein Limit in Produktion falsch verhält, können wir es in einer Minute zurückdrehen, anstatt neuen Code auszuliefern. So können wir die Durchsetzung schrittweise pro Limit einführen und bei jedem Schritt beobachten, wie sich echter Traffic verhält. Der Signalmodus zeichnet das Ereignis auf, ohne zu blockieren. Die Durchsetzung aktiviert die 429- oder 403-Response. Wir wollten, dass der Zwischenschritt vollwertig ist und nicht nur ein Notfallschalter.

Zahlen

  • Retry-After Obergrenze für Quota-Ablehnungen: 24 Stunden (echte Reset-Zeit in resets_at)
  • Abfrageintervall für Runtime-Einstellungen: 60 Sekunden
  • Öffentliche Pläne mit ungedrosselter Bandbreite: alle

Der Plan-Limiter war einen Monat lang der rote Faden. Als Nächstes: die Durchsetzung der ersten Limits (Credits und Concurrency pro Produkt sind das logische erste Paar) sowie E-Mail-Warnungen, sobald die Mailing-Phase ausgeliefert ist.