Skip to main content

Übersicht

Wenn eine Anfrage fehlschlägt, gibt die Dodo Payments API einen HTTP-Statuscode und einen JSON-Body zurück, der den Fehler benennt. Auf dieser Seite erfahren Sie, wodurch ein Fehler verursacht wurde und wie Sie ihn beheben können. Jede Fehlerantwort enthält:
  • Einen HTTP-Statuscode, der die allgemeine Fehlerkategorie angibt.
  • Einen code, der den genauen Fehler identifiziert, zum Beispiel UNSUPPORTED_COUNTRY.
  • Einen message, der den Fehler in verständlicher Sprache erklärt. Der message kann null sein, zum Beispiel bei internen Serverfehlern.
Richten Sie Ihre Fehlerbehandlung nach dem code und nicht nach dem message. Mehrere Codes geben je nach Ursache mehr als eine Meldung zurück. Verwenden Sie diese Fehlercodes, um:
  • Integrationsprobleme zu debuggen.
  • Fehler in Ihrer Anwendung korrekt zu behandeln.
  • Ihren Kunden verständliches Feedback anzuzeigen.
  • Ihre Zahlungsabwicklung zuverlässig zu halten.
Dies sind API- und Geschäftslogikfehler. Informationen zu Gründen für Kartenablehnungen, die bei einer fehlgeschlagenen Zahlung zurückgegeben werden (z. B. INSUFFICIENT_FUNDS oder CARD_DECLINED), finden Sie in der Referenz zu Transaktionsfehlern.

Standard-API-Fehlercodes

Die API verwendet bei Fehlern die folgenden HTTP-Statuscodes:

Format der Fehlerantwort

Der Body einer Fehlerantwort enthält zwei Felder: code und message:

Referenz der Fehlercodes

Die folgenden Fehlercodes sind nach dem API-Bereich gruppiert, auf den sie sich beziehen. Jeder Eintrag enthält die Bedingung, die den Fehler auslöst, sowie die von der API zurückgegebene Meldung. Platzhalter wie {id} stehen für Werte, die von der API eingefügt werden.

Authentifizierung und Konto

  • UNAUTHORIZED
    • Auslöser: Die Anfrage enthält keinen API-Schlüssel oder einen ungültigen API-Schlüssel (HTTP 401), oder der API-Schlüssel verfügt nicht über die für die Aktion erforderliche Rolle (HTTP 403)
    • Meldung: Sie sind nicht berechtigt, diese Aktion auszuführen
  • MERCHANT_NOT_LIVE
    • Auslöser: Eine Anfrage im Live-Modus für ein Unternehmen, für das Live-Zahlungen nicht aktiviert sind (HTTP 403). Dies betrifft Unternehmen, die bisher nur den Testmodus verwendet haben, sowie Unternehmen, deren Live-Zahlungen noch nicht aktiviert sind, weil die Verifizierung noch nicht abgeschlossen ist. Anfragen im Testmodus sind davon nicht betroffen.
    • Meldung: Live-Zahlungen für den Händler nicht aktiviert
  • BUSINESS_ARCHIVED
    • Auslöser: Jede kundenorientierte Anfrage für ein archiviertes Unternehmen (HTTP 403). Dies betrifft Checkout, Zahlungslinks, den Storefront, das Customer Portal und die Aktivierung von Lizenzschlüsseln.
    • Meldung: Dieses Unternehmen ist archiviert und akzeptiert keine Anfragen mehr

