Skip to main content

É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. Les quatre événements partagent la même charge utile 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 une id 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_url que le client doit consulter pour terminer son consentement. Le grant reste Pending jusqu’à l’autorisation du client.
  • Intégrations directes à la plateforme (Telegram, Framer, Digital Files) restent brièvement dans Pending pendant l’exécution de l’appel à la plateforme, puis passent à Delivered.

entitlement_grant.delivered

Le grant est passé de Pending à 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 champs error_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é).
Traitez entitlement_grant.failed comme une action à entreprendre. Le client a payé mais n’a pas obtenu d’accès. Signalez les échecs à votre équipe de support ou déclenchez une nouvelle subvention une fois que le problème sous-jacent est résolu.

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 champ revocation_reason enregistre le déclencheur.

Variantes de charge utile

Le champ data 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_key est inclus lorsque integration_type vaut license_key et 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 dans Pending, cet objet vaut null jusqu’à ce que vous traitiez le grant.
  • digital_product_delivery est inclus lorsque integration_type vaut digital_files. Il contient des URL de téléchargement présignées, le champ facultatif instructions et le champ facultatif external_url.
  • feature est inclus lorsque integration_type vaut feature_flag. Il contient feature_type et feature_id de la capacité accordée par le grant.
Pour tous les autres types d’intégration (Discord, GitHub, Telegram, Figma, Framer, Notion), ces champs imbriqués valent 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.delivered avant de déverrouiller les fonctionnalités dépendantes. Un événement payment.succeeded vous 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énement delivered fait foi pour le traitement.
  • Associez revocation_reason aux flux de rétention. Une révocation subscription_on_hold signifie généralement que la carte du client a échoué et que le prochain renouvellement rétablira l’accès. Une révocation manual ou subscription_cancelled est intentionnelle. Traitez-les différemment dans vos communications avec les clients.
  • Utilisez id du grant comme clé d’idempotence. Un même grant émet au maximum un événement created et au maximum un événement terminal (delivered ou failed), ainsi qu’au maximum un événement revoked. Les nouvelles livraisons du système de webhook peuvent répéter les événements ; dédupliquez-les avec id du grant et type.
  • Lisez integration_type pour reconnaître le type de grant. Le payload contient directement integration_type (par exemple license_key, digital_files, discord). Les objets imbriqués license_key et digital_product_delivery sont renseignés une fois leurs grants respectifs livrés ; un grant de clé de licence traité manuellement reste Pending avec integration_type: "license_key" et un null license_key jusqu’à ce que vous le traitiez.
  • Pour les grants OAuth, présentez oauth_url au client. L’événement entitlement_grant.created pour les flux d’abonnement Discord, GitHub ou Notion inclut oauth_url et oauth_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
string
requis

Brand id this grant belongs to.

business_id
string
requis

Identifier of the business that owns the grant.

created_at
string<date-time>
requis

Timestamp when the grant was created.

customer_id
string
requis

Identifier of the customer the grant was issued to.

entitlement_id
string
requis

Identifier of the entitlement this grant was issued from.

id
string
requis

Unique identifier of the grant.

integration_type
enum<string>
requis

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

Options disponibles:
discord,
telegram,
github,
figma,
framer,
notion,
digital_files,
license_key,
feature_flag
metadata
Metadata · object
requis

Arbitrary key-value metadata recorded on the grant.

status
enum<string>
requis

Lifecycle status of the grant.

Options disponibles:
Pending,
Delivered,
Failed,
Revoked
updated_at
string<date-time>
requis

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.

Dernière modification le 21 août 2026