advanced_reports à un produit, et chaque client payant obtiendra une concession que votre application peut vérifier via API ou synchroniser avec des webhooks. Pas de plateforme externe, pas d’OAuth, pas d’étape de livraison — la concession elle-même est la capacité.Ce qui est livré
Rien ne quitte Dodo Payments — la concession est le livrable :- Lors de l’achat, le grant est créé et passe directement à
Delivered. Il n’y a aucune phasePending, aucune action du client et aucun risque d’échec de la livraison. - Le grant contient un payload
featuretypé :{ "feature_type": "boolean", "feature_id": "advanced_reports" }. Votre application litfeature_idpour déterminer ce qu’il faut débloquer. - Une annulation, un remboursement ou une révocation manuelle fait passer le grant à
Revoked, et votre application constate la disparition du flag.
feature_id est un identifiant choisi par le commerçant, non unique à travers les droits. Deux droits peuvent conférer la même feature_id — par exemple, un plan Pro mensuel et annuel accordant tous deux advanced_reports.Créer une fonction de fonctionnalité
Open Entitlements
Name the flag

Creating a feature flag. The Feature ID is what your application checks; Meta Data attaches limits alongside the flag.
Optionally add metadata
Confirm

The created feature flag. The right pane tracks every customer grant issued from it.
Attacher à un produit
Ouvrez un produit (ou créez-en un), trouvez la carte Droits, et cliquez sur + pour attacher des droits existants. Sélectionnez votre fonction de fonctionnalité et cliquez sur Terminé.
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
Attacher des limites avec des métadonnées
Une fonction booléenne répond à la question “ce client a-t-il la fonctionnalité ?”. Les métadonnées répondent “avec quelle configuration ?”. Les métadonnées de droits acceptent les valeurs de type chaîne, entier, nombre et booléen, et chaque concession prend un instantané figé des métadonnées du droit au moment de sa création. Ce comportement d’instantané est ce qui rend les métadonnées sûres à utiliser pour les limites de plan :- Modifier ultérieurement les métadonnées du droit n’affecte que les futures concessions. Les clients conservent les limites avec lesquelles ils ont acheté.
- L’instantané est renvoyé sur chaque concession sous son champ
metadata, donc un appel API vous donne à la fois la fonction et sa configuration.
advanced_reports avec { "tier": "pro", "monthly_report_limit": 100 } permet à votre application de débloquer le tableau de bord et d’appliquer le quota de 100 rapports sans une deuxième recherche. Si vous augmentez plus tard la limite à 250, les clients existants restent à 100 jusqu’à ce qu’ils reçoivent une nouvelle concession (par exemple, après un changement de plan).
Vérifier les fonctionnalités d’un client
Répertoriez les concessions de fonctions de fonctionnalité livrées à un client et construisez l’ensemble des fonctionnalités activées. Le point de terminaison retourne une ligne par concession à travers tous les droits, filtrable parintegration_type et status.
feature est remplie uniquement sur feature_flag concessions; elle est null pour chaque autre type d’intégration. Voir la référence API Lister les concessions du client pour la structure de réponse complète.Cycle de vie
Les grants de feature flag suivent le cycle de vie standard des grants, 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
Abonnez-vous aux événementsentitlement_grant.* pour refléter les fonctions dans votre propre base de données au lieu de les interroger :
entitlement_grant.created— arrive déjà àDeliveredavec le payloadfeature. Activez la fonctionnalité.entitlement_grant.delivered— se déclenche lorsqu’un grant précédemment révoqué est restauré. Réactivez la fonctionnalité.entitlement_grant.revoked— accès retiré. Désactivez la fonctionnalité et vérifiezrevocation_reasonpour déterminer le message à afficher.
entitlement_grant.failed pour les fonctions de fonctionnalité — la livraison se fait entièrement à l’intérieur de Dodo Payments et ne peut pas échouer.
Exemple : Pro plan débloque les rapports avancés
- Créez le flag.
feature_id: advanced_reportsavec les métadonnées{ "tier": "pro", "monthly_report_limit": 100 }. - Associez-le au 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 dashboard, vérifiez l’ensemble de fonctionnalités mis en cache (ou appelez
listEntitlementGrants) et affichez l’onglet des rapports uniquement lorsqueadvanced_reportsest présent. - Le client annule son abonnement. Dodo Payments révoque le grant et déclenche
entitlement_grant.revoked; votre gestionnaire désactive la fonctionnalité. Si le client rétablit ensuite son abonnement grâce au recouvrement,entitlement_grant.deliveredla restaure — aucune modification du code n’est nécessaire.
Meilleures pratiques
- Utilisez des identifiants de feature stables en snake_case. Le code de votre application vérifie ces chaînes ; renommer l’une d’elles constitue une modification incompatible des deux côtés.
- Un flag par capacité. Préférez
advanced_reports+api_accesscomme deux entitlements plutôt qu’un seulpro_bundle— les révocations et les combinaisons de plans restent ainsi propres. - Faites évoluer l’état à partir des 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 réconciliation 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 à la prochaine requête, pas à la prochaine session. - Placez les limites dans les métadonnées, pas dans le code. Modifier un quota nécessite alors uniquement de modifier l’entitlement — les nouveaux clients l’utilisent automatiquement, tandis que les grants existants conservent leur snapshot acheté.