Skip to main content

权限授予 Webhook 事件

每当客户的权限授予状态发生变化时,这些事件将触发,例如生成许可证密钥、分配 Discord 角色、提供下载链接或撤销访问。订阅这些事件以保持您的应用程序与每个客户的可访问性同步。 所有四个事件共享相同的 EntitlementGrantResponse 负载,如下模式所述。

事件触发器

entitlement_grant.created

授予行刚刚插入。从此时起,即使状态发生变化,授予始终具有稳定的 id。使用此事件记录履行正在进行中。 对于自动获取的许可证密钥,授权行直接插入,填充了 status: "delivered"delivered_at,因此只能由一个 created 事件跟随,除非授权后来被撤销,否则不会有进一步的状态变化。 对于手动获取的许可证密钥(使用 fulfillment_mode: manual 的授权),授权行到达时有 status: "pending" 但没有 license_key 对象 — 还没有密钥。此事件表示有一个密钥等待获取;通过POST /grants/{grant_id}/license-key提供它,随后触发 entitlement_grant.delivered。查看手动获取 对于其他集成,授权行到达带有 status: "pending"。完成交付后,紧跟着发生 deliveredfailed 事件:
  • 基于 OAuth 的集成(Discord、GitHub、Notion)包括一个顾客必须访问的 oauth_url 来完成许可。授权保持为 pending,直到顾客授权。
  • 平台直接集成(Telegram、Framer、数字文件)仅在平台调用运行时短暂保持 pending,然后转为 delivered

entitlement_grant.delivered

授权由 pending 转为 delivered。客户现在拥有所描述的授权访问。使用此事件解锁你自己的系统中的依赖功能,例如配置工作区、发送自定义欢迎邮件或标记为 “已完成”。 负载的 delivered_at 字段记录了交付完成的时间。对于已在创建时到达 delivered 的授权,你将连续收到 createddelivered 事件。

entitlement_grant.failed

交付尝试失败且出现不可重试的错误。error_codeerror_message 字段解释了失败原因。常见原因包括撤销 OAuth 令牌、被拒绝的平台权限或缺少的目标(例如,已删除的 Discord 公会)。
entitlement_grant.failed 视为可操作的。顾客付款但未获得访问。向支持团队报告失败或在解决根本问题后触发重授权。

entitlement_grant.revoked

访问在平台层面被撤销:Discord 角色被移除,GitHub 协作者被移除,许可证密钥被禁用,不再提供文件下载网址。 revocation_reason 字段记录触发。

负载变体

data 字段始终是一个 EntitlementGrantResponse 对象。负载带有 integration_type 字段(例如 license_key, digital_files, discord),以便你可以直接识别授权类型。两种集成类型还附加了额外的嵌套对象:
  • integration_typelicense_key 且已发布密钥时,包括 license_key。它包含生成的密钥、过期时间和激活使用情况。对于仍在 pending 的手动获取的授权,此对象为 null,直到你完成授权。
  • integration_typedigital_files 时,包括 digital_product_delivery。它包含预签名的下载网址、可选的 instructions 和可选的 external_url
对于所有其他集成类型(Discord、GitHub、Telegram、Framer、Notion),两个嵌套字段均为 null;相关的配置记录在授权本身中,而不是在授权行中。

示例负载

许可证密钥已交付 (entitlement_grant.delivered)

许可证密钥等待手动获取 (entitlement_grant.created)

当顾客购买了一个使用 fulfillment_mode: manual 的许可证密钥授权的产品时触发。授权行 pending 尚无 license_key 对象 — 商家必须提供密钥。

数字文件已交付 (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 撤销通常意味着客户的信用卡失败,下一次续订将重新授予访问权限。manualsubscription_cancelled 撤销是有意的。在客户消息中区别对待。
  • 使用授权 id 作为幂等性密钥。 单个授权最多发出一个 created 事件和最多一个终端事件(deliveredfailed),最多发出一个 revoked 事件。来自 webhook 系统的重新交付可以重复事件;去重使用授权 id 加上 type
  • 读取 integration_type 以识别授权类型。 负载直接携带 integration_type(例如 license_key, digital_files, discord)。license_keydigital_product_delivery 嵌套对象在相应的授权完成后填充;手动获取的许可证密钥授权在你完成前保持 pending 带有 integration_type: "license_key"null license_key
  • 对于基于 OAuth 的授权,将 oauth_url 显示给客户。 Discord、GitHub 或 Notion 订阅流的 entitlement_grant.created 事件包括 oauth_urloauth_expires_at。将其通过电子邮件发送给客户或在你的应用中显示以解除交付阻塞。

Detailed view of a single entitlement grant: who it's for, its lifecycle state, and any integration-specific delivery payload.

brand_id
string
必填

Brand id this grant belongs to.

business_id
string
必填

Identifier of the business that owns the grant.

created_at
string<date-time>
必填

Timestamp when the grant was created.

customer_id
string
必填

Identifier of the customer the grant was issued to.

entitlement_id
string
必填

Identifier of the entitlement this grant was issued from.

id
string
必填

Unique identifier of the grant.

integration_type
enum<string>
必填

The integration type of the grant's entitlement (e.g. license_key).

可用选项:
discord,
telegram,
github,
figma,
framer,
notion,
digital_files,
license_key,
feature_flag
metadata
Metadata · object
必填

Arbitrary key-value metadata recorded on the grant.

status
enum<string>
必填

Lifecycle status of the grant.

可用选项:
Pending,
Delivered,
Failed,
Revoked
updated_at
string<date-time>
必填

Timestamp when the grant was last modified.

delivered_at
string<date-time> | null

Timestamp when the grant transitioned to delivered, when applicable.

digital_product_delivery
null | Digital Product Delivery · object

Digital-product-delivery payload, present when the entitlement integration is digital_files.

error_code
string | null

Machine-readable code reported when delivery failed, when applicable.

error_message
string | null

Human-readable message reported when delivery failed, when applicable.

feature
null | object

Typed feature payload, present only when the entitlement integration is feature_flag; null for every other integration type.

license_key
null | object

License-key delivery payload, present when the entitlement integration is license_key.

oauth_expires_at
string<date-time> | null

Timestamp when oauth_url stops being valid, when applicable.

oauth_url
string | null

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.

payment_id
string | null

Identifier of the payment that triggered this grant, when applicable.

revocation_reason
string | null

Reason recorded when the grant was revoked, when applicable.

revoked_at
string<date-time> | null

Timestamp when the grant transitioned to revoked, when applicable.

subscription_id
string | null

Identifier of the subscription that triggered this grant, when applicable.

最后修改于 2026年6月9日