Zahlungen und Checkout

  • CHECKOUT_SESSION_CONSUMED
    • Auslöser: Die Checkout-Sitzung hat bereits eine Zahlung erzeugt (HTTP 403). Erstellen Sie stattdessen eine neue Checkout-Sitzung.
    • Meldung: Für die angegebene Checkout-Sitzung wurde bereits eine Zahlung erzeugt.
  • MANUAL_RETRY_ALREADY_PAID
    • Auslöser: Manueller Retry einer Verlängerungsrechnung, für die eine Zahlung bereits erfolgreich war. Ein erneutes Senden würde den Kunden doppelt belasten.
    • Meldung: Eine Zahlung für diese Rechnung war bereits erfolgreich
  • MANUAL_RETRY_HARD_DECLINE
    • Auslöser: Manueller Retry, wenn der letzte Fehler der Rechnung eine endgültige Ablehnung ist oder keinen klassifizierten Fehlercode enthält. Eine weitere Belastung derselben Karte kann nicht erfolgreich sein. Aktualisieren Sie stattdessen die Zahlungsmethode.
    • Meldung: Der letzte Fehler dieser Rechnung ist eine endgültige Ablehnung, daher kann der Retry nicht erfolgreich sein (oder) Der letzte Fehler dieser Rechnung kann nicht klassifiziert werden, daher ist kein Retry möglich
  • MANUAL_RETRY_IN_FLIGHT
    • Auslöser: Manueller Retry, während eine Zahlung der Rechnung processing ist oder noch keinen aufgezeichneten Status besitzt. Warten Sie stattdessen das Ergebnis dieser Zahlung ab, anstatt sie erneut zu senden.
    • Meldung: Eine Zahlung für diese Rechnung ist noch nicht abgeschlossen
  • MANUAL_RETRY_LIMIT_REACHED
    • Auslöser: Manueller Retry, nachdem alle drei Sendungen für die Rechnung verbraucht wurden, oder bevor die Abkühlzeit abgelaufen ist (HTTP 429). Die zweite Sendung ist 1 Stunde nach der ersten möglich, die dritte 3 Stunden nach der zweiten. Der Body enthält nur code und message. Um festzustellen, wann die nächste Sendung zulässig ist, lesen Sie retry_available_at aus GET /payments/{payment_id}/retry.
    • Meldung: Alle manuellen Retries für diese Rechnung sind verbraucht (oder) Ein Retry ist für diese Rechnung derzeit noch nicht verfügbar
  • NO_ELIGIBLE_PAYMENT_METHODS
    • Auslöser: Nach der Filterung ist keine Zahlungsmethode für die Zahlung verfügbar (HTTP 422)
    • Meldung: Keine geeigneten Zahlungsmethoden gefunden
  • PAYMENT_NOT_PERMITTED
    • Auslöser: Ein Checkout- oder Zahlungsversuch eines Kunden auf der Blockierliste des Händlers (HTTP 403). Der Code und die Meldung nennen absichtlich keine Ursache.
    • Meldung: Diese Zahlung kann nicht verarbeitet werden.
  • PAYMENT_NOT_RETRYABLE
    • Auslöser: Manueller Retry einer Zahlung, für die manueller Retry nicht vorgesehen ist. Die Zahlung hat keine Rechnung, die Rechnung ist keine offene Verlängerung eines Abonnements, für die Rechnung ist noch keine Zahlung fehlgeschlagen, für das Abonnement ist keine wiederkehrende Abrechnung konfiguriert (z. B. ein On-Demand-Abonnement), oder der Kunde steht auf der Blockierliste.
    • Meldung: Variiert je nach Grund, zum Beispiel: Nur Zahlungen für Abonnementverlängerungen können wiederholt werden
  • PAYMENT_NOT_SUCCEEDED
    • Auslöser: Der Versuch, eine nicht erfolgreiche Zahlung zu erstatten oder zu verarbeiten
    • Meldung: Die angegebene Zahlung war nicht erfolgreich
  • PREVIOUS_PAYMENT_PENDING
    • Auslöser: Der Versuch, eine Belastung zu erstellen, während sich die vorherige Zahlung in einem nicht abgeschlossenen Status befindet. Wird auch bei einem manuellen Retry zurückgegeben, wenn die neueste Zahlung der Rechnung weder failed noch in Bearbeitung ist, zum Beispiel requires_customer_action oder cancelled.
    • Meldung: Neue Belastung kann nicht erstellt werden, da die vorherige Zahlung noch nicht erfolgreich war (oder) Die letzte Zahlung dieser Rechnung ist nicht fehlgeschlagen
  • UNSUCCESSFUL_PAYMENT_ID
    • Auslöser: Die Zahlungs-ID verweist auf eine nicht erfolgreiche Zahlung
    • Meldung: Die Zahlungs-ID besitzt einen nicht erfolgreichen Status.

Konnektoren und BYOP

Diese Fehler beziehen sich auf Zahlungskonnektoren im Besitz des Händlers (Bring Your Own Processor oder BYOP).
  • BYOP_CONNECTOR_DISABLED
    • Auslöser: Die Zahlungsmethode eines Abonnements aktualisieren, das über einen deaktivierten BYOP-Konnektor geleitet wird. Dodo Payments weicht nicht auf eigene Konnektoren aus. Aktivieren Sie daher zuerst den Konnektor wieder.
    • Meldung: Das Abonnement wird über den eigenen Konnektor des Händlers (BYOP) geleitet, der derzeit deaktiviert ist
  • BYOP_CUSTOM_INVOICE_ADDRESS_MISSING
    • Auslöser: Eine über den Konnektor des Händlers (BYOP) geleitete Zahlung besitzt keine benutzerdefinierte Rechnungsadresse
    • Meldung: Eine benutzerdefinierte BYOP-Rechnungsadresse ist erforderlich, wenn eine Zahlung über den Konnektor des Händlers geleitet wird
  • CONNECTOR_LABEL_ALREADY_EXISTS
    • Auslöser: Einen Konnektor mit einer bereits vorhandenen Bezeichnung erstellen
    • Meldung: Ein Konnektor mit dieser Bezeichnung existiert bereits. Wählen Sie eine andere Bezeichnung.

