Trao Quyền
Tải trọng được gửi đến điểm cuối webhook của bạn khi một quyền được tạo, giao hàng, thất bại hoặc bị thu hồi.
Sự Kiện Webhook Trao Quyền
Các sự kiện này được kích hoạt mỗi khi quyền của khách hàng thay đổi trạng thái, ví dụ khi một license key được tạo, một vai trò Discord được gán, một liên kết tải xuống được cung cấp hoặc quyền truy cập bị từ chối. Đăng ký các sự kiện này để giữ cho ứng dụng của bạn đồng bộ với những gì mỗi khách hàng có thể truy cập.EntitlementGrantResponse được tài liệu hóa trong sơ đồ dưới đây.
Kích Hoạt Sự Kiện
entitlement_grant.created
Một dòng cấp quyền vừa được chèn. Quyền luôn có mộtid ổn định từ lúc này, ngay cả khi trạng thái của nó thay đổi. Sử dụng sự kiện này để ghi lại rằng việc thực hiện đang diễn ra.
Đối với license key được tự động fulfillment, row được insert trực tiếp với status: "Delivered" và delivered_at đã được điền, vì vậy một event created duy nhất sẽ không có thêm thay đổi trạng thái nào, trừ khi grant bị revoke về sau.
Đối với license key được fulfillment thủ công (entitlement có fulfillment_mode: manual), row được tạo với status: "Pending" và không có object license_key — chưa có key. Event này báo hiệu rằng một key đang chờ fulfillment; hãy cung cấp key qua POST /grants/{grant_id}/license-key, sau đó event entitlement_grant.delivered sẽ được phát. Xem Manual Fulfillment.
Đối với mọi integration khác, row được tạo với status: "Pending". Một event delivered hoặc failed sẽ được phát sau khi delivery hoàn tất:
- Integration dựa trên OAuth (Discord, GitHub, Notion) chứa một
oauth_urlmà customer phải truy cập để hoàn tất việc cấp consent. Grant vẫn ở trạng tháiPendingcho đến khi customer authorize. - Integration trực tiếp với platform (Telegram, Framer, Digital Files) chỉ ở trạng thái
Pendingtrong thời gian ngắn khi platform call đang chạy, sau đó chuyển sangDelivered.
pending sang delivered. Khách hàng hiện có quyền truy cập như đã mô tả trong quyền. Sử dụng sự kiện này để mở khóa các tính năng phụ thuộc trong hệ thống của bạn, ví dụ để cung cấp một không gian làm việc, gửi email chào mừng tùy chỉnh hoặc đánh dấu một cờ “đã hoàn thành”.
Grant đã chuyển từ Pending sang Delivered. Customer hiện có quyền truy cập được mô tả trong entitlement. Sử dụng event này để mở khóa các tính năng phụ thuộc trong hệ thống của bạn, chẳng hạn như provision một workspace, gửi email chào mừng tùy chỉnh hoặc đánh dấu cờ “fulfilled”.
Trường delivered_at trong payload ghi nhận thời điểm delivery hoàn tất. Đối với các grant có trạng thái Delivered ngay khi được tạo, bạn sẽ nhận được các event created và delivered liên tiếp.
Giao hàng đã được thử nghiệm nhưng thất bại với lỗi không thể thử lại. Các trường error_code và error_message giải thích lý do thất bại. Nguyên nhân phổ biến bao gồm token OAuth bị thu hồi, quyền nền tảng bị từ chối, hoặc mục tiêu bị thiếu (ví dụ, một guild Discord đã bị xóa).
entitlement_grant.revoked
Quyền truy cập đã bị rút lại ở cấp độ nền tảng: vai trò Discord bị xóa, cộng tác viên GitHub bị xóa, key giấy phép bị vô hiệu hóa, URL tải xuống tệp không còn được cấp phát. Trườngrevocation_reason ghi lại kích hoạt.
Biến Thể Payload
Trườngdata luôn là một đối tượng EntitlementGrantResponse. Hai kiểu tích hợp đính kèm thêm các đối tượng con:
Trường data luôn là một object EntitlementGrantResponse. Payload chứa một trường integration_type (ví dụ license_key, digital_files, discord) để bạn có thể nhận diện trực tiếp loại grant. Ba loại integration cũng đính kèm các object nested bổ sung:
license_keyđược bao gồm khiintegration_typelàlicense_keyvà một key đã được cấp. Object này chứa key được tạo, thời hạn hết hạn và thông tin sử dụng activation. Đối với grant được fulfillment thủ công vẫn ở trạng tháiPending, object này lànullcho đến khi bạn fulfillment grant.digital_product_deliveryđược bao gồm khiintegration_typelàdigital_files. Object này chứa các URL download presigned,instructionstùy chọn vàexternal_urltùy chọn.featuređược bao gồm khiintegration_typelàfeature_flag. Object này chứafeature_typevàfeature_idcủa capability được grant cấp.
null; cấu hình liên quan được lưu trong entitlement, không phải trong grant.
Payload Ví Dụ
License key được giao (entitlement_grant.delivered)
fulfillment_mode: manual. Grant ở trạng thái Pending và chưa có object license_key — merchant phải cung cấp key.
Quyền bị thu hồi khi hủy đăng ký (entitlement_grant.revoked)
Giao hàng thất bại (entitlement_grant.failed)
- Chờ
entitlement_grant.deliveredtrước khi mở khóa các tính năng phụ thuộc. Một sự kiệnpayment.succeededcho bạn biết tiền đã được giải ngân; nó không cho bạn biết rằng khách hàng đã có repo GitHub hoặc vai trò Discord. Sự kiệndeliveredlà nguồn sự thật cho việc thực hiện. - Lập bản đồ
revocation_reasonđến luồng giữ chân người dùng. Một quyền hồi lạisubscription_on_holdthường có nghĩa là thẻ của khách hàng đã thất bại và lần gia hạn tiếp theo sẽ cấp lại quyền. Một quyền hồi lạimanualhoặcsubscription_cancelledlà có chủ ý. Xử lý chúng khác nhau trong thông báo khách hàng. - Sử dụng quyền
idnhư là khóa idempotency của bạn. Một quyền duy nhất phát ra nhiều nhất một sự kiệncreatedvà nhiều nhất một sự kiện cuối cùng (deliveredhoặcfailed), và nhiều nhất một sự kiệnrevoked. Các đợt giao lại từ hệ thống webhook có thể lặp lại các sự kiện; loại bỏ trùng lặp trên cấp quyềnidcộngtype. - Kiểm tra
license_keyvàdigital_product_deliveryđể nhận biết kiểu tích hợp. Bản thân tải trọng quyền không mang kiểu tích hợp, nhưng chính xác một trong các đối tượng con này được điền cho các quyền license-key và tệp kỹ thuật số. - Đối với các quyền dựa trên OAuth, hiển thị
oauth_urlcho khách hàng. Sự kiệnentitlement_grant.createdcho luồng thuê bao Discord, GitHub hoặc Notion bao gồm mộtoauth_urlvàoauth_expires_at. Gửi email nó cho khách hàng hoặc hiển thị trong ứng dụng của bạn để giải phóng việc giao hàng.
Mẹo Tích Hợp
- Chờ
entitlement_grant.deliveredtrước khi mở khóa các tính năng phụ thuộc. Eventpayment.succeededcho biết khoản tiền đã được xử lý thành công; event này không cho biết customer đã có GitHub repo hoặc Discord role hay chưa. Eventdeliveredlà nguồn dữ liệu chính thức cho fulfillment. - Map
revocation_reasonvào các flow retention. Việc revokesubscription_on_holdthường có nghĩa là thẻ của customer đã bị từ chối và lần renewal tiếp theo sẽ grant lại quyền truy cập. Việc revokemanualhoặcsubscription_cancelledlà có chủ ý. Hãy xử lý chúng khác nhau trong thông báo gửi customer. - Sử dụng
idcủa grant làm idempotency key. Một grant chỉ phát tối đa một eventcreated, tối đa một event kết thúc (deliveredhoặcfailed), và tối đa một eventrevoked. Hệ thống webhook có thể gửi lại event; hãy dedupe dựa trênidcủa grant cùng vớitype. - Đọc
integration_typeđể nhận diện loại grant. Payload chứa trực tiếpintegration_type(ví dụlicense_key,digital_files,discord). Các object nestedlicense_keyvàdigital_product_deliveryđược điền sau khi các grant tương ứng được delivered; grant license key được fulfillment thủ công vẫn ở trạng tháiPendingvớiintegration_type: "license_key"vànulllicense_keycho đến khi bạn fulfillment grant. - Đối với các grant OAuth, hiển thị
oauth_urlcho customer. Evententitlement_grant.createdcho flow subscriber của Discord, GitHub hoặc Notion chứaoauth_urlvàoauth_expires_at. Gửi URL đó qua email cho customer hoặc hiển thị trong app của bạn để hoàn tất delivery.
Detailed view of a single entitlement grant: who it's for, its lifecycle state, and any integration-specific delivery payload.
Brand id this grant belongs to.
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.
The integration type of the grant's entitlement (e.g. license_key).
discord, telegram, github, figma, framer, notion, digital_files, license_key, feature_flag 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.
Typed feature payload, present only when the entitlement integration is
feature_flag; null for every other integration type.
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.