Entitlementsは、成功した支払いや有効なサブスクリプションをアクセス権に変換します。顧客の受信トレイに届くライセンスキー、アプリがチェックするfeature flag、Discordロール、GitHubリポジトリ、Notionテンプレート、Framer remixリンク、Telegramチャットへの招待、またはダウンロード可能なファイルバンドルなどです。支払いライフサイクルの変化に応じて、Dodo Paymentsがそのアクセス権を自動的に発行、追跡、取り消します。

The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.
Entitlementsとは?
entitlementは、Proライセンスキー、「Patrons」Discordロール、非公開GitHubリポジトリへのアクセス、ダウンロード可能な電子書籍バンドルなど、顧客に提供するものを再利用可能な形で定義したものです。Entitlementsを商品に紐付けると、顧客が支払ったときにDodo Paymentsがそれらを提供します。 顧客が商品を購入すると、Dodo Paymentsはgrantを作成します。これは、そのentitlementを1人の顧客に発行したものです。Grantには4つのステータスがあります。提供中はPending、顧客がアクセス可能になるとDelivered、提供を完了できなかった場合はFailed、アクセスが取り消されるとRevokedです。
利用可能な統合
各entitlementは1つのintegrationを通じて提供されます。販売するものに合ったintegrationを選択してください。License Keys
Digital Files
Feature Flags
Discord
GitHub
Telegram
Framer
Notion
権利のしくみ
Grantは、webhookとして受信する支払いイベントおよびサブスクリプションイベントに従います。Dodo Paymentsは支払いライフサイクルに基づいて購入のgrantを自動的に作成・取り消すため、grant APIを自分で呼び出す必要はありません。権利のライフサイクル
Grantは次のステータスを順に遷移します。1
Created
Dodo Paymentsは、支払いが完了したとき、またはサブスクリプションが有効になったときにgrantを作成します。Feature-flag grantは
Deliveredとして開始します。entitlementがfulfillment_mode: auto(デフォルト)を使用する場合、ライセンスキーgrantもDeliveredとして開始します。fulfillment_mode: manualでは、grantはPendingとして開始し、Fulfill License Key Grantでキーを指定するまでキーはありません。その他のintegrationはすべてPendingとして開始します。OAuthベースのintegration(Discord、GitHub、Notion)は、顧客がアクセスして同意を与えるoauth_urlを公開します。Dodo Paymentsはgrant作成時にこのURLの生成を試みます。失敗した場合、顧客が配信メールまたはCustomer Portalからacceptフローを開始するまで、フィールドはnullのままです。Platform-direct integration(Telegram、Framer、Digital Files)は、提供がプロビジョニングされている間だけPendingのままで、その後Deliveredに移行します。2
Delivered
提供が完了すると、grantは
Deliveredに移行し、delivered_atが設定されます。ライセンスキーが生成されたとき、ロールが割り当てられたとき、リポジトリへのアクセスが許可されたとき、ファイルリンクが解決されたとき、またはOAuthフローが完了したときに、提供は完了します。3
Failed
取り消し不能なエラー(取り消されたOAuth token、拒否された権限、存在しなくなったファイルなど)がintegration呼び出しから返された場合、grantは
Failedに移行します。error_codeフィールドとerror_messageフィールドに理由が記録されます。4
Revoked
サブスクリプションのキャンセル、返金の発行、grantの取り消しなどによってアクセスが取り消されると、grantは
Revokedに移行します。revocation_reasonフィールドにトリガーが記録されます。イベントごとのGrantの動作
各支払いイベントおよびサブスクリプションイベントによって、Grantは次のように変化します。サブスクリプションによるgrantは
(entitlement, customer, subscription)ごとにidempotentであるため、更新や再有効化によって重複したgrantが作成されることはありません。単発grantは(entitlement, customer, payment)ごとにidempotentです。最初のEntitlementを作成する
1
Open Entitlements
ダッシュボードでEntitlementsに移動し、**+**をクリックしてentitlementを作成します。
2
Pick an Integration
integrationの種類として、License Key、Digital Files、Feature Flag、Discord、GitHub、Telegram、Figma、Framer、またはNotionを選択します。プラットフォームintegrationの場合、まだ接続していなければ、先にアカウントを接続してください。
3
Configure Delivery
integrationのフィールドに入力します。たとえばGitHubではリポジトリと権限レベル、Discordではサーバーと任意のロール、License Keyではアクティベーション数の上限とライセンス期間を指定します。