Rückerstattungen

  • EXISTING_REFUND_REQUEST_PROCESSING
    • Auslöser: Eine vorherige Rückerstattungsanfrage wird noch verarbeitet
    • Meldung: Eine Rückerstattungsanfrage mit dem Status “Pending” wird noch verarbeitet
  • LINE_ITEM_FULLY_REFUNDED
    • Auslöser: Der Versuch, eine bereits vollständig erstattete Position zu erstatten
    • Meldung: Die Position {id} wurde vollständig erstattet und kann nicht weiter erstattet werden.
  • LINE_ITEM_NOT_FOUND
    • Auslöser: Die Artikel-ID ist nicht Teil der angegebenen Zahlung
    • Meldung: Position {id} in der Zahlung nicht gefunden
  • LINE_ITEM_PRORATED
    • Auslöser: Eine Rückerstattung oder Aktualisierung für eine anteilig berechnete Position
    • Meldung: Position {id} kann nicht erstattet werden, da sie anteilig berechnet wurde
  • LINE_ITEM_REFUND_AMOUNT_TOO_HIGH
    • Auslöser: Der Rückerstattungsbetrag einschließlich Steuern ist höher als der bezahlte Betrag
    • Meldung: Der für Position {id} angeforderte Rückerstattungsbetrag einschließlich Steuern beträgt {amount} und liegt damit über dem bezahlten Betrag {amount}
  • LINE_ITEM_REFUND_AMOUNT_TOO_LOW
    • Auslöser: Der Rückerstattungsbetrag liegt unter dem Mindestschwellenwert
    • Meldung: Der für Position {id} angeforderte Rückerstattungsbetrag beträgt {amount} und ist zu niedrig
  • NOTHING_TO_REFUND
    • Auslöser: Es ist kein erstattungsfähiger Betrag mehr vorhanden, da alle positiven Positionen bereits vollständig erstattet wurden
    • Meldung: Kein erstattungsfähiger Betrag mehr vorhanden. Alle positiven Positionen wurden vollständig erstattet.
  • PARTIAL_REFUND_NOT_ALLOWED
    • Auslöser: Eine teilweise Rückerstattung für eine Zahlungsmethode, die nur vollständige Rückerstattungen unterstützt
    • Meldung: Teilweise Rückerstattungen sind für diese Zahlungsmethode nicht zulässig
  • PAYMENT_ALREADY_REFUNDED
    • Auslöser: Eine doppelte Rückerstattung
    • Meldung: Diese Zahlung wurde bereits erstattet
  • PAYMENT_HAS_BEEN_REFUNDED
    • Auslöser: Die Zahlung wurde vollständig erstattet
    • Meldung: Die Zahlungs-ID wurde vollständig erstattet.
  • REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT
    • Auslöser: Der gesamte Rückerstattungsbetrag ist höher als der bezahlte Betrag
    • Meldung: Der berechnete Rückerstattungsbetrag ist höher als der bezahlte Betrag
  • REFUND_WINDOW_EXPIRED
    • Auslöser: Die Rückerstattung wird außerhalb des zulässigen Rückerstattungszeitraums angefordert
    • Meldung: Rückerstattungen können {days} Tage nach der Erstellung der Zahlung nicht eingeleitet werden. Wenden Sie sich an support@dodopayments.com.
  • ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED
    • Auslöser: Der Versuch, eine Zahlung mit einem Währungsbetrag von null zu erstatten
    • Meldung: Eine Zahlung mit einem Währungsbetrag von null kann nicht erstattet werden

