x-api-key oder, falls kein API-Schlüssel gesendet wird, Ihre Client-IP. Jeder Gültigkeitsbereich verfügt über einen unabhängigen Zähler mit einem gleitenden 60-Sekunden-Fenster.
Kennung und Ausnahmen
Die Middleware wählt eine Kennung für das Rate-Limit in dieser Reihenfolge:x-api-key-Header → Zähler auf Schlüssel-Ebene.- Erster Hop in
X-Forwarded-For→ Zähler auf IP-Ebene. REMOTE_ADDR→ Zähler auf IP-Ebene.
- Der interne
DIDIT_WEBAPP_API_KEY(ausschließlich von der Didit-Konsole verwendet). - Endpoints, die durch die Berechtigung
IsValidSessiongeschützt sind (der Traffic von eingebetteten Sitzungen/SDK-Sitzungen). GET /system/healthcheck(wird vonHealthMiddlewarevor diesem Stack verarbeitet).- Provider-Webhooks: Stripe, AML-Screening, Callbacks zur Gesichtsverifizierung, Änderungen von KYC-Listen.
Globale Limits
Jede authentifizierte Anfrage wird außerdem nach HTTP-Methode in einen generischen Gültigkeitsbereich eingestuft, sodass jede neue Route sinnvolle Standardwerte erbt:
Das Erstellen von Transaktionen und die Event-Erfassung zählen zu
ingest-write anstelle von generic-write: Eine Integration mit hohem Erfassungsvolumen erhält 600 Anfragen pro Minute pro API-Schlüssel, ohne das Budget ihrer anderen Schreibvorgänge aufzubrauchen.
Endpoint-spezifische Limits (nächster Abschnitt) gelten zusätzlich zum globalen Limit. Der erste Gültigkeitsbereich, der seinen Zähler überschreitet, gibt den Status 429 zurück.
Endpoint-spezifische Limits
Die Middleware definiert strengere Gültigkeitsbereiche für die Routen mit den höchsten Auswirkungen:GET /v3/session/<id>/decision/ wird von SessionV3RetrieveView bereitgestellt und befindet sich nicht im Gültigkeitsbereich session-decision. Er unterliegt ausschließlich der Obergrenze von 600/Min. von generic-get. Die Drosselung von 100/Min. für Entscheidungen gilt für die Entscheidungspfade von v1 und v2.Format der 429-Antwort
Wenn Sie einen Gültigkeitsbereich überschreiten, erhalten Sie den HTTP-Status429 mit folgendem Body und folgenden Headern:
X-RateLimit-*-Header werden nur bei der 429-Antwort ausgegeben – erfolgreiche Antworten enthalten sie derzeit nicht. Verwenden Sie den Wert von Retry-After (oder X-RateLimit-Reset - now) als Verzögerung vor dem nächsten Versuch.
Empfehlungen für Clients
- Beachten Sie
Retry-Afterals Mindestwert für Ihr Backoff. Nutzen Sie darauf aufbauend ein exponentielles Backoff mit Jitter (5s → 10s → 20s → 40s ± random), damit sich zwei Clients, die gleichzeitig auf einen429stoßen, nicht synchronisieren. - Brechen Sie Wiederholungsversuche nach einer geringen Obergrenze (z. B. 5 Versuchen) ab. Leiten Sie den Fehler an Ihren Aufrufer weiter und benachrichtigen Sie Ihr Team – anhaltende 429-Fehler weisen in der Regel auf eine Endlosschleife hin, nicht auf eine vorübergehende Spitze.
- Verwenden Sie einen Bezeichner pro Workload. Wenn Sie einen
x-api-keyüber mehrere Backends hinweg teilen, fallen diese in denselben Zähler, was dazu führen kann, dass ein störender Nachbar die übrigen ausbremst. Erstellen Sie eine separate Anwendung (und somit einen separatenapi_key) pro Umgebung, Marke oder Kunde – siehe Programmatische Registrierung. - Cachen Sie Entscheidungsabfragen. Die
/decision/-Endpoints sind nicht für enge Polling-Schleifen ausgelegt; wenn Sie Echtzeit-Updates benötigen, nutzen Sie Webhooks und rufen SieGET /v3/session/<id>/decision/nur für Backfills oder Audits auf. - Generieren Sie PDFs offline. Das Rendern von PDFs ist CPU-intensiv (Begrenzung auf 50/Min.). Lösen Sie dies über eine Warteschlange aus, nachdem die Sitzung einen finalen Status erreicht hat, und nicht bei jedem Seitenaufruf.
Beispiel für einen 429-kompatiblen Client
Benötigen Sie mehr Spielraum?
Wenn 600 Sitzungen pro Minute nicht ausreichen – beispielsweise bei einem Marketing-Launch oder einem Backfill –, senden Sie eine E-Mail an support@didit.me mit der UUID Ihrerapplication sowie den erwarteten Dauer- und Spitzenraten. Ausnahmen werden pro Anwendung konfiguriert.