> ## 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.

# Remises

> Créez des codes promotionnels pour stimuler les conversions, mener des campagnes et récompenser les clients avec des remises en pourcentage sur les achats uniques et les abonnements.

<Frame>
  <img src="https://mintcdn.com/dodopayments/mOQO5ej_lx0yH9p-/images/discount-codes/discount-code-cover.png?fit=max&auto=format&n=mOQO5ej_lx0yH9p-&q=85&s=57f1a644801ddc5efc506b50541eaaba" alt="Couverture de l'aperçu des codes de réduction" style={{ maxHeight: '500px', width: 'auto' }} width="1200" height="630" data-path="images/discount-codes/discount-code-cover.png" />
</Frame>

Les codes de réduction vous permettent de lancer des promotions et incitations ciblées. Créez des réductions basées sur des pourcentages, fixez des limites et des expirations, restreignez-les à certains produits et appliquez-les de manière transparente lors du paiement.

<CardGroup cols={2}>
  <Card title="Checkout Sessions" icon="cart-shopping" href="/developer-resources/checkout-session">
    Appliquez un ou plusieurs codes empilés lors du passage en caisse hébergé avec `discount_codes` et les contrôles de l'interface utilisateur.
  </Card>

  <Card title="Validate Discount" icon="code" href="/api-reference/discounts/validate-discount">
    Vérifiez si une réduction est valide selon son ID.
  </Card>

  <Card title="Get Discount by Code" icon="tag" href="/api-reference/discounts/get-discount-by-code">
    Recherchez et validez une réduction à l'aide de son nom de code (par exemple, « SAVE20 »).
  </Card>

  <Card title="Create Discount (API)" icon="code" href="/api-reference/discounts/create-discount">
    Créez de nouveaux codes de réduction par programmation.
  </Card>

  <Card title="List & Update Discounts" icon="code" href="/api-reference/discounts/list-discounts">
    Parcourez et gérez les réductions existantes ; modifiez ou supprimez selon les besoins.
  </Card>
</CardGroup>

## Qu'est-ce que les codes de rabais ?

Les codes de rabais sont des jetons promotionnels qui réduisent les totaux de commande au moment du paiement. Ils sont idéaux pour :

* **Campagnes saisonnières** : Black Friday, lancements de produits ou anniversaires
* **Offres d'acquisition** : Incitations à la première achat ou récompenses de parrainage
* **Fidélisation** : Récompenses de reconquête ou de fidélité pour les clients existants
* **Offres B2B** : Tarification contractée ou négociée via des codes privés

## Avantages clés

* **Rabais flexibles** : Pourcentage ou montant fixe de réduction

* **Contrôle ciblé** : Restriction par produit et cycles d'abonnement

* **Gouvernance des campagnes** : Dates d'expiration et limites d'utilisation

* **Paiement sans friction** : Champ UI et support API via des sessions de paiement

* **Remises flexibles** : Réductions basées sur des pourcentages

* **Codes cumulables** : Appliquez jusqu'à 20 codes par commande, paiement ou abonnement — combinez les campagnes (par exemple, `WELCOME10` + `BLACKFRIDAY20`) sans créer de codes personnalisés

* **Contrôle ciblé** : Restriction par produit et cycles d'abonnement

* **Gouvernance de campagne** : Dates d'expiration et limites d'utilisation

* **Paiement transparent** : Champ UI et prise en charge de l'API via les sessions de paiement

Créez des codes de rabais dans votre tableau de bord Dodo Payments, puis appliquez-les dans le paiement hébergé ou via l'API.

### Configuration du tableau de bord

* **Nom du rabais** (obligatoire) : Nom interne et affiché dans le tableau de bord

* **Code** (obligatoire) : La chaîne que les clients saisissent au moment du paiement

* **Type et Montant** (obligatoire) : Définissez une valeur en pourcentage ou un montant fixe, ou générez un code aléatoire à l'aide du bouton fourni

* **Date d'expiration** (facultatif) : Date après laquelle le code devient invalide