Abonnements und Add-ons

  • ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Auslöser: Der Versuch, Add-ons zu einem verbrauchsbasierten Abrechnungsabonnement hinzuzufügen
    • Meldung: Add-ons werden bei verbrauchsbasierter Abrechnung in Abonnements nicht unterstützt
  • ADDONS_NOT_ALLOWED_FOR_ON_DEMAND
    • Auslöser: Der Versuch, Add-ons zu einem On-Demand-Abonnement hinzuzufügen
    • Meldung: Add-ons sind für On-Demand-Abonnements nicht zulässig
  • CANCEL_SCHEDULED_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Auslöser: Das Customer Portal versucht, eine geplante Planänderung abzubrechen, während das Unternehmen diese Aktion deaktiviert hat
    • Meldung: Das Abbrechen geplanter Planänderungen ist im Customer Portal deaktiviert.
  • CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Auslöser: Der Versuch, ein zur Kündigung vorgemerktes Abonnement zu belasten
    • Meldung: Abonnement zur Kündigung vorgemerkt
  • CUSTOMER_HAS_EXISTING_SUBSCRIPTION
    • Auslöser: Ein Abonnement für einen Kunden erstellen, der bereits eines besitzt, wenn das Unternehmen nicht mehrere Abonnements pro Kunde zulässt
    • Meldung: Kunde {id} besitzt bereits ein Abonnement. Um mehrere Abonnements pro Kunde zuzulassen, ändern Sie die Unternehmenseinstellungen
  • DO_NOT_BILL_NOT_ALLOWED_IN_CUSTOMER_PORTAL
    • Auslöser: Der Prorationsmodus do_not_bill wird bei einer Planänderung im Customer Portal verwendet
    • Meldung: Der Prorationsmodus do_not_bill ist im Customer Portal nicht zulässig
  • DUPLICATE_ADDON_IDS_IN_REQUEST
    • Auslöser: Dieselbe addon_id erscheint mehr als einmal in der Anfrage
    • Meldung: Doppelte Add-on-IDs sind nicht zulässig
  • INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED
    • Auslöser: Eine Planänderung bei einem inaktiven Abonnement
    • Meldung: Planänderungen werden für inaktive Abonnements nicht unterstützt
  • INVALID_PRORATION_MODE_WITH_NEXT_BILLING_DATE
    • Auslöser: Ein anderer Prorationsmodus als full_immediately wird mit effective_at: next_billing_date verwendet
    • Meldung: Mit effective_at: next_billing_date ist nur der Prorationsmodus full_immediately zulässig
  • MISSING_ADDON_IDS
    • Auslöser: Die addon_id-Liste ist leer oder enthält unbekannte IDs
    • Meldung: Eine oder mehrere Produkt-IDs existieren nicht: {id}
  • ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED
    • Auslöser: Eine Planänderung bei einem On-Demand-Abonnement
    • Meldung: Planänderungen werden für On-Demand-Abonnements nicht unterstützt
  • ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Auslöser: Der Versuch, ein On-Demand-Abonnement mit verbrauchsbasierter Abrechnung zu verwenden
    • Meldung: On-Demand-Abonnements werden bei verbrauchsbasierter Abrechnung nicht unterstützt
  • ONE_TIME_PRODUCTS_NOT_ALLOWED_FOR_ON_DEMAND
    • Auslöser: Ein einmaliges Produkt wurde zu einem On-Demand-Abonnement hinzugefügt
    • Meldung: Einmalige Produkte sind für On-Demand-Abonnements nicht zulässig
  • PENDING_PLAN_CHANGE_EXISTS
    • Auslöser: Eine neue Planänderung wurde angefordert, während eine vorherige noch auf Zahlung wartet. Um eine ausstehende Payment-Link-Änderung zu ersetzen, setzen Sie cancel_older_payment_link: true.
    • Nachricht: Für dieses Abonnement existiert bereits eine ausstehende Planänderung. Bitte warten Sie, bis die aktuelle Zahlung abgeschlossen ist.
  • PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Auslöser: Eine Planänderung über das Customer Portal, während das Unternehmen diese deaktiviert hat
    • Meldung: Planänderungen für Abonnements im Customer Portal sind deaktiviert.
  • PLAN_CHANGE_LINK_CANCEL_FAILED
    • Auslöser: Eine Planänderung mit cancel_older_payment_link: true konnte den vorherigen Payment-Link nicht stornieren. Es wurde nichts geändert, daher können Sie die Anfrage erneut versuchen.
    • Nachricht: Der vorherige Payment-Link konnte nicht storniert werden. Bitte versuchen Sie es erneut.
  • PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Auslöser: Eine Planänderung für ein Abonnement, dessen Kündigung geplant ist
    • Nachricht: Kündigung des Abonnements geplant
  • PLAN_CHANGE_PAYMENT_ALREADY_COMPLETED
    • Auslöser: Eine Planänderung mit cancel_older_payment_link: true, während der Kunde die vorherige Planänderung bereits bezahlt hat. Diese Änderung wird angewendet, daher sollte die Anfrage nicht erneut versucht werden.
    • Nachricht: Der Kunde hat die vorherige Planänderung bereits bezahlt. Sie wird in Kürze angewendet.
  • PLAN_CHANGE_PAYMENT_IN_PROGRESS
    • Auslöser: Eine Planänderung mit cancel_older_payment_link: true, während der Kunde die vorherige Planänderung bezahlt, beispielsweise während 3D Secure. Versuchen Sie es erneut, nachdem die Zahlung abgeschlossen ist oder fehlgeschlagen ist.
    • Nachricht: Der Kunde bezahlt gerade die vorherige Planänderung. Bitte versuchen Sie es später erneut.
  • SCHEDULE_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Auslöser: Planung einer Planänderung über das Customer Portal, während das Unternehmen diese Funktion deaktiviert hat
    • Nachricht: Das Planen von Planänderungen ist für dieses Unternehmen deaktiviert.
  • SCHEDULED_PLAN_CHANGE_EXISTS
    • Auslöser: Erstellen einer geplanten Planänderung, wenn bereits eine existiert
    • Nachricht: Für dieses Abonnement existiert bereits eine geplante Planänderung. Bitte stornieren Sie die bestehende geplante Änderung, bevor Sie eine neue erstellen.
  • SCHEDULED_PLAN_CHANGE_NOT_FOUND
    • Auslöser: Verweisen auf oder Stornieren einer geplanten Planänderung, die nicht existiert
    • Nachricht: Für dieses Abonnement wurde keine geplante Planänderung gefunden.
  • SUBSCRIPTION_EXPIRED
    • Auslöser: Abrechnung eines Abonnements nach dem expires_at-Datum
    • Nachricht: Abonnement abgelaufen; es können keine neuen Gebühren erstellt werden
  • SUBSCRIPTION_HAS_NO_PAYMENT_METHOD
    • Auslöser: Manueller erneuter Versuch für ein Abonnement ohne gespeicherte Zahlungsmethode für eine Zahlung off-session
    • Nachricht: Für dieses Abonnement ist keine gespeicherte Zahlungsmethode für eine Belastung vorhanden
  • SUBSCRIPTION_INACTIVE
    • Auslöser: Der Abonnementstatus ist nicht active
    • Nachricht: Abonnement ist nicht aktiv (oder) Dieses Abonnement ist nicht aktiv, daher kann keine Kündigung geplant werden
  • SUBSCRIPTION_NOT_ON_DEMAND
    • Auslöser: Eine On-Demand-Aktion für ein Abonnement, das in einem festen Intervall abgerechnet wird
    • Nachricht: Das Abonnement ist bereits nicht On-Demand
  • SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED
    • Auslöser: Die Zahlungswiederholungen für das Abonnement haben die maximale Anzahl von Versuchen überschritten
    • Nachricht: Das maximale Wiederholungslimit von 10 Versuchen für dieses Abonnement wurde überschritten

Kunden und Blocklist

  • CUSTOMER_ALREADY_BLOCKED
    • Auslöser: Blockieren eines Kunden, der bereits auf der Blocklist steht und keine aktiven Abonnements mehr hat, die gekündigt werden könnten (HTTP 409)
    • Nachricht: Dieser Kunde steht bereits auf der Blocklist
  • PORTAL_ACTION_NOT_PERMITTED
    • Auslöser: Ein blockierter Kunde ruft eine schreibende Route des Customer Portal auf: kündigen, pausieren, fortsetzen, Plan ändern oder Zahlungsmethode aktualisieren (HTTP 403). Lesende Routen bleiben geöffnet. Code und Nachricht nennen absichtlich keine Ursache.
    • Nachricht: Diese Aktion ist nicht verfügbar.

