Passer au contenu principal

Documentation Index

Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt

Use this file to discover all available pages before exploring further.

Les droits transforment un paiement réussi ou un abonnement actif en accès réel : une clé de licence dans la boîte de réception de votre client, un rôle Discord, un dépôt GitHub, un modèle Notion, un lien de remix Framer, une invitation à une discussion Telegram ou un ensemble de fichiers téléchargeables. Dodo Payments émet, suit et révoque cet accès automatiquement selon l’évolution du cycle de paiement.
Tableau de bord des droits avec une liste de droits à gauche et une activité de concession à droite

Qu’est-ce que les Droits ?

Un droit est une définition réutilisable de quelque chose que vous livrez à un client : une clé de licence Pro, un rôle Discord “Patrons”, l’accès à votre dépôt GitHub privé, un lot d’e-books téléchargeables. Vous attachez des droits à des produits, et Dodo Payments s’occupe du reste. Lorsqu’un client achète le produit, Dodo Payments crée une concession, une émission unique de ce droit à un client. Les concessions passent par un petit ensemble de statuts : pending pendant que la livraison est en cours, delivered une fois que le client a accès, failed si la livraison n’a pas pu être complétée, et revoked lorsque l’accès est retiré.
Les droits contrôlent l’accomplissement (le client a-t-il accès ?). Les crédits contrôlent la consommation (combien peuvent-ils utiliser ?). Les deux peuvent être attachés au même produit. Voir Facturation par crédit pour les crédits.

Intégrations Disponibles

Dodo Payments livre chaque droit via une intégration dédiée. Choisissez l’intégration qui correspond à ce que vous vendez.

License Keys

Générez des clés de licence uniques avec des limites d’activation et d’expiration. Idéal pour les logiciels, les plugins et les CLIs.

Digital Files

Distribuez des fichiers téléchargeables (e-books, modèles, médias) avec des URLs de téléchargement présignées et des instructions optionnelles.

Discord

Accordez un rôle à un client sur votre serveur Discord lors de l’achat. Révoquez automatiquement en cas d’annulation.

GitHub

Ajoutez des clients en tant que collaborateurs à un dépôt privé au niveau d’autorisation que vous choisissez.

Telegram

Ajoutez des clients à une discussion ou un canal privé Telegram après l’achat.

Framer

Déverrouillez un lien de remix de modèle Framer pour les clients payants.

Notion

Dupliquez un modèle Notion dans l’espace de travail du client à l’achat.

Comment Fonctionnent les Concessions

Les concessions sont pilotées par les mêmes événements de paiement et d’abonnement que vous recevez déjà sous forme de webhooks. Vous n’avez pas besoin d’appeler l’API de concession vous-même pour les achats. Dodo Payments crée et révoque les concessions automatiquement selon le cycle de paiement sous-jacent.

Cycle de Vie des Concessions

1

Created

Une concession est créée lorsqu’un paiement est complété ou qu’un abonnement devient actif. Les clés de licence passent directement à delivered. Chaque autre intégration démarre en pending. Les intégrations basées sur OAuth (Discord, GitHub, Notion) incluent une oauth_url que le client doit visiter pour terminer le consentement. Les intégrations directes à la plateforme (Telegram, Framer, Fichiers Numériques) restent en pending seulement brièvement pendant que la livraison est provisionnée, puis passent à delivered.
2

Delivered

Une fois la livraison terminée (clé de licence générée, rôle assigné, accès au dépôt accordé, liens de fichiers résolus, OAuth complété), la concession passe à delivered et delivered_at est définie.
3

Failed

Si l’appel d’intégration retourne une erreur non réessayable (jeton OAuth révoqué, permission refusée, fichier n’existe plus), la concession passe à failed. Les champs error_code et error_message capturent la raison.
4

Revoked

Lorsque l’accès est retiré (abonnement annulé, remboursement émis, ou révocation initiée par le marchand), la concession passe à revoked. Le champ revocation_reason enregistre le déclencheur.

Comportement des Concessions par Événement

