Skip to main content

Prerequisites

To integrate the Dodo Payments API, you’ll need:
  • A Dodo Payments merchant account
  • API credentials (API key and webhook secret key) from the dashboard
For a more detailed guide on the prerequisites, check this section.

API Integration

Checkout Sessions

Use Checkout Sessions to sell subscription products with a secure, hosted checkout. Pass your subscription product in product_cart and redirect customers to the returned checkout_url.
Mixed Checkout: You can combine subscription products with one-time products in the same checkout session. This enables use cases like setup fees with subscriptions, hardware bundles with SaaS, and more. See the Checkout Sessions guide for examples.

API Response

The following is an example of the response:
Leiten Sie den Kunden zu checkout_url.

Webhooks

Bei der Integration von Abonnements erhalten Sie Webhooks, um den Lebenszyklus der Abonnements zu verfolgen. Diese Webhooks helfen Ihnen, den Abonnementstatus und Zahlungsszenarien effektiv zu verwalten. Um Ihren Webhook-Endpunkt einzurichten, folgen Sie bitte unserem Detaillierten Integrationshandbuch.

Abonnement-Ereignistypen

Die folgenden Webhook-Ereignisse verfolgen Änderungen des Abonnementstatus:
  1. subscription.active - Abonnement wurde erfolgreich aktiviert.
  2. subscription.updated - Abonnementobjekt wurde aktualisiert (wird bei jeder Feldänderung ausgelöst).
  3. subscription.on_hold - Abonnement wird wegen fehlgeschlagener Verlängerung pausiert.
  4. subscription.failed - Abonnementerstellung schlug bei der Erstellung des Mandats fehl.
  5. subscription.renewed - Abonnement wird für den nächsten Abrechnungszeitraum erneuert.
Für ein zuverlässiges Abonnement-Lebenszyklusmanagement empfehlen wir, diese Abonnementereignisse zu verfolgen.
Verwenden Sie subscription.updated, um Echtzeitbenachrichtigungen über Abonnementänderungen zu erhalten, und halten Sie den Zustand Ihrer Anwendung ohne Abfrage des APIs synchron.

Zahlungsszenarien

Erfolgreicher Zahlungsablauf Die Webhooks, die Sie empfangen, und deren Zeitpunkt hängen davon ab, ob das Produkt eine Testphase hat. Sofortige Abrechnung (0 Testtage):
  1. subscription.active: Das Mandat wird autorisiert und das Abonnement aktiviert.
  2. payment.succeeded: Bestätigt die erste Abbuchung. Dies wird innerhalb von 2–10 Minuten nach dem Checkout erwartet.
Mit einer Testphase:
  1. Zu Beginn der Testphase (Checkout): subscription.active wird ausgelöst, sobald die Zahlungsmethode autorisiert wurde. Es wird noch keine wiederkehrende Abbuchung vorgenommen. Die erste tatsächliche Abbuchung erfolgt erst nach Ende der Testphase.
  2. Am Ende der Testphase: Der wiederkehrende Betrag wird abgebucht, und Sie erhalten payment.succeeded zusammen mit subscription.renewed.
Jede darauffolgende Verlängerung:
  • subscription.renewed: Wird bei jedem Abrechnungszyklus ausgelöst, wenn die Zahlung für die Verlängerung abgebucht wird, immer zusammen mit payment.succeeded. Enthält außerdem den aktualisierten Wert next_billing_date.
Immer wenn Geld für ein Abonnementprodukt tatsächlich abgebucht wird, erhalten Sie subscription.renewed und payment.succeeded. Verwenden Sie subscription.renewed (statt allein payment.succeeded) als Signal, um den Zugriff für den nächsten Zyklus zu verlängern.
Szenarien bei fehlgeschlagenen Zahlungen
  1. Fehler beim Abonnement
  • subscription.failed – Die Erstellung des Abonnements ist fehlgeschlagen, weil kein Mandat erstellt werden konnte.
  • payment.failed – Zeigt eine fehlgeschlagene Zahlung an.
  1. Abonnement pausiert
  • subscription.on_hold – Das Abonnement wird aufgrund einer fehlgeschlagenen Zahlung für die Verlängerung oder einer fehlgeschlagenen Abbuchung bei einer Planänderung pausiert.
  • Wenn ein Abonnement pausiert wird, verlängert es sich nicht automatisch, bis die Zahlungsmethode aktualisiert wurde.
