Passer au contenu principal
Les abonnements vous permettent de vendre un accès continu avec des renouvellements automatisés. Utilisez des cycles de facturation flexibles, des essais gratuits, des changements de plan et des options supplémentaires pour adapter les prix à chaque client.

Qu’est-ce que les Abonnements ?

Les abonnements sont des produits récurrents que les clients achètent selon un calendrier. Ils sont idéaux pour :
  • Licences SaaS : Applications, API ou accès à des plateformes
  • Adhésions : Communautés, programmes ou clubs
  • Contenu numérique : Cours, médias ou contenu premium
  • Plans de support : SLA, packages de réussite ou maintenance

Avantages Clés

  • Revenus prévisibles : Facturation récurrente avec renouvellements automatisés
  • Cycles flexibles : Mensuels, annuels, intervalles personnalisés et essais
  • Agilité des plans : Prorata pour les mises à niveau et rétrogradations
  • Options supplémentaires et sièges : Attachez des mises à niveau optionnelles et quantifiables
  • Paiement sans friction : Paiement hébergé et portail client
  • Orienté développeur : API claires pour la création, les changements et le suivi d’utilisation

Création d’Abonnements

Créez des produits d’abonnement dans votre tableau de bord Dodo Payments, puis vendez-les via le paiement ou votre API. Séparer les produits des abonnements actifs vous permet de versionner les prix, d’attacher des options supplémentaires et de suivre les performances de manière indépendante.

Création de produit d’abonnement

Configurez les champs dans le tableau de bord pour définir comment votre abonnement se vend, se renouvelle et se facture. Les sections ci-dessous correspondent directement à ce que vous voyez dans le formulaire de création.

Détails du produit

  • Nom du produit (obligatoire) : Le nom affiché dans le paiement, le portail client et les factures.
  • Description du produit (obligatoire) : Une déclaration de valeur claire qui apparaît dans le paiement et les factures.
  • Image du produit (obligatoire) : PNG/JPG/WebP jusqu’à 3 Mo. Utilisé dans le paiement et les factures.
  • Marque : Associez le produit à une marque spécifique pour le thème et les e-mails.
  • Catégorie fiscale (obligatoire) : Choisissez la catégorie (par exemple, SaaS) pour déterminer les règles fiscales.
Choisissez la catégorie fiscale la plus précise pour garantir une collecte correcte des taxes par région.

Tarification

  • Type de tarification : Choisissez Abonnement (ce guide). Les alternatives sont Paiement unique et Facturation basée sur l’utilisation.
  • Prix (obligatoire) : Prix récurrent de base avec devise.
  • Remise applicable (%) : Pourcentage de remise optionnel appliqué au prix de base ; reflété dans le paiement et les factures.
  • Répéter le paiement tous les (obligatoire) : Intervalle pour les renouvellements, par exemple, tous les 1 mois. Sélectionnez la cadence (mois ou années) et la quantité.
  • Période d’abonnement (obligatoire) : Durée totale pendant laquelle l’abonnement reste actif (par exemple, 10 ans). Après cette période, les renouvellements s’arrêtent à moins d’être prolongés.
  • Jours de période d’essai (obligatoire) : Définissez la durée de l’essai en jours. Utilisez 0 pour désactiver les essais. Le premier prélèvement se produit automatiquement à la fin de l’essai.
  • Sélectionner l’option supplémentaire : Attachez jusqu’à 3 options supplémentaires que les clients peuvent acheter avec le plan de base.
Modifier le prix d’un produit actif affecte les nouveaux achats. Les abonnements existants suivent vos paramètres de changement de plan et de prorata.
Les options supplémentaires sont idéales pour des extras quantifiables tels que des sièges ou du stockage. Vous pouvez contrôler les quantités autorisées et le comportement de prorata lorsque les clients les changent.

Paramètres avancés

  • Tarification incluant les taxes : Affichez les prix incluant les taxes applicables. Le calcul final des taxes varie toujours selon l’emplacement du client.
  • Générer des clés de licence : Émettez une clé unique à chaque client après achat. Consultez le guide des Clés de licence.
  • Livraison de produit numérique : Livrez des fichiers ou du contenu automatiquement après achat. En savoir plus dans Livraison de produit numérique.
  • Métadonnées : Attachez des paires clé-valeur personnalisées pour le marquage interne ou les intégrations client. Consultez Métadonnées.
Utilisez les métadonnées pour stocker des identifiants de votre système (par exemple, accountId) afin de pouvoir réconcilier les événements et les factures plus tard.