Produkte, Warenkorb und Marken

  • BRAND_ALREADY_ARCHIVED
    • Auslöser: Archivieren einer Marke, die bereits archiviert ist
    • Nachricht: Marke ist bereits archiviert
  • BRAND_ARCHIVED
    • Auslöser: Aktualisieren einer archivierten Marke, Einreichen zur Verifizierung oder Zuordnen eines neuen Produkts, einer neuen Produktsammlung oder eines Abonnements zu ihr
    • Nachricht: Marke ist archiviert (oder) Marke ist archiviert und kann nicht aktualisiert werden (oder) Marke ist archiviert und kann nicht zur Verifizierung eingereicht werden
  • BRAND_ARCHIVE_TARGET_REQUIRED
    • Auslöser: Archivieren einer Marke, die noch Produkte, aktive Abonnements oder Produktsammlungen ohne ein move_products_to-Ziel enthält
    • Nachricht: Die Marke enthält {count} Produkt(e). Setzen Sie move_products_to auf eine Zielmarke, um sie neu zuzuordnen. Die Nachricht nennt stattdessen aktive Abonnements oder Produktsammlungen, wenn diese das Archivieren verhindern.
  • BRAND_MISMATCH
    • Auslöser: Die Warenkorbartikel gehören zu verschiedenen Marken
    • Nachricht: Alle Artikel im Produktwarenkorb sollten derselben Marke angehören
  • BRAND_NOT_ENABLED
    • Auslöser: Die Marke ist deaktiviert oder nicht aktiv
    • Nachricht: Die angegebene Marke ist nicht aktiviert
  • BRAND_SUBMISSION_NOT_ENABLED
    • Auslöser: Die Funktion zum erneuten Einreichen der Markenverifizierung ist nicht aktiviert
    • Nachricht: Brand verificatin resubmission is not enabled (genau wie von der API zurückgegeben)
  • CANNOT_ARCHIVE_PRIMARY_BRAND
    • Auslöser: Archivieren der primären Marke, deren Marken-ID der Unternehmens-ID entspricht
    • Nachricht: Die primäre Marke kann nicht archiviert werden
  • FILE_IN_USE
    • Auslöser: Löschen einer Datei eines digitalen Produkts, auf die aktive Berechtigungen noch verweisen
    • Nachricht: Auf die digitale Datei wird von aktiven Berechtigungen verwiesen
  • INVALID_BRAND_ARCHIVE_TARGET
    • Auslöser: move_products_to bezeichnet die zu archivierende Marke, eine archivierte Marke oder eine Marke eines anderen Unternehmens
    • Nachricht: move_products_to muss eine nicht archivierte Marke dieses Unternehmens sein (oder) move_products_to darf nicht die Marke sein, die Sie archivieren
  • INVALID_SUGGESTED_PRICE
    • Auslöser: Ein vorgeschlagener Preis für ein Pay What You Want-Produkt ist niedriger als der Mindestpreis
    • Nachricht: Der vorgeschlagene Preis darf nicht niedriger als der Mindestpreis sein. Bei Pay What You Want gilt der Preis als niedrigster akzeptierter Betrag
  • LOCALIZED_PRICE_ALREADY_EXISTS
    • Auslöser: Für dieses Produkt und dieses Land oder diese Währung existiert bereits ein lokalisierter Preis
    • Nachricht: Für dieses Produkt und dieses Land/diese Währung existiert bereits ein lokalisierter Preis
  • LOCALIZED_PRICE_DUPLICATES_BASE
    • Auslöser: Der lokalisierte Preis dupliziert die Basiswährung oder das Basisland des Produkts
    • Nachricht: Der lokalisierte Preis dupliziert die Basiswährung bzw. das Basisland des Produkts
  • LOCALIZED_PRICE_SHAPE_MISMATCH
    • Auslöser: Die Form des lokalisierten Preises stimmt nicht mit dem pricing_mode des Produkts überein
    • Nachricht: Die Form des lokalisierten Preises stimmt nicht mit dem pricing_mode des Produkts überein
  • MISSING_PRODUCT_INFORMATION
    • Auslöser: Das Produkt existiert, aber Pflichtinformationen fehlen
    • Nachricht: Produkt {id} existiert, aber andere Pflichtinformationen fehlen oder sind ungültig
  • PAY_AS_YOU_WANT_AMOUNT_REQUIRED
    • Auslöser: Der Betrag fehlt für ein Pay What You Want-Produkt
    • Nachricht: Der Betrag ist für ein Pay What You Want-Produkt erforderlich
  • PRODUCT_CART_EMTPY
    • Auslöser: Ein leerer Produktwarenkorb wird übermittelt
    • Nachricht: product_cart ist leer (der Fehlercode wird absichtlich als EMTPY geschrieben, damit er dem exakten von der API zurückgegebenen Wert entspricht)
  • PRODUCT_COLLECTION_IS_DELETED
    • Auslöser: Operation für eine gelöschte Produktsammlung
    • Nachricht: Keine Nachricht
  • PRODUCT_COLLECTION_MUST_HAVE_PRODUCTS
    • Auslöser: Entfernen des letzten Produkts oder der letzten Gruppe mit Produkten aus einer Sammlung
    • Nachricht: Das letzte Produkt einer Sammlung kann nicht gelöscht werden. Archivieren Sie stattdessen die Sammlung. (oder) Die letzte Gruppe mit Produkten kann nicht gelöscht werden. Archivieren Sie stattdessen die Sammlung.
  • PRODUCT_IS_DELETED
    • Auslöser: Das Produkt wurde gelöscht
    • Nachricht: Keine Nachricht
  • PRODUCT_PRICING_MODE_REQUIRED
    • Auslöser: Hinzufügen lokalisierter Preise, bevor das pricing_mode des Produkts festgelegt wurde
    • Nachricht: Der pricing_mode des Produkts muss festgelegt werden, bevor lokalisierte Preise hinzugefügt werden
  • SLUG_ALREADY_TAKEN
    • Auslöser: Der angeforderte Produkt-Slug oder die Kurz-URL wird bereits verwendet
    • Nachricht: Der Slug ist bereits vergeben
  • UNABLE_TO_EDIT_PRIMARY_BRAND
    • Auslöser: Versuch, die primäre Marke über die reguläre Marken-API zu aktualisieren
    • Nachricht: Die primäre Marke kann nicht über diesen API-Endpunkt aktualisiert werden.

