权益会将成功付款或有效订阅转化为访问权限:发送到客户收件箱中的 License Key、由你的应用检查的 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.
什么是权益?
权益(entitlement) 是对你向客户交付的某项内容的可复用定义,例如 Pro License Key、“Patrons” Discord 角色、私有 GitHub 仓库的访问权限,或可下载的电子书包。你可以将权益附加到产品上,客户付款后,Dodo Payments 会交付这些权益。 客户购买产品后,Dodo Payments 会创建一条 授予记录(grant),表示向一位客户签发该权益。授予记录有四种状态:交付进行中时为Pending,客户获得访问权限后为 Delivered,交付无法完成时为 Failed,访问权限被撤回时为 Revoked。
可用集成
每项权益都通过一种集成进行交付。请选择与你销售内容相匹配的集成。License Keys
生成具有激活限制和到期时间的唯一许可证密钥。最适合软件、插件和CLI。
Digital Files
通过预签名下载 URL 和可选说明交付可下载文件,例如电子书、模板和媒体文件。
Feature Flags
当客户购买产品后,在你自己的应用中控制功能访问。权益创建后即交付,通过 API 检查,并在取消时撤销。
Discord
客户购买后,为其分配 Discord 服务器中的角色。取消后会自动移除该角色。
GitHub
按您选择的权限级别将客户添加为私人仓库的协作者。
Telegram
购买后将客户添加到私人Telegram聊天或频道中。
Framer
为付费客户解锁Framer模板混编链接。
Notion
购买时将Notion模板复制到客户的工作区。
授予的工作原理
授予记录遵循你通过 webhooks 接收的相同付款和订阅事件。Dodo Payments 会根据付款生命周期自动为购买创建和撤销授予记录,因此你无需自行调用授予记录 API。授予生命周期
授予记录会经历以下状态:1
Created
付款完成或订阅变为有效后,Dodo Payments 会创建授予记录。Feature Flag 授予记录的初始状态为
Delivered。对于使用 fulfillment_mode: auto(默认值)的权益,License Key 授予记录的初始状态也为 Delivered。在 fulfillment_mode: manual 下,授予记录会以 Pending 状态开始,且在你通过 履行 License Key 授予记录 提供 Key 之前不会包含 Key。所有其他集成的初始状态均为 Pending。基于 OAuth 的集成(Discord、GitHub、Notion)会提供一个 oauth_url,客户访问该链接后即可授予同意。Dodo Payments 会在创建授予记录时尝试生成此 URL。如果生成失败,该字段会保持为 null,直到客户通过交付邮件或 Customer Portal 开始接受流程。直接连接平台的集成(Telegram、Framer、Digital Files)仅在交付配置期间保持 Pending,之后会变为 Delivered。2
Delivered
交付完成后,授予记录会变为
Delivered,并设置 delivered_at。License Key 生成、角色分配、仓库访问权限授予、文件链接解析或 OAuth 流程完成后,即表示交付完成。3
Failed
如果集成调用返回不可重试的错误,例如 OAuth token 被撤销、权限被拒绝或文件不再存在,授予记录会变为
Failed。error_code 和 error_message 字段会记录原因。4
Revoked
访问权限被撤回时,例如订阅被取消、退款已发放或你撤销了授予记录,授予记录会变为
Revoked。revocation_reason 字段会记录触发原因。按事件划分的授予记录行为
每个付款和订阅事件会按以下方式变更授予记录:订阅驱动的授予记录以
(entitlement, customer, subscription) 为幂等依据,因此续订和重新激活不会创建重复的授予记录。一次性授予记录以 (entitlement, customer, payment) 为幂等依据。创建你的第一项权益
1
Open Entitlements
在控制面板中进入 Entitlements,然后点击 + 创建权益。
2
Pick an Integration
选择集成类型:License Key、Digital Files、Feature Flag、Discord、GitHub、Telegram、Figma、Framer 或 Notion。如果使用平台集成,请先连接你的账户(如果尚未连接)。
3
Configure Delivery
填写集成所需的字段。例如,GitHub 会要求填写仓库和权限级别,Discord 会要求填写服务器和可选角色,License Key 会要求填写激活次数限制和 License 时长。

