License keys are the License Key entitlement type. Create a License Key entitlement once with the activation limit, expiry, and instructions you want, attach it to any product, and Dodo Payments generates and delivers a key per purchase or subscription seat, automatically.
What are License Keys?
License keys are unique tokens that authorize access to your product. They’re ideal for:- Software licensing: Desktop apps, plugins, and CLIs
- Per-seat controls: Limit activations per user or device
- Digital goods: Gate downloads, updates, or premium features
Create a License Key Entitlement
Open Entitlements
Go to Entitlements in your Dodo Payments dashboard and click + to create a new entitlement.
Choose License Key
Select License Key as the integration. Configure how each issued key behaves:
- Activations Limit: Maximum concurrent activations per key (e.g.,
1for single-user,5for team licenses, leave blank for unlimited). - Duration: How long the key stays valid after issuance (e.g., 30 days, 1 year). For subscription-issued keys, leave blank; keys remain valid as long as the subscription is active.
- Activation Instructions: Customer-facing instructions emailed with the key. Examples:
Paste the key in Settings → LicenseorRun: mycli activate <key>.

Attach to Products
Open a product, expand Advanced Settings → Entitlements & Credits, and select your License Key entitlement. A single product can deliver a license key alongside other entitlements (Discord access, file downloads, GitHub repo access, etc.) on the same purchase.
How Keys Are Issued
Key issuance follows the standard grant lifecycle:| Event | Behavior |
|---|---|
payment.succeeded (one-time) | Generate one key per quantity purchased. Key expiry honors the entitlement’s duration. |
subscription.active | Generate one key per subscription quantity (seat). Key has no expiry; validity is tied to subscription status. |
subscription.renewed | No-op. Existing keys persist. |
subscription.on_hold | Disable the keys. They reactivate when the subscription comes off hold. |
subscription.cancelled / expired | Disable the keys permanently. |
subscription.plan_changed | Disable the old keys; issue new ones for the new plan. |
refund.succeeded (one-time) | Disable the keys. |
| Manual revoke via API/dashboard | Disable the keys with revocation_reason: manual. These are not auto-regranted on subscription renewal. |
| License key disabled directly | Revoke the grant with revocation_reason: license_key_disabled. Re-enabling the key re-activates the grant automatically. |
Quantity behavior
- Subscription products issue one key per seat (
subscriptions.quantity). - One-time products issue one key per cart line item (
product_cart.quantity). - Manual API grants issue exactly one key.
Mode de réalisation
Chaque agrément de clé de licence a unfulfillment_mode qui contrôle qui fournit la clé :
auto(par défaut) : Dodo Payments génère et envoie automatiquement la clé par e-mail lors du paiement ou de l’abonnement. C’est le comportement décrit ci-dessus et s’applique lorsquefulfillment_modeest omis.manual: L’achat crée une subventionpendingsans clé, et vous fournissez vous-même chaque valeur de clé. Voir Réalisation manuelle ci-dessous.
Réalisation manuelle
Par défaut, Dodo Payments génère et envoie par e-mail une clé de licence dès qu’un client paie. Avec la réalisation manuelle, vous fournissez vous-même la clé : l’achat crée une subventionpending sans clé, vous en informe et attend que vous soumettiez la valeur de la clé. Utilisez-le lorsque les clés proviennent de votre propre système, d’un fournisseur tiers ou d’un pool fini de codes pré-imprimés.
Vous recherchez une construction étape par étape ? Consultez le Guide d’intégration de la réalisation manuelle des clés de licence pour une présentation complète depuis la création du produit jusqu’à la livraison de la clé.
Quand l’utiliser
La réalisation automatique est le bon choix par défaut pour la plupart des licences logicielles. Choisissez la réalisation manuelle lorsque Dodo Payments ne peut pas générer la clé elle-même :- Utilisation de vos propres clés : La clé est générée par votre application, un produit de bureau ou votre propre serveur de licences.
- Fournisseurs tiers : Vous revendez des clés émises par un fournisseur en amont (une clé de jeu, une crédentielle API, une plateforme partenaire).
- Inventaire fini : Vous distribuez des codes à partir d’un pool pré-allocé et souhaitez les attribuer un par un.
- Examen humain : Vous souhaitez vérifier un achat avant de libérer l’accès.
Activer la réalisation manuelle
Définissezfulfillment_mode: "manual" dans la configuration d’intégration de l’agrément de clé de licence :
fulfillment_mode est rétrocompatible. Les agréments créés avant que ce paramètre n’existe n’ont pas fulfillment_mode et continuent de se comporter comme auto. Passer à manual n’affecte que les subventions créées après le changement ; les clés déjà livrées restent inchangées.Trouver les subventions en attente de réalisation
Lorsqu’un client achète un produit en mode manuel, la subvention est créée avec le statutpending sans clé et un webhook entitlement_grant.created s’exécute avec integration_type: "license_key" et status: "pending". Vous pouvez réagir à ce webhook ou interroger le point de terminaison List Grants avec les filtres integration_type et status :
Livrer la clé
Soumettez la clé avec le point de terminaison Fulfill License Key Grant. La subvention passe àdelivered et le client reçoit la clé automatiquement - le même e-mail qu’il recevrait sous réalisation automatique.
cURL
activations_limit et expires_at sont facultatifs et se réfèrent à la configuration de l’agrément lorsqu’ils sont omis. Chaque subvention peut être réalisée une fois ; réessayer une subvention déjà réalisée retourne 409 au lieu d’émettre une seconde clé.
Il n’est pas nécessaire d’envoyer la clé par e-mail vous-même - la livraison se fait automatiquement lorsque la subvention est réalisée. Cela diffère de l’importation de clés via
POST /license_keys, qui n’informe intentionnellement pas le client.Activation, Validation, Désactivation
Les points de terminaison d’activation/validation/désactivation API sont publics et ne nécessitent pas de clé API. Utilisez-les directement depuis les logiciels de bureau, les CLI ou les clients basés sur le navigateur pour vérifier les clés à l’exécution.Points de terminaison publics : Les points de terminaison pour activer, désactiver et valider les licences sont publics et ne nécessitent pas de clé API. Appelez-les directement depuis vos applications clientes sans exposer vos identifiants API.
Activer une licence
Valider une licence
Désactiver une instance d’activation
Gérer les clés
Ouvrez l’agrément de clé de licence depuis votre tableau de bord pour voir chaque subvention (une ligne par clé client) avec la date de livraison, le nombre d’activations et une action de révocation. Chaque détail de subvention affiche la clé de licence sous-jacente, l’expiration, les activations utilisées et la limite d’activations. Vous pouvez également lister les subventions de manière programmatique :Importer des clés de licence existantes via l’API
Avez-vous déjà des clés de licence dans un autre système ? Utilisez l’API Create License Key pour les importer dans Dodo Payments. Cela vous permet de migrer les clés existantes sans perturber vos clients - ils continuent d’activer, de valider et de désactiver avec les mêmes chaînes de clés sans réémission.Comment les clés diffèrent selon la source
| Champ | Clé auto-générée | Clé réalisée manuellement | Clé importée |
|---|---|---|---|
source | "auto" | "manual" | "import" |
| Origine | Générée par Dodo Payments lors du paiement | Fournie par vos soins pour une subvention en attente | Créée/migrée via POST /license_keys |
payment_id | Défini sur le paiement d’origine | Résolu depuis la subvention ou son abonnement | null (aucune transaction Dodo Payments) |
subscription_id | Défini si émise via un abonnement | Défini si la subvention provient d’un abonnement | null sauf lien explicité |
| Notification par e-mail au client | Envoyée lors de l’émission | Envoyée lors de la réalisation | Non envoyée - gérée séparément |
source sur les réponses GET /license_keys pour distinguer l’inventaire migré et les clés réalisées manuellement des clés émises de manière organique lors de la réconciliation ou de l’audit.
Clés de licence dans l’URL de retour
Lorsqu’un client finalise un achat pour un produit avec un agrément de clé de licence, la clé générée est automatiquement ajoutée à votrereturn_url en tant que paramètre de requête. Cela vous permet d’afficher la clé immédiatement sur votre page de réussite sans effectuer un appel d’API supplémentaire.
subscription_id est utilisé au lieu de payment_id :
Gestion API
Lifecycle Operations (Public Endpoints)
Lifecycle Operations (Public Endpoints)
Activation, désactivation et validation sont publiques ; aucune clé API requise.
Activate License
Créez ou enregistrez une instance d’activation pour une clé de licence.
Deactivate License
Révoquez une activation précédente pour libérer de la capacité.
Validate License
Vérifiez l’authenticité, le statut et les contraintes avant d’accorder l’accès.
License Key Management
License Key Management
Créez, listez, récupérez et mettez à jour les enregistrements individuels de clés de licence. Utilisez-les pour importer des clés existantes ou récupérer des détails d’utilisation.
Create License Key
Créez une nouvelle clé de licence ou importez-en une existante.
List License Keys
Parcourez toutes les clés avec leur statut et les détails d’utilisation.
Get License Key
Récupérez une clé spécifique et ses métadonnées.
Update License Key
Modifiez l’expiration, les limites d’activation ou activez/désactivez une clé.
Entitlement Management
Entitlement Management
Gérez l’agrément de clé de licence lui-même : sa limite d’activation, sa durée et ses instructions.
Create Entitlement
Créez un agrément de clé de licence.
Update Entitlement
Mettez à jour la configuration de l’agrément.
List Grants
Listez les clés émises pour un agrément.
Revoke Grant
Révoquez manuellement la clé d’un client.
Webhooks
La livraison et la révocation des clés de licence déclenchent les quatre événements webhookentitlement_grant.*. La charge utile de la subvention inclut un objet license_key peuplé avec la clé, l’expiration, les activations utilisées et la limite.
Les événements hérités license_key.* (license_key.created) continuent de s’exécuter pour le cycle de vie de l’enregistrement de la clé de licence sous-jacent ; consultez la page de charges utiles du webhook de clé de licence.
Clés de Licence Héritées
Les produits créés avec l’ancien drapeau
license_key_enabled ont été automatiquement migrés vers un agrément de clé de licence. La migration est transparente : les clés des clients existants continuent de fonctionner sans changement, les points de terminaison publics /licenses/activate, /licenses/validate, /licenses/deactivate continuent de fonctionner, et les points de terminaison API /license_keys/* continuent de lire et d’écrire dans le même magasin de clés.La section de tableau de bord Clés de Licence autonome reste disponible en tant que liste à plat de chaque clé émise, utile pour l’audit et la recherche. La nouvelle configuration (changement des limites d’activation, des durées, ou des instructions) doit être effectuée en modifiant l’agrément de clé de licence migré sous Entitlements.Meilleures Pratiques
- Gardez les limites d’activation claires : Choisissez des valeurs par défaut sensées (1 pour les applications à utilisateur unique, 3-5 pour les licences d’équipe) et documentez-les.
- Fournissez des instructions d’activation précises : Les clients copient ces informations depuis leur e-mail, donc des chemins et des commandes exacts réduisent les demandes d’assistance.
- Validez les clés côté serveur : Pour les produits connectés au réseau, validez via
/licenses/validateplutôt qu’en mettant en cache l’activation localement. - Utilisez les webhooks pour la révocation : Écoutez
entitlement_grant.revokedpour désactiver les fonctionnalités de l’application immédiatement lorsqu’un client annule ou demande un remboursement. - Testez avec des abonnements et des achats uniques : Le comportement des clés de licence diffère subtilement entre les deux, alors testez les deux avant de lancer.