Rabatte

  • DISCOUNT_ALREADY_USED_ON_SUBSCRIPTION
    • Auslöser: Erneutes Anwenden eines Rabatts, der für dieses Abonnement bereits verwendet wurde
    • Nachricht: Dieser Rabatt wurde für dieses Abonnement bereits verwendet
  • DISCOUNT_CODE_ALREADY_EXISTS
    • Auslöser: Erstellen eines Rabattcodes, der bereits existiert
    • Nachricht: Rabattcode existiert bereits
  • DISCOUNT_CODE_EXPIRED
    • Auslöser: Das Ablaufdatum des Rabattcodes, expires_at, ist überschritten
    • Nachricht: Rabattcode abgelaufen
  • DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED
    • Auslöser: Der Rabattcode wird verwendet, nachdem sein usage_limit erreicht wurde
    • Nachricht: Das Nutzungslimit darf nicht kleiner als times_used sein (oder) Nutzungslimit des Rabattcodes erreicht
    • Hinweis: Endgültig. Der Code ist erschöpft, daher sollte die Anfrage nicht erneut versucht werden.
  • DISCOUNT_CONCURRENT_REDEMPTION
    • Auslöser: Eine andere Einlösung desselben Codes hielt die Sperre des Nutzungslimits zu lange (HTTP 503)
    • Nachricht: Rabatt wird gleichzeitig eingelöst; bitte versuchen Sie es erneut
    • Hinweis: Vorübergehend. Der Code kann noch verfügbar sein, daher kann die Anfrage sicher erneut versucht werden. Zeigen Sie dem Kunden nicht an, dass der Code erschöpft ist.
  • DISCOUNT_CURRENCY_OPTION_INVALID
    • Auslöser: Ungültiges currency_options beim Erstellen oder Aktualisieren
    • Nachricht: Ein pauschaler Rabatt erfordert mindestens eine Währungsoption mit auflösbarem Standardwert (oder) Doppelte Währungsoptionen sind nicht zulässig (oder) Nur eine Währungsoption darf als Standard markiert sein
  • DISCOUNT_CUSTOMER_NOT_ELIGIBLE
    • Auslöser: Der Kunde erfüllt die customer_eligibility des Codes nicht (first_time, existing oder nicht auf der Allowlist eines specific-Codes)
    • Nachricht: Der Kunde ist für diesen Rabattcode nicht berechtigt
  • DISCOUNT_MINIMUM_SUBTOTAL_NOT_MET
    • Auslöser: Die Zwischensumme des Warenkorbs liegt unter dem für die Checkout-Währung konfigurierten minimum_subtotal
    • Nachricht: Die Zwischensumme des Warenkorbs liegt unter der für den Rabatt erforderlichen Mindestzwischensumme
  • DISCOUNT_NOT_YET_ACTIVE
    • Auslöser: Der Code wird vor seinem starts_at-Datum verwendet
    • Nachricht: Rabattcode ist noch nicht aktiv (starts_at liegt in der Zukunft)
  • DISCOUNT_PER_CUSTOMER_USAGE_LIMIT_EXCEEDED
    • Auslöser: Der Kunde hat den Code bereits per_customer_usage_limit-mal eingelöst
    • Nachricht: Nutzungslimit pro Kunde für diesen Rabattcode überschritten
  • DISCOUNT_NOT_APPLICABLE_TO_NEW_PRODUCT
    • Auslöser: Eine Planänderung zu einem Produkt, für das der bestehende Rabatt nicht gilt
    • Nachricht: Rabatt gilt nicht für das Produkt des neuen Plans
  • DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND
    • Auslöser: Der Code wird auf ein On-Demand-Abonnement angewendet
    • Nachricht: Rabattcoupon ist für On-Demand-Abonnements nicht verfügbar
  • DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT
    • Auslöser: Der Code wird auf Produkte angewendet, die er nicht abdeckt
    • Nachricht: Rabattcoupon ist für dieses Produkt nicht verfügbar
  • INVALID_DISCOUNT_CODE
    • Auslöser: Der Code existiert nicht oder gilt für kein Produkt im Warenkorb
    • Nachricht: Ungültiger Rabattcode (oder) Rabattcode kann auf kein Produkt im Warenkorb angewendet werden
  • INVALID_PERCENTAGE
    • Auslöser: Der Prozentsatz ist höher als 100 % (10.000 Basispunkte)
    • Nachricht: Der prozentuale Betrag darf nicht höher als 10000 sein (oder) Der Rabattcodebetrag darf nicht höher als 100 % sein
  • UNSUPPORTED_DISCOUNT_TYPE
    • Auslöser: Ein nicht unterstützter Rabatttyp. percentage und flat werden unterstützt; Rabatte mit einem Betrag pro Einheit nicht.
    • Nachricht: Nur prozentuale und pauschale Rabattcodes werden unterstützt (oder) Derzeit werden nur prozentuale Rabattcodes unterstützt

