权限授予
在创建、交付、失败或撤销权限授予时发送到您的 webhook 端点的负载。
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.
权限授予 Webhook 事件
每当客户的权限授予状态发生变化时,这些事件将触发,例如生成许可证密钥、分配 Discord 角色、提供下载链接或撤销访问。订阅这些事件以保持您的应用程序与每个客户的可访问性同步。| Event | Description |
|---|---|
entitlement_grant.created | 新的授予行已创建。对于许可证密钥,状态立即为 delivered,对于每个其他集成则为 pending。 |
entitlement_grant.delivered | 授予已过渡到交付状态。客户现在可以访问被授予的平台、文件或许可证密钥。 |
entitlement_grant.failed | 交付失败且未重试。检查 error_code 和 error_message。 |
entitlement_grant.revoked | 访问权限已被撤销。检查 revocation_reason 以了解原因。 |
EntitlementGrantResponse 负载,如下模式所述。
事件触发器
entitlement_grant.created
授予行刚刚插入。从此时起,即使状态发生变化,授予始终具有稳定的id。使用此事件记录履行正在进行中。
对于 许可证密钥,行直接插入,并填充 status: "delivered" 和 delivered_at,因此单个 created 事件后没有进一步的状态更改,除非以后撤销授予。
对于 每个其他集成,行到达时为 status: "pending"。一旦交付完成,delivered 或 failed 事件随之而来:
- 基于 OAuth 的集成(Discord、GitHub、Notion)包括客户必须访问以完成同意的
oauth_url。在客户授权之前,授予保持为pending。 - 平台直接集成(Telegram、Framer、数字文件)在平台调用运行时仅短暂保持在
pending,然后移动到delivered。
entitlement_grant.delivered
授予从pending 过渡到 delivered。客户现在拥有权限所描述的访问权限。使用此事件在您自己的系统中解锁相关功能,例如准备工作空间、发送定制欢迎电子邮件或标记为“已履行”的标志。
负载的 delivered_at 字段捕获交付完成时间。对于在创建时已达到 delivered 的授予,您将接收 created 和 delivered 事件。
entitlement_grant.failed
尝试交付但由于不可重试的错误而失败。error_code 和 error_message 字段解释了失败原因。常见原因包括撤销的 OAuth 令牌、被拒绝的平台权限或缺失的目标(例如,已删除的 Discord 公会)。
entitlement_grant.revoked
访问在平台级别被撤销:Discord 角色移除、GitHub 合作者移除、许可证密钥禁用、不再发放文件下载 URL。revocation_reason 字段记录了触发器。
revocation_reason | 触发器 |
|---|---|
subscription_cancelled | 客户的订阅被取消(subscription.cancelled 事件)。 |
subscription_on_hold | 由于续订失败,订阅处于暂停状态(subscription.on_hold)。可恢复:成功重试将重新授予。 |
subscription_expired | 订阅到达其期限的结尾(subscription.expired)。 |
plan_changed | 计划更改;旧的授予在发布新的授予之前被撤销(subscription.plan_changed)。 |
refund | 原始一次性付款处理了退款(refund.succeeded)。 |
manual | 商家通过 API 或仪表板撤销了授予。手动撤销不会在订阅续期时自动重新授予。 |
license_key_disabled | 许可证密钥授予背后的许可证密钥被禁用。如果密钥重新启用,授予将自动重新激活。 |
platform_external | 集成的平台方面不同步(例如,Discord 角色被手动移除,GitHub 应用程序失去储存库访问权限,或对账过程检测到了丢失的目标)。在底层平台问题解决之前,授予不会在订阅续期时自动重新授予。 |
负载变体
data 字段始终是 EntitlementGrantResponse 对象。两种集成类型附加额外的嵌套对象:
- 如果权限集成类型为
license_key,则会包含license_key。它包含生成的密钥、到期时间和激活使用情况。 - 如果集成类型为
digital_files,则会包含digital_product_delivery。它包含预签名下载 URL,选择性的instructions和选择性的external_url。
null;相关配置捕获在权限本身中,而不是授权中。
示例负载
许可证密钥交付 (entitlement_grant.delivered)
数字文件交付 (entitlement_grant.delivered)
Discord 角色创建并待定 (entitlement_grant.created)
订阅取消上的授予撤销 (entitlement_grant.revoked)
交付失败 (entitlement_grant.failed)
集成提示
- 在解锁相关功能前等待
entitlement_grant.delivered。payment.succeeded事件告诉您款项已结算;这并不意味着客户已经拥有 GitHub 库或 Discord 角色。delivered事件是履行的实情来源。 - 将
revocation_reason映射到保留流程。subscription_on_hold撤销通常意味着客户的卡片失败,下次续约将重新授予访问权限。manual或subscription_cancelled撤销是有意的。在客户消息中区别对待。 - 使用授予
id作为您的幂等键。 单个授予最多发出一个created事件和最多一个终端事件(delivered或failed),以及最多一个revoked事件。Webhook 系统的重新交付可以重复事件;在授予id加上type上消除重复。 - 检查
license_key和digital_product_delivery以识别集成类型。 授予负载本身不携带集成类型,但这两个嵌套对象中的一个正好会为许可证密钥和数字文件权限提供内容。 - 对于基于 OAuth 的授予,向客户展示
oauth_url。 Discord、GitHub 或 Notion 订阅者流的entitlement_grant.created事件包括一个oauth_url和oauth_expires_at。通过电子邮件发送给客户或在您的应用中展示,以解除交付阻碍。
Detailed view of a single entitlement grant: who it's for, its lifecycle state, and any integration-specific delivery payload.
Identifier of the business that owns the grant.
Timestamp when the grant was created.
Identifier of the customer the grant was issued to.
Identifier of the entitlement this grant was issued from.
Unique identifier of the grant.
Arbitrary key-value metadata recorded on the grant.
Lifecycle status of the grant.
Pending, Delivered, Failed, Revoked Timestamp when the grant was last modified.
Timestamp when the grant transitioned to delivered, when applicable.
Digital-product-delivery payload, present when the entitlement
integration is digital_files.
Machine-readable code reported when delivery failed, when applicable.
Human-readable message reported when delivery failed, when applicable.
License-key delivery payload, present when the entitlement integration
is license_key.
Timestamp when oauth_url stops being valid, when applicable.
Customer-facing OAuth URL for OAuth-style integrations. Populated
during the customer-portal accept flow; null until the customer
completes that step, and on grants for non-OAuth integrations.
Identifier of the payment that triggered this grant, when applicable.
Reason recorded when the grant was revoked, when applicable.
Timestamp when the grant transitioned to revoked, when applicable.
Identifier of the subscription that triggered this grant, when applicable.