advanced_reports à un produit, et chaque client payant reçoit un grant que votre application vérifie via l’API ou synchronise avec les webhooks. Aucune plateforme externe, étape OAuth ou étape de livraison n’est nécessaire : le grant lui-même constitue la capacité.Ce qui est fourni
Rien ne sort de Dodo Payments. Le grant est le livrable :- Lors de l’achat, Dodo Payments crée directement le grant dans
Delivered. Il n’entre jamais dansPending, ne nécessite aucune action du client et ne comporte aucune étape de livraison susceptible d’échouer. - Le grant contient un payload
featuretypé :{ "feature_type": "boolean", "feature_id": "advanced_reports" }. Votre application litfeature_idpour décider quoi déverrouiller. - Une annulation, un remboursement ou une révocation manuelle fait passer le grant à
Revoked, et le flag disparaît des grants fournis au client.
feature_id est un identifiant que vous choisissez et qui n’est pas unique parmi les droits. Deux droits peuvent conférer le même feature_id, par exemple un forfait Pro mensuel et annuel qui accordent tous deux advanced_reports.Créer un feature flag
Open Entitlements
Name the Flag
api_access), et vous pouvez le modifier. Il ne peut pas contenir d’espaces.
Creating a feature flag. The Feature ID is what your application checks; Meta Data attaches limits alongside the flag.
Add Metadata (Optional)
Confirm

The created feature flag. The right pane tracks every customer grant issued from it.
Associer à un produit
Ouvrez un produit ou créez-en un, puis recherchez la carte Entitlements. Cliquez sur + pour associer des droits existants, sélectionnez votre feature flag et cliquez sur Done.
Attaching the feature flag to a product. One product can deliver multiple entitlements.

The product now includes the feature flag. Every successful purchase or active subscription grants it.
Configuration requise
Créer via API
Associer des limites avec des métadonnées
Un flag booléen répond à la question « Ce client dispose-t-il de cette fonctionnalité ? ». Les métadonnées répondent à la question « Avec quelle configuration ? ». Les métadonnées des droits acceptent les valeurs de type chaîne, entier, nombre et booléen. Chaque grant prend un instantané figé des métadonnées du droit lors de sa création. L’instantané rend les métadonnées sûres pour gérer les limites des forfaits :- Modifier ultérieurement les métadonnées du droit n’affecte que les grants futurs. Les clients conservent les limites correspondant à leur achat.
- Chaque grant renvoie son instantané dans son champ
metadata, de sorte qu’un seul appel API vous fournit à la fois le flag et sa configuration.
advanced_reports avec { "tier": "pro", "monthly_report_limit": 100 } permet à votre application de déverrouiller le tableau de bord et d’appliquer le quota de 100 rapports sans seconde recherche. Si vous augmentez ensuite la limite à 250, les clients existants restent à 100 jusqu’à ce qu’ils reçoivent un nouveau grant, par exemple après un changement de forfait.
Vérifier les fonctionnalités d’un client
Pour constituer l’ensemble des fonctionnalités dont dispose un client, listez ses grants de feature flags fournis. L’endpoint renvoie une ligne par grant pour l’ensemble des droits, et vous pouvez le filtrer parintegration_type et status. Ces exemples utilisent client de Créer via l’API.
feature est renseigné uniquement pour les grants feature_flag. Il vaut null pour tous les autres types d’intégration. Consultez la référence API List Customer Grants pour connaître la structure complète de la réponse.Cycle de vie
Les grants de feature flags suivent le cycle de vie standard d’un grant, avec une simplification : il n’y a pas d’étape de livraison. Les grants ne restent donc jamais dansPending et ne passent jamais à Failed.
Webhooks
Pour répliquer les flags dans votre propre base de données plutôt que d’effectuer des interrogations périodiques, abonnez-vous aux événementsentitlement_grant.* :
entitlement_grant.createdarrive déjàDelivered, avec le payloadfeature. Activez la fonctionnalité.entitlement_grant.deliveredest déclenché lorsqu’un grant précédemment révoqué est restauré. Activez à nouveau la fonctionnalité.entitlement_grant.revokedsignifie que l’accès a été retiré. Désactivez la fonctionnalité et vérifiezrevocation_reasonpour choisir votre message.
entitlement_grant.failed, car la livraison s’effectue entièrement dans Dodo Payments.
Exemple : le forfait Pro déverrouille les rapports avancés
- Créez le flag. Définissez
feature_id: advanced_reportsavec les métadonnées{ "tier": "pro", "monthly_report_limit": 100 }. - Associez-le à votre produit d’abonnement Pro Plan.
- Un client s’abonne. Dodo Payments crée un grant
Deliveredet déclencheentitlement_grant.created. Votre gestionnaire de webhook activeadvanced_reportspour le client avec une limite de 100. - Votre application contrôle l’accès à la fonctionnalité. Lors du chargement du tableau de bord, vérifiez l’ensemble des fonctionnalités mis en cache (ou appelez
listEntitlementGrants) et affichez l’onglet des rapports uniquement lorsqueadvanced_reportsest présent. - Le client annule. Dodo Payments révoque le grant et déclenche
entitlement_grant.revoked; votre gestionnaire désactive alors la fonctionnalité. Si un abonnement est ensuite rétabli grâce au recouvrement,entitlement_grant.deliveredrestaure la fonctionnalité sans modification du code.
Bonnes pratiques
- Utilisez des Feature IDs stables dans
snake_case. Le code de votre application vérifie ces chaînes ; en renommer une constitue donc une modification incompatible des deux côtés. - Utilisez un flag par capacité. Préférez
advanced_reportsetapi_accesscomme deux droits plutôt qu’un seulpro_bundle, afin que les révocations et les combinaisons de forfaits restent simples. - Pilotez l’état depuis les webhooks et vérifiez-le avec l’API. Les webhooks maintiennent votre base de données à jour. L’endpoint de liste est la source de vérité pour les tâches de rapprochement et les absences du cache.
- Traitez
Revokedcomme immédiat. Un flag révoqué signifie que le client ne paie plus pour la fonctionnalité. Contrôlez l’accès dès la requête suivante, et non à la session suivante. - Placez les limites dans les métadonnées, pas dans le code. Pour modifier un quota, il suffit alors de modifier le droit. Les nouveaux clients obtiennent la nouvelle valeur et les grants existants conservent l’instantané acheté.