Übersicht
Die Dodo Payments API verwendet standardisierte HTTP-Statuscodes und benutzerdefinierte Fehlercodes, um den Erfolg oder Misserfolg von API-Anfragen anzuzeigen. Wenn ein Fehler auftritt, gibt die API einen entsprechenden HTTP-Statuscode und eine JSON-Antwort mit detaillierten Informationen über den Fehler zurück. Jede Fehlerantwort enthält:- Einen HTTP-Statuscode, der die allgemeine Kategorie des Fehlers angibt
- Einen spezifischen Fehlercode, der die genaue Art des Fehlers identifiziert
- Eine für Menschen lesbare Fehlermeldung, die erklärt, was schiefgelaufen ist
- Zusätzliche Details zum Fehler, wenn zutreffend
- Die Fehlersuche bei Integrationsproblemen
- Die Implementierung einer ordnungsgemäßen Fehlerbehandlung in Ihrer Anwendung
- Die Bereitstellung sinnvoller Rückmeldungen für Endbenutzer
- Die Aufrechterhaltung eines robusten Zahlungssystem
Standard API-Fehlercodes
| Fehlercode | HTTP-Status | Beschreibung |
|---|---|---|
| 400 | Ungültige Anfrage | Die Anfrage war fehlerhaft oder enthielt ungültige Parameter |
| 401 | Unautorisiert | Die Authentifizierung ist fehlgeschlagen oder der API-Schlüssel ist ungültig |
| 403 | Verboten | Der API-Schlüssel hat keine Berechtigung, auf die angeforderte Ressource zuzugreifen |
| 404 | Nicht gefunden | Die angeforderte Ressource existiert nicht |
| 405 | Methode nicht erlaubt | Die HTTP-Methode wird für diesen Endpunkt nicht unterstützt |
| 409 | Konflikt | Die Anfrage steht im Konflikt mit dem aktuellen Zustand der Ressource |
| 422 | Nicht verarbeitbare Entität | Die Anfrage war gut formuliert, enthielt jedoch semantische Fehler |
| 429 | Zu viele Anfragen | Die Rate-Limit wurde überschritten |
| 500 | Interner Serverfehler | Ein unerwarteter Fehler ist auf unseren Servern aufgetreten |
| 502 | Ungültiges Gateway | Der Server hat eine ungültige Antwort von einem upstream-Server erhalten |
| 503 | Dienst nicht verfügbar | Der Dienst ist vorübergehend nicht verfügbar |
| 504 | Gateway-Zeitüberschreitung | Der Server hat beim Warten auf eine Antwort von einem upstream-Server eine Zeitüberschreitung erreicht |
Fehlerantwortformat
Wenn ein Fehler auftritt, gibt die API eine JSON-Antwort mit folgender Struktur zurück:Fehlercodes Referenz
-
ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT- Trigger: Lizenzschlüssel-Aktivierungen: neues Limit < bestehende Instanzanzahl
- Message: Das neue Aktivierungslimit darf nicht niedriger sein als die aktuelle Anzahl an Instanzen
-
ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED- Trigger: Versuch, Addons zu nutzungsbasierten Abrechnungsabonnements hinzuzufügen
- Message: Addons in Abonnements werden für nutzungsbasierte Abrechnung nicht unterstützt
-
ADDONS_NOT_ALLOWED_FOR_ON_DEMAND- Trigger: Versuch, Addons zu On-Demand-Abonnements hinzuzufügen
- Message: Addons sind für On-Demand-Abonnements nicht erlaubt
-
BRAND_MISMATCH- Trigger: Artikel im Warenkorb gehören zu unterschiedlichen Marken
- Message: Alle Artikel im Produktwarenkorb müssen zur gleichen Marke gehören
-
BRAND_NOT_ENABLED- Trigger: Marke deaktiviert oder nicht aktiv
- Message: Die angegebene Marke ist nicht aktiviert
-
BRAND_SUBMISSION_NOT_ENABLED- Trigger: Merkmal zur erneuten Markenprüfung nicht aktiviert
- Message: Die erneute Markenprüfung ist nicht aktiviert
-
CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION- Trigger: Versuch, ein zur Kündigung geplantes Abonnement zu belasten
- Message: Abonnement ist zur Kündigung geplant
-
CHECKOUT_SESSION_CONSUMED- Trigger: Die Checkout-Sitzung hat bereits eine Zahlung erzeugt
- Message: Checkout-Sitzung wurde bereits genutzt
-
DISCOUNT_CODE_ALREADY_EXISTS- Trigger: Erstellung eines doppelten Rabattcodes
- Message: Rabattcode existiert bereits
-
DISCOUNT_CODE_EXPIRED- Trigger: Rabattcode hat sein
expires_atDatum überschritten - Message: Rabattcode ist abgelaufen
- Trigger: Rabattcode hat sein
-
DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED- Trigger: Rabatt erneut verwendet, nachdem
usage_limiterreicht wurde - Message: Das Nutzungslimit darf nicht geringer sein als times_used / Rabattcode hat Nutzungsgrenze erreicht
- Trigger: Rabatt erneut verwendet, nachdem
-
DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND- Trigger: Code auf On-Demand-Abonnement angewendet
- Message: Rabattcoupon ist für On-Demand-Abonnements nicht verfügbar
-
DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT- Trigger: Code auf nicht zusammenhängendes Produkt angewendet
- Message: Rabattcoupon ist für dieses Produkt nicht verfügbar
-
DUPLICATE_LINE_ITEMS_IN_REQUEST- Trigger: Derselbe
item_iderscheint zweimal initems[] - Message: Doppelte item_ids im Array “items” angegeben
- Trigger: Derselbe
-
DUPLICATE_METER_IDS_IN_REQUEST- Trigger: Dieselbe Meter-ID erscheint mehrfach in der Anfrage
- Message: Doppelte Meter-IDs sind nicht erlaubt
-
EXCHANGE_RATE_NOT_FOUND- Trigger: Keine FX-Rate für
from → toWährungspaar - Message: Wechselkurs zur Umrechnung von Currency in Currency nicht gefunden
- Trigger: Keine FX-Rate für
-
EXISTING_REFUND_REQUEST_PROCESSING- Trigger: Vorherige Rückerstattungsanfrage noch in Bearbeitung
- Message: Eine Rückerstattungsanfrage mit dem Status “Pending” wird noch bearbeitet
-
INACTIVE_LICENSE_KEY- Trigger: Key-Status ≠
ACTIVE - Message: Lizenzschlüssel ist nicht aktiv
- Trigger: Key-Status ≠
-
INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED- Trigger: Planänderung bei inaktivem Abonnement
- Message: Planänderungen werden für inaktive Abonnements nicht unterstützt
-
INSUFFICIENT_WALLET_FUNDS- Trigger: Wallet-Guthaben < Debitbetrag
- Message: Nicht genügend Guthaben im Wallet
-
INTEGER_CONVERSION_FAILURE- Trigger: Jede ganzzahlige ↔ String/Dezimal-Konvertierung, die serverseitig fehlschlägt
- Message: Ganzzahlkonvertierung fehlgeschlagen
-
INTERNAL_SERVER_ERROR- Trigger: Nicht behandelte Ausnahmen; Details serverseitig protokollieren
- Message: Keine öffentliche Nachricht (generisch 500)
-
INVALID_DISCOUNT_CODE- Trigger: Code existiert nicht / nicht anwendbar
- Message: Ungültiger Rabattcode / Rabattcode kann auf kein Produkt im Warenkorb angewendet werden
-
INVALID_PERCENTAGE- Trigger: Prozentbetrag > 100 % (oder 10.000 Basispunkte)
- Message: Prozentbetrag darf nicht mehr als 10000 betragen / Rabattcode darf nicht mehr als 100 % betragen
-
INVALID_QUANTITY- Trigger: Ungültige Menge für nutzungsbasierte Preisgestaltung angegeben
- Message: Bei nutzungsbasierten Preisprodukten ist nur Menge 1 erlaubt
-
INVALID_QUERY_PARAMS- Trigger: Gegenseitig ausschließende / fehlerhafte Abfrageparameter
- Message: Abfrageparameter dürfen nur entweder time_frame oder (start, end) enthalten
-
INVALID_REQUEST_BODY- Trigger: Fehlerhaftes JSON oder Schemaverletzung
- Message: Ihr Anfragekörper ist ungültig. Bitte prüfen Sie Ihre Anfrage-Header und das Objekt.
-
INVALID_REQUEST_PARAMETERS- Trigger: Semantik falsch (z. B. Datum in der Vergangenheit)
- Message: next_billing_date darf nicht auf eine vergangene Zeit geändert werden
-
INVALID_SUGGESTED_PRICE- Trigger: PWYW-Preis < minimaler erlaubter Preis
- Message: Der vorgeschlagene Preis darf nicht niedriger sein als der Mindestpreis. Bei “Pay What You Want” gilt der Preis als minimal akzeptierter Betrag
-
INVALID_TAX_ID- Trigger: VAT/GST/TIN hat Validierung nicht bestanden
- Message: Steuer-ID ist ungültig
-
LICENSE_KEY_LIMIT_REACHED- Trigger: Aktivierungen = Limit
- Message: Aktivierungslimit für Lizenzschlüssel erreicht
-
LICENSE_KEY_NOT_FOUND- Trigger: Instanz-ID oder Schlüssel-ID ungültig
- Message: Lizenzschlüsselinstanz nicht gefunden oder gehört nicht zu diesem Lizenzschlüssel
-
LINE_ITEM_FULLY_REFUNDED- Trigger: Versuch, bereits vollständig erstattetem Posten zurückzuerstatten
- Message: Posten wurde bereits vollständig erstattet und kann nicht erneut erstattet werden.
-
LINE_ITEM_NOT_FOUND- Trigger: Artikel-ID nicht Teil der referenzierten Zahlung
- Message: Posten in Zahlung nicht gefunden
-
LINE_ITEM_PRORATED- Trigger: Rückerstattung oder Aktualisierung an einer anteiligen Zeile versucht
- Message: Posten kann nicht erstattet werden, da er anteilig ist
-
LINE_ITEM_REFUND_AMOUNT_TOO_HIGH- Trigger: Rückerstattungsbetrag > bezahltem Betrag (inkl. Steuern)
- Message: Für Posten wurde ein Rückerstattungsbetrag inklusive Steuern in Höhe von angefordert, der über dem bezahlten Betrag liegt
-
LINE_ITEM_REFUND_AMOUNT_TOO_LOW- Trigger: Rückerstattungsbetrag unter Mindestschwelle
- Message: Für Posten wurde ein zu niedriger Rückerstattungsbetrag von angefordert
-
MAXIMUM_KEYS_REACHED- Trigger: Metadaten / benutzerdefinierte Felder überschreiten 50 Paare
- Message: Überschreitet 50 Schlüssel-Wert-Paare
-
MERCHANT_NOT_LIVE- Trigger: Unternehmen befindet sich noch im Test-/Sandbox-Modus
- Message: Händler ist nicht live
-
METER_IS_DELETED- Trigger: Versuch, gelösten Zähler zu verwenden
- Message: Der Zähler wurde bereits gelöscht
-
MISSING_ADDON_IDS- Trigger:
addon_idListe leer oder unbekannte IDs - Message: Eine oder mehrere Produkt-IDs existieren nicht:
- Trigger:
-
MISSING_METER_IDS- Trigger: Meter-ID-Liste leer oder enthält ungültige IDs
- Message: Eine oder mehrere Meter-IDs existieren nicht:
-
MISSING_PRODUCT_INFORMATION- Trigger: Produkt existiert, aber Pflichtinformationen fehlen
- Message: Produkt existiert, aber andere Pflichtinformationen fehlen oder sind ungültig
-
NEGATIVE_BALANCE_ADJUSTMENT- Trigger: Versuch, Wallet-Guthaben negativ zu machen
- Message: Wallet-Guthaben darf nicht negativ werden
-
NO_ELIGIBLE_PAYMENT_METHODS- Trigger: Nach Filterung keine Ergebnisse mehr übrig
- Message: Keine geeigneten Zahlungsmethoden gefunden
-
NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS- Trigger: Versuch, Ablaufdatum für abonnementsbasierten Schlüssel zu setzen
- Message: Für abonnementsbasierte Lizenzschlüssel kann kein Ablaufdatum gesetzt werden
-
NOT_FOUND- Trigger: Allgemeine 404 für jede fehlende Ressource
- Message: Artikel nicht gefunden (oder spezifischer)
-
ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED- Trigger: Planwechsel für On-Demand nicht erlaubt
- Message: Planänderungen werden für On-Demand-Abonnements nicht unterstützt
-
ON_DEMAND_SUBSCRIPTIONS_NOT_ENABLED- Trigger: Unternehmen hat Feature-Flag deaktiviert
- Message: On-Demand-Abonnements sind für dieses Unternehmen nicht aktiviert
-
ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED- Trigger: Versuch, On-Demand mit nutzungsbasierter Abrechnung zu verwenden
- Message: On-Demand-Abonnements werden für nutzungsbasierte Abrechnung nicht unterstützt
-
PAY_AS_YOU_WANT_AMOUNT_REQUIRED- Trigger: Preis für PWYW-Produkt fehlt
- Message: Betrag ist für Pay-As-You-Want-Produkt zwingend erforderlich
-
PAYMENT_ALREADY_REFUNDED- Trigger: Doppelte Rückerstattung
- Message: Diese Zahlung wurde bereits erstattet
-
PAYMENT_HAS_BEEN_REFUNDED- Trigger: Zahlung wurde vollständig erstattet
- Message: Die Zahlungs-ID wurde vollständig erstattet.
-
PAYMENT_NOT_SUCCEEDED- Trigger: Versuch, erfolglose Zahlung zu erstatten/verarbeiten
- Message: Die angegebene Zahlung war nicht erfolgreich
-
PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION- Trigger: Planänderung bei zur Kündigung geplanten Abonnement versucht
- Message: Abonnement ist zur Kündigung geplant
-
PREVIOUS_PAYMENT_PENDING- Trigger: Versuch, Gebühr zu erstellen, während die vorherige sich in einem nicht-terminalen Zustand befindet
- Message: Es kann keine neue Gebühr erstellt werden, da die vorherige Zahlung noch nicht erfolgreich ist
-
PRODUCT_CART_EMPTY- Trigger: Leer eingereichter Produktwarenkorb
- Message: product_cart ist leer
-
PRODUCT_IS_DELETED- Trigger: Produkt weich gelöscht
- Message: Keine Nachrichten
-
REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT- Trigger: Aggregierter Rückerstattungsbetrag > bezahlter Betrag
- Message: Der berechnete Rückerstattungsbetrag ist höher als der bezahlte Betrag
-
REFUND_WINDOW_EXPIRED- Trigger: Außerhalb des zulässigen Rückerstattungszeitraums
- Message: Rückerstattungen können nicht Tage nach Zahlungserstellung eingeleitet werden. Kontaktieren Sie support@dodopayments.com.
-
REQUEST_AMOUNT_BELOW_MINIMUM- Trigger: Betrag < Produktminimum
- Message: Betrag darf nicht kleiner sein als der für das Produkt angegebene Mindestbetrag
-
SUBSCRIPTION_EXPIRED- Trigger: Abrechnung nach
ends_atabgeschlossen - Message: Abonnement ist abgelaufen; es können keine neuen Gebühren erstellt werden
- Trigger: Abrechnung nach
-
SUBSCRIPTION_INACTIVE- Trigger: Status ≠
ACTIVE - Message: Abonnement ist nicht aktiv
- Trigger: Status ≠
-
SUBSCRIPTION_NOT_ON_DEMAND- Trigger: Erwartet On-Demand, aber feste Intervalle erhalten
- Message: Abonnement ist bereits nicht On-Demand
-
SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED- Trigger: Zahlungswiederholungen für Abonnement haben maximale Versuche überschritten
- Message: Maximales Wiederhollimit von 10 Versuchen für dieses Abonnement überschritten
-
TOO_MANY_REQUESTS- Trigger: 429 Rate-Limit
- Message: Keine Nachrichten
-
TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT- Trigger: Kombinierte Warenkorbsumme < Gateway-Minimum
- Message: Mindestsumme von ist erforderlich, um die Zahlung zu verarbeiten
-
UNABLE_TO_EDIT_PRIMARY_BRAND- Trigger: Versuch, Primärmarke über reguläre API zu aktualisieren
- Message: Die Primärmarke kann über diesen API-Endpunkt nicht aktualisiert werden.
-
UNAUTHORIZED- Trigger: Kein API-Schlüssel oder ungültiges Token / Bereich
- Message: Sie sind nicht berechtigt, diese Aktion auszuführen
-
UNSUPPORTED_ACTION- Trigger: Nicht unterstützte Aktion für Ressourcentyp
- Message: Planänderungen für nutzungsbasierte Abonnements werden nicht unterstützt
-
UNSUPPORTED_BILLING_CURRENCY- Trigger: Abonnements sind auf USD beschränkt
- Message: Nicht-USD-Abrechnungswährung wird für Abonnements nicht unterstützt
-
UNSUPPORTED_COUNTRY- Trigger: Geographie noch nicht unterstützt
- Message: Land derzeit nicht unterstützt
-
UNSUPPORTED_CURRENCY- Trigger: Produkt- oder Addon-Währung ungültig
- Message: Währung wird derzeit nicht unterstützt / Derzeit nur USD- und INR-Produkte / Addon-Preis unterstützt nur USD und INR / Für billing_currency kann nur USD oder INR angefordert werden / Währung nicht unterstützt / Unerwartete Währung für indische Kartenabonnements
-
UNSUPPORTED_DISCOUNT_TYPE- Trigger: Pauschalrabatte usw. noch nicht live
- Message: Derzeit werden nur prozentuale Rabattcodes unterstützt
-
UNSUPPORTED_PAYMENT_CURRENCY- Trigger: Zahlungswährung für Connector gesperrt
- Message: INR-Transaktionen werden für diese Transaktion nicht unterstützt
-
UNSUPPORTED_TAX_CATEGORY- Trigger: Steuerkategoriename nicht im Enum
- Message: Kategorie derzeit nicht unterstützt
-
UNSUCCESSFUL_PAYMENT_ID- Trigger: Zahlungs-ID verweist auf erfolglose Zahlung
- Message: Die Zahlungs-ID hat einen erfolglosen Status.
-
ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED- Trigger: Versuch, Zahlung mit Betrag null zu erstatten
- Message: Eine Zahlung mit einem Betrag von null kann nicht erstattet werden
Best Practices
- Behandeln Sie Fehler immer elegant in Ihrer Anwendung
- Implementieren Sie eine ordnungsgemäße Fehlerprotokollierung
- Verwenden Sie geeignete Fehlermeldungen für Endbenutzer
- Implementieren Sie eine Wiederholungslogik für vorübergehende Fehler
- Kontaktieren Sie den Support bei ungelösten Problemen