Documentation Index
Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
Use this file to discover all available pages before exploring further.
Neue Funktionen
1. Entitlements
Dodo Payments bietet nun einheitliche Entitlements — eine einzelne Ebene, die die automatische Lieferung für jede Fulfillment-Integration ermöglicht. Ein einzelnes Produkt kann mehrere Entitlements bei jedem erfolgreichen Kauf oder aktivem Abonnement liefern.
Fünf neue Plattform-Integrationen
Bisher lieferte Dodo Payments Lizenzschlüssel und digitale Dateien automatisch beim Kauf. Entitlements erweitern diesen Umfang auf fünf zusätzliche Plattformen — sodass zahlenden Kunden der Zugang zu Ihrer Community, Ihrem Code oder Ihrem Inhalt gewährt werden kann, sobald die Zahlung erfolgreich ist, ohne manuelle Erfüllung auf Ihrer Seite:
| Integration | Was es liefert | Widerrufsverhalten |
|---|
| Discord | Weist eine ausgewählte Rolle auf Ihrem Discord-Server nach Abschluss der OAuth des Kunden zu | Rolle wird bei Stornierung/Rückerstattung entfernt |
| GitHub | Fügt den Kunden als Mitarbeiter zu einem privaten Repository auf dem von Ihnen gewählten Berechtigungsniveau hinzu | Mitarbeiter wird bei Stornierung/Rückerstattung entfernt |
| Telegram | Erstellt einen einmaligen Beitrittsanfrage-Link für einen privaten Chat oder Kanal über Ihren Telegram-Bot | Kunde wird bei Stornierung/Rückerstattung aus dem Chat entfernt |
| Framer | Schaltet einen Framer-Template-Remix-Link frei, der durch einen Zugangscode gesperrt ist | Zugangscode wird bei Stornierung/Rückerstattung deaktiviert |
| Notion | Dupliziert eine Notion-Template-Seite in den Arbeitsbereich des Kunden, nachdem dieser über OAuth autorisiert wurde | Gelieferte Seite wird bei Stornierung/Rückerstattung archiviert |
Diese schließen sich den bestehenden Lizenzschlüsseln (einzigartige Schlüssel mit Aktivierungslimits und Ablauf) und Digitalen Dateien (vorgesignierte Download-URLs für E-Books, Vorlagen, Medien) an, die jetzt alle im selben Grant-Lebenszyklus verwaltet werden.
Was Sie direkt erhalten
| Fähigkeit | Beschreibung |
|---|
| Wiederverwendbare Vorlagen | Definieren Sie ein Entitlement einmal (Aktivierungslimits, Dateibundles, Discord-Rolle, Repo-Berechtigung usw.) und fügen Sie es zu jedem Produkt hinzu |
| Automatische Grants | Ausgegeben bei payment.succeeded und subscription.active, idempotent über Erneuerungen und Reaktivierungen hinweg |
| Lebenszyklus-bewusste Widerrufung | Widerrufen bei subscription.cancelled, subscription.on_hold, subscription.expired, refund.succeeded, subscription.plan_changed oder manueller API-/Dashboard-Widerruf — mit einem ausgefüllten revocation_reason |
| OAuth + direkt Plattform-Flow | OAuth für Discord-, GitHub- und Notion-Abonnenten-Zustimmung; direkte Plattformaufrufe für Telegram, Framer und Digitale Dateien |
| Drift-Erkennung | Erkennt, wenn eine Discord-Rolle, ein GitHub-Mitarbeiter oder eine Notion-Seite auf der Plattform-Ebene nicht synchron ist und widerruft mit revocation_reason: platform_external |
| Verschlüsselung im Ruhezustand | Alle Plattform-Tokens (OAuth, Bot, App-Installationen) werden mit AES-256-GCM gespeichert |
Webhooks
Vier neue Lebenszyklus-Ereignisse werden für jeden Grant ausgelöst:
| Ereignis | Wird ausgelöst, wenn |
|---|
entitlement_grant.created | Ein neuer Grant für einen Kunden erstellt wird |
entitlement_grant.delivered | Kunden-Zugang bereitgestellt |
entitlement_grant.failed | Lieferung konnte nicht abgeschlossen werden; überprüfen Sie error_code und error_message |
entitlement_grant.revoked | Zugang zurückgezogen; überprüfen Sie revocation_reason |
Für neue Integrationen lauschen Sie entitlement_grant.delivered anstelle von payment.succeeded. Zahlungserfolg bedeutet nicht, dass die Lieferung abgeschlossen ist, insbesondere bei OAuth-basierten Integrationen.
Erfahren Sie mehr: Entitlements | Entitlement Grant Webhooks
2. Abonnement-Kündigungsgründe im Kundenportal
Wenn Kunden ein Abonnement im Kundenportal kündigen, werden sie jetzt aufgefordert zu teilen, warum sie kündigen, bevor sie bestätigen. Der erfasste Grund wird beim Abonnement als cancellation_feedback gespeichert, in der API- und Webhook-Nutzlast angezeigt und im Dashboard verfügbar, damit Sie Churn-Muster auf einen Blick erkennen können.
Optionsgründe
| Wert | Kundenorientiertes Etikett |
|---|
too_expensive | Zu teuer |
missing_features | Fehlende Funktionen |
switched_service | Zu einem anderen Service gewechselt |
unused | Nicht genügend Nutzung |
customer_service | Schlechter Kundenservice |
low_quality | Niedrige Qualität |
too_complex | Zu komplex |
other | Andere |
Wo es erscheint
- Abonnementobjekt: Neues
cancellation_feedback-Feld (einer der oben genannten Werte) und cancellation_comment (optionaler freier Text), gefüllt, wenn der Kunde kündigt
subscription.cancelled-Webhook: Beide Felder sind in der Nutzlast enthalten
- API: Übergeben Sie
cancellation_feedback und cancellation_comment an PATCH /subscriptions/{id}, wenn Sie eine Kündigung programmatisch planen oder ausführen
// Reading the captured feedback
const subscription = await client.subscriptions.retrieve('sub_123');
console.log(subscription.cancellation_feedback); // e.g., "too_expensive"
console.log(subscription.cancellation_comment); // e.g., "Switching to a competitor"
Kombinieren Sie cancellation_feedback mit Abonnement-Dunning, um Ihre Rückgewinnungs-E-Mails gezielt zu richten — z.B. senden Sie einen Rabattcode an too_expensive-Kündiger und eine „Was fehlt?“ Umfrage an missing_features-Kündiger.
Erfahren Sie mehr: Kundenportal | Abonnement-Webhooks
3. Konfigurierbare Mandate Mindestbetrag für INR E-Mandate
Sie können jetzt den Mandatsschwelle für INR E-Mandate bei indischen Karten-Abonnements konfigurieren. Bisher verwendete jedes indische Karten-Abonnement unter ₹15.000 ein festes ₹15.000 On-Demand-Mandat. Jetzt können Sie diese Schwelle auf Händlerebene — und pro Checkout-Sitzung oder Abonnement bei Bedarf — überschreiben.
Der mit der Bank des Kunden registrierte Mandatsbetrag ist max(mandate_min_amount_inr_paise, billing_amount), daher fungiert dieser Wert als Autorisierungsgrenze, wann immer die Abrechnung unterhalb der Schwelle liegt.
// Per-subscription override
const subscription = await client.subscriptions.create({
product_id: 'prod_inr_monthly',
customer: { email: 'customer@example.in' },
billing: { country: 'IN' /* ... */ },
mandate_min_amount_inr_paise: 2_000_000 // ₹20,000 ceiling for this subscription
});
// Or via a checkout session
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_inr_monthly', quantity: 1 }],
mandate_min_amount_inr_paise: 2_000_000,
return_url: 'https://yoursite.com/return'
});
Auflösungspriorität
- Pro-Anfrage-Überschreibung (
mandate_min_amount_inr_paise für die Checkout-Sitzung, Zahlung oder Abonnement)
- Händlereinstellungen in den Geschäftseinstellungen
- Systemstandard von ₹15.000 (1.500.000 Paise)
| Feld | Typ | Bereich | Gilt für |
|---|
mandate_min_amount_inr_paise | integer (INR Paise) | >= 1 | Indische Karten INR-Abonnements auf nicht-Airwallex-Connectors |
Diese Einstellung betrifft nur E-Mandate, die für indische Karten (Visa, Mastercard, RuPay) bei INR-Abonnements registriert sind. UPI-Abonnements folgen ihrem eigenen AutoPay-Flow und sind nicht betroffen.
Erfahren Sie mehr: Indien Zahlungsmethoden | Abonnements mit RBI Mandaten
4. Adaptive Currency Gebühren inklusive Geschäftseinstellung
Adaptive Currency ist die Funktion, die es Ihnen ermöglicht, Kunden in ihrer lokalen Währung zu berechnen. Standardmäßig wird die 2–4% Adaptive Currency-Gebühr vom Kunden getragen und zu Ihrem angezeigten Preis hinzugefügt. Mit der neuen Gebühren inklusive-Einstellung können Sie dies umdrehen: Halten Sie den angezeigten Preis für den Kunden unverändert und übernehmen Sie die Gebühr selbst.
Wo konfigurieren
Gehen Sie zu Einstellungen → Geschäft, stellen Sie sicher, dass Adaptive Pricing aktiviert ist, und schalten Sie Gebühren inklusive im Adaptive Currency-Bereich um.
Pro-Anfrage-Überschreibung
Sie können den Händlerstandard auch für einzelne Checkouts, Zahlungen und On-Demand-Abonnements überschreiben, indem Sie den adaptive_currency_fees_inclusive-Boolean verwenden:
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
adaptive_currency_fees_inclusive: true, // override business default
return_url: 'https://yoursite.com/return'
});
| Modus | Kunde sieht | Händler begleicht |
|---|
| Exklusiv (Standard) | Lokaler Preis + 2–4% Gebühr auf den Preis | Voller Basispreis |
| Inklusive | Lokaler Preis (unverändert) | Basispreis minus die 2–4% Gebühr |
INR → INR-Transaktionen werden immer als inklusive behandelt, unabhängig von der Geschäftseinstellung oder der Pro-Anfrage-Überschreibung.
Erfahren Sie mehr: Adaptive Currency
5. Dodo Payments Desktop-App
Die offizielle Dodo Payments Desktop-App ist jetzt allgemein verfügbar für macOS, Windows und Linux. Führen Sie Ihr Zahlungs-Dashboard als schnelle, native App aus — es ist kein Browser-Tab erforderlich.
| Plattform | Download |
|---|
| macOS (Apple Silicon) | Dodo.Payments_<version>_aarch64.dmg |
| macOS (Intel) | Dodo.Payments_<version>_x64.dmg |
| Windows | Dodo.Payments_<version>_x64-setup.exe (oder .msi) |
| Linux (Debian/Ubuntu) | Dodo.Payments_<version>_amd64.deb |
| Linux (Fedora/RHEL) | Dodo.Payments-<version>-1.x86_64.rpm |
| Linux (AppImage, Auto-Update) | Dodo.Payments_<version>_amd64.AppImage |
Was drin steckt
- Kleine native Binärdatei — gebaut mit Tauri auf dem nativen Webview des Systems, ~5 MB gesamt (keine gebündelte Chromium)
- Signiert und beglaubigt — macOS-Builds sind mit einer Apple Developer ID signiert und beglaubigt, sodass keine Gatekeeper-Warnungen auftreten
- Auto-Update — überprüft jede 4 Stunden und wendet automatisch signierte Updates von GitHub-Releases an (funktioniert auf macOS, Windows und Linux AppImage)
- Systemtray + Menüleiste — Verstecken im Tray auf macOS, vollständige Datei/Bearbeiten/Anzeigen/Hilfe-Menüs mit Tastenkombinationen (
⌘⇧H gehe zum Dashboard, ⌘L aktuelle URL kopieren, ⌘⌥I Entwicklerwerkzeuge)
- Deep-Link-Support — Magic-Link-Authentifizierungslinks öffnen sich direkt in der App
- Mehrfachfenster — Öffnen Sie mehrere Dashboards nebeneinander
Holen Sie sich den neuesten Installer für Ihre Plattform von der Desktop-App-Releases-Seite. Das Repo ist vollständig Open Source.
6. Stablecoin-Zahlungen (USDC, USDP, USDG)
Akzeptieren Sie Stablecoin-Zahlungen weltweit mit USD-Abrechnung. Kunden zahlen aus ihrer bevorzugten Stablecoin-Wallet im Netzwerk ihrer Wahl; Sie erhalten Fiat-USD ohne Krypto-Volatilität, keine Rückbuchungen und ohne erforderliche Bankinfrastruktur auf der Kundenseite.
Unterstützte Währungen und Netzwerke
| Stablecoin | Netzwerke |
|---|
| USDC | Ethereum, Solana, Polygon, Base |
| USDP | Ethereum, Solana |
| USDG | Ethereum |
Abdeckung
| Detail | Wert |
|---|
| Rechnungswährung | USD |
| Unterstützte Länder | Weltweit (außer Indien) |
| Abonnements | Nicht unterstützt (nur Einmalzahlungen) |
| Mindestbetrag | $0,50 |
| Abrechnung | USD |
Konfiguration
Übergeben Sie crypto in allowed_payment_method_types bei der Erstellung einer Checkout-Sitzung:
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_123', quantity: 1 }],
allowed_payment_method_types: ['crypto', 'credit', 'debit'],
return_url: 'https://example.com/success'
});
Dem Kunden wird eine Wallet-Adresse und ein QR-Code mit dem in Echtzeit berechneten Stablecoin-Betrag angezeigt; sobald die Blockchain die Transaktion bestätigt, feuert Ihr payment.succeeded-Webhook und der Kunde wird auf Ihre Erfolgseite umgeleitet.
Stablecoin-Zahlungen sind von Natur aus unumkehrbar — es gibt keine Rückbuchungen. Wir empfehlen, immer credit und debit als Fallback-Methoden für Kunden ohne Stablecoin-Wallet anzubieten.
Erfahren Sie mehr: Stablecoin-Zahlungen
7. Bestehende Lizenzschlüssel importieren
Sie können jetzt Lizenzschlüssel aus einem anderen System in Dodo Payments importieren, mithilfe der Erstellen Lizenzschlüssel API. Dies ermöglicht eine störungsfreie Migration von jedem externen Lizenzschlüsselanbieter, sodass Ihre bestehenden Kunden ihre Schlüssel weiterhin gegen Dodo Payments aktivieren, validieren und deaktivieren können, ohne dass eine Neuvergabe erforderlich ist.
const licenseKey = await client.licenseKeys.create({
customer_id: 'cus_abc123',
product_id: 'prod_456',
key: 'YOUR-EXISTING-LICENSE-KEY',
activations_limit: 5,
expires_at: '2026-12-31T23:59:59Z',
});
Importierte Schlüssel sind mit source: "import" versehen (vs. source: "auto" für automatisch bei Zahlung generierte Schlüssel), sodass Sie migrierte Bestände von organisch ausgegebenen Schlüsseln unterscheiden können, wenn Sie GET /license_keys abfragen. Der payment_id bei importierten Schlüsseln ist null, da sie nicht mit einer Dodo Payments-Transaktion verknüpft sind.
Lizenzschlüssel, die über die API erstellt oder aktualisiert werden, lösen keine E-Mail-Benachrichtigungen an Kunden aus. Wenn Sie Kunden über einen importierten Schlüssel informieren müssen, bearbeiten Sie dies separat in Ihrer Anwendung.
Migrieren Sie von Polar.sh oder Lemon Squeezy? Das dodo-migrate CLI automatisiert Massenimporte von Produkten, Kunden, Rabatten und Lizenzschlüsseln mit einem einzigen Befehl.
Erfahren Sie mehr: Lizenzschlüssel | Erstellen Lizenzschlüssel API
8. require_phone_number für Checkout-Sitzungen
Zwingen Sie Kunden, eine Telefonnummer beim Checkout anzugeben, indem Sie feature_flags.require_phone_number: true bei der Erstellung einer Checkout-Sitzung setzen. Die Telefonnummer wird zu einem Pflichtfeld im Checkout-Formular, mit Formularvalidierung, die “Telefonnummer ist erforderlich” anzeigt, wenn der Kunde das Feld leer lässt.
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
feature_flags: {
allow_phone_number_collection: true,
require_phone_number: true
},
return_url: 'https://yoursite.com/return'
});
| Flag | Standard | Verhalten |
|---|
allow_phone_number_collection | true | Zeigt das Telefonnummernfeld beim Checkout an |
require_phone_number | false | Macht das Telefonnummernfeld erforderlich |
require_phone_number: true erfordert allow_phone_number_collection: true. Die API lehnt Sitzungen ab, bei denen require_phone_number wahr ist, während die Telefonsammlung deaktiviert ist.
Nützlich für B2B SaaS, regulierte Branchen oder jeden Ablauf, in dem Sie einen verifizierten Kontaktkanal für Support, Betrugsüberprüfung oder Compliance benötigen.
Erfahren Sie mehr: Checkout-Funktionen | Erstellen Checkout-Sitzung API
Fehlerkorrekturen & Verbesserungen
- Kleinere Fehlerkorrekturen und Stabilitätsverbesserungen auf der ganzen Plattform