Best Practice: Um die Implementierung zu vereinfachen, empfehlen wir, hauptsächlich Abonnementereignisse zur Verwaltung des Abonnementlebenszyklus zu verfolgen.
Eine vollständige Anleitung zum Lesen von error_code/error_message, zur Entscheidung, wann ein erneuter Versuch unternommen werden sollte, und zur Anzeige von Fehlern für Kunden finden Sie unter Fehler bei Zahlungen behandeln.

subscription.failed vs. subscription.on_hold

Diese beiden Ereignisse werden leicht verwechselt, erfordern jedoch eine sehr unterschiedliche Behandlung:
subscription.failed ist endgültig. Das Abonnement kann nicht reaktiviert werden. Der Kunde muss ein neues Abonnement erstellen. Gewähren Sie niemals Berechtigungen, wenn dieses Ereignis ausgelöst wird.

Umgang mit pausierten Abonnements

Wenn ein Abonnement in den Status on_hold wechselt, müssen Sie die Zahlungsmethode aktualisieren, um es zu reaktivieren. Dieser Abschnitt erklärt, wann Abonnements pausiert werden und wie Sie damit umgehen.

Wann Abonnements pausiert werden

Ein Abonnement wird pausiert, wenn:
  • Die Zahlung für die Verlängerung fehlschlägt: Die automatische Abbuchung für die Verlängerung schlägt aufgrund unzureichender Deckung, einer abgelaufenen Karte oder einer Ablehnung durch die Bank fehl
  • Die Abbuchung bei einer Planänderung fehlschlägt: Eine sofortige Abbuchung während eines Upgrades oder Downgrades des Plans schlägt fehl
  • Die Autorisierung der Zahlungsmethode fehlschlägt: Die Zahlungsmethode kann für wiederkehrende Abbuchungen nicht autorisiert werden
Abonnements im Status on_hold werden nicht automatisch verlängert. Sie müssen die Zahlungsmethode aktualisieren, um das Abonnement zu reaktivieren.

Abonnements aus dem pausierten Status reaktivieren

Um ein Abonnement aus dem Status on_hold zu reaktivieren, verwenden Sie die Update Payment Method API. Dadurch werden automatisch folgende Schritte ausgeführt:
  1. Eine Abbuchung für ausstehende Beträge erstellen
  2. Eine Rechnung für die Abbuchung generieren
  3. Die Zahlung mit der neuen Zahlungsmethode verarbeiten
  4. Das Abonnement nach erfolgreicher Zahlung in den Status active reaktivieren
1

Handle subscription.on_hold webhook

Wenn Sie einen subscription.on_hold-Webhook erhalten, aktualisieren Sie den Status Ihrer Anwendung und benachrichtigen Sie den Kunden:
2

Update payment method

Wenn der Kunde bereit ist, seine Zahlungsmethode zu aktualisieren, rufen Sie die Update Payment Method API auf:
Sie können auch die ID einer vorhandenen Zahlungsmethode verwenden, wenn der Kunde Zahlungsmethoden gespeichert hat:
3

Monitor webhook events

Überwachen Sie nach der Aktualisierung der Zahlungsmethode die folgenden Webhook-Ereignisse:
  1. payment.succeeded – Die Abbuchung für ausstehende Beträge war erfolgreich
  2. subscription.active – Das Abonnement wurde reaktiviert

Beispiel für eine Abonnementereignisnutzlast


Abonnementpläne ändern

Sie können einen Abonnementplan über den API-Endpunkt zum Ändern des Plans upgraden oder downgraden. Damit können Sie das Produkt, die Menge und die anteilige Abrechnung des Abonnements ändern.

Change Plan API Reference

Ausführliche Informationen zum Ändern von Abonnementplänen finden Sie in unserer Dokumentation zur Change Plan API.

Optionen für die anteilige Abrechnung

Beim Ändern von Abonnementplänen haben Sie zwei Optionen für den Umgang mit der sofortigen Abbuchung:

1. prorated_immediately

  • Berechnet den anteiligen Betrag basierend auf der verbleibenden Zeit im aktuellen Abrechnungszyklus
  • Belastet den Kunden nur mit der Differenz zwischen dem alten und dem neuen Plan
  • Während einer Testphase wird der Benutzer sofort auf den neuen Plan umgestellt und der Kunde umgehend belastet

2. full_immediately

  • Belastet den Kunden mit dem vollständigen Abonnementbetrag des neuen Plans
  • Ignoriert die verbleibende Zeit und Gutschriften des vorherigen Plans
  • Nützlich, wenn Sie den Abrechnungszyklus zurücksetzen oder unabhängig von der anteiligen Abrechnung den vollständigen Betrag berechnen möchten

3. difference_immediately

  • Beim Upgrade wird dem Kunden sofort die Differenz zwischen den beiden Planbeträgen berechnet.
  • Wenn der aktuelle Plan beispielsweise 30 Dollar kostet und der Kunde auf einen Plan für 80 Dollar upgradet, werden ihm sofort $50 berechnet.
  • Beim Downgrade wird der nicht genutzte Betrag des aktuellen Plans als internes Guthaben hinzugefügt und automatisch auf zukünftige Verlängerungen des Abonnements angerechnet.
  • Wenn der aktuelle Plan beispielsweise 50 Dollar kostet und der Kunde zu einem Plan für 20 Dollar wechselt, werden die verbleibenden $30 gutgeschrieben und auf den nächsten Abrechnungszyklus angerechnet.

4. do_not_bill

  • Wendet die Planänderung sofort an, ohne zum Zeitpunkt der Änderung eine Abbuchung vorzunehmen.
  • Der aktualisierte Plan (einschließlich Menge/Add-ons) wird bei der nächsten planmäßigen Verlängerung abgerechnet, und das ursprüngliche Abrechnungsdatum bleibt erhalten.
Alle drei Modi „jetzt abbuchen“ setzen den Abrechnungszyklus zurück. prorated_immediately, difference_immediately und full_immediately verschieben next_billing_date des Abonnements auf das Änderungsdatum. Nur do_not_bill behält das ursprüngliche Verlängerungsdatum bei, nimmt jedoch keine sofortige Abbuchung vor.

Verhalten

  • Wenn Sie diese API aufrufen, leitet Dodo Payments sofort eine Abbuchung basierend auf der von Ihnen gewählten Option für die anteilige Abrechnung ein
  • Wenn die Planänderung ein Downgrade ist und Sie prorated_immediately verwenden, werden Gutschriften automatisch berechnet und dem Guthaben des Abonnements hinzugefügt. Diese Gutschriften gelten nur für dieses Abonnement und werden ausschließlich zum Ausgleich zukünftiger wiederkehrender Zahlungen desselben Abonnements verwendet
  • Die Option full_immediately umgeht die Gutschriftenberechnung und berechnet den vollständigen Betrag des neuen Plans
Wählen Sie die Option für die anteilige Abrechnung sorgfältig aus: Verwenden Sie prorated_immediately für eine faire Abrechnung, die ungenutzte Zeit berücksichtigt, oder full_immediately, wenn Sie unabhängig vom aktuellen Abrechnungszyklus den vollständigen Betrag des neuen Plans berechnen möchten.

Verarbeitung der Abbuchung

  • Die bei der Planänderung eingeleitete sofortige Abbuchung wird normalerweise in weniger als 2 Minuten verarbeitet
  • Wenn diese sofortige Abbuchung aus irgendeinem Grund fehlschlägt, wird das Abonnement automatisch pausiert, bis das Problem behoben ist

On-Demand-Abonnements

Mit On-Demand-Abonnements können Sie Kunden flexibel belasten, nicht nur nach einem festen Zeitplan. Diese Funktion ist für alle Konten verfügbar.
So erstellen Sie ein On-Demand-Abonnement: Um ein On-Demand-Abonnement zu erstellen, verwenden Sie den API-Endpunkt POST /subscriptions und fügen Sie das Feld on_demand in den Request-Body ein. Damit können Sie eine Zahlungsmethode ohne sofortige Abbuchung autorisieren oder einen benutzerdefinierten Anfangspreis festlegen. So belasten Sie ein On-Demand-Abonnement: Verwenden Sie für nachfolgende Abbuchungen den Endpunkt POST /subscriptions//charge und geben Sie den Betrag an, den Sie dem Kunden für diese Transaktion berechnen möchten.
Eine vollständige Schritt-für-Schritt-Anleitung (einschließlich Request-/Response-Beispielen, sicheren Richtlinien für erneute Versuche und der Verarbeitung von Webhooks) finden Sie im Leitfaden zu On-Demand-Abonnements.

Wichtige Informationen zur Abonnementabrechnung

Legen Sie den Abonnementzeitraum länger als die Zahlungshäufigkeit fest. Wenn der Abonnementzeitraum der Zahlungshäufigkeit entspricht (z. B. Zeitraum = 1 Monat, Häufigkeit = 1 Monat), ist das Abonnement für einen einzigen Zyklus gültig und wechselt anschließend zu expired, statt verlängert zu werden. Für einen fortlaufenden Monatsplan legen Sie einen langen Abonnementzeitraum (z. B. 20 Jahre) mit monatlicher Zahlungshäufigkeit fest.
Die Währung wird bei der ersten erfolgreichen Abbuchung festgelegt. Übergeben Sie beim Erstellen des Checkouts billing_currency und billing_address.country immer explizit. Wenn sie weggelassen werden, werden sie anhand der IP-Adresse des Kunden erkannt (Adaptive Currency). Sobald die erste Abbuchung des Abonnements erfolgt, ist die Währung für dessen gesamte Laufzeit festgelegt. Ein Kunde kann sie später nicht ändern, wenn er verreist.
Testphasen lösen eine Autorisierung über $0 aus, keine Abbuchung. Wenn ein Abonnement eine Testphase hat, wird zu deren Beginn eine Mandatsautorisierung über $0 erstellt, um die Karte zu speichern; die erste tatsächliche Abbuchung erfolgt nach Ende der Testphase. In der Zahlungsliste wird ein Abonnement in der Testphase mit genau einer Zahlung mit amount: 0 angezeigt.
Lebenszyklus des Abonnements: on_hold = eine Verlängerung ist fehlgeschlagen (wiederherstellbar: Fordern Sie den Kunden auf, seine Zahlungsmethode zu aktualisieren; Dunning-Wiederholungen werden angewendet). expired = die Laufzeit ist ohne Verlängerung abgelaufen und kann nicht reaktiviert werden. Der Kunde muss sich erneut anmelden. cancelled = vom Kunden oder Händler beendet. Die meisten Fehler bei Verlängerungen sind Ablehnungen auf Seiten des Kartenherausgebers (unzureichende Deckung, abgelehnte Karte) und kein Dodo-Fehler.
Indische Karten verwenden ein RBI-E-Mandat. Off-Session-Abbuchungen (Verlängerungen und Abbuchungen bei Planänderungen) können bis zu etwa 48 Stunden für die Abwicklung benötigen, und wiederkehrende automatische Abbuchungen über ₹15.000 erfordern eine erneute Kundenauthentifizierung (daher kann ein Upgrade, das diese Grenze überschreitet, nicht über das bestehende Mandat abgewickelt werden). Solange eine Abbuchung noch den Status processing hat, schlägt eine zweite Abbuchung für dasselbe Abonnement mit “Cannot create new charge as previous payment is not successful yet.” fehl. Nicht-indische Karten werden nahezu sofort bestätigt.
Für Abonnementabbuchungen gilt ein Mindestbetrag von $1 (oder der entsprechende Betrag in der jeweiligen Währung). Beträge von $0.01–$0.99 werden mit product_price: value out of range abgelehnt; nur $0 ist über eine On-Demand-Einrichtung mit mandate_only zulässig.

Zugehörige API-Referenz

Create Subscription

API-Referenz zum Erstellen von Abonnementprodukten und Verwalten des Abonnementlebenszyklus

Change Subscription Plan

API-Referenz zum Upgraden, Downgraden oder Ändern von Abonnementplänen mit Optionen für die anteilige Abrechnung

Update Payment Method

API-Referenz zum Aktualisieren von Zahlungsmethoden und Reaktivieren pausierter Abonnements

Patch Subscription

API-Referenz zum Aktualisieren von Abonnementdetails und Konfiguration
Zuletzt geändert am 31. Juli 2026