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.| Event | Description |
|---|---|
entitlement_grant.created | Une nouvelle ligne de subvention a été créée. Le statut est delivered immédiatement pour les clés de licence auto-remplies, et pending pour les clés de licence remplies manuellement et chaque autre intégration. |
entitlement_grant.delivered | La subvention passe au statut livré. Le client a maintenant accès à la plateforme, au fichier ou à la clé de licence attribués. |
entitlement_grant.failed | La livraison a échoué et ne sera pas retentée. Inspectez error_code et error_message. |
entitlement_grant.revoked | L’accès a été retiré. Inspectez revocation_reason pour comprendre pourquoi. |
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 auto-remplies, la ligne est insérée directement avec status: "delivered" et delivered_at remplis, donc un seul événement created est suivi de aucun autre changement d’état à moins que la subvention ne soit révoquée plus tard.
Pour les clés de licence remplies manuellement (droits avec fulfillment_mode: manual), la ligne arrive avec status: "pending" et aucun objet license_key — il n’y a pas encore de clé. Cet événement est votre signal qu’une clé attend l’exécution ; fournissez-la via POST /grants/{grant_id}/license-key, qui déclenche alors entitlement_grant.delivered. Voir Exécution manuelle.
Pour toute autre intégration, 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 visiter pour compléter son consentement. La subvention restependingjusqu’à ce que le client autorise. - Intégrations directes à la plateforme (Telegram, Framer, Fichiers numériques) restent dans
pendingseulement brièvement pendant que l’appel de la plateforme s’exécute, puis passent àdelivered.
entitlement_grant.delivered
La subvention est passée depending à delivered. Le client a maintenant l’accès décrit par le droit. Utilisez cet événement pour débloquer des 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 “rempli”.
Le champ delivered_at de la charge utile capture le moment où la livraison a été accomplie. Pour les subventions qui arrivent delivered à la 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.
revocation_reason | Déclencheur |
|---|---|
subscription_cancelled | L’abonnement du client a été annulé (événement subscription.cancelled). |
subscription_on_hold | L’abonnement est en attente en raison d’un renouvellement échoué (subscription.on_hold). Récupérable : une tentative réussie produit une nouvelle subvention. |
subscription_expired | L’abonnement a atteint la fin de sa durée (subscription.expired). |
plan_changed | Le plan a changé ; les anciennes subventions sont révoquées avant que de nouvelles ne soient émises (subscription.plan_changed). |
refund | Un remboursement a été traité pour le paiement initial unique (refund.succeeded). |
manual | Un marchand a révoqué la subvention via l’API ou le tableau de bord. Les révocations manuelles ne sont pas auto-attribuées lors du renouvellement de l’abonnement. |
license_key_disabled | La clé de licence derrière une subvention de clé de licence a été désactivée. La subvention est réactivée automatiquement si la clé est réactivée. |
platform_external | Le côté plateforme d’une intégration s’est désynchronisé (par exemple, un rôle Discord supprimé manuellement, l’application GitHub a perdu l’accès au dépôt, ou un relevé de comptes a détecté une cible manquante). La subvention n’est pas automatiquement réattribuée lors du renouvellement de l’abonnement jusqu’à ce que le problème de la plateforme sous-jacente soit résolu. |
Variantes de charge utile
Le champdata est toujours un objet EntitlementGrantResponse. La charge utile transporte un champ integration_type (par exemple license_key, digital_files, discord) pour que vous puissiez reconnaître directement le type de subvention. Deux types d’intégration attachent également des objets imbriqués supplémentaires :
license_keyest inclus lorsqueintegration_typeestlicense_keyet qu’une clé a été émise. Il contient la clé générée, l’expiration et l’utilisation d’activation. Pour une subvention remplie manuellement toujours danspending, cet objet estnulljusqu’à ce que vous remplissiez la subvention.digital_product_deliveryest inclus lorsqueintegration_typeestdigital_files. Il contient des URL de téléchargement présignées, leinstructionsoptionnel, et leexternal_urloptionnel.
null ; la configuration pertinente est capturée dans le droit lui-même, pas dans la subvention.
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é lorsque qu’un client achète un produit dont le droit de clé de licence utilise fulfillment_mode: manual. La subvention est pending sans objet license_key pour l’instant — 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ébloquer des fonctionnalités dépendantes. Un événementpayment.succeededvous indique que l’argent a été reçu ; il ne vous dit pas que le client a le dépôt GitHub ou le rôle Discord. L’événementdeliveredest la source de vérité pour l’exécution. - Mappez
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éattribuera l’accès. Une révocationmanualousubscription_cancelledest intentionnelle. Traitez-les différemment dans la communication avec le client. - Utilisez la subvention
idcomme votre clé d’idempotence. Une seule subvention émet au plus un événementcreatedet au plus un événement terminal (deliveredoufailed), et au plus un événementrevoked. Les re-livraisons du système webhook peuvent répéter les événements ; dédupliquez sur la subventionidplustype. - Lisez
integration_typepour reconnaître le type de subvention. La charge utile transporteintegration_typedirectement (par exemplelicense_key,digital_files,discord). Les objets imbriquéslicense_keyetdigital_product_deliverysont remplis une fois que leurs subventions respectives sont livrées ; une subvention de clé de licence remplie manuellement restependingavecintegration_type: "license_key"et unenulllicense_keyjusqu’à ce que vous l’exécutiez. - Pour les subventions basées sur OAuth, présentez
oauth_urlau client. L’événemententitlement_grant.createdpour les flux d’abonnés Discord, GitHub, ou Notion inclut unoauth_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 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.