Stelle Lizenzschlüssel, herunterladbare Dateien, Feature Flags sowie Zugriff auf Discord, GitHub, Telegram, Framer und Notion automatisch bereit, sobald Kunden bezahlen.
Entitlements verwandeln eine erfolgreiche Zahlung oder ein aktives Abonnement in Zugriff: einen Lizenzschlüssel im Posteingang deines Kunden, ein Feature Flag, das deine App prüft, eine Discord-Rolle, ein GitHub-Repository, eine Notion-Vorlage, einen Framer-Remix-Link, eine Einladung zu einem Telegram-Chat oder ein herunterladbares Dateipaket. Dodo Payments stellt diesen Zugriff automatisch bereit, verfolgt ihn und entzieht ihn, wenn sich der Zahlungslebenszyklus ändert.
The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.
Ein Entitlement ist eine wiederverwendbare Definition von etwas, das du einem Kunden bereitstellst, etwa einen Pro-Lizenzschlüssel, eine Discord-Rolle „Patrons“, Zugriff auf dein privates GitHub-Repository oder ein herunterladbares E-Book-Paket. Du verknüpfst Entitlements mit Produkten, und Dodo Payments stellt sie bereit, sobald ein Kunde bezahlt.Wenn ein Kunde das Produkt kauft, erstellt Dodo Payments einen Grant: die Ausstellung dieses Entitlements für einen einzelnen Kunden. Ein Grant hat einen von vier Statuswerten: Pending, während die Bereitstellung läuft, Delivered, sobald der Kunde Zugriff hat, Failed, wenn die Bereitstellung nicht abgeschlossen werden konnte, und Revoked, wenn der Zugriff entzogen wird.
Entitlements steuern die Bereitstellung (hat der Kunde Zugriff?). Credits steuern die Nutzung (wie viel davon kann der Kunde verwenden?). Du kannst beides mit demselben Produkt verknüpfen. Weitere Informationen zu Credits findest du unter Credit-Based Billing.
Jedes Entitlement wird über eine Integration bereitgestellt. Wähle die Integration, die zu deinem Angebot passt.
License Keys
Erstellen Sie eindeutige Lizenzschlüssel mit Aktivierungsbegrenzungen und Ablauf. Am besten geeignet für Software, Plugins und CLIs.
Digital Files
Stelle herunterladbare Dateien wie E-Books, Vorlagen und Medien mit vorab signierten Download-URLs und optionalen Anweisungen bereit.
Feature Flags
Schalte Funktionen deiner eigenen App nach einem Kauf frei. Die Bereitstellung erfolgt bei der Erstellung, die Prüfung über die API und der Entzug bei einer Kündigung.
Discord
Weise einem Kunden beim Kauf eine Rolle in deinem Discord-Server zu. Die Rolle wird bei einer Kündigung automatisch entfernt.
GitHub
Fügen Sie Kunden als Mitarbeiter in ein privates Repository auf der von Ihnen gewählten Berechtigungsebene hinzu.
Telegram
Fügen Sie Kunden nach dem Kauf zu einem privaten Telegram-Chat oder -Kanal hinzu.
Framer
Entsperren Sie einen Framer-Template-Remix-Link für zahlende Kunden.
Notion
Duplizieren Sie eine Notion-Vorlage beim Kauf in den Arbeitsbereich des Kunden.
Grants folgen denselben Zahlungs- und Abonnementereignissen, die du als Webhooks erhältst. Dodo Payments erstellt und widerruft Grants für Käufe automatisch auf Grundlage des Zahlungslebenszyklus, sodass du die Grant-API nicht selbst aufrufen musst.
Dodo Payments erstellt einen Grant, wenn eine Zahlung abgeschlossen wird oder ein Abonnement aktiv wird. Feature-Flag-Grants beginnen als Delivered. Lizenzschlüssel-Grants beginnen ebenfalls als Delivered, wenn das Entitlement fulfillment_mode: auto verwendet (der Standardwert). Bei fulfillment_mode: manual beginnt der Grant als Pending ohne Schlüssel, bis du einen über Fulfill License Key Grant bereitstellst. Jede andere Integration beginnt als Pending.OAuth-basierte Integrationen (Discord, GitHub, Notion) stellen eine oauth_url bereit, die der Kunde besucht, um seine Einwilligung zu erteilen. Dodo Payments versucht, diese URL bei der Erstellung des Grants zu generieren. Falls dies fehlschlägt, bleibt das Feld auf null, bis der Kunde den Bestätigungsablauf über seine Zustellungs-E-Mail oder das Customer Portal startet. Plattformdirekte Integrationen (Telegram, Framer, Digital Files) bleiben nur während der Bereitstellung als Pending bestehen und wechseln danach zu Delivered.
2
Delivered
Wenn die Bereitstellung abgeschlossen ist, wechselt der Grant zu Delivered und delivered_at wird gesetzt. Die Bereitstellung ist abgeschlossen, sobald der Lizenzschlüssel generiert, die Rolle zugewiesen, der Repository-Zugriff gewährt, die Dateilinks aufgelöst oder der OAuth-Ablauf beendet wurde.
3
Failed
Wenn der Integrationsaufruf einen nicht wiederholbaren Fehler zurückgibt, etwa ein widerrufenes OAuth-Token, eine verweigerte Berechtigung oder eine nicht mehr vorhandene Datei, wechselt der Grant zu Failed. Die Felder error_code und error_message enthalten den Grund.
4
Revoked
Wenn der Zugriff entzogen wird, beispielsweise weil ein Abonnement gekündigt, eine Rückerstattung ausgestellt oder der Grant von dir widerrufen wurde, wechselt der Grant zu Revoked. Das Feld revocation_reason enthält den Auslöser.
Jedes Zahlungs- und Abonnementereignis ändert Grants wie folgt:
Ereignis
Verhalten
payment.succeeded (einmalige Zahlung)
Stellt für jedes verknüpfte Entitlement einen Grant aus. Ein License-Key-Entitlement stellt pro Schlüssel einen Grant aus.
payment.succeeded (abonnementverknüpfte Zahlung)
Keine Änderung. Die unten aufgeführten Abonnementereignisse steuern diese Grants.
subscription.active
Stellt Grants für alle verknüpften Entitlements aus, die noch keinen Grant haben, und stellt zuvor für dasselbe Abonnement widerrufene Grants erneut aus. Grants, die mit manual, refund oder platform_external widerrufen wurden, werden nicht erneut ausgestellt.
subscription.renewed
Keine Änderung. Bestehende Grants bleiben über Verlängerungen hinweg bestehen.
subscription.past_due
Keine Änderung. Grants bleiben während der gesamten Kulanzfrist bereitgestellt.
subscription.on_hold
Widerruft alle bereitgestellten und ausstehenden Grants mit revocation_reason: subscription_on_hold.
subscription.paused
Widerruft alle bereitgestellten und ausstehenden Grants mit revocation_reason: SubscriptionPaused. Anders als die anderen Abonnementgründe verwendet dieser Wert PascalCase, achte daher auf eine exakte Übereinstimmung.
subscription.unpaused
Stellt zuvor für dasselbe Abonnement widerrufene Grants erneut aus, genauso wie subscription.active.
subscription.cancelled
Widerruft alle Grants mit revocation_reason: subscription_cancelled.
subscription.expired
Widerruft alle Grants mit revocation_reason: subscription_expired.
subscription.plan_changed
Widerruft zunächst alle aktuellen Grants mit revocation_reason: plan_changed und stellt anschließend Grants für die Entitlements des neuen Plans aus.
refund.succeeded (einmalige Zahlung)
Widerruft die Grants für diese Zahlung mit revocation_reason: refund.
Manueller API-Widerruf
Widerruft den Grant mit revocation_reason: manual. Manuelle Widerrufe werden bei einer Abonnementverlängerung nicht automatisch erneut ausgestellt.
Lizenzschlüssel deaktiviert
Bei Lizenzschlüssel-Grants widerruft die Deaktivierung des zugrunde liegenden Schlüssels den Grant mit revocation_reason: license_key_disabled. Die erneute Aktivierung des Schlüssels stellt den Grant automatisch wieder her.
Plattformabweichung erkannt
Wenn die Plattformseite einer Integration nicht mehr synchron ist, etwa weil eine Discord-Rolle manuell entfernt wurde, die GitHub App den Repository-Zugriff verloren hat oder ein Abgleich ein fehlendes Ziel feststellt, widerruft Dodo Payments den Grant mit revocation_reason: platform_external. Er wird bei einer Abonnementverlängerung nicht automatisch erneut ausgestellt, bis das Plattformproblem behoben ist.
Abonnementgesteuerte Grants sind pro (entitlement, customer, subscription) idempotent, sodass Verlängerungen und Reaktivierungen keine doppelten Grants erstellen. Einmalige Grants sind pro (entitlement, customer, payment) idempotent.
Gehe im Dashboard zu Entitlements und klicke auf +, um ein Entitlement zu erstellen.
2
Pick an Integration
Wähle den Integrationstyp: License Key, Digital Files, Feature Flag, Discord, GitHub, Telegram, Figma, Framer oder Notion. Bei einer Plattformintegration verbinde zuerst dein Konto, falls du dies noch nicht getan hast.
3
Configure Delivery
Fülle die Felder für die Integration aus. GitHub fragt beispielsweise nach einem Repository und einer Berechtigungsstufe, Discord nach einem Server und einer optionalen Rolle und License Key nach einem Aktivierungslimit und einer Lizenzlaufzeit.
Creating a GitHub entitlement. Each integration shows the fields it needs.
4
Save
Klicke auf Create Entitlement. Du kannst das Entitlement jetzt jedem Produkt zuordnen.
Öffne ein Produkt, gehe zum Abschnitt Entitlements und wähle die Entitlements aus, die bei einem Kauf des Produkts bereitgestellt werden sollen. Ein Produkt kann mehrere Entitlements gleichzeitig bereitstellen. Ein Pro-Plan kann beispielsweise einen Lizenzschlüssel, GitHub-Zugriff und eine Discord-Rolle enthalten.
Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.
Nach einem Kauf erhält der Kunde eine Zustellungs-E-Mail mit dem Lizenzschlüssel, Download-Links, OAuth-Einladungslinks oder der passenden Plattform-Einladung für die Entitlements des Produkts. Dieselben Informationen bleiben im Customer Portal unter der Bestellhistorie verfügbar, solange der Grant aktiv ist.
Der Abonnentenzugriff auf Discord, GitHub und Notion erfordert, dass der Kunde Dodo Payments autorisiert, diesen Zugriff zu gewähren. Diese Grants bleiben Pending, bis der Kunde den OAuth-Ablauf über den Link in seiner E-Mail oder im Customer Portal abschließt. Nach der Autorisierung wechselt der Grant zu Delivered, und Dodo Payments stellt den Plattformzugriff bereit.
Wenn ein Grant widerrufen wird, entfernt Dodo Payments den Zugriff auf der Plattform: Die Discord-Rolle, der GitHub-Mitbearbeiter oder der Lizenzschlüssel wird entfernt beziehungsweise deaktiviert. Der Kunde sieht die Änderung im Customer Portal.
Bei Digital Files verhindert der Widerruf neue vorab signierte Download-URLs, macht jedoch keine Kopien ungültig, die ein Kunde bereits heruntergeladen hat. Plane deine Zugriffsbeschränkung für Inhalte entsprechend.
Öffne ein beliebiges Entitlement im Dashboard, um seine Grants anzuzeigen. Das Detailfenster zeigt die Gesamtzahl der ausgestellten Grants, einen Statusfilter und eine Zeile pro Grant mit dem Kunden, dem Zugriffsdatum, dem Status und der Aktion Revoke.Um Grants programmgesteuert zu verwalten, liste sie mit dem Filter status auf und widerrufe einen einzelnen Grant über seine ID:
import DodoPayments from 'dodopayments';const client = new DodoPayments({ bearerToken: process.env['DODO_PAYMENTS_API_KEY'],});// List grants for an entitlementconst grants = await client.entitlements.grants.list('ent_abc123', { status: 'Delivered',});// Revoke a single grantawait client.entitlements.grants.revoke('entg_xyz789', { id: 'ent_abc123',});
Dodo Payments sendet vier Webhook-Ereignisse für den Grant-Lebenszyklus. Abonniere sie, damit deine Anwendung mit dem Zugriff jedes Kunden synchron bleibt.
Ereignis
Wird ausgelöst, wenn
entitlement_grant.created
Ein Grant erstellt wird. Automatisch erfüllte Lizenzschlüssel-Grants und Feature-Flag-Grants werden als Delivered empfangen. Manuell erfüllte Lizenzschlüssel-Grants und alle anderen Integrationen werden als Pending empfangen und wechseln zu Delivered, sobald der Plattformaufruf erfolgreich ist oder der Kunde bei OAuth-basierten Integrationen seine Einwilligung erteilt.
entitlement_grant.delivered
Ein bestehender Grant zu Delivered wechselt und der Kunde nun Zugriff hat. Ein Grant, der bei der Erstellung Delivered ist, löst nur created aus.
entitlement_grant.failed
Der Grant nicht bereitgestellt werden konnte. Prüfe error_code und error_message.
entitlement_grant.revoked
Der Zugriff entzogen wurde. Prüfe revocation_reason.
Entitlement Grant Webhook Payloads
Zeige das vollständige Payload-Schema, Beispielereignisse und die Referenz für revocation_reason an.
Verwende ein Entitlement pro Bereitstellungskanal. Teile ein Discord-Entitlement nicht über Produkte mit unterschiedlichen Rollenabsichten hinweg. Erstelle ein Entitlement pro Rolle, damit der Widerruf sauber bleibt.
Teste zuerst im Testmodus. Erstelle das Entitlement, verknüpfe es mit einem Testprodukt, führe einen Checkout durch und beobachte, wie der Grant von Pending zu Delivered wechselt. Kündige anschließend das Testabonnement und bestätige, dass der Grant widerrufen wird.
Höre auf entitlement_grant.delivered, nicht auf payment.succeeded. Eine Zahlung kann erfolgreich sein, bevor die Bereitstellung abgeschlossen ist, insbesondere bei OAuth-Abläufen. Warte, bis der Grant Delivered erreicht, bevor du abhängige Funktionen in deinen eigenen Systemen freischaltest. Ein Grant, der bei der Erstellung bereitgestellt wird, etwa ein automatisch erfüllter Lizenzschlüssel oder ein Feature Flag, wird stattdessen als entitlement_grant.created mit status: "Delivered" empfangen.
Behandle entitlement_grant.failed als handlungsrelevant. Ein fehlgeschlagener Grant bedeutet, dass ein Kunde bezahlt, aber keinen Zugriff erhalten hat. Zeige diese Grants deinem Supportteam an oder löse eine erneute Ausstellung aus.
Ordne revocation_reason deinen Kundenbindungsabläufen zu. Ein subscription_on_hold-Widerruf kann behoben werden, da der Kunde möglicherweise seine Karte aktualisiert. Ein manual-Widerruf ist beabsichtigt. Behandle sie in Kundenmitteilungen unterschiedlich.
Entziehe den Zugriff nicht bei subscription.past_due. Dieses Ereignis startet eine Kulanzfrist, und der Kunde behält den Zugriff bis zum Ende des Zeitraums. Warte auf subscription.on_hold oder subscription.cancelled.