Lizenzschlüssel

  • ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT
    • Auslöser: Das neue Aktivierungslimit eines Lizenzschlüssels ist niedriger als die aktuelle Anzahl seiner Instanzen
    • Nachricht: Das neue Aktivierungslimit darf nicht kleiner als die aktuelle Instanzanzahl sein
  • INACTIVE_LICENSE_KEY
    • Auslöser: Der Status des Lizenzschlüssels ist nicht active
    • Nachricht: Lizenzschlüssel ist nicht aktiv
  • LICENSE_KEY_LIMIT_REACHED
    • Auslöser: Die Anzahl der Aktivierungen hat das Aktivierungslimit erreicht
    • Nachricht: Aktivierungslimit des Lizenzschlüssels erreicht
  • LICENSE_KEY_NOT_FOUND
    • Auslöser: Die Instanz-ID oder die ID des Lizenzschlüssels ist ungültig
    • Nachricht: Instanz des Lizenzschlüssels nicht gefunden oder gehört nicht zu diesem Lizenzschlüssel
  • NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS
    • Auslöser: Versuch, ein Ablaufdatum für einen abonnementbasierten Lizenzschlüssel festzulegen
    • Nachricht: Für einen abonnementbasierten Lizenzschlüssel kann kein Ablaufdatum festgelegt werden

Nutzungsbasierte Abrechnung und Zähler

  • DUPLICATE_METER_IDS_IN_REQUEST
    • Auslöser: Dieselbe Zähler-ID erscheint mehr als einmal in der Anfrage
    • Nachricht: Doppelte Meter-IDs sind nicht zulässig
  • INVALID_QUANTITY
    • Auslöser: Eine andere Menge als 1 für ein Produkt mit nutzungsbasierter Preisgestaltung
    • Nachricht: Für Produkte mit nutzungsbasierter Preisgestaltung ist nur die Menge 1 zulässig
  • METER_IS_DELETED
    • Auslöser: Versuch, einen gelöschten Zähler zu verwenden
    • Nachricht: Der Zähler wurde bereits gelöscht
  • MISSING_METER_IDS
    • Auslöser: Die Liste der Zähler-IDs ist leer oder enthält ungültige IDs
    • Nachricht: Eine oder mehrere Zähler-IDs existieren nicht: {id}

Guthabenbasierte Abrechnung

  • CREDIT_ENTITLEMENT_IS_DELETED
    • Auslöser: Operation für eine gelöschte Guthabenberechtigung
    • Nachricht: Die Guthabenberechtigung wurde bereits gelöscht
  • CREDIT_ENTITLEMENT_NAME_ALREADY_EXISTS
    • Auslöser: Erstellen einer Guthabenberechtigung mit einem Namen, der bereits existiert
    • Nachricht: Eine Guthabenberechtigung mit diesem Namen existiert bereits
  • OVERAGE_LIMIT_EXCEEDED
    • Auslöser: Eine Nutzung oder Abbuchung von Guthaben würde das konfigurierte Überziehungslimit überschreiten
    • Nachricht: Überziehungslimit überschritten

Wallet

  • INSUFFICIENT_WALLET_FUNDS
    • Auslöser: Das Wallet-Guthaben ist niedriger als der Abbuchungsbetrag
    • Nachricht: Unzureichendes Guthaben im Wallet
  • NEGATIVE_BALANCE_ADJUSTMENT
    • Auslöser: Versuch, das Wallet-Guthaben negativ werden zu lassen
    • Nachricht: Das Wallet-Guthaben darf nicht negativ werden

Währung, Steuern und Region

  • EXCHANGE_RATE_NOT_FOUND
    • Auslöser: Für das Währungspaar existiert kein Wechselkurs
    • Nachricht: Wechselkurs zur Umrechnung von {currency} in {currency} nicht gefunden
  • INVALID_TAX_ID
    • Auslöser: Die Validierung von VAT, GST oder TIN ist fehlgeschlagen
    • Nachricht: Steuer-ID ist ungültig
  • REQUEST_AMOUNT_BELOW_MINIMUM
    • Auslöser: Der Betrag ist niedriger als der für das Produkt festgelegte Mindestbetrag
    • Nachricht: Der Betrag darf nicht niedriger als der für das Produkt festgelegte Mindestbetrag sein
  • TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT
    • Auslöser: Der kombinierte Warenkorbgesamtbetrag einschließlich Steuern liegt unter dem Mindestbetrag, der für die Verarbeitung einer Zahlung erforderlich ist. Der Mindestbetrag hängt von der Abrechnungswährung und davon ab, ob es sich um eine einmalige Zahlung oder ein Abonnement handelt. Für andere Währungen als USD, EUR und GBP wird der Gesamtbetrag zusätzlich mit dem USD-Mindestbetrag verglichen. Siehe Mindestbeträge
    • Nachricht: Für die Verarbeitung der Zahlung ist ein Mindestbetrag von {display_str} erforderlich, beispielsweise Minimum amount of 1.00 USD is required to process payment
  • UNSUPPORTED_BILLING_CURRENCY
    • Auslöser: Die angeforderte Abrechnungswährung wird für dieses Abonnement nicht unterstützt
    • Nachricht: Abrechnungswährungen außer USD werden für Abonnements nicht unterstützt
  • UNSUPPORTED_COUNTRY
    • Auslöser: Das Land wird nicht unterstützt
    • Nachricht: Land {country_name} wird derzeit nicht unterstützt
  • UNSUPPORTED_CURRENCY
    • Auslöser: Die Währung des Produkts oder Add-ons ist keine Währung, in der Dodo Payments Gebühren erheben kann. Basispreise können in jeder belastbaren Währung festgelegt werden, daher bedeutet dieser Fehler normalerweise, dass der Währungscode ungültig oder nicht unterstützt ist.
    • Nachricht: Währung wird derzeit nicht unterstützt (oder) Derzeit werden nur USD- und INR-Produkte unterstützt (oder) Derzeit wird für Add-on-Preise nur USD und INR unterstützt (oder) Für billing_currency können nur USD oder INR angefordert werden (oder) Währung nicht unterstützt (oder) Unerwartete Währung für indische Kartenabonnements
  • UNSUPPORTED_TAX_CATEGORY
    • Auslöser: Die Steuerkategorie gehört nicht zu den unterstützten Werten
    • Nachricht: Kategorie {category} wird derzeit nicht unterstützt

