Zum Hauptinhalt springen
GoCardless API · invalid_api_usage · 429

GoCardless 429 rate_limit_exceeded: zu viele Anfragen pro Minute

GoCardless begrenzt die Anfragen, die pro Minute angenommen werden. Wer das Limit überschreitet, erhält einen 429 mit dem reason rate_limit_exceeded und einem Header, der angibt, wann es weitergehen kann. Der Konnektor zeigt Ihnen das nicht beim ersten Mal: Er wartet die von GoCardless genannte Zeit und wiederholt die Anfrage einmal. Nur wenn das Limit erneut erreicht wird, sehen Sie den Fehler in Odoo.

FlexigoTech · Verantwortlich: Víctor Gómez · Aktualisiert am 6. November 2026

Das Wichtigste

Versionen
Odoo 17, 18, 19 und 20
Geprüft
im Quellcode des Connectors, Version 17.0, 18.0, 19.0 und 20.0 · in den Quellen am Ende
Lesezeit
4 Min.

Was GoCardless sagt

ReasonTipoHTTPTexto de GoCardless
rate_limit_exceededinvalid_api_usage429Rate limit reached. Check headers for reset time.

Die Limitseite von GoCardless nennt die Zahl: 1.600 Anfragen pro Minute bei einer Standardintegration und 1.600 pro Minute und Händler bei einer Partnerintegration. Wird das überschritten, gibt die API den Statuscode 429 zurück, und GoCardless stellt klar, dass diese Anfragen gefahrlos wiederholt werden können: «These requests are safe to retry.». Wann es weitergehen kann, verrät die Antwort über die Header ratelimit-limit, ratelimit-remaining und ratelimit-reset.

GoCardless-Fehlerkarte rate_limit_exceeded
Der reason, der HTTP-Code 429, der Header ratelimit-reset und das von GoCardless veröffentlichte Limit von 1.600 Anfragen pro Minute.

Woher so viele Anfragen kommen

Das Limit zählt alle Anfragen an die API, nicht nur die, die Lastschriften erstellen. Mit dem Konnektor ist jede Lastschrift mit einem gespeicherten Mandat eine Anfrage, egal ob sie aus einem verlängerten Abonnement stammt oder aus einer Zahlung mit der Zahlungsmethode des Kunden. Jedes Ereignis zu einer Zahlung, das in Odoo ankommt, ist eine weitere, denn der Konnektor verlässt sich nicht allein auf die Benachrichtigung: Er fragt diese Zahlung bei GoCardless ab und übernimmt den Status, den GoCardless zurückgibt. Eine große Menge gleichzeitig addiert beides.

GoCardless ordnet diesen reason den Fehlern invalid_api_usage zu, also solchen, die aus der Art der Anfrage entstehen, und bittet bei diesen, das technische Team zu informieren («alert your dev team»). Ein einzelner 429 braucht das nicht; einer, der sich jeden Tag wiederholt, schon.

Was der Konnektor macht

  1. Er liest den Header ratelimit-reset und berechnet, wie lange es noch dauert: die angegebene Uhrzeit abzüglich der Uhrzeit des Odoo-Servers.
  2. Er wartet diese Zeit, mindestens 1 Sekunde und höchstens 65. Fehlt der Header oder lässt er sich nicht lesen, wartet er 1 Sekunde. Die Obergrenze verhindert, dass eine falsch eingestellte Uhr den wartenden Odoo-Prozess blockiert.
  3. Er wiederholt die Anfrage genau einmal.
  4. Erhält die Wiederholung wieder einen 429, wartet er nicht länger und behandelt ihn wie jede andere Ablehnung der API.

Der Konnektor zählt seine Anfragen nicht und bremst sie nicht im Voraus. Er liest ratelimit-remaining nicht: Er wartet nur, wenn GoCardless bereits mit 429 geantwortet hat.

Schema: was GoCardless bei einem 429 antwortet und was Odoo mit dem Konnektor tut
Schema auf Grundlage des Konnektor-Codes (17.0, 18.0, 19.0 und 20.0) und der Dokumentation von GoCardless.

Wenn auch der zweite Versuch scheitert

Das hängt davon ab, was Odoo in diesem Moment tat.

  • Handelte es sich um eine Lastschrift, wechselt die Zahlungstransaktion auf «Fehler» mit der Meldung «GoCardless rejected the request.» und darunter der Meldung von GoCardless mit rate_limit_exceeded und der request_id in eckigen Klammern. Die Rechnung bleibt zur Einziehung offen.
  • Verarbeitete Odoo gerade ein Ereignis von GoCardless, antwortet der Webhook mit 500, damit GoCardless die Zustellung erneut sendet. Bereits übernommene Ereignisse werden nicht doppelt übernommen. Auch die stündliche Wiederherstellung lässt kein fehlgeschlagenes Ereignis liegen: Sie fordert es beim nächsten Durchlauf erneut an.

Ein 429 ist nicht dasselbe wie eine Lastschrift ohne Antwort. Ohne Antwort weiß der Konnektor nicht, ob GoCardless die Lastschrift angelegt hat, also bleibt sie offen und wird mit demselben Schlüssel innerhalb einer Stunde erneut gesendet. Bei einem 429 gibt es eine Antwort: GoCardless hat die Anfrage nicht angenommen, deshalb steht die Transaktion auf Fehler.