ÉvénementComportement
payment.succeeded (paiement unique)Émettre une concession par droit attaché.
payment.succeeded (paiement lié à l’abonnement)Aucun. Les concessions sont pilotées par l’événement d’abonnement ci-dessous.
subscription.activeÉmettre des concessions pour tous les droits attachés qui n’en ont pas déjà. Rénovation de toute concession précédemment révoquée pour le même abonnement.
subscription.renewedAucun. Les concessions existantes persistent à travers les renouvellements.
subscription.on_holdRévoquer toutes les concessions délivrées et en attente. revocation_reason: subscription_on_hold.
subscription.cancelledRévoquer toutes. revocation_reason: subscription_cancelled.
subscription.expiredRévoquer toutes. revocation_reason: subscription_expired.
subscription.plan_changedRévoquer toutes les concessions actuelles, puis émettre des concessions pour les droits du nouveau plan. revocation_reason: plan_changed.
refund.succeeded (paiement unique)Révoquer les concessions pour ce paiement. revocation_reason: refund.
Révocation API manuelleRévoquer avec revocation_reason: manual. Les révocations manuelles ne sont pas automatiquement réaccordées lors du renouvellement de l’abonnement.
Clé de licence désactivéePour les concessions de clé de licence, désactiver la clé sous-jacente révoque la concession avec revocation_reason: license_key_disabled. La concession est ré-activée automatiquement si la clé est réactivée.
Dérive de la plateforme détectéeSi le côté plateforme d’une intégration se désynchronise (un rôle Discord supprimé manuellement, l’application GitHub perdant l’accès au dépôt, ou un passage de réconciliation détectant une cible manquante), la concession est révoquée avec revocation_reason: platform_external. Non automatiquement réaccordée sur le renouvellement de l’abonnement tant que le problème de plateforme sous-jacent n’est pas résolu.
Les concessions pilotées par l’abonnement sont idempotentes par (entitlement, customer, subscription) ; les renouvellements et réactivations ne créent pas de concessions en double. Les concessions non récurrentes sont idempotentes par (entitlement, customer, payment).

Créez votre premier droit

1

Open Entitlements

Accédez à Droits dans votre tableau de bord Dodo Payments et cliquez sur + pour créer un nouveau droit.
2

Pick an integration

Choisissez le type d’intégration: Clé de Licence, Fichiers Numériques, Discord, GitHub, Telegram, Framer, ou Notion. Pour les intégrations de plateforme, connectez d’abord votre compte si ce n’est déjà fait.
3

Configure delivery

Remplissez les champs spécifiques à l’intégration. Par exemple, GitHub demande un dépôt et un niveau d’autorisation ; Discord demande un serveur et un rôle optionnel ; Clé de Licence demande des limites d’activation et une expiration.
Nouveau formulaire de droit avec sélecteur d'intégration et champs de configuration
4

Save

Enregistrez le droit. Vous pouvez maintenant l’attacher à n’importe quel produit.

Attacher des Droits aux Produits

Ouvrez un produit, développez Paramètres Avancés → Droits & Crédits, et sélectionnez les droits qui doivent être livrés lorsque le produit est acheté. Un seul produit peut livrer plusieurs droits à la fois. Par exemple, un plan Pro peut inclure une clé de licence, un accès GitHub, et un rôle Discord.
Panneau de sélection de droit de produit montrant les cases à cocher pour chaque droit disponible

Expérience Client

Email et portail client

Les clients reçoivent un email de livraison après l’achat contenant la clé de licence, les liens de téléchargement, les liens d’invitation OAuth, ou l’invitation à la plateforme, selon les droits sur le produit. Les mêmes détails restent disponibles indéfiniment depuis le Portail Clients sous leur historique de commandes.

Livraison basée sur OAuth

L’accès des abonnés Discord, GitHub, et Notion nécessite que le client autorise Dodo Payments à leur accorder l’accès. Ces concessions restent en statut pending jusqu’à ce que le client complète le flux OAuth en utilisant le lien de leur email ou portail client. Une fois autorisé, la concession passe à delivered et l’accès à la plateforme est immédiatement provisionné.