Validierung und Anfragen

  • DUPLICATE_LINE_ITEMS_IN_REQUEST
    • Auslöser: Dasselbe item_id erscheint mehr als einmal in items[]
    • Nachricht: Doppelte item_ids im items-Array angegeben
  • INVALID_QUERY_PARAMS
    • Auslöser: Query-Parameter, die sich gegenseitig ausschließen oder fehlerhaft formatiert sind
    • Nachricht: Query-Parameter dürfen entweder nur time_frame oder (start, end) enthalten (oder) Der Beginn des Bereichs darf nicht nach dem Ende liegen
  • INVALID_REQUEST_BODY
    • Auslöser: Fehlerhaftes JSON oder eine Verletzung des Schemas
    • Nachricht: Der Body Ihrer Anfrage ist ungültig. Bitte überprüfen Sie Ihre Anfrage-Header und Ihr Objekt.
  • INVALID_REQUEST_PARAMETERS
    • Auslöser: Parameterwerte, die formal gültig, aber inhaltlich ungültig sind, beispielsweise ein Datum in der Vergangenheit
    • Nachricht: next_billing_date kann nicht auf einen vergangenen Zeitpunkt geändert werden (oder) Ein Checkout mit mehr als einem Abonnementprodukt darf keine einmaligen Produkte enthalten (oder) Alle Produkt-IDs müssen eindeutig sein (oder) On-Demand-Abonnements dürfen nicht mehr als ein Produkt enthalten (oder) Ein Checkout darf höchstens 20 Abonnementprodukte enthalten (oder) Doppelte Abonnementprodukte in einem Checkout sind nicht zulässig
  • MAXIMUM_KEYS_REACHED
    • Auslöser: Metadaten oder benutzerdefinierte Felder überschreiten 50 Schlüssel-Wert-Paare
    • Nachricht: Mehr als 50 Schlüssel-Wert-Paare

Allgemein und System

  • INTEGER_CONVERSION_FAILURE
    • Auslöser: Eine serverseitige Konvertierung zwischen einer Ganzzahl und einem String oder einer Dezimalzahl schlägt fehl, beispielsweise wenn ein Warenkorbgesamtbetrag zu groß für die Verarbeitung ist
    • Nachricht: Fehler bei der Ganzzahlkonvertierung (oder) Warenkorbgesamtbetrag ist zu groß für die Verarbeitung. Verringern Sie die Menge oder wählen Sie eine andere Abrechnungswährung.
  • INTERNAL_SERVER_ERROR
    • Auslöser: Ein unerwarteter Serverfehler. Protokollieren Sie die Anfragedetails auf Ihrer Seite.
    • Nachricht: Keine öffentliche Nachricht (generischer 500-Fehler, message ist normalerweise null)
  • NOT_FOUND
    • Auslöser: Generischer 404-Fehler für jede fehlende Ressource
    • Nachricht: Element nicht gefunden (oder eine spezifischere Nachricht, die das fehlende Element nennt)
  • TOO_MANY_REQUESTS
    • Auslöser: Ein Rate Limit wurde überschritten (HTTP 429)
    • Nachricht: Keine Nachricht
  • UNSUPPORTED_ACTION
    • Auslöser: Eine Aktion, die der Ressourcentyp nicht unterstützt
    • Nachricht: Das Ändern von Plänen für nutzungsbasierte Abonnements wird nicht unterstützt

Best Practices

Befolgen Sie beim Umgang mit API-Fehlern diese Vorgehensweisen:
  1. Behandeln Sie jede Fehlerantwort in Ihrer Anwendung und verzweigen Sie anhand von code statt anhand von message.
  2. Protokollieren Sie bei jeder fehlgeschlagenen Anfrage den HTTP-Status, code und message.
  3. Zeigen Sie Endbenutzern eine für sie verfasste Nachricht anstelle des rohen API-message.
  4. Wiederholen Sie nur vorübergehende Fehler, beispielsweise Antworten mit 429 und 5xx oder DISCOUNT_CONCURRENT_REDEMPTION, nach einer Verzögerung.
  5. Wenden Sie sich bei Fehlern, die Sie nicht beheben können, an den Support.

Support

Wenn Sie weitere Hilfe zu Fehlercodes oder Integrationsproblemen benötigen, wenden Sie sich unter support@dodopayments.com an das Supportteam.
Zuletzt geändert am 8. Oktober 2026