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

# Tarification Localisée

> Définissez votre propre prix fixe pour chaque devise ou pays au lieu de laisser les taux de change décider. Facturez des prix arrondis, ajustés au marché, et proposez des promotions par pays.

## Qu'est-ce que la Tarification Localisée ?

Chaque produit a un prix de base dans une devise de base. La Tarification Localisée vous permet de remplacer cette base par des **prix fixes que vous définissez par devise ou par pays**. Activez-la en définissant un `pricing_mode` sur le produit, puis attachez une règle par marché.

C'est l'un des trois leviers indépendants pour la tarification internationale, chaque résolvant un problème différent :

| Mécanisme                                            | Ce qu'il fait                                                             | Le chiffre que voit le client                  |
| :--------------------------------------------------- | :------------------------------------------------------------------------ | :--------------------------------------------- |
| **Tarification localisée**                           | Un prix fixe que vous définissez par devise ou pays                       | Exactement le montant que vous avez fixé       |
| [**Devise adaptative**](/features/adaptive-currency) | Convertit automatiquement votre prix de base aux taux de change en direct | Prix de base converti au taux de change actuel |
| [**Codes de réduction**](/features/discount-codes)   | Une réduction en pourcentage sur le prix de base                          | Prix de base moins la remise                   |

<Info>
  La Tarification Localisée et la Devise Adaptative fonctionnent ensemble. Lorsqu'aucune règle localisée ne correspond, le produit revient à son prix de base — facturé directement si le client est déjà dans votre devise de base, ou converti via Devise Adaptative sinon.
</Info>

***

## Cas d'utilisation

<CardGroup cols={2}>
  <Card title="Purchasing Power Parity (PPP)" icon="earth-asia" href="/features/purchasing-power-parity">
    Facturez moins dans les marchés sensibles aux prix sans réduire votre marché principal. Une règle `by_country` permet à un produit à 20\$ de se vendre **₹999 en Inde** — ajusté au pouvoir d'achat local, pas une conversion FX directe. La méthode native recommandée pour appliquer le PPP.
  </Card>

  <Card title="Charm Pricing" icon="tag">
    Une conversion FX en direct de 19,99\$ aboutit à un nombre non rond comme 18,43€. Une règle `by_currency` fixe le prix net, psychologiquement ajusté que les clients attendent — **9,99€**, **¥1000**, **₹499** — exactement tel qu'il est saisi.
  </Card>

  <Card title="Reversible Market-Entry Promotions" icon="rocket">
    Lancement dans un nouveau pays ? Ajoutez une règle `by_country` avec un prix d'introduction, puis **archivez-la** une fois la promotion terminée pour revenir à base/adaptatif. Les règles sont archivées, jamais supprimées, ce qui vous permet de conserver un enregistrement clair de ce qui était en ligne et quand.
  </Card>

  <Card title="Competitive Price-Matching" icon="bullseye">
    Fixez un marché unique pour égaler un concurrent local. Une règle `by_country` pour **£9,00 au Royaume-Uni** maintient ce prix exact quel que soit le mouvement du taux GBP/USD.
  </Card>
</CardGroup>

***

## Concepts de Base

* **Modes de tarification** — Un produit est dans exactement un mode à la fois, défini par son `pricing_mode` :
  * `by_currency` : un prix par devise, indépendamment du pays. Tout le monde payant en EUR voit 9,99€.
  * `by_country` : un prix spécifique à un pays (₹999 en Inde), même lorsque plusieurs pays partagent une devise.
* **Montants fixes, dans la plus petite unité** — Le `amount` d'une règle est un entier dans la plus petite unité de la devise, comme partout ailleurs dans l'API : `99900` est ₹999,00, `999` est 9,99€. C'est un prix que vous définissez, jamais une valeur convertie.
* **Quand aucune règle ne correspond** — Le produit conserve son comportement existant : les clients dans votre devise de base paient directement le prix de base ; tous les autres le reçoivent converti via [Devise Adaptative](/features/adaptive-currency).
* **Les frais sont inclusifs lorsqu'une règle correspond** — Le client paie **exactement** le montant que vous avez défini. Le frais de FX [Devise Adaptative](/features/adaptive-currency#choose-who-bears-the-fee) est à la charge de vous (traité comme inclus dans les frais pour cette transaction) plutôt que d'être ajouté au-dessus, donc votre prix local affiché est toujours le prix facturé.

***

## Configurer dans le Tableau de Bord