* **Limite d'utilisation** (facultatif) : Nombre total maximal de redemptions pour tous les clients

* **Restriction de produit** (facultatif) : Limitez l'applicabilité à des produits sélectionnés

* **Limite de cycle d'abonnement** (facultatif) : Nombre de cycles de facturation auxquels le rabais s'applique

* **Nom de la remise** (obligatoire) : Nom affiché en interne et sur le tableau de bord

* **Code** (obligatoire) : La chaîne que les clients saisissent lors du paiement

* **Type & Montant** (obligatoire) : Définissez une valeur en pourcentage (seules les réductions basées sur des pourcentages sont actuellement prises en charge), ou générez un code aléatoire à l'aide du bouton fourni

* **Date d'expiration** (optionnelle) : Date après laquelle le code devient invalide

* **Limite d'utilisation** (optionnelle) : Nombre total maximal de réclamations pour tous les clients

* **Restriction de produit** (optionnelle) : Limitez l'applicabilité à certains produits

* **Limite de cycle d’abonnement** (optionnelle) : Nombre de cycles de facturation auxquels la remise s'applique

* **Métadonnées** (optionnelles) : Attachez des paires clé-valeur personnalisées pour le suivi interne ou les intégrations

## Expérience de paiement

1. Les acheteurs saisissent le code dans le champ de paiement.
2. Les rabais éligibles sont appliqués et les totaux se mettent à jour immédiatement.

<Info>
  Dans les sessions de paiement, transmettez `discount_code` pour préappliquer un code, et définissez `feature_flags.allow_discount_code` pour afficher le champ de saisie.
</Info>

<Info>
  Dans les sessions de caisse, passez `discount_codes` (un tableau) pour pré-appliquer un ou plusieurs codes, et définissez `feature_flags.allow_discount_code` pour afficher le champ de saisie. Les codes sont appliqués dans l'ordre du tableau, jusqu'à un maximum de 20.
</Info>

## Empilement des Codes de Réduction

