Un droit de fonction de fonctionnalité transforme Dodo Payments en un magasin de fonctions de fonctionnalité conscient de la facturation. Attachez une fonction comme
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, la concession est créée et passe directement à
delivered. Il n’y a pas de phasepending, pas d’action du client, et pas de moyen pour que la livraison échoue. - La concession transporte une charge utile typée
feature:{ "feature_type": "boolean", "feature_id": "advanced_reports" }. Votre application litfeature_idpour décider ce qu’il faut débloquer. - L’annulation, le remboursement ou la révocation manuelle déplace la concession vers
revoked, et votre application voit la fonction disparaître.
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
Dans votre tableau de bord Dodo Payments, allez à Droits et cliquez sur + pour commencer un nouveau droit, puis choisissez Fonctions de Fonctionnalité.
Name the flag
Donnez à la fonction un Nom d’Affichage pour votre tableau de bord, un ID de Fonctionnalité que votre application vérifiera (le tableau de bord en suggère un à partir du nom), et une Description pour que votre équipe sache ce qu’elle contrôle.

Optionally add metadata
Basculez Meta Data pour attacher une configuration clé-valeur — limites, noms de niveaux, quotas — qui est livrée à votre application en même temps que la fonction. Voir Attacher des limites avec des métadonnées.
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é.

Configuration requise
| Champ | Requis | Description |
|---|---|---|
feature_id | Oui | Identifiant que votre application vérifie, par exemple advanced_reports. Non unique à travers les droits. |
feature_type | Oui | Type de capacité conférée. Seul boolean est pris en charge aujourd’hui. |
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.
La charge utile
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 concessions de fonctions de fonctionnalité suivent le cycle de vie des concessions standard avec une simplification : il n’y a pas d’étape de livraison, donc les concessions ne se retrouvent jamais danspending et ne passent jamais à failed.
| Déclencheur | Effet |
|---|---|
| Paiement unique réussi / abonnement devient actif | Concession créée avec status: delivered et delivered_at définis. |
| Abonnement mis en attente, annulé ou expiré | Concession révoquée avec le correspondant revocation_reason. |
| Remboursement sur un paiement unique | Concession révoquée avec revocation_reason: refund. |
| Abonnement récupéré (par exemple, relance réussie) | La concession révoquée est restaurée à delivered — même concession id, champs de révocation effacés. |
| Révocation manuelle via API | Concession révoquée avec revocation_reason: manual. Pas de restauration automatique lors du renouvellement. |
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 la charge utilefeature. Activez la fonctionnalité.entitlement_grant.delivered— s’exécute lorsqu’une concession précédemment révoquée est restaurée. Réactivez la fonctionnalité.entitlement_grant.revoked— accès retiré. Désactivez la fonctionnalité et vérifiezrevocation_reasonpour décider de votre messagerie.
TypeScript
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 la fonction.
feature_id: advanced_reportswith metadata{ "tier": "pro", "monthly_report_limit": 100 }. - Attachez-la à votre produit d’abonnement Pro Plan.
- Un client s’abonne. Dodo Payments crée une concession
deliveredet déclencheentitlement_grant.created; votre gestionnaire de webhook activeadvanced_reportspour le client avec une limite de 100. - Votre application contrôle la fonctionnalité. Lors du chargement du tableau de bord, vérifiez l’ensemble des fonctionnalités en cache (ou appelez
listEntitlementGrants) et affichez l’onglet des rapports uniquement lorsqueadvanced_reportsest présent. - Le client annule. Dodo Payments révoque la concession et déclenche
entitlement_grant.revoked; votre gestionnaire désactive la fonctionnalité. Si le client récupère plus tard via la relance,entitlement_grant.deliveredla rétablit — aucun changement de code n’est nécessaire.
Meilleures pratiques
- Utilisez des ids de fonctionnalité stables en snake_case. Votre code d’application vérifie ces chaînes ; en renommer une est un changement de rupture des deux côtés.
- Une fonction par capacité. Préférez
advanced_reports+api_accessen tant que deux droits plutôt qu’une seulepro_bundle— les révocations et les mélanges de plans restent propres. - Gérez l’état à partir des webhooks, vérifiez avec l’API. Les webhooks maintiennent votre base de données à jour ; le point de terminaison de la liste est la source de vérité pour les tâches de réconciliation et les ratés de cache.
- Traitez
revokedcomme immédiat. Une fonction révoquée signifie que le client ne paie plus pour la fonctionnalité. Vérifiez à la prochaine requête, pas à la prochaine session. - Placez les limites dans les métadonnées, pas dans le code. Changer un quota ne nécessite alors que de modifier le droit — les nouveaux clients le récupèrent automatiquement tandis que les concessions existantes conservent leur instantané acheté.