<Steps>
  <Step title="Open the product form">
    Dans votre Tableau de Bord Marchand, allez à **Produits** et créez un produit (ou ouvrez un existant pour le modifier). Définissez le **Prix** de base et la devise comme d'habitude.
  </Step>

  <Step title="Enable Localized Pricing and choose a mode">
    Dans la section **Tarification**, cochez **Tarification Localisée**, puis choisissez **Par Pays** ou **Par Devise**.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/hpHKp5MybOFgIhM2/images/localized-pricing/pricing-section.png?fit=max&auto=format&n=hpHKp5MybOFgIhM2&q=85&s=933fc68155db9639d36d624c0f84dfee" alt="Tarification Localisée activée sur le formulaire produit avec Par Pays sélectionné" style={{ maxHeight: '450px', width: 'auto' }} width="850" height="580" data-path="images/localized-pricing/pricing-section.png" />
    </Frame>
  </Step>

  <Step title="Add a price for each market">
    Cliquez sur **Ajouter un Prix par Pays** ou **Ajouter un Prix par Devise**, remplissez le panneau **Tarification localisée** et cliquez sur **Ajouter**. Chaque marché que vous ajoutez apparaît dans le tableau des exceptions, où vous pouvez le modifier ou le supprimer plus tard.

    <Tabs>
      <Tab title="By Country">
        Choisissez un pays, sélectionnez la devise et entrez le montant (par exemple ₹999 pour l'Inde), puis cliquez sur **Ajouter**.

        <Frame>
          <img src="https://mintcdn.com/dodopayments/hpHKp5MybOFgIhM2/images/localized-pricing/add-country-override.png?fit=max&auto=format&n=hpHKp5MybOFgIhM2&q=85&s=62ae6975abd9c023655126a02fab611d" alt="Ajout d'une exception de 999 INR pour l'Inde" style={{ maxHeight: '360px', width: 'auto' }} width="1052" height="660" data-path="images/localized-pricing/add-country-override.png" />
        </Frame>

        Le pays apparaît désormais dans le tableau des **Exceptions par Pays**, où vous pouvez le modifier ou le supprimer.

        <Frame>
          <img src="https://mintcdn.com/dodopayments/hpHKp5MybOFgIhM2/images/localized-pricing/country-overrides-table.png?fit=max&auto=format&n=hpHKp5MybOFgIhM2&q=85&s=1ef8ef7f6368448896015febccd11b58" alt="Tableau d'exceptions par pays montrant l'Inde à 999 INR" style={{ maxHeight: '360px', width: 'auto' }} width="526" height="430" data-path="images/localized-pricing/country-overrides-table.png" />
        </Frame>
      </Tab>

      <Tab title="By Currency">
        Choisissez une devise et entrez le montant (par exemple 9,99€ pour l'EUR), puis cliquez sur **Ajouter**.

        <Frame>
          <img src="https://mintcdn.com/dodopayments/hpHKp5MybOFgIhM2/images/localized-pricing/add-currency-override.png?fit=max&auto=format&n=hpHKp5MybOFgIhM2&q=85&s=8f4b14e3c0ba37b2162cc45fc7b199eb" alt="Ajout d'une exception de 9,99 EUR" style={{ maxHeight: '360px', width: 'auto' }} width="1052" height="640" data-path="images/localized-pricing/add-currency-override.png" />
        </Frame>

        La devise apparaît maintenant dans le tableau des **Exceptions par Devise**, où vous pouvez la modifier ou la supprimer.

        <Frame>
          <img src="https://mintcdn.com/dodopayments/hpHKp5MybOFgIhM2/images/localized-pricing/currency-overrides-table.png?fit=max&auto=format&n=hpHKp5MybOFgIhM2&q=85&s=ed713ac592444f1685f2fa75de2e8b3f" alt="Tableau d'exceptions par devise montrant EUR à 9,99" style={{ maxHeight: '360px', width: 'auto' }} width="1052" height="860" data-path="images/localized-pricing/currency-overrides-table.png" />
        </Frame>
      </Tab>
    </Tabs>
  </Step>

  <Step title="Save the product">
    Sauvegardez avec **Ajouter un produit**. Les prix localisés s'appliquent immédiatement aux prochains paiements.

    <Check>
      Effectuez un achat de test avec un pays de facturation qui a une règle, et confirmez que le montant localisé apparaît.
    </Check>
  </Step>
</Steps>

***

## Gérer via l'API

La Tarification Localisée est entièrement disponible via l'API. Commencez par définir le mode de tarification du produit, puis attachez des règles.

### Définir le mode de tarification

Définissez `pricing_mode` lorsque vous créez le produit (ou mettez à jour un existant). `null` signifie uniquement de base, le comportement existant.

<CodeGroup>
  ```typescript theme={null} theme={null}
  import DodoPayments from 'dodopayments';

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

  const product = await client.products.update('pdt_premium_plan', {
    pricing_mode: 'by_country',
  });
  ```

  ```python theme={null} theme={null}
  import os
  from dodopayments import DodoPayments

  client = DodoPayments(
      bearer_token=os.environ.get("DODO_PAYMENTS_API_KEY"),
      environment="test_mode",
  )

  product = client.products.update(
      "pdt_premium_plan",
      pricing_mode="by_country",
  )
  ```

  ```go theme={null} theme={null}
  package main

  import (
  	"context"
  	"os"

  	"github.com/dodopayments/dodopayments-go"
  	"github.com/dodopayments/dodopayments-go/option"
  )

  func main() {
  	client := dodopayments.NewClient(
  		option.WithBearerToken(os.Getenv("DODO_PAYMENTS_API_KEY")),
  	)

  	_, err := client.Products.Update(
  		context.TODO(),
  		"pdt_premium_plan",
  		dodopayments.ProductUpdateParams{
  			PricingMode: dodopayments.F(dodopayments.PricingModeByCountry),
  		},
  	)
  	if err != nil {
  		panic(err)
  	}
  }
  ```
</CodeGroup>

### Ajouter un prix localisé

Attachez une règle au produit. En mode `by_country` `country_code` est requis ; en mode `by_currency` il doit être omis.

<CodeGroup>
  ```typescript theme={null} theme={null}
  // ₹999.00 for customers in India
  const localizedPrice = await client.products.localizedPrices.create('pdt_premium_plan', {
    currency: 'INR',
    country_code: 'IN',
    amount: 99900,
  });
  ```

  ```python theme={null} theme={null}
  # ₹999.00 for customers in India
  localized_price = client.products.localized_prices.create(
      "pdt_premium_plan",
      currency="INR",
      country_code="IN",
      amount=99900,
  )
  ```

  ```go theme={null} theme={null}
  // ₹999.00 for customers in India
  localizedPrice, err := client.Products.LocalizedPrices.New(
  	context.TODO(),
  	"pdt_premium_plan",
  	dodopayments.ProductLocalizedPriceNewParams{
  		Currency:    dodopayments.F(dodopayments.CurrencyInr),
  		CountryCode: dodopayments.F(dodopayments.CountryCodeIn),
  		Amount:      dodopayments.F(int64(99900)),
  	},
  )
  ```
</CodeGroup>

Pour un produit `by_currency`, omettez `country_code`. Par exemple, un prix forfaitaire `€9.99` pour tous ceux qui paient en EUR (`currency: 'EUR'`, `amount: 999`).

### Lister, mettre à jour et archiver

Vous ne pouvez mettre à jour que le `amount` d'une règle ; la devise et le pays sont fixés une fois créés. L'archivage est une suppression douce idempotente, donc la règle cesse de correspondre mais reste dans votre historique.

<CodeGroup>
  ```typescript theme={null} theme={null}
  // List all active rules on a product
  const rules = await client.products.localizedPrices.list('pdt_premium_plan');

  // Change the amount (e.g. end a promo)
  await client.products.localizedPrices.update('lcp_india_price', {
    product_id: 'pdt_premium_plan',
    amount: 119900,
  });

  // Archive a rule
  await client.products.localizedPrices.archive('lcp_india_price', {
    product_id: 'pdt_premium_plan',
  });
  ```

  ```python theme={null} theme={null}
  # List all active rules on a product
  rules = client.products.localized_prices.list("pdt_premium_plan")

  # Change the amount (e.g. end a promo)
  client.products.localized_prices.update(
      "lcp_india_price",
      product_id="pdt_premium_plan",
      amount=119900,
  )

  # Archive a rule
  client.products.localized_prices.archive(
      "lcp_india_price",
      product_id="pdt_premium_plan",
  )
  ```

  ```go theme={null} theme={null}
  // List all active rules on a product
  rules, err := client.Products.LocalizedPrices.List(context.TODO(), "pdt_premium_plan")

  // Change the amount (e.g. end a promo)
  _, err = client.Products.LocalizedPrices.Update(
  	context.TODO(),
  	"pdt_premium_plan",
  	"lcp_india_price",
  	dodopayments.ProductLocalizedPriceUpdateParams{
  		Amount: dodopayments.F(int64(119900)),
  	},
  )

  // Archive a rule
  err = client.Products.LocalizedPrices.Archive(
  	context.TODO(),
  	"pdt_premium_plan",
  	"lcp_india_price",
  )
  ```
</CodeGroup>

<Card title="API Reference" icon="code" href="/api-reference/products/post-products-localized-prices">
  Voir les endpoints complets des Prix Localisés des Produits : créer, lister, récupérer, mettre à jour et archiver.
</Card>

***

## Comment cela s'applique lors du paiement

La tarification localisée est résolue par ligne de panier, et seulement pour les produits qui ont un `pricing_mode` défini. Dodo Payments lit deux signaux de la demande : le **pays de facturation** du client, et un **`billing_currency`** facultatif (lorsqu'il est omis, une devise est dérivée du pays de facturation).

* **Par Pays** : cherche une règle correspondant au pays de facturation. Si elle existe, le client est facturé du montant de la règle dans la devise de la règle.
* **Par Devise** : cherche une règle correspondant à la devise du client (le `billing_currency`, ou la devise dérivée de son pays). Si elle existe, le client est facturé du montant de la règle dans cette devise.
* **Aucune correspondance, ou pas de `pricing_mode`** : le prix de base s'applique, facturé directement lorsque la devise du client est égale à la devise de base, sinon converti via [Devise Adaptative](/features/adaptive-currency).

Chaque ligne de panier est résolue indépendamment, donc vous pouvez localiser un produit et laisser les autres sur la tarification de base dans le même paiement. Si une ligne correspond à une règle localisée, l'ensemble de la transaction est forcé à frais inclusifs (voir [Concepts de Base](#core-concepts)).

***

## Comportements Importants

| Comportement                      | Détail                                                                                                                                                                                                                                             |
| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Montants hors taxes**           | Un montant localisé est le prix *avant* taxe. Pour les produits hors taxes, la taxe est ajoutée au moment du paiement, donc le montant localisé n'est pas le total final. Voir [Tarification Incluant les Taxes](/features/tax-inclusive-pricing). |
| **Pas pour Pay What You Want**    | Les règles localisées ne s'appliquent jamais aux produits [Pay What You Want](/features/pay-what-you-want), où le client choisit le montant.                                                                                                       |
| **Par-devise diffère de la base** | Une règle `by_currency` doit utiliser une devise différente de la devise de base du produit.                                                                                                                                                       |
| **Une règle par marché**          | Un produit peut avoir au maximum une règle active par devise (par-devise) ou par pays (par-pays).                                                                                                                                                  |
| **Tous types de produits**        | S'applique aux produits à usage unique, par abonnement et basés sur la consommation.                                                                                                                                                               |

<Info>
  Les modifications des règles localisées n'émettent pas leurs propres webhooks. Le montant résolu apparaît sur le paiement ou l'abonnement résultant exactement comme n'importe quel autre prix.
</Info>

***

## Bonnes Pratiques

* **Gardez un prix de base raisonnable.** C'est la solution de repli pour chaque marché sans règle, convertie via Devise Adaptative.
* **Arrondissez aux prix de charme locaux.** Tout l'intérêt d'un montant fixe est un nombre net comme ₹999, 9,99€, ou ¥1000, pas un résultat FX.
* **Choisissez le mode adapté à la tâche.** Utilisez `by_country` pour une tarification basée sur le pouvoir d'achat ; utilisez `by_currency` lorsque un prix par zone de devise suffit.
* **Archivez, ne recréez pas, pour les promotions.** Archiver une règle ramène le marché à base/adaptatif tout en préservant l'historique ; recréez ou réajustez plus tard selon les besoins.
* **Attention à la ligne fiscale avant de faire de la publicité pour un total.** Pour les produits hors taxes, le client paie le montant localisé *plus* la taxe, alors ne l'annoncez pas comme le prix final dans les publicités.

***

## Associé

<CardGroup cols={2}>
  <Card title="Purchasing Power Parity" icon="money-bill-trend-up" href="/features/purchasing-power-parity">
    Tarification localisée native vs. codes de réduction basés sur la localisation pour le PPP.
  </Card>

  <Card title="Adaptive Currency" icon="money-bill-transfer" href="/features/adaptive-currency">
    Conversion FX automatique et gestion des frais que la tarification localisée exploite.
  </Card>

  <Card title="Tax-Inclusive Pricing" icon="receipt" href="/features/tax-inclusive-pricing">
    Contrôlez si vos prix incluent la taxe.
  </Card>

  <Card title="Pay What You Want" icon="hand-holding-dollar" href="/features/pay-what-you-want">
    Laissez les clients choisir le montant. Les règles localisées ne s'y appliquent pas.
  </Card>
</CardGroup>
