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

# Precios Localizados

> Establece tu propio precio fijo para cada moneda o país, en lugar de dejar que las tasas de cambio decidan. Cobra precios redondeados y ajustados al mercado y realiza promociones por país.

## ¿Qué es el Precio Localizado?

Cada producto tiene un precio base en una moneda base. Los Precios Localizados te permiten reemplazar esa base con **precios fijos que estableces por moneda o por país**. Actívalo al configurar un `pricing_mode` en el producto, luego adjunta una regla por mercado.

Es uno de los tres mecanismos independientes para la fijación de precios internacionales, cada uno resolviendo un problema diferente:

| Mecanismo                                            | Lo que hace                                                               | El número que ve el cliente                       |
| :--------------------------------------------------- | :------------------------------------------------------------------------ | :------------------------------------------------ |
| **Precios Localizados**                              | Un precio fijo que estableces por moneda o país                           | Exactamente la cantidad que estableces            |
| [**Moneda Adaptativa**](/features/adaptive-currency) | Convierte automáticamente tu precio base a tasas de cambio en tiempo real | Precio base convertido a la tasa de cambio actual |
| [**Códigos de descuento**](/features/discount-codes) | Una reducción porcentual del precio base                                  | Precio base menos el descuento                    |

<Info>
  Precios Localizados y Moneda Adaptativa trabajan juntos. Cuando no coincide ninguna regla localizada, el producto vuelve a su precio base: cobrado directamente si el cliente ya está en tu moneda base, o convertido a través de Moneda Adaptativa si no.
</Info>

***

## Casos de Uso

<CardGroup cols={2}>
  <Card title="Purchasing Power Parity (PPP)" icon="earth-asia" href="/features/purchasing-power-parity">
    Cobra menos en mercados sensibles al precio sin descontar tu mercado local. Una regla `by_country` permite que un producto base de \$20 se venda por **₹999 en India** — ajustado al poder adquisitivo local, no una conversión directa de FX. La manera recomendada y nativa de aplicar PPP.
  </Card>

  <Card title="Charm Pricing" icon="tag">
    Una conversión en vivo de FX de \$19.99 resulta en un número incómodo como €18.43. Una regla `by_currency` establece el precio limpio, ajustado psicológicamente, que los clientes esperan — **€9.99**, **¥1000**, **₹499** — exactamente como se escribe.
  </Card>

  <Card title="Reversible Market-Entry Promotions" icon="rocket">
    ¿Lanzando en un nuevo país? Agrega una regla `by_country` con un precio introductorio, luego **archívalo** cuando termine la promoción para volver al precio base/adaptativo. Las reglas son archivadas, nunca eliminadas, por lo que mantienes un registro limpio de lo que estuvo activo y cuándo.
  </Card>

  <Card title="Competitive Price-Matching" icon="bullseye">
    Fija un solo mercado para igualar a un competidor local. Una regla `by_country` para **£9.00 en el Reino Unido** mantiene ese precio exacto independientemente de cómo se mueva la tasa GBP/USD.
  </Card>
</CardGroup>

***

## Conceptos Clave

* **Modos de Precio** — Un producto está en un solo modo a la vez, configurado por su `pricing_mode`:
  * `by_currency`: un precio por moneda, independientemente del país. Todos los que pagan en EUR ven €9.99.
  * `by_country`: un precio específico para un país (₹999 en India), incluso cuando varios países comparten una moneda.
* **Montos fijos, en la unidad más pequeña** — El `amount` de una regla es un entero en la unidad más pequeña de la moneda, igual que en cualquier otro lugar de la API: `99900` es ₹999.00, `999` es €9.99. Es un precio que estableces, nunca un valor convertido.
* **Cuando no coincide ninguna regla** — El producto mantiene su comportamiento existente: los clientes en tu moneda base pagan el precio base directamente; todos los demás lo obtienen convertido a través de [Moneda Adaptativa](/features/adaptive-currency).
* **Las tarifas están incluidas cuando coincide una regla** — El cliente paga **exactamente** la cantidad que estableciste. La tarifa FX de [Moneda Adaptativa](/features/adaptive-currency#choose-who-bears-the-fee) es absorbida por ti (se trata como tarifas incluidas para esa transacción) en lugar de añadirse encima, por lo que tu precio local declarado siempre es el precio cobrado.

***

## Configuración en el Panel

<Steps>
  <Step title="Open the product form">
    En tu Panel de Comerciante, ve a **Productos** y crea un producto (o abre uno existente para editar). Establece la **Precio** base y la moneda como de costumbre.
  </Step>

  <Step title="Enable Localized Pricing and choose a mode">
    En la sección de **Precio**, marca **Precios Localizados**, luego elige **Por País** o **Por Moneda**.

    <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="Precios Localizados habilitados en el formulario del producto con Por País seleccionado" 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">
    Haz clic en **Agregar Precio por País** o **Agregar Precio por Moneda**, completa el panel de **precios localizados**, y haz clic en **Agregar**. Cada mercado que añadas aparecerá en la tabla de reemplazos, donde podrás editarlo o eliminarlo más tarde.

    <Tabs>
      <Tab title="By Country">
        Elige un país, selecciona la moneda e ingresa la cantidad (por ejemplo ₹999 para India), luego haz clic en **Agregar**.

        <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="Añadiendo un reemplazo de 999 INR para India" style={{ maxHeight: '360px', width: 'auto' }} width="1052" height="660" data-path="images/localized-pricing/add-country-override.png" />
        </Frame>

        El país ahora aparece en la tabla de **Reemplazos por País**, donde puedes editarlo o eliminarlo.

        <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="Tabla de reemplazos por país mostrando India en 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">
        Elige una moneda e ingresa la cantidad (por ejemplo €9.99 para EUR), luego haz clic en **Agregar**.

        <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="Añadiendo un reemplazo de 9.99 EUR" style={{ maxHeight: '360px', width: 'auto' }} width="1052" height="640" data-path="images/localized-pricing/add-currency-override.png" />
        </Frame>

        La moneda ahora aparece en la tabla de **Reemplazos por Moneda**, donde puedes editarla o eliminarla.

        <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="Tabla de reemplazos por moneda mostrando EUR en 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">
    Guarda con **Agregar producto**. Los precios localizados se aplican inmediatamente en futuras compras.

    <Check>
      Realiza una prueba de compra con un país de facturación que tenga una regla y confirma que la cantidad localizada aparezca.
    </Check>
  </Step>
</Steps>

***

## Gestión a través de API

Los Precios Localizados están totalmente disponibles en la API. Primero configura el modo de precio del producto, luego adjunta reglas.

### Configurar el modo de precio

Establece `pricing_mode` cuando crees el producto (o actualices uno existente). `null` significa solo base, el comportamiento existente.

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

### Agregar un precio localizado

Adjunta una regla al producto. En el modo `by_country` se requiere `country_code`; en el modo `by_currency` se debe omitir.

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

Para un producto `by_currency`, omite `country_code`. Por ejemplo, un `€9.99` fijo para todos los que pagan en EUR (`currency: 'EUR'`, `amount: 999`).

### Listar, actualizar y archivar

Puedes actualizar solo el `amount` de una regla; la moneda y el país son fijos una vez creados. Archivar es un borrado suave idempotente, por lo que la regla deja de coincidir pero permanece en tu historial.

<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">
  Ver los endpoints completos de Precios Localizados de Producto: crear, listar, recuperar, actualizar y archivar.
</Card>

***

## Cómo se Aplica en el Pago

El precio localizado se resuelve por línea de carrito, y solo para productos que tienen un `pricing_mode` configurado. Dodo Payments lee dos señales de la solicitud: el **país de facturación** del cliente, y un **`billing_currency`** opcional (cuando se omite, se deriva una moneda del país de facturación).

* **Por País**: busca una regla que coincida con el país de facturación. Si existe, al cliente se le cobra la cantidad de la regla en la moneda de la regla.
* **Por Moneda**: busca una regla que coincida con la moneda del cliente (el `billing_currency`, o la moneda derivada de su país). Si existe, al cliente se le cobra la cantidad de la regla en esa moneda.
* **Sin coincidencia, o sin `pricing_mode`**: se aplica el precio base, cobrado directamente cuando la moneda del cliente es igual a la moneda base, de lo contrario, convertido a través de [Moneda Adaptativa](/features/adaptive-currency).

Cada línea de carrito se resuelve por sí sola, por lo que puedes localizar un producto y dejar otros en precios base en la misma compra. Si alguna línea coincide con una regla localizada, toda la transacción se fuerza a tarifas incluidas (ver [Conceptos Clave](#core-concepts)).

***

## Comportamientos Importantes

| Comportamiento                    | Detalle                                                                                                                                                                                                                                                        |
| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Montos antes de impuestos**     | Un monto localizado es el precio *antes* de impuestos. Para productos exentos de impuestos, los impuestos se añaden en la compra, por lo que el monto localizado no es el total final. Ver [Precios Inclusivos de Impuestos](/features/tax-inclusive-pricing). |
| **No para "Paga lo que Quieras"** | Las reglas localizadas nunca se aplican a productos [Paga lo que Quieras](/features/pay-what-you-want), donde el cliente elige la cantidad.                                                                                                                    |
| **Por moneda difiere del base**   | Una regla `by_currency` debe usar una moneda diferente a la moneda base del producto.                                                                                                                                                                          |
| **Una regla por mercado**         | Un producto puede tener como máximo una regla activa por moneda (por moneda) o por país (por país).                                                                                                                                                            |
| **Todos los tipos de producto**   | Se aplica a productos únicos, de suscripción y basados en uso.                                                                                                                                                                                                 |

<Info>
  Los cambios en las reglas localizadas no emiten sus propios webhooks. La cantidad resuelta aparece en el pago o suscripción resultante exactamente como cualquier otro precio.
</Info>

***

## Mejores Prácticas

* **Mantén un precio base sensato.** Es el recurso alternativo para cada mercado sin una regla, convertido a través de Moneda Adaptativa.
* **Redondea a precios psicológicos locales.** El objetivo de un monto fijo es obtener un número limpio como ₹999, €9.99, o ¥1000, no un resultado de FX.
* **Elige el modo adecuado para la tarea.** Usa `by_country` para precios basados en el poder adquisitivo; usa `by_currency` cuando un precio por zona de moneda sea suficiente.
* **Archiva, no recrees, para promociones.** Archivar una regla devuelve el mercado a base/adaptativo mientras preserva el historial; recrea o vuelve a fijar precios más tarde según sea necesario.
* **Presta atención a la línea de impuestos antes de anunciar un total.** Para productos exentos de impuestos el cliente paga la cantidad localizada *más* impuestos, así que no lo cites como el precio final en anuncios.

***

## Relacionado

<CardGroup cols={2}>
  <Card title="Purchasing Power Parity" icon="money-bill-trend-up" href="/features/purchasing-power-parity">
    Precios localizados nativos vs. códigos de descuento basados en la localización para PPP.
  </Card>

  <Card title="Adaptive Currency" icon="money-bill-transfer" href="/features/adaptive-currency">
    Conversión automática de FX y el manejo de tarifas sobre el que se construyen los precios localizados.
  </Card>

  <Card title="Tax-Inclusive Pricing" icon="receipt" href="/features/tax-inclusive-pricing">
    Controla si tus precios incluyen impuestos.
  </Card>

  <Card title="Pay What You Want" icon="hand-holding-dollar" href="/features/pay-what-you-want">
    Permite a los clientes elegir la cantidad. Las reglas localizadas no se aplican allí.
  </Card>
</CardGroup>