Révocation

Les concessions révoquées sont supprimées au niveau de la plateforme : le rôle Discord est supprimé, le collaborateur GitHub est supprimé, la clé de licence est désactivée. Les clients voient le changement reflété dans le portail client.
Pour les Fichiers Numériques, la révocation supprime l’accès aux URLs présignées à l’avenir mais n’invalide pas les copies qu’un client a déjà téléchargées. Planifiez le contenu de manière appropriée.

Gérer les Concessions

Ouvrez n’importe quel droit depuis le tableau de bord pour voir ses concessions. Le panneau de détail des concessions montre le total des concessions, les filtres de statut, les informations client, les dates de livraison, et une action de révocation. Vous pouvez également gérer les concessions par programme :
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  bearerToken: process.env['DODO_PAYMENTS_API_KEY'],
});

// List grants for an entitlement
const grants = await client.entitlements.grants.list('ent_abc123', {
  status: 'delivered',
});

// Revoke a single grant
await client.entitlements.grants.revoke('grant_xyz789', {
  path_id: 'ent_abc123',
});

Gestion API

Create Entitlement

Créez un nouveau droit de tout type d’intégration.

List Entitlements

Listez les droits avec filtrage par type d’intégration.

Get Entitlement

Récupérez un droit et sa configuration résolue.

Update Entitlement

Mettez à jour le nom, la description, ou la configuration d’intégration.

Delete Entitlement

Supprimez temporairement un droit ; les concessions existantes ne sont pas affectées.

Upload File

Téléchargez un fichier sur un droit de Fichiers Numériques (jusqu’à 100 Mo).

List Grants

Listez toutes les concessions pour un droit avec des filtres de statut et de client.

Revoke Grant

Révoquez manuellement une concession unique.

Webhooks

Dodo Payments déclenche quatre événements webhook pour le cycle de vie des concessions. Abonnez-vous à ces événements pour garder votre application synchronisée avec ce à quoi chaque client peut accéder.
ÉvénementDéclenche lorsque
entitlement_grant.createdUne nouvelle concession est créée. Les concessions de clé de licence arrivent delivered; chaque autre intégration arrive pending et passe à delivered une fois l’appel à la plateforme réussi (ou, pour les intégrations basées sur OAuth, une fois le client autorisé).
entitlement_grant.deliveredLa concession passe à livrée. Le client a maintenant accès.
entitlement_grant.failedLa concession n’a pas pu être livrée. Inspectez error_code et error_message.
entitlement_grant.revokedL’accès a été retiré. Inspectez revocation_reason.

Entitlement Grant Webhook Payloads

Voir le schéma complet de la charge utile, des événements d’exemple, et la référence revocation_reason.

Meilleures Pratiques

  • Utilisez un droit par canal de livraison. Ne partagez pas un seul droit Discord entre des produits avec des intentions de rôle différentes; créez un par rôle pour une révocation propre.
  • Testez d’abord en mode test. Créez le droit, attachez-le à un produit de test, effectuez un passage à la caisse, et observez la transition de la concession à travers pending → delivered. Confirmez que l’annulation de l’abonnement de test révoque la concession.
  • Écoutez entitlement_grant.delivered, pas payment.succeeded. Un paiement peut réussir avant que l’accomplissement ne soit terminé (surtout pour les flux OAuth). Attendez l’événement livré avant de débloquer des fonctionnalités dépendantes dans vos propres systèmes.
  • Traitez entitlement_grant.failed comme exploitable. Une concession échouée signifie qu’un client a payé mais n’a pas eu accès. Faites-les remonter à votre équipe de support ou déclenchez une nouvelle concession.
  • Mappez revocation_reason à vos flux de rétention. Une révocation subscription_on_hold est récupérable (le client peut mettre à jour sa carte). Une révocation manual est intentionnelle. Traitez-les différemment dans vos communications clients.
Last modified on May 14, 2026