Creating a GitHub entitlement. Each integration shows the fields it needs.
4
Save
点击 Create Entitlement。现在你可以将该权益附加到任意产品。
将权益附加到产品
打开产品,进入其 Entitlements 部分,然后选择产品购买后要交付的权益。一款产品可以同时交付多项权益。例如,Pro 方案可以包含 License Key、GitHub 访问权限和 Discord 角色。
Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.
客户体验
Email 和 Customer Portal
购买后,客户会收到一封交付邮件,其中包含产品权益对应的 License Key、下载链接、OAuth 邀请链接或平台邀请。只要授予记录处于有效状态,相同信息也会一直显示在 Customer Portal 的订单历史记录中。基于 OAuth 的交付
Discord、GitHub 和 Notion 的订阅者访问权限要求客户授权 Dodo Payments 来授予这些访问权限。在客户通过邮件或 Customer Portal 中的链接完成 OAuth 流程之前,这些授予记录会保持为Pending。客户授权后,授予记录会变为 Delivered,Dodo Payments 随即配置平台访问权限。
撤销
授予记录被撤销后,Dodo Payments 会在平台上移除相应访问权限:移除 Discord 角色、移除 GitHub 协作者,或禁用 License Key。客户可以在 Customer Portal 中看到此变更。管理授予记录
从控制面板打开任意权益即可查看其授予记录。详情面板会显示授予总数、状态筛选器,以及每条授予记录的一行信息,包括客户、访问日期、状态和 Revoke 操作。 要以编程方式管理授予记录,请使用status 筛选器列出授予记录,并通过 ID 撤销单条授予记录:
API 管理
Create Entitlement
创建任意集成类型的权益。
List Entitlements
列出权益,并按集成类型筛选。
Get Entitlement
检索权益及其解析后的配置。
Update Entitlement
更新名称、描述或集成配置。
Delete Entitlement
软删除权益。现有授予记录不会被撤销,但 Dodo Payments 将不再管理它们。
Upload File
向 Digital Files 权益上传一个最大为 500 MiB 的文件。
List Grants
列出权益的授予记录,并按状态和客户筛选。
Revoke Grant
手动撤销单条授予记录。
Webhooks
Dodo Payments 会针对授予记录生命周期发送四种 webhook 事件。订阅这些事件,以便让你的应用与每位客户可以访问的内容保持同步。Entitlement Grant Webhook Payloads
查看完整的 payload schema、示例事件以及
revocation_reason 参考信息。最佳实践
- 每个交付渠道使用一项权益。 不要在具有不同角色意图的多个产品之间共享同一项 Discord 权益。请为每个角色创建一项权益,以便干净地撤销访问权限。
- 先在测试模式中进行测试。 创建权益,将其附加到测试产品,完成一次结账,并观察授予记录从
Pending变为Delivered。然后取消测试订阅,并确认授予记录已被撤销。 - 监听
entitlement_grant.delivered,而不是payment.succeeded。 付款可能在履行完成前成功,尤其是在 OAuth 流程中。请等待授予记录达到Delivered后,再在自己的系统中解锁依赖功能。创建时即完成交付的授予记录,例如自动履行的 License Key 或 Feature Flag,会以entitlement_grant.created事件和status: "Delivered"状态到达。 - 将
entitlement_grant.failed视为需要采取行动的事件。 授予记录失败意味着客户已经付款,但尚未获得访问权限。请将这些授予记录展示给支持团队,或触发重新签发。 - 将
revocation_reason映射到你的留存流程。subscription_on_hold撤销是可恢复的,因为客户可能会更新其银行卡。manual撤销则是有意执行的。在客户消息中应区别处理这两种情况。 - 不要在
subscription.past_due时撤销访问权限。 该事件会开启宽限期,客户会一直保留访问权限,直到窗口结束。请等待subscription.on_hold或subscription.cancelled。