Der Konnektor ist nicht ins Deutsche übersetzt: Diese Texte erscheinen immer auf Englisch, auch in einem deutschen Odoo, egal ob ein Benutzer oder eine geplante Aktion sie auslöst: «GoCardless rejected the request.».

Was zu tun ist

  • Öffnen Sie die Transaktion über die Schaltfläche «Zahlungstransaktion» oben auf der Rechnung; das Menü der Transaktionen erscheint nur im Entwicklermodus und existiert in Odoo 20 nicht. Nennt die Meldung rate_limit_exceeded, hat GoCardless diese Anfrage wegen des Limits abgelehnt, nicht wegen des Kunden oder seines Mandats.
  • Versuchen Sie nach einer Weile, die Rechnung erneut mit der gespeicherten Zahlungsmethode des Kunden einzuziehen.
  • Tritt das häufig auf, prüfen Sie die Uhrzeit des Odoo-Servers: Die Wartezeit ergibt sich aus der Differenz zu ratelimit-reset, und eine vorgehende Uhr verkürzt sie.
  • Brauchen Sie GoCardless, bewahren Sie die request_id aus der Meldung auf: Die Dokumentation verlangt sie bei Kontakt mit dem Support.

Verteilt der Konnektor die Anfragen, um das Limit nicht zu erreichen?

Nein. Er zählt und bremst sie nicht im Voraus, sondern reagiert, wenn GoCardless mit 429 antwortet: mit einer Wartezeit und einer einzigen Wiederholung.

Warum wartet er höchstens 65 Sekunden?

Während des Wartens tut der Odoo-Prozess, der die Anfrage stellt, nichts anderes. Der Code des Konnektors setzt diese Obergrenze, damit eine falsch eingestellte Uhr ihn nicht blockiert.

Geht durch das Limit ein Ereignis von GoCardless verloren?

Es gilt nicht als verloren: Der Webhook bittet GoCardless, es erneut zu senden, und die stündliche Wiederherstellung fordert es beim nächsten Durchlauf erneut an.

Mit unserem Konnektor

In Odoo 17, 18, 19 und 20 behandelt der Konnektor den 429 als Pause: Er wartet die von GoCardless genannte Zeit, wiederholt die Anfrage einmal und lässt die Transaktion bei fortbestehendem Limit auf Fehler stehen, mit der request_id, damit Sie wissen, was passiert ist und was Sie GoCardless mitteilen können.

Weiterlesen

GoCardless 409 idempotent_creation_conflict: Die Abbuchung existierte bereitsGoCardless gibt 409 zurück, wenn ein Idempotenzschlüssel schon etwas angelegt hat. Warum das kein Fehler ist und wie der Konnektor Doppelabbuchungen verhindert.GoCardless-Webhook: 498 Token Invalid, 204 und die Webhook-SignatureGoCardless fordert 498 bei falscher Webhook-Signature und 204 bei unbekanntem Ereignis. Was Odoo 17, 18, 19 und 20 antwortet und warum es in 20 ein 401 ist.GoCardless-Fehler mandate_is_inactive beim Anlegen einer Zahlung aus OdooGoCardless meldet mandate_is_inactive bei Zahlungen mit gekündigtem, fehlgeschlagenem oder abgelaufenem Mandat. Ursache und Lösung im Odoo-Konnektor.
Geprüft im Quellcode des Connectors (Version 17.0, 18.0, 19.0 und 20.0) und in den verlinkten Quellen

Quellen

  • docs.gocardless.com/docs/api-reference/limits
  • docs.gocardless.com/docs/api-reference/responses-and-errors
  • Quellcode des Moduls: flexigo_payment_gocardless: const.py, Zeile 113 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 378 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 408 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 379 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 383 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 397 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 462 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 281 in 17.0 (d203ee6), Zeile 281 in 18.0 (e2ab18b), Zeile 281 in 19.0 (ce7f5a3) und Zeile 292 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 247 in 17.0 (d203ee6), Zeile 247 in 18.0 (e2ab18b), Zeile 247 in 19.0 (ce7f5a3) und Zeile 258 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 299 in 17.0 (d203ee6), Zeile 299 in 18.0 (e2ab18b), Zeile 299 in 19.0 (ce7f5a3) und Zeile 310 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 589 in 17.0 (d203ee6), Zeile 589 in 18.0 (e2ab18b), Zeile 588 in 19.0 (ce7f5a3) und Zeile 607 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: controllers/main.py, Zeile 124 in 17.0 (d203ee6), Zeile 124 in 18.0 (e2ab18b), Zeile 124 in 19.0 (ce7f5a3) und Zeile 127 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: controllers/main.py, Zeile 96 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/gocardless_webhook_event.py, Zeile 7 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: const.py, Zeile 117 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 603 in 17.0 (d203ee6), Zeile 603 in 18.0 (e2ab18b), Zeile 603 in 19.0 (ce7f5a3) und Zeile 605 in 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/webhooks
  • Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 521 in 17.0 (d203ee6), Zeile 521 in 18.0 (e2ab18b), Zeile 521 in 19.0 (ce7f5a3) und Zeile 523 in 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/de.po
  • github.com/odoo/odoo/blob/20.0/addons/payment/views/payment_transaction_views.xml
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
  • Quellcode des Moduls: flexigo_payment_gocardless: __manifest__.py, Zeile 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)