Essais d’Abonnement

Les essais permettent aux clients d’accéder aux abonnements sans paiement immédiat. Le premier prélèvement se produit automatiquement à la fin de l’essai.

Configuration des Essais

Définissez Jours de période d’essai dans la section de tarification du produit (utilisez 0 pour désactiver). Vous pouvez remplacer cela lors de la création d’abonnements :
// Via subscription creation
const subscription = await client.subscriptions.create({
  customer_id: 'cus_123',
  product_id: 'prod_monthly',
  trial_period_days: 14  // Overrides product's trial period
});

// Via checkout session
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_monthly', quantity: 1 }],
  subscription_data: { trial_period_days: 14 }
});
La valeur trial_period_days doit être comprise entre 0 et 10 000 jours.

Détection de l’État d’Essai

Actuellement, il n’y a pas de champ direct pour détecter l’état d’essai. Ce qui suit est une solution de contournement qui nécessite de requêter les paiements, ce qui est inefficace. Nous travaillons sur une solution plus efficace.
Pour déterminer si un abonnement est en période d’essai, récupérez la liste des paiements pour l’abonnement. S’il y a exactement un paiement d’un montant de 0, l’abonnement est en période d’essai :
const subscription = await client.subscriptions.retrieve('sub_123');
const payments = await client.payments.list({
  subscription_id: subscription.subscription_id
});

// Check if subscription is in trial
const isInTrial = payments.items.length === 1 && 
                  payments.items[0].total_amount === 0;

Mise à Jour de la Période d’Essai

Prolongez l’essai en mettant à jour next_billing_date :
await client.subscriptions.update('sub_123', {
  next_billing_date: '2025-02-15T00:00:00Z'  // New trial end date
});
Vous ne pouvez pas définir next_billing_date à un moment passé. La date doit être dans le futur.

Changements de Plan d’Abonnement

Les changements de plan vous permettent de mettre à niveau ou de rétrograder des abonnements, d’ajuster les quantités ou de migrer vers différents produits. Chaque changement déclenche un prélèvement immédiat basé sur le mode de prorata que vous sélectionnez.
Vous pouvez changer de plan d’abonnement et mettre à jour la date de facturation suivante directement depuis le tableau de bord Dodo Payments. Cela fournit un moyen rapide d’ajuster les abonnements pour les demandes de support client, les mises à niveau promotionnelles ou les migrations de plan sans effectuer d’appels API.

Modes de prorata

Choisissez comment les clients sont facturés lors du changement de plans :

prorated_immediately

Facture un montant proratisé basé sur le temps restant dans le cycle de facturation actuel. Idéal pour une facturation équitable qui prend en compte le temps non utilisé.
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_pro',
  quantity: 1,
  proration_billing_mode: 'prorated_immediately'
});

difference_immediately

Facture immédiatement la différence de prix (mise à niveau) ou ajoute un crédit pour les renouvellements futurs (baisse de plan). Idéal pour des scénarios de mise à niveau/baisse simples.
// Upgrade: charges $50 (difference between $30 and $80)
// Downgrade: credits remaining value, auto-applied to renewals
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_pro',
  quantity: 1,
  proration_billing_mode: 'difference_immediately'
});
Les crédits provenant des baisses de plan utilisant difference_immediately sont limités à l’abonnement et s’appliquent automatiquement aux renouvellements futurs. Ils sont distincts des Crédits Client.

full_immediately

Facture immédiatement le montant total du nouveau plan, en ignorant le temps restant. Idéal pour réinitialiser les cycles de facturation.
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_monthly',
  quantity: 1,
  proration_billing_mode: 'full_immediately'
});

Changement de plans avec des options supplémentaires

Modifiez les options supplémentaires lors du changement de plans. Les options supplémentaires sont incluses dans les calculs de prorata :
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_pro',
  quantity: 1,
  proration_billing_mode: 'difference_immediately',
  addons: [{ addon_id: 'addon_extra_seats', quantity: 2 }]  // Add add-ons
  // addons: []  // Empty array removes all existing add-ons
});
Les changements de plan déclenchent des frais immédiats. Les frais échoués peuvent déplacer l’abonnement vers le statut on_hold. Suivez les changements via les événements webhook subscription.plan_changed.

Prévisualisation des changements de plan

Avant de vous engager dans un changement de plan, prévisualisez le montant exact de la facturation et l’abonnement résultant :
const preview = await client.subscriptions.previewChangePlan('sub_123', {
  product_id: 'prod_pro',
  quantity: 1,
  proration_billing_mode: 'prorated_immediately'
});

// Show customer the charge before confirming
console.log('You will be charged:', preview.immediate_charge.summary);

Prévisualiser l'API de changement de plan

Prévisualisez les changements de plan avant de vous y engager.

États des abonnements

Les abonnements peuvent être dans différents états tout au long de leur cycle de vie :
  • active : L’abonnement est actif et se renouvellera automatiquement
  • on_hold : L’abonnement est en pause en raison d’un paiement échoué. Une mise à jour du mode de paiement est requise pour réactiver
  • cancelled : L’abonnement est annulé et ne se renouvellera pas
  • expired : L’abonnement a atteint sa date de fin
  • pending : L’abonnement est en cours de création ou de traitement

État en attente

Un abonnement entre dans l’état on_hold lorsque :
  • Un paiement de renouvellement échoue (fonds insuffisants, carte expirée, etc.)
  • Un frais de changement de plan échoue
  • L’autorisation du mode de paiement échoue
Lorsque l’abonnement est dans l’état on_hold, il ne se renouvellera pas automatiquement. Vous devez mettre à jour le mode de paiement pour réactiver l’abonnement.

Réactivation depuis l’état en attente

Pour réactiver un abonnement depuis l’état on_hold, mettez à jour le mode de paiement. Cela :
  1. Crée un frais pour les montants dus restants
  2. Génère une facture
  3. Traite le paiement en utilisant le nouveau mode de paiement
  4. Réactive l’abonnement à l’état active après un paiement réussi
// Reactivate subscription from on_hold
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});

// For on_hold subscriptions, a charge is automatically created
if (response.payment_id) {
  console.log('Charge created:', response.payment_id);
  // Redirect customer to response.payment_link to complete payment
  // Monitor webhooks for payment.succeeded and subscription.active
}
Après avoir mis à jour avec succès le mode de paiement pour un abonnement on_hold, vous recevrez payment.succeeded suivi par les événements webhook subscription.active.

Gestion de l’API

Utilisez POST /subscriptions pour créer des abonnements de manière programmatique à partir de produits, avec des essais et des options supplémentaires facultatifs.

Référence API

Voir l’API de création d’abonnement.
Utilisez PATCH /subscriptions/{id} pour mettre à jour les quantités, annuler à la fin de la période ou modifier les métadonnées.

Référence API

Apprenez à mettre à jour les détails de l’abonnement.
Changez le produit actif et les quantités avec des contrôles de prorata.

Référence API

Examinez les options de changement de plan.
Pour les abonnements à la demande, facturez des montants spécifiques à la demande.

Référence API

Facturez un abonnement à la demande.
Utilisez GET /subscriptions pour lister tous les abonnements et GET /subscriptions/{id} pour en récupérer un.

Référence API

Parcourez les API de listing et de récupération.
Récupérez l’utilisation enregistrée pour les modèles de tarification mesurés ou hybrides.

Référence API

Voir l’API d’historique d’utilisation.
Mettez à jour le mode de paiement pour un abonnement. Pour les abonnements actifs, cela met à jour le mode de paiement pour les renouvellements futurs. Pour les abonnements dans l’état on_hold, cela réactive l’abonnement en créant un frais pour les montants dus restants.

Référence API

Apprenez à mettre à jour les modes de paiement et à réactiver les abonnements.

Cas d’utilisation courants

  • SaaS et APIs : Accès par niveaux avec options supplémentaires pour les sièges ou l’utilisation
  • Contenu et médias : Accès mensuel avec essais d’introduction
  • Plans de support B2B : Contrats annuels avec options de support premium
  • Outils et plugins : Clés de licence et versions publiées

Exemples d’intégration

Sessions de paiement (abonnements)

Lors de la création de sessions de paiement, incluez votre produit d’abonnement et des options supplémentaires facultatives :
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_subscription',
      quantity: 1
    }
  ]
});

Changements de plan avec prorata

Mettez à niveau ou baissez un abonnement et contrôlez le comportement de prorata :
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_new',
  quantity: 1,
  proration_billing_mode: 'difference_immediately'
});

Annuler à la fin de la période

Planifiez une annulation sans résiliation immédiate de l’accès :
await client.subscriptions.update('sub_123', {
  cancel_at_period_end: true
});

Abonnements à la demande

Créez un abonnement à la demande et facturez plus tard si nécessaire :
const onDemand = await client.subscriptions.create({
  customer_id: 'cus_123',
  product_id: 'prod_on_demand',
  on_demand: true
});

await client.subscriptions.createCharge(onDemand.id, {
  amount: 4900,
  currency: 'USD',
  description: 'Extra usage for September'
});

Mettre à jour le mode de paiement pour un abonnement actif

Mettez à jour le mode de paiement pour un abonnement actif :
// Update with new payment method
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});

// Or use existing payment method
await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'existing',
  payment_method_id: 'pm_abc123'
});

Réactiver un abonnement depuis l’état en attente

Réactivez un abonnement qui a été mis en attente en raison d’un paiement échoué :
// Update payment method - automatically creates charge for remaining dues
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});

if (response.payment_id) {
  // Charge created for remaining dues
  // Redirect customer to response.payment_link
  // Monitor webhooks: payment.succeeded → subscription.active
}

Abonnements avec mandats conformes à la RBI

Les abonnements UPI et par carte indienne fonctionnent sous les réglementations de la RBI (Reserve Bank of India) avec des exigences spécifiques en matière de mandat :

Limites de mandat

Le type et le montant du mandat dépendent de la charge récurrente de votre abonnement :
  • Frais inférieurs à Rs 15,000 : Nous créons un mandat à la demande pour Rs 15,000 INR. Le montant de l’abonnement est facturé périodiquement selon la fréquence de votre abonnement, jusqu’à la limite du mandat.
  • Frais de Rs 15,000 ou plus : Nous créons un mandat d’abonnement (ou mandat à la demande) pour le montant exact de l’abonnement.

Considérations de mise à niveau et de baisse

Important : Lors de la mise à niveau ou de la baisse des abonnements, considérez attentivement les limites de mandat :
  • Si une mise à niveau ou une baisse entraîne un montant de frais qui dépasse Rs 15,000 et dépasse la limite de paiement à la demande existante, le frais de transaction peut échouer.
  • Dans de tels cas, le client peut avoir besoin de mettre à jour son mode de paiement ou de changer à nouveau l’abonnement pour établir un nouveau mandat avec la limite correcte.

Autorisation pour des frais de grande valeur

Pour les frais d’abonnement de Rs 15,000 ou plus :
  • Le client sera invité par sa banque à autoriser la transaction.
  • Si le client ne parvient pas à autoriser la transaction, celle-ci échouera et l’abonnement sera mis en attente.

Délai de traitement de 48 heures

Chronologie de traitement : Les frais récurrents sur les cartes indiennes et les abonnements UPI suivent un modèle de traitement unique :
  • Les frais sont initiés à la date prévue selon la fréquence de votre abonnement.
  • La décote réelle du compte du client n’a lieu qu’après 48 heures à partir de l’initiation du paiement.
  • Cette fenêtre de 48 heures peut s’étendre jusqu’à 2-3 heures supplémentaires en fonction des réponses de l’API de la banque.

Fenêtre d’annulation de mandat

Pendant la fenêtre de traitement de 48 heures :
  • Les clients peuvent annuler le mandat via leurs applications bancaires.
  • Si un client annule le mandat pendant cette période, l’abonnement restera actif (c’est un cas particulier spécifique aux abonnements par carte indienne et UPI AutoPay).
  • Cependant, la décote réelle peut échouer, et dans ce cas, nous mettrons l’abonnement en attente.
Gestion des cas particuliers : Si vous fournissez des avantages, des crédits ou une utilisation d’abonnement aux clients immédiatement après l’initiation du frais, vous devez gérer cette fenêtre de 48 heures de manière appropriée dans votre application. Considérez :
  • Retarder l’activation des avantages jusqu’à la confirmation du paiement
  • Mettre en œuvre des périodes de grâce ou un accès temporaire
  • Surveiller l’état de l’abonnement pour les annulations de mandat
  • Gérer les états d’attente d’abonnement dans la logique de votre application
Surveillez les webhooks d’abonnement pour suivre les changements d’état de paiement et gérer les cas particuliers où les mandats sont annulés pendant la fenêtre de 48 heures.

Meilleures pratiques

  • Commencez par des niveaux clairs : 2 à 3 plans avec des différences évidentes
  • Communiquez les prix : Montrez les totaux, le prorata et le prochain renouvellement
  • Utilisez les essais de manière réfléchie : Convertissez avec l’intégration, pas seulement le temps
  • Exploitez les options supplémentaires : Gardez les plans de base simples et vendez des extras
  • Testez les changements : Validez les changements de plan et le prorata en mode test
Les abonnements sont une base flexible pour les revenus récurrents. Commencez simplement, testez minutieusement et itérez en fonction des métriques d’adoption, de désabonnement et d’expansion.