Zum Hauptinhalt springen

Ü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
Das Verständnis dieser Fehlercodes und ihrer Bedeutungen ist entscheidend für:
  • 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
Die folgenden Abschnitte bieten detaillierte Informationen zu standardisierten HTTP-Statuscodes und spezifischen Fehlercodes, die Sie bei der Verwendung der Dodo Payments API antreffen können.

Standard API-Fehlercodes

FehlercodeHTTP-StatusBeschreibung
400Ungültige AnfrageDie Anfrage war fehlerhaft oder enthielt ungültige Parameter
401UnautorisiertDie Authentifizierung ist fehlgeschlagen oder der API-Schlüssel ist ungültig
403VerbotenDer API-Schlüssel hat keine Berechtigung, auf die angeforderte Ressource zuzugreifen
404Nicht gefundenDie angeforderte Ressource existiert nicht
405Methode nicht erlaubtDie HTTP-Methode wird für diesen Endpunkt nicht unterstützt
409KonfliktDie Anfrage steht im Konflikt mit dem aktuellen Zustand der Ressource
422Nicht verarbeitbare EntitätDie Anfrage war gut formuliert, enthielt jedoch semantische Fehler
429Zu viele AnfragenDie Rate-Limit wurde überschritten
500Interner ServerfehlerEin unerwarteter Fehler ist auf unseren Servern aufgetreten
502Ungültiges GatewayDer Server hat eine ungültige Antwort von einem upstream-Server erhalten
503Dienst nicht verfügbarDer Dienst ist vorübergehend nicht verfügbar
504Gateway-ZeitüberschreitungDer 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:
{
  "code": "UNSUPPORTED_COUNTRY",
  "message": "Country AI currently not supported"
}

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_at Datum überschritten
    • Message: Rabattcode ist abgelaufen
  • DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED
    • Trigger: Rabatt erneut verwendet, nachdem usage_limit erreicht wurde
    • Message: Das Nutzungslimit darf nicht geringer sein als times_used / Rabattcode hat Nutzungsgrenze erreicht
  • 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_id erscheint zweimal in items[]
    • Message: Doppelte item_ids im Array “items” angegeben
  • 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 → to Währungspaar
    • Message: Wechselkurs zur Umrechnung von Currency in Currency nicht gefunden
  • 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
  • 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_id Liste leer oder unbekannte IDs
    • Message: Eine oder mehrere Produkt-IDs existieren nicht:
  • 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_at abgeschlossen
    • Message: Abonnement ist abgelaufen; es können keine neuen Gebühren erstellt werden
  • SUBSCRIPTION_INACTIVE
    • Trigger: Status ≠ ACTIVE
    • Message: Abonnement ist nicht aktiv
  • 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

  1. Behandeln Sie Fehler immer elegant in Ihrer Anwendung
  2. Implementieren Sie eine ordnungsgemäße Fehlerprotokollierung
  3. Verwenden Sie geeignete Fehlermeldungen für Endbenutzer
  4. Implementieren Sie eine Wiederholungslogik für vorübergehende Fehler
  5. Kontaktieren Sie den Support bei ungelösten Problemen

Unterstützung

Für zusätzliche Hilfe zu Fehlercodes oder Integrationsproblemen wenden Sie sich bitte an unser Support-Team unter support@dodopayments.com.