# Agregar descuentos

Reduce el importe facturado a un cliente haciendo descuentos a su subtotal con cupones y códigos de promoción.

# Página alojada

> This is a Página alojada for when payment-ui is stripe-hosted. View the full page at https://docs.stripe.com/payments/checkout/discounts?payment-ui=stripe-hosted.

Puedes usar descuentos para reducir el importe cobrado a un cliente. Los cupones y los códigos de promoción te permiten hacer lo siguiente:

- Aplicar un descuento al subtotal de una compra
- Aplicar un descuento a productos específicos
- Reducir el total facturado conforme a un porcentaje o un importe fijo
- Crear códigos de promoción para clientes sobre cupones para compartirlos directamente con ellos

> Si quieres usar cupones para hacer descuentos a *suscripciones* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) con Checkout y Billing, consulta [Descuentos para suscripciones](https://docs.stripe.com/billing/subscriptions/coupons.md).

## Crea un cupón

Los cupones especifican un descuento de valor fijo. Puedes crear códigos de promoción para el cliente que se asignen a un único cupón de base. Esto significa que los códigos `FALLPROMO` y `SPRINGPROMO` pueden apuntar a un mismo cupón de descuento del 25&nbsp;%. Puedes crear cupones en el [Dashboard](https://dashboard.stripe.com/coupons) o con la [API](https://docs.stripe.com/api.md#coupons):

```curl
curl https://api.stripe.com/v1/coupons \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d percent_off=20 \
  -d duration=once
```

## Usa un cupón

Para crear una sesión con un descuento aplicado, especifica la [ID del cupón](https://docs.stripe.com/api/coupons/object.md#coupon_object-id) en el parámetro `coupon` de la matriz de [descuentos](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-discounts). Actualmente, Checkout Sessions admite un máximo de un cupón o código promocional.

```curl
curl https://api.stripe.com/v1/checkout/sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "line_items[0][price]={{PRICE_ID}}" \
  -d "line_items[0][quantity]=1" \
  -d "discounts[0][coupon]={{COUPON_ID}}" \
  -d mode=payment \
  --data-urlencode "success_url=https://example.com/success"
```

## Configura un cupón

Los cupones tienen los siguientes parámetros que puedes utilizar:

- `currency`
- `percent_off` o `amount_off`
- `max_redemptions`
- `redeem_by`, la fecha límite en la que los clientes pueden aplicar el cupón
- `applies_to`: limita los productos a los que se aplica el cupón

> El objeto Coupon agrega descuentos tanto a pagos únicos como a suscripciones. Algunos parámetros del objeto Coupon, como `duration`, solo se aplican a las [suscripciones](https://docs.stripe.com/billing/subscriptions/coupons.md).

### Limita el uso de canjes

Los valores `max_redemptions` y `redeem_by` se aplican al cupón en todas las aplicaciones. Por ejemplo, puedes restringir un cupón a los primeros 50 usos, o puedes hacer que un cupón venza en una fecha determinada.

### Limita los productos elegibles

Puedes limitar los productos a los que se les apliquen descuentos con un cupón agregando los ID de los productos al hash `applies_to` en el objeto Coupon. Todos los códigos de promoción que se asignen a este cupón se aplicarán únicamente a la lista de productos elegibles.

### Elimina un cupón

Puedes eliminar cupones en el Dashboard o a través de la API. La eliminación de un cupón impide que se aplique a futuras transacciones o clientes.

## Crea un código de promoción

Los códigos de promoción son códigos para el cliente creados a partir de cupones. También puedes especificar otras restricciones para controlar cuándo un cliente puede aplicar la promoción. Puedes compartir estos códigos con los clientes, quienes podrán intrducirlos durante la confirmación de compra para aplicar descuentos.

Para crear un [código de promoción](https://docs.stripe.com/api/promotion_codes.md), especifica un `cupón` existente y las restricciones (por ejemplo, limitarlo a un determinado [cliente](https://docs.stripe.com/api/promotion_codes/object.md#promotion_code_object-customer) o [customer_account](https://docs.stripe.com/api/promotion_codes/object.md#promotion_code_object-customer_account)). Si tienes un código específico para brindarle a tu cliente (por ejemplo, `FALL25OFF`), configura el `código`. Si dejas este campo en blanco, generaremos un `código` aleatorio.

El `code` reconoce mayúsculas y minúsculas, y es único entre los códigos de promoción activos para cualquier cliente. Por ejemplo:

- Puedes crear múltiples códigos de promoción restringidos a un cliente con el mismo `code`, pero no puedes reutilizar ese `code` para un código de promoción canjeable por cualquier cliente.
- Si creas un código de promoción que cualquier cliente puede canjear, no podrás crear otro código de promoción activo con el mismo `code`.
- Puedes crear un código de promoción con `code: NEWUSER`, inactívalo especificando `active: false` y, a continuación, crea un nuevo código de promoción con `code: NEWUSER`.

Los códigos de promoción se pueden crear en la sección de cupones del [Dashboard](https://dashboard.stripe.com/coupons/create) o con la [API](https://docs.stripe.com/api.md#promotion_codes):

```curl
curl https://api.stripe.com/v1/promotion_codes \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d coupon={{COUPON_ID}} \
  -d code=VIPCODE
```

## Usa un código de promoción

Habilita códigos de promoción canjeables por el cliente usando el parámetro [allow_promotion_codes](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-allow_promotion_codes) en una sesión de Checkout. De este modo, se habilita un campo en Checkout que permite a los clientes introducir códigos de promoción.

```curl
curl https://api.stripe.com/v1/checkout/sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "line_items[0][price_data][unit_amount]=2000" \
  -d "line_items[0][price_data][product_data][name]=T-shirt" \
  -d "line_items[0][price_data][currency]=usd" \
  -d "line_items[0][quantity]=1" \
  -d mode=payment \
  -d allow_promotion_codes=true \
  --data-urlencode "success_url=https://example.com/success"
```

## Configurar un código de promoción

Para cada código de promoción, puedes personalizar qué clientes acceden al descuento, los canjes y otros límites.

### Limitar por cliente

Para limitar una promoción a un determinado cliente, especifica un [cliente](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-customer) o una [customer_account](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-customer_account) cuando creas el código de promoción. Si no se especifica un cliente, el código podrá ser canjeado por cualquier cliente.

### Limitar por primer pedido

También puedes limitar el código de promoción a los clientes que compren por primera vez con el parámetro [restrictions.first_time_transaction](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-restrictions-first_time_transaction). Si no se define el `cliente` o `customer_account`, o si el `cliente` o `customer_account` definido no tiene pagos anteriores o *facturas* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice) no anuladas, se considera que es la primera transacción.

> Sessions que no crean un cliente crean un [cliente invitado](https://docs.stripe.com/payments/checkout/guest-customers.md) en el Dashboard. Se siguen aceptando códigos de promoción limitados a clientes nuevos para estas Sessions.

### Definir un importe mínimo

Con códigos de promoción, puedes establecer un importe mínimo de transacción para el descuento que cumpla los requisitos configurando [minimum_amount](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-restrictions-minimum_amount) y [minimum_amount_currency](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-restrictions-minimum_amount_currency). Dado que las restricciones del código de promoción se controlan en el momento del canje, el importe mínimo de transacción solo se aplica al pago inicial de una suscripción.

### Personalizar los vencimientos

Puedes definir la fecha de vencimiento del código de promoción con [expires_at](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-expires_at). Si el cupón subyacente ya tiene definido `redeem_by`, la fecha de vencimiento del código de promoción no puede ser posterior a la del cupón. Si no se especifica `promotion_code[expires_at]`, el valor `redeem_by` del cupón automáticamente se completa como `expires_at`.

Por ejemplo, si planeas admitir un cupón por un año, pero quieres que solo sea pueda canjearse durante una semana a partir de que el cliente lo recibe. Puedes establecer `coupon[redeem_by]` en un año a partir de ahora y cada parámetro `promotion_code[expires_at]` en una semana a partir de su creación.

### Limitar los canjes

Puedes limitar la cantidad de canjes usando [max_redemptions](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-max_redemptions), que funciona de manera similar al parámetro de cupones. Si el cupón subyacente ya tiene definido `max_redemptions`, entonces el `max_redemptions` del código de promoción no puede ser mayor que el del cupón.

Por ejemplo, si quieres que los primeros 50&nbsp;clientes puedan canjear un cupón de rebajas de temporada, pero la promoción de invierno solo puede usar 20 de esos canjes. En este escenario, puedes establecer `coupon[max_redemptions]: 50` y `promotion_code[max_redemptions]: 20`.

### Promociones inactivas

Puedes definir si un código de promoción se puede canjear en un determinado momento usando el parámetro [active](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-active). Sin embargo, si el cupón subyacente de un código de promoción pierde su validez, todos sus códigos de promoción quedarán inactivos de forma permanente. Del mismo modo, si un código de promoción alcanza su `max_redemptions` o `expires_at`, quedará inactivo de forma permanente. No puedes reactivar estos códigos de promoción.

### Eliminar promociones

Puedes eliminar promociones en el Dashboard o a través de la API. La eliminación de una promoción impide que se aplique a futuras transacciones o clientes.


# Página integrada

> This is a Página integrada for when payment-ui is embedded-form. View the full page at https://docs.stripe.com/payments/checkout/discounts?payment-ui=embedded-form.

Puedes usar descuentos para reducir el importe cobrado a un cliente. Los cupones y los códigos de promoción te permiten hacer lo siguiente:

- Aplicar un descuento al subtotal de una compra
- Aplicar un descuento a productos específicos
- Reducir el total facturado conforme a un porcentaje o un importe fijo
- Crear códigos de promoción para clientes sobre cupones para compartirlos directamente con ellos

> Si quieres usar cupones para hacer descuentos a *suscripciones* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) con Checkout y Billing, consulta [Descuentos para suscripciones](https://docs.stripe.com/billing/subscriptions/coupons.md).

## Crea un cupón

Los cupones especifican un descuento de valor fijo. Puedes crear códigos de promoción para el cliente que se asignen a un único cupón de base. Esto significa que los códigos `FALLPROMO` y `SPRINGPROMO` pueden apuntar a un mismo cupón de descuento del 25&nbsp;%. Puedes crear cupones en el [Dashboard](https://dashboard.stripe.com/coupons) o con la [API](https://docs.stripe.com/api.md#coupons):

```curl
curl https://api.stripe.com/v1/coupons \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d percent_off=20 \
  -d duration=once
```

## Usa un cupón

Para crear una sesión con un descuento aplicado, especifica la [ID del cupón](https://docs.stripe.com/api/coupons/object.md#coupon_object-id) en el parámetro `coupon` de la matriz de [descuentos](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-discounts). Actualmente, Checkout Sessions admite un máximo de un cupón o código promocional.

```curl
curl https://api.stripe.com/v1/checkout/sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "line_items[0][price]={{PRICE_ID}}" \
  -d "line_items[0][quantity]=1" \
  -d "discounts[0][coupon]={{COUPON_ID}}" \
  -d mode=payment \
  -d ui_mode=embedded_page \
  --data-urlencode "return_url=https://example.com/checkout/return?session_id={CHECKOUT_SESSION_ID}"
```

## Configura un cupón

Los cupones tienen los siguientes parámetros que puedes utilizar:

- `currency`
- `percent_off` o `amount_off`
- `max_redemptions`
- `redeem_by`, la fecha límite en la que los clientes pueden aplicar el cupón
- `applies_to`: limita los productos a los que se aplica el cupón

> El objeto Coupon agrega descuentos tanto a pagos únicos como a suscripciones. Algunos parámetros del objeto Coupon, como `duration`, solo se aplican a las [suscripciones](https://docs.stripe.com/billing/subscriptions/coupons.md).

### Limita el uso de canjes

Los valores `max_redemptions` y `redeem_by` se aplican al cupón en todas las aplicaciones. Por ejemplo, puedes restringir un cupón a los primeros 50 usos, o puedes hacer que un cupón venza en una fecha determinada.

### Limita los productos elegibles

Puedes limitar los productos a los que se les apliquen descuentos con un cupón agregando los ID de los productos al hash `applies_to` en el objeto Coupon. Todos los códigos de promoción que se asignen a este cupón se aplicarán únicamente a la lista de productos elegibles.

### Elimina un cupón

Puedes eliminar cupones en el Dashboard o a través de la API. La eliminación de un cupón impide que se aplique a futuras transacciones o clientes.

## Crea un código de promoción

Los códigos de promoción son códigos para el cliente creados a partir de cupones. También puedes especificar otras restricciones para controlar cuándo un cliente puede aplicar la promoción. Puedes compartir estos códigos con los clientes, quienes podrán intrducirlos durante la confirmación de compra para aplicar descuentos.

Para crear un [código de promoción](https://docs.stripe.com/api/promotion_codes.md), especifica un `cupón` existente y las restricciones (por ejemplo, limitarlo a un determinado [cliente](https://docs.stripe.com/api/promotion_codes/object.md#promotion_code_object-customer) o [customer_account](https://docs.stripe.com/api/promotion_codes/object.md#promotion_code_object-customer_account)). Si tienes un código específico para brindarle a tu cliente (por ejemplo, `FALL25OFF`), configura el `código`. Si dejas este campo en blanco, generaremos un `código` aleatorio.

El `code` reconoce mayúsculas y minúsculas, y es único entre los códigos de promoción activos para cualquier cliente. Por ejemplo:

- Puedes crear múltiples códigos de promoción restringidos a un cliente con el mismo `code`, pero no puedes reutilizar ese `code` para un código de promoción canjeable por cualquier cliente.
- Si creas un código de promoción que cualquier cliente puede canjear, no podrás crear otro código de promoción activo con el mismo `code`.
- Puedes crear un código de promoción con `code: NEWUSER`, inactívalo especificando `active: false` y, a continuación, crea un nuevo código de promoción con `code: NEWUSER`.

Los códigos de promoción se pueden crear en la sección de cupones del [Dashboard](https://dashboard.stripe.com/coupons/create) o con la [API](https://docs.stripe.com/api.md#promotion_codes):

```curl
curl https://api.stripe.com/v1/promotion_codes \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d coupon={{COUPON_ID}} \
  -d code=VIPCODE
```

## Usa un código de promoción

Habilita códigos de promoción canjeables por el cliente usando el parámetro [allow_promotion_codes](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-allow_promotion_codes) en una sesión de Checkout. De este modo, se habilita un campo en Checkout que permite a los clientes introducir códigos de promoción.

```curl
curl https://api.stripe.com/v1/checkout/sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "line_items[0][price_data][unit_amount]=2000" \
  -d "line_items[0][price_data][product_data][name]=T-shirt" \
  -d "line_items[0][price_data][currency]=usd" \
  -d "line_items[0][quantity]=1" \
  -d mode=payment \
  -d ui_mode=embedded_page \
  -d allow_promotion_codes=true \
  --data-urlencode "return_url=https://example.com/checkout/return?session_id={CHECKOUT_SESSION_ID}"
```

## Configurar un código de promoción

Para cada código de promoción, puedes personalizar qué clientes acceden al descuento, los canjes y otros límites.

### Limitar por cliente

Para limitar una promoción a un determinado cliente, especifica un [cliente](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-customer) o una [customer_account](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-customer_account) cuando creas el código de promoción. Si no se especifica un cliente, el código podrá ser canjeado por cualquier cliente.

### Limitar por primer pedido

También puedes limitar el código de promoción a los clientes que compren por primera vez con el parámetro [restrictions.first_time_transaction](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-restrictions-first_time_transaction). Si no se define el `cliente` o `customer_account`, o si el `cliente` o `customer_account` definido no tiene pagos anteriores o *facturas* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice) no anuladas, se considera que es la primera transacción.

> Sessions que no crean un cliente crean un [cliente invitado](https://docs.stripe.com/payments/checkout/guest-customers.md) en el Dashboard. Se siguen aceptando códigos de promoción limitados a clientes nuevos para estas Sessions.

### Definir un importe mínimo

Con códigos de promoción, puedes establecer un importe mínimo de transacción para el descuento que cumpla los requisitos configurando [minimum_amount](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-restrictions-minimum_amount) y [minimum_amount_currency](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-restrictions-minimum_amount_currency). Dado que las restricciones del código de promoción se controlan en el momento del canje, el importe mínimo de transacción solo se aplica al pago inicial de una suscripción.

### Personalizar los vencimientos

Puedes definir la fecha de vencimiento del código de promoción con [expires_at](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-expires_at). Si el cupón subyacente ya tiene definido `redeem_by`, la fecha de vencimiento del código de promoción no puede ser posterior a la del cupón. Si no se especifica `promotion_code[expires_at]`, el valor `redeem_by` del cupón automáticamente se completa como `expires_at`.

Por ejemplo, si planeas admitir un cupón por un año, pero quieres que solo sea pueda canjearse durante una semana a partir de que el cliente lo recibe. Puedes establecer `coupon[redeem_by]` en un año a partir de ahora y cada parámetro `promotion_code[expires_at]` en una semana a partir de su creación.

### Limitar los canjes

Puedes limitar la cantidad de canjes usando [max_redemptions](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-max_redemptions), que funciona de manera similar al parámetro de cupones. Si el cupón subyacente ya tiene definido `max_redemptions`, entonces el `max_redemptions` del código de promoción no puede ser mayor que el del cupón.

Por ejemplo, si quieres que los primeros 50&nbsp;clientes puedan canjear un cupón de rebajas de temporada, pero la promoción de invierno solo puede usar 20 de esos canjes. En este escenario, puedes establecer `coupon[max_redemptions]: 50` y `promotion_code[max_redemptions]: 20`.

### Promociones inactivas

Puedes definir si un código de promoción se puede canjear en un determinado momento usando el parámetro [active](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-active). Sin embargo, si el cupón subyacente de un código de promoción pierde su validez, todos sus códigos de promoción quedarán inactivos de forma permanente. Del mismo modo, si un código de promoción alcanza su `max_redemptions` o `expires_at`, quedará inactivo de forma permanente. No puedes reactivar estos códigos de promoción.

### Eliminar promociones

Puedes eliminar promociones en el Dashboard o a través de la API. La eliminación de una promoción impide que se aplique a futuras transacciones o clientes.