Creating a GitHub entitlement. Each integration shows the fields it needs.
4
Save
Create Entitlementをクリックします。これで、任意の商品にentitlementを紐付けられます。
Entitlementsを商品に紐付ける
商品を開き、Entitlementsセクションに移動して、商品購入時に提供するentitlementを選択します。1つの商品で複数のentitlementを同時に提供できます。たとえばProプランには、ライセンスキー、GitHubアクセス、Discordロールを含められます。
Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.
顧客体験
EmailとCustomer Portal
購入後、顧客には、その商品のentitlementに応じたライセンスキー、ダウンロードリンク、OAuth招待リンク、またはプラットフォーム招待を含む配信メールが届きます。Grantが有効な間は、同じ詳細をCustomer Portalの注文履歴からも確認できます。OAuthベースの提供
Discord、GitHub、Notionのsubscriber accessでは、顧客がDodo Paymentsにそのアクセス権の付与を承認する必要があります。顧客がメールまたはCustomer PortalのリンクからOAuthフローを完了するまで、これらのgrantはPendingのままです。顧客が承認すると、grantはDeliveredに移行し、Dodo Paymentsがプラットフォームアクセスをプロビジョニングします。
取り消し
Grantが取り消されると、Dodo Paymentsはプラットフォーム上のアクセス権を削除します。Discordロールを削除し、GitHub collaboratorを削除し、またはライセンスキーを無効にします。顧客はCustomer Portalで変更を確認できます。Grantを管理する
ダッシュボードから任意のentitlementを開くと、そのgrantを確認できます。詳細パネルには、付与数の合計、ステータスフィルター、顧客、アクセス日、ステータス、Revokeアクションを含むgrantごとの行が表示されます。 Grantをプログラムで管理するには、statusフィルターで一覧表示し、IDを指定して1つのgrantを取り消します。
API管理
Create Entitlement
List Entitlements
Get Entitlement
Update Entitlement
Delete Entitlement
Upload File
List Grants
Revoke Grant
Webhooks
Dodo Paymentsは、grantライフサイクルに関する4つのwebhookイベントを送信します。これらを購読して、各顧客がアクセスできる内容とアプリケーションを同期してください。Entitlement Grant Webhook Payloads
ベストプラクティス
- 提供チャネルごとに1つのentitlementを使用する。 異なるロール目的を持つ商品間で、1つのDiscord entitlementを共有しないでください。取り消しを適切に行えるよう、ロールごとに1つのentitlementを作成します。
- まずtest modeでテストする。 Entitlementを作成し、テスト商品に紐付け、checkoutを実行して、grantが
PendingからDeliveredへ移行することを確認します。その後、テストサブスクリプションをキャンセルし、grantが取り消されることを確認します。 payment.succeededではなくentitlement_grant.deliveredをリッスンする。 特にOAuthフローでは、fulfillmentが完了する前に支払いが成功することがあります。独自システムで依存するfeatureのロックを解除する前に、grantがDeliveredになるまで待ってください。自動fulfillされたライセンスキーやfeature flagなど、作成時に提供されるgrantは、代わりにentitlement_grant.createdとstatus: "Delivered"として届きます。entitlement_grant.failedを対応が必要なイベントとして扱う。 Grantの失敗は、顧客が支払ったにもかかわらずアクセスできていないことを意味します。これらのgrantをサポートチームに通知するか、再発行をトリガーしてください。revocation_reasonをretentionフローにマッピングする。subscription_on_holdによるrevokeは、顧客がカードを更新できるため復旧可能です。manualによるrevokeは意図的なものです。顧客へのメッセージでは、これらを区別して扱ってください。subscription.past_dueでアクセスを取り消さない。 このイベントはgrace periodを開始し、期間が終了するまで顧客はアクセスを維持します。subscription.on_holdまたはsubscription.cancelledを待ってください。