Octroi de droits
La charge utile envoyée à votre point de terminaison webhook lorsqu’un octroi de droits est créé, livré, échoue, ou est révoqué.
Événements Webhook d’Octroi de Droits
Ces événements se déclenchent chaque fois que l’état de l’octroi de droits d’un client change, par exemple lorsqu’une clé de licence est générée, un rôle Discord est attribué, un lien de téléchargement est provisionné, ou l’accès est révoqué. Abonnez-vous à ces événements pour garder votre application synchronisée avec ce à quoi chaque client peut accéder.EntitlementGrantResponse documentée dans le schéma ci-dessous.
Déclencheurs d’Événements
entitlement_grant.created
Une ligne d’octroi vient d’être insérée. L’octroi a toujours uneid stable à partir de ce moment, même si son statut change. Utilisez cet événement pour enregistrer que l’exécution est en cours.
Pour les clés de licence traitées automatiquement, la ligne est insérée directement avec status: "Delivered" et delivered_at renseignés. Ainsi, un unique événement created est suivi d’aucune autre modification d’état, sauf si le grant est révoqué ultérieurement.
Pour les clés de licence traitées manuellement (entitlements avec fulfillment_mode: manual), la ligne arrive avec status: "Pending" et sans objet license_key — aucune clé n’est encore disponible. Cet événement vous indique qu’une clé attend d’être traitée ; fournissez-la via POST /grants/{grant_id}/license-key, ce qui déclenche ensuite entitlement_grant.delivered. Consultez Traitement manuel.
Pour toutes les autres intégrations, la ligne arrive avec status: "Pending". Un événement delivered ou failed suit une fois la livraison terminée :
- Intégrations basées sur OAuth (Discord, GitHub, Notion) incluent un
oauth_urlque le client doit consulter pour terminer son consentement. Le grant restePendingjusqu’à l’autorisation du client. - Intégrations directes à la plateforme (Telegram, Framer, Digital Files) restent brièvement dans
Pendingpendant l’exécution de l’appel à la plateforme, puis passent àDelivered.
entitlement_grant.delivered
Le grant est passé dePending à Delivered. Le client dispose désormais de l’accès décrit par l’entitlement. Utilisez cet événement pour déverrouiller les fonctionnalités dépendantes dans vos propres systèmes, par exemple pour provisionner un espace de travail, envoyer un e-mail de bienvenue personnalisé ou marquer un indicateur “fulfilled”.
Le champ delivered_at du payload indique quand la livraison s’est terminée. Pour les grants arrivés à l’état Delivered dès leur création, vous recevrez les événements created et delivered consécutivement.
entitlement_grant.failed
La livraison a été tentée et a échoué avec une erreur non réessayer. Les champserror_code et error_message expliquent l’échec. Les causes courantes incluent un token OAuth révoqué, une permission de plateforme refusée, ou une cible manquante (par exemple, un serveur Discord supprimé).
entitlement_grant.revoked
L’accès a été retiré au niveau de la plateforme : rôle Discord supprimé, collaborateur GitHub supprimé, clé de licence désactivée, URL de téléchargement de fichiers non émises. Le champrevocation_reason enregistre le déclencheur.
Variantes de charge utile
Le champdata est toujours un objet EntitlementGrantResponse. Le payload contient un champ integration_type (par exemple license_key, digital_files, discord), afin que vous puissiez reconnaître directement le type de grant. Trois types d’intégration ajoutent également des objets imbriqués supplémentaires :
license_keyest inclus lorsqueintegration_typevautlicense_keyet qu’une clé a été émise. Il contient la clé générée, sa date d’expiration et les informations d’utilisation pour son activation. Pour un grant traité manuellement qui se trouve encore dansPending, cet objet vautnulljusqu’à ce que vous traitiez le grant.digital_product_deliveryest inclus lorsqueintegration_typevautdigital_files. Il contient des URL de téléchargement présignées, le champ facultatifinstructionset le champ facultatifexternal_url.featureest inclus lorsqueintegration_typevautfeature_flag. Il contientfeature_typeetfeature_idde la capacité accordée par le grant.
null ; la configuration pertinente est enregistrée dans l’entitlement lui-même, et non dans le grant.
Charges utiles d’exemple
Clé de licence délivrée (entitlement_grant.delivered)
Clé de licence en attente de réalisation manuelle (entitlement_grant.created)
Déclenché lorsqu’un client achète un produit dont l’entitlement License Key utilise fulfillment_mode: manual. Le grant est Pending et ne contient encore aucun objet license_key — le marchand doit fournir la clé.
Fichiers numériques délivrés (entitlement_grant.delivered)
Rôle Discord créé et en attente (entitlement_grant.created)
Subvention révoquée lors de l’annulation d’un abonnement (entitlement_grant.revoked)
Livraison échouée (entitlement_grant.failed)
Conseils d’intégration
- Attendez
entitlement_grant.deliveredavant de déverrouiller les fonctionnalités dépendantes. Un événementpayment.succeededvous indique que le paiement a été confirmé ; il ne signifie pas que le client dispose déjà du dépôt GitHub ou du rôle Discord. L’événementdeliveredfait foi pour le traitement. - Associez
revocation_reasonaux flux de rétention. Une révocationsubscription_on_holdsignifie généralement que la carte du client a échoué et que le prochain renouvellement rétablira l’accès. Une révocationmanualousubscription_cancelledest intentionnelle. Traitez-les différemment dans vos communications avec les clients. - Utilisez
iddu grant comme clé d’idempotence. Un même grant émet au maximum un événementcreatedet au maximum un événement terminal (deliveredoufailed), ainsi qu’au maximum un événementrevoked. Les nouvelles livraisons du système de webhook peuvent répéter les événements ; dédupliquez-les aveciddu grant ettype. - Lisez
integration_typepour reconnaître le type de grant. Le payload contient directementintegration_type(par exemplelicense_key,digital_files,discord). Les objets imbriquéslicense_keyetdigital_product_deliverysont renseignés une fois leurs grants respectifs livrés ; un grant de clé de licence traité manuellement restePendingavecintegration_type: "license_key"et unnulllicense_keyjusqu’à ce que vous le traitiez. - Pour les grants OAuth, présentez
oauth_urlau client. L’événemententitlement_grant.createdpour les flux d’abonnement Discord, GitHub ou Notion inclutoauth_urletoauth_expires_at. Envoyez-le par e-mail au client ou affichez-le dans votre application pour débloquer la livraison.
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.