Einen Kündigungsflow in Paddle Billing einbauen
So funktioniert die Kündigung in Paddle Billing: Cancel-API, geplante Änderungen, Pause und Fortsetzung, Rabatte, Webhooks und wo ein Halteschritt hingehört.
Ein Kündigungsflow ist der kurze Schritt zwischen „Ich will kündigen” und der Kündigung selbst: nach dem Grund fragen, etwas anbieten, das zum Grund passt, und sauber kündigen, wenn der Kunde trotzdem gehen will. Dieser Ratgeber erklärt, wie die Kündigung in Paddle Billing funktioniert, was Paddle schon von Haus aus bietet und wie Sie auf seiner API einen eigenen Halteschritt bauen.
Er hält sich an die Entwicklerdokumentation von Paddle: Abo kündigen, Abo pausieren, Abo fortsetzen, Abo aktualisieren, Rabatte, Bereitstellung und Webhooks, das Kundenportal und Cancellation Flows (alle abgerufen im November 2026). Es geht um Paddle Billing, nicht um Paddle Classic, dessen API anders ist.
Paddle ist der Merchant of Record
Eines sollten Sie durchgehend im Kopf behalten: Paddle ist der Merchant of Record für Ihre Verkäufe. Paddle verkauft an Ihren Kunden, kümmert sich um Steuern und, laut Paddle, um Abrechnungssupport und Chargebacks. Die Zahlungsbeziehung besteht also zwischen dem Kunden und Paddle. Ihr Kündigungsflow sollte Abos nur über die API oder die eigenen Werkzeuge von Paddle ändern, nie, indem er Zahlungen auf anderem Weg zu stoppen versucht.
So funktioniert die Kündigung in Paddle Billing
Paddle bietet drei Stellen, an denen ein Abo gekündigt werden kann.
1. Die Cancel-API
Sie kündigen mit POST /subscriptions/{subscription_id}/cancel. Das Feld effective_from entscheidet, wann:
effective_from |
Was passiert |
|---|---|
next_billing_period (Standard, das bewirkt auch ein leerer Body) |
Paddle fügt eine scheduled_change mit der Aktion cancel hinzu. Das Abo bleibt bis zum nächsten Abrechnungsdatum aktiv, und next_billed_at wird null |
immediately |
Der Status wechselt sofort auf canceled, und subscription.canceled wird ausgelöst |
Paddle dokumentiert auf der Kündigungsseite einige Grenzen:
- Innerhalb von 30 Minuten vor dem nächsten Abrechnungsdatum können Sie weder kündigen noch pausieren.
- Eine geplante Kündigung lässt sich entfernen, indem Sie das Abo mit
scheduled_changeauf null aktualisieren. So „machen” Sie eine Kündigung rückgängig, bevor sie wirksam wird. - Ein gekündigtes Abo lässt sich nicht wiederherstellen. Ein zurückkehrender Kunde braucht ein neues Abo, was für Win-back wichtig ist.
- Ein pausiertes Abo kann nur mit
effective_from: immediatelygekündigt werden.
2. Das Kundenportal
Im Kundenportal von Paddle können Kunden kündigen und Zahlungsdaten aktualisieren. Laut Doku von Paddle wird Pausieren im Portal nicht unterstützt, ein Pausenangebot muss also aus Ihrer App oder aus den Cancellation Flows von Paddle kommen.
3. Die eigenen Cancellation Flows von Paddle
Paddle hat genau dafür eine eingebaute Funktion, Teil von Paddle Retain. Sie richten sie unter Retain › Cancellation Flows ein (Einrichtungsleitfaden). Sie fragt nach einem Kündigungsgrund und kann eine Pause, einen Planwechsel, Kontakt zum Support oder einen befristeten Rabatt anbieten. Laut Changelog vom Januar 2026 läuft ein eingerichteter Flow automatisch, wenn Kunden im Kundenportal oder über Kündigungslinks in den Abo-Mails von Paddle kündigen. In Ihrer eigenen App starten Sie ihn mit Paddle.Retain.initCancellationFlow(), das einen Status wie retained, aborted oder chose_to_cancel zurückgibt. Ein Changelog vom September 2026 ergänzt Tests in der Sandbox über das Kundenportal, während mit initCancellationFlow() gestartete Flows weiterhin nur auf Live-Konten laufen.
Damit es klar ist: Wenn Sie nur eine Umfrage zum Grund und ein Standardangebot innerhalb von Paddle brauchen, kann diese eingebaute Funktion genügen, und Paddle führt sie für Kunden von Paddle Billing ohne Aufpreis. Der Rest dieses Ratgebers ist für den Fall, dass Sie einen eigenen Flow, ein eigenes Design oder Angebote wollen, die von Daten abhängen, die Paddle nicht hat.
Die Halteangebote, die die API von Paddle unterstützt
Pause
POST /subscriptions/{subscription_id}/pause pausiert ein Abo (Leitfaden). Es nimmt effective_from (next_billing_period oder immediately) und ein optionales Datum resume_at. Eine Pause zum nächsten Abrechnungszeitraum erzeugt eine geplante Änderung; der Status wird paused, sobald sie wirksam wird.
Um einen Kunden früher zurückzuholen, funktioniert POST /subscriptions/{subscription_id}/resume nur bei pausierten Abos. Das Feld on_resume entscheidet über die Abrechnung: Standardmäßig startet Paddle einen neuen Abrechnungszeitraum und belastet sofort; continue_existing_billing_period behält stattdessen den alten Zeitraum bei. Paddle storniert außerdem überfällige Verlängerungstransaktionen, wenn ein Abo pausiert wird, um eine doppelte Belastung für überlappende Zeiträume zu vermeiden.
Rabatt
Erstellen Sie den Rabatt einmal mit POST /discounts. Für ein Halteangebot wie „50 % Rabatt für 3 Monate” setzen Sie recur auf true und maximum_recurring_intervals auf die Anzahl der Abrechnungszeiträume. Wenden Sie ihn dann mit PATCH /subscriptions/{subscription_id} auf das Abo an, mit einem Objekt discount mit der ID des Rabatts und einem effective_from von next_billing_period oder immediately (Abo aktualisieren). discount: null entfernt ihn. Paddle weist darauf hin, dass Verlängerungen und Änderungen mitten im Zeitraum nicht als neue Einlösungen zählen.
Planwechsel
Ein Downgrade ist ebenfalls eine Abo-Aktualisierung: Ersetzen Sie die Positionen durch den günstigeren Preis. Wenn Sie Positionen oder das Abrechnungsdatum ändern, verlangt Paddle proration_billing_mode. Nutzen Sie den Vorschau-Endpoint, um dem Kunden vor der Bestätigung zu zeigen, was er zahlen wird.
Einen eigenen Kündigungsflow auf Paddle bauen
- Den Einstieg zur Kündigung in Ihre App legen. Verlinken Sie „Abo kündigen” auf Ihren Flow, nicht direkt auf den API-Aufruf. Lassen Sie auch das Kundenportal verfügbar; es ist der eigene Weg von Paddle, und Kunden nutzen ihn vielleicht.
- Eine Frage stellen: warum. Nutzen Sie eine kurze Liste von Gründen plus „Sonstiges” mit einem Freitextfeld. Speichern Sie die Antwort mit der Abo-ID.
- Ein Angebot zeigen, das zum Grund passt. „Zu teuer” passt zu einem Rabatt oder einem günstigeren Plan. „Nutze es gerade nicht” passt zu einer Pause mit Datum
resume_at. „Mir fehlt eine Funktion” oder „Zu kompliziert” passt zu einem Gespräch mit dem Support. Stapeln Sie keine Angebote. - „Jetzt kündigen” auf jedem Schritt sichtbar lassen. Der Kunde sollte die Kündigung jederzeit abschließen können, ohne ein Angebot anzunehmen. Das ist eine Frage des Vertrauens und an mehreren Orten auch des Rechts.
- Paddle für das Ergebnis aufrufen. Rabatt: das Abo per
PATCHmit dem Rabatt aktualisieren. Pause:POST .../pause. Planwechsel: die Positionen nach einer Vorschau perPATCHändern. Kündigung:POST .../cancelmiteffective_from: next_billing_period, damit der Kunde behält, wofür er bezahlt hat. - Bestätigen, was als Nächstes passiert. Nennen Sie dem Kunden das Datum, an dem der Zugang endet, oder das Datum, an dem die Pause endet. Lesen Sie es aus dem Abo, das Paddle zurückgibt, statt es selbst zu berechnen.
- Umentscheiden erlauben. Bis die geplante Kündigung wirksam wird, kann ein Button „Abo behalten”
scheduled_changezurücksetzen.
Webhooks, auf die Sie hören sollten
Der Bereitstellungsleitfaden von Paddle empfiehlt subscription.created und subscription.updated als Kern-Events, weil subscription.updated Verlängerungen, Planwechsel, Pausen, Fortsetzungen und Kündigungen abdeckt. Einige eigene Events sind als klare Signale nützlich:
| Event | Wann es ausgelöst wird |
|---|---|
subscription.updated |
Bei jeder Änderung, auch wenn eine Kündigung geplant wird |
subscription.canceled |
Der Status wird canceled: sofort, oder bei einer geplanten Kündigung am Abrechnungsdatum |
subscription.past_due |
Das Abo wird nach einer fehlgeschlagenen Verlängerung überfällig |
Pausen und Fortsetzungen kommen ebenfalls über subscription.updated, wobei der Status zu paused wechselt oder davon zurück; prüfen Sie die Webhook-Referenz von Paddle für die eigenen Events in Ihrer API-Version.
Zwei Details aus der Doku von Paddle: Behalten Sie bei einer geplanten Kündigung den Zugang bis zum Wirksamkeitsdatum der geplanten Änderung bei; und deduplizieren Sie über event_id und vergleichen Sie occurred_at, denn Events können in falscher Reihenfolge ankommen. Der Payload von subscription.canceled enthält keine management_urls.
Nach der Kündigung: Win-back
Da Paddle ein gekündigtes Abo nicht wiederherstellen kann, muss ein Win-back-Angebot zu einem neuen Checkout führen. Bewahren Sie den gesammelten Kündigungsgrund auf, warten Sie eine angemessene Zeit und senden Sie ein Angebot, das auf diesen Grund antwortet: eine neue Funktion bei „fehlende Funktionen”, ein niedrigerer Preis bei „zu teuer”. Schicken Sie den Kunden zu einem Checkout, in dem der Rabatt bereits angewendet ist.
So geht es mit NoChurn
NoChurn liest Ihre Paddle-Abos und -Events und ergänzt einen Kündigungsflow mit Gründen, Angeboten (Rabatt, Pause, Planwechsel) und einem Kündigen-Button für einen Klick, der auf jedem Schritt sichtbar bleibt, entweder gehostet oder headless über die API. Angenommene Angebote und Kündigungen werden in Paddle angewendet, und Paddle bleibt der Merchant of Record: Es behält Checkout, Zahlungen, Zahlungswiederherstellung, Steuern und das Kundenportal. Disputes werden von Paddle bearbeitet und in NoChurn schreibgeschützt angezeigt. NoChurn sendet außerdem Win-back-Mails nach 30, 60 und 90 Tagen je nach Kündigungsgrund und ist unter 300 $ MRR kostenlos. Siehe NoChurn + Paddle.