Les sessions de paiement, les paiements et les abonnements acceptent jusqu'à **20 codes empilés** via le tableau `discount_codes` (max 20 entrées). Les codes sont appliqués **dans l'ordre du tableau**, donc le premier code éligible réduit d'abord le prix de base, le code suivant réduit le prix déjà réduit, et ainsi de suite. L'ensemble complet des réductions appliquées est renvoyé dans la réponse sous `discount_ids` (sur les paiements/abonnements) et `discounts` (détail plus riche par réduction, y compris la position et les cycles d'abonnement restants).

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
  discount_codes: ['WELCOME10', 'BLACKFRIDAY20'], // applied in this order
  customer: { email: 'user@example.com' },
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  Le champ simple `discount_code` est **déprécié** mais toujours entièrement pris en charge pour la compatibilité descendante — les intégrations existantes continuent de fonctionner sans modification. Il ne peut pas être combiné avec `discount_codes` dans la même requête. Nous recommandons de migrer vers `discount_codes` (la forme tableau) quand cela est pratique, même pour les codes uniques, pour profiter de l'empilement et de la forme de réponse plus riche.
</Info>

## Gestion API

<AccordionGroup>
  <Accordion title="Create discounts">
    Créez des codes de réduction par programmation avec type et montant.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/create-discount">
      Affichez l'API de création de réduction.
    </Card>
  </Accordion>

  <Accordion title="List and retrieve">
    Listez toutes les réductions ou récupérez des détails pour la gestion et l'audit.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/list-discounts">
      Parcourez les API de liste et de récupération.
    </Card>
  </Accordion>

  <Accordion title="Get discount by code">
    Recherchez une réduction en utilisant son code lisible par l'homme (par exemple, "SAVE20") au lieu de l'ID interne.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/get-discount-by-code">
      Récupérez la réduction par nom de code.
    </Card>
  </Accordion>

  <Accordion title="Update discounts">
    Modifiez la configuration de la réduction, comme le montant, l'expiration ou les restrictions.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/update-discount">
      Découvrez comment mettre à jour les détails de la réduction.
    </Card>
  </Accordion>

  <Accordion title="Validate discounts">
    Vérifiez si une réduction est valide et applicable avant de l'appliquer.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/validate-discount">
      Validez l'utilisation de la réduction.
    </Card>
  </Accordion>

  <Accordion title="Delete discounts">
    Désactivez ou supprimez les réductions qui ne sont plus nécessaires.

    <Card title="API Reference" icon="code" href="/api-reference/discounts/delete-discount">
      Supprimez une réduction.
    </Card>
  </Accordion>
</AccordionGroup>

## Cas d'Usage Courants

* **Offres d'introduction**: Promotions de lancement à durée limitée pour les nouveaux produits
* **En masse ou B2B**: Réductions contractuelles pour des ensembles de produits sélectionnés
* **Programmes de fidélisation**: Codes de reconquête dans les workflows de prévention de l'attrition
* **Campagnes saisonnières**: Promotions basées sur des vacances ou des événements

## Exemples d'Intégration

### Créer une réduction avec des métadonnées

Attachez des paires clé–valeur personnalisées pour le suivi interne.

```typescript theme={null}
const discount = await client.discounts.create({
  type: 'percentage',
  amount: 1500, // 15%
  code: 'SUMMER2025',
  metadata: {
    campaign: 'summer_promo',
    source: 'email_blast'
  }
});
```

<Tip>
  Utilisez les métadonnées pour étiqueter les réductions par campagne, source ou ID de référence interne afin de pouvoir concilier l'utilisation et mesurer le retour sur investissement plus tard.
</Tip>

### Appliquer des réductions dans les Sessions de Caisse

Pré-appliquez une ou plusieurs réductions empilées et affichez l'interface de saisie du code.

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  discount_codes: ['BLACKFRIDAY2024', 'NEWUSER5'], // stacked in array order
  customer: { email: 'user@example.com', name: 'Jane Doe' },
  return_url: 'https://yoursite.com/return'
});
```

### Appliquer des réductions lors des changements de plan

Offre des prix promotionnels lorsque les clients passent à un abonnement supérieur ou inférieur.

```typescript theme={null}
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_pro',
  quantity: 1,
  proration_billing_mode: 'prorated_immediately',
  discount_codes: ['UPGRADE20']
});
```

| `discount_codes` value            | Comportement lors du changement de plan                                                                          |
| --------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `undefined` / `null` (non fourni) | Les réductions existantes avec `preserve_on_plan_change=true` sont conservées si applicables au nouveau produit. |
| `[]` (tableau vide)               | **Toutes** les réductions existantes sont supprimées de l'abonnement.                                            |
| `['CODE_A', 'CODE_B', ...]`       | Remplace toutes les réductions existantes par cet ensemble empilé, appliqué dans l'ordre du tableau.             |

<Info>
  Lisez toutes les réductions appliquées à partir de l'abonnement via le nouveau tableau `discounts` sur la réponse d'abonnement. Chaque entrée inclut `discount_id`, `position`, `cycles_remaining` (pour les abonnements), et le code original.
</Info>

### Activer l'entrée de réduction sans pré-application

Permettez aux clients d'entrer un code à la caisse sans en passer un à l'avance.

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  feature_flags: {
    allow_discount_code: true
  },
  return_url: 'https://yoursite.com/return'
});
```

## Meilleures Pratiques

* **Nommez clairement**: Utilisez des codes reconnaissables qui correspondent aux noms de campagne
* **Limitez dans le temps**: Ajoutez des expirations pour créer un sentiment d'urgence et éviter les abus
* **Définir sagement**: Limitez à des produits spécifiques pour éviter la perte de marge
* **Validez tôt**: Vérifiez l'applicabilité du code avant de confirmer le paiement
* **Suivez l'impact**: Suivez l'utilisation et la conversion par campagne

<Info>
  Les codes de réduction sont des leviers puissants pour l'acquisition et la fidélisation. Commencez avec des offres simples et bien nommées, validez soigneusement et itérez en fonction de la performance.
</Info>
