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

# v1.99.0 (25 de mayo de 2026)

> Códigos de descuento apilados (hasta 20 por checkout, pago o suscripción), siete nuevos correos electrónicos de notificación al cliente para reembolsos y eventos del ciclo de vida de suscripciones, Sunbit BNPL para clientes de EE.UU., renovación de la página de pago del checkout aumentando las tasas de éxito en 2-3%, reestructuración del formulario del producto con vista previa en vivo y autoguardado, y rediseño de la Configuración de Negocios

## Nuevas Funcionalidades

### 1. **Códigos de Descuento Apilados**

Las sesiones de checkout, pagos, suscripciones y cambios de plan ahora aceptan **hasta 20 códigos de descuento en una sola solicitud** a través del array `discount_codes`. Los códigos se aplican **en el orden del array** — el primer código elegible reduce el precio base, el segundo reduce el precio ya descontado, y así sucesivamente — por lo que puedes superponer campañas sin crear códigos combinados a medida.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Ehnri26kKx69Tfxe/images/changelog/v1.99.0/stacked-discounts.png?fit=max&auto=format&n=Ehnri26kKx69Tfxe&q=85&s=7a2606d7027de6e662cf9be6b7df8213" alt="Diálogo de Confirmación de Cambio de Plan con múltiples códigos de descuento apilados" style={{ maxHeight: '500px', width: 'auto' }} width="1132" height="1023" data-path="images/changelog/v1.99.0/stacked-discounts.png" />
</Frame>

```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'
});
```

**Dónde se aplica**

| Superficie           | Campo            | Máximo de códigos |
| -------------------- | ---------------- | ----------------- |
| Sesiones de Checkout | `discount_codes` | 20                |
| Pagos                | `discount_codes` | 20                |
| Suscripciones        | `discount_codes` | 20                |
| Cambios de Plan      | `discount_codes` | 20                |

**Comportamiento de cambio de plan**

| Valor `discount_codes`      | Efecto                                                                                                        |
| --------------------------- | ------------------------------------------------------------------------------------------------------------- |
| No proporcionado            | Los descuentos existentes con `preserve_on_plan_change=true` se mantienen si son aplicables al nuevo producto |
| `[]` (array vacío)          | Todos los descuentos existentes se eliminan de la suscripción                                                 |
| `['CODE_A', 'CODE_B', ...]` | Reemplaza cualquier descuento existente con este conjunto apilado, aplicado en el orden del array             |

**Forma de la respuesta**

El conjunto completo de descuentos aplicados se devuelve bajo el array `discounts` en pagos y suscripciones — cada entrada incluye `discount_id`, `position`, e `cycles_remaining` (para suscripciones). El campo singular legado `discount_id` está obsoleto pero sigue presente para compatibilidad con versiones anteriores.

<Info>
  El campo singular `discount_code` está **obsoleto** pero sigue siendo totalmente compatible — las integraciones existentes continúan funcionando sin cambios. No se puede combinar con `discount_codes` en la misma solicitud. Recomendamos migrar a `discount_codes` cuando sea conveniente, incluso para códigos únicos, para aprovechar la apilamiento y la forma de respuesta más rica.
</Info>

Aprende más: [Códigos de Descuento](/features/discount-codes) | [Sesión de Checkout](/developer-resources/checkout-session) | [Cambios de Plan](/developer-resources/subscription-upgrade-downgrade)

### 2. **Siete Nuevos Correos Electrónicos de Notificación al Cliente**

Siete nuevos correos electrónicos transaccionales ahora se envían automáticamente a tus clientes, cubriendo confirmaciones de reembolsos, hitos del ciclo de vida de suscripciones y fallos de pago. Cada correo electrónico se puede activar de forma independiente desde **Configuración → Comunicación** en la sección **Correos Electrónicos al Cliente**.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Ehnri26kKx69Tfxe/images/changelog/v1.99.0/customer-notification-emails.png?fit=max&auto=format&n=Ehnri26kKx69Tfxe&q=85&s=44cad42723269d9728a9dae2a061613b" alt="Panel de configuración de Correos Electrónicos al Cliente con conmutadores para cada correo de notificación" style={{ maxHeight: '500px', width: 'auto' }} width="1694" height="1020" data-path="images/changelog/v1.99.0/customer-notification-emails.png" />
</Frame>

**Opcional (habilitado por defecto)**

| Correo Electrónico                                                          | Cuándo se envía                                                                            |
| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| **Reembolso Exitoso**                                                       | Un reembolso se procesa con éxito y los fondos están de regreso para el cliente            |
| **Trial de Suscripción Finalizando**                                        | \~2 días antes de que expire un trial y ocurra el primer cargo de facturación              |
| **Suscripción Cancelada Inmediatamente**                                    | Una suscripción es cancelada con efecto inmediato                                          |
| **Suscripción Programada para Cancelar en la Próxima Fecha de Facturación** | Una suscripción está programada para cancelarse al final del período de facturación actual |

**Opcional hacia fuera (desactivado por defecto)**

| Correo Electrónico                     | Cuándo se envía                                                                                                                                            |
| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Pago Fallido**                       | Un intento de pago falla — habilita si quieres que Dodo Payments notifique al cliente directamente en lugar de hacerlo en tu propio sistema                |
| **Renovación de Suscripción Fallida**  | Un pago de renovación de suscripción falla específicamente; se envía en lugar de (no además de) el correo general de Pago Fallido para pagos de renovación |
| **Recordatorio de Renovación Próxima** | \~2 días antes de que una suscripción se renueve                                                                                                           |

<Tip>
  Si gestionas la comunicación con el cliente por ti mismo a través de webhooks, deja los correos electrónicos opcionales hacia fuera desactivados para evitar enviar notificaciones duplicadas al cliente para el mismo evento.
</Tip>

<Note>
  Los correos electrónicos al cliente son independientes de los correos de notificación enviados a tu equipo. Desactivar un correo electrónico al cliente no afecta las notificaciones de tu equipo para el mismo evento.
</Note>

Aprende más: [Preferencias de Comunicación](/features/communication-preferences)

### 3. **Sunbit — Financiamiento en Cuotas para Clientes de EE.UU.**

**Sunbit** ahora está disponible como un método de pago Buy Now, Pay Later, permitiendo a los clientes de EE.UU. dividir las compras en cuotas mensuales manejables al momento del checkout.

| Característica      | Detalles                         |
| ------------------- | -------------------------------- |
| **Disponibilidad**  | Estados Unidos                   |
| **Moneda**          | USD                              |
| **Cantidad mínima** | \$60.00                          |
| **Cantidad máxima** | \$19,999.00                      |
| **Suscripciones**   | No soportado (solo pagos únicos) |

Pasa `sunbit` en `allowed_payment_method_types` para habilitarlo en una sesión de checkout:

```javascript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  allowed_payment_method_types: ['sunbit', 'credit', 'debit'],
  return_url: 'https://example.com/success'
});
```

El cliente completa una aplicación de financiamiento corta en el modal de Sunbit al momento del checkout; una vez aprobado, el pago se confirma y tú recibes los fondos como normal.

<Tip>
  Siempre incluye `credit` e `debit` como alternativas. No todos los clientes calificarán para el financiamiento de Sunbit, y las transacciones fuera del rango de $60.00–$19,999.00 no mostrarán la opción.
</Tip>

Aprende más: [Métodos de Pago BNPL](/features/payment-methods/bnpl)

## Mejoras

### 4. **Reforma de la Página de Pago del Checkout**

La página de pago en el checkout ha sido sustancialmente reestructurada de principio a fin — diseño más ajustado, carga percibida más rápida, estados de validación más claros, y UX de ingreso de tarjeta refinado. En conjunto, estos cambios aumentaron **las tasas de éxito de checkout observadas en \~2-3%** en todo el tráfico global.

<div style={{ display: 'flex', gap: '16px', alignItems: 'flex-start', flexWrap: 'wrap' }}>
  <div style={{ flex: '1 1 280px', minWidth: '260px' }}>
    <Frame caption="Before">
      <img src="https://mintcdn.com/dodopayments/Ehnri26kKx69Tfxe/images/changelog/v1.99.0/checkout-payment-before.png?fit=max&auto=format&n=Ehnri26kKx69Tfxe&q=85&s=cd86eb287a4688e14bb01e836382744f" alt="Página de pago del checkout anterior" width="509" height="695" data-path="images/changelog/v1.99.0/checkout-payment-before.png" />
    </Frame>
  </div>

  <div style={{ flex: '1 1 280px', minWidth: '260px' }}>
    <Frame caption="After">
      <img src="https://mintcdn.com/dodopayments/Ehnri26kKx69Tfxe/images/changelog/v1.99.0/checkout-payment-after.png?fit=max&auto=format&n=Ehnri26kKx69Tfxe&q=85&s=4eb10926ab5a1a1c97ab4cbf16e78fb2" alt="Página de pago del checkout rediseñada" width="1114" height="1612" data-path="images/changelog/v1.99.0/checkout-payment-after.png" />
    </Frame>
  </div>
</div>

Qué cambió:

* **Interacciones en campos más fluidas** — autofoco, orden de tabulación más inteligente, y navegación mejorada con el teclado en el formulario de tarjeta
* **Estados de error y carga más limpios** — la validación en línea muestra precisamente dónde el cliente necesita actuar, reemplazando el patrón anterior de banner de error de formulario completo
* **Pintura más rápida** — esqueletos e hidratación progresiva eliminan el parpadeo de estado en blanco brevemente en redes lentas
* **Pulido móvil** — objetivos de toque, comportamiento de desplazamiento, y manejo del teclado afinados específicamente para el checkout móvil, donde ahora se encuentra la mayoría del tráfico

<Tip>
  No se requieren cambios de integración. Las sesiones de checkout existentes adoptan automáticamente la nueva página de pago.
</Tip>

### 5. **Reestructuración del Formulario de Producto**

Los flujos de **crear**, **editar** y **duplicar** producto han sido reconstruidos desde cero en torno a una experiencia de formulario única y coherente.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Ehnri26kKx69Tfxe/images/changelog/v1.99.0/product-form.png?fit=max&auto=format&n=Ehnri26kKx69Tfxe&q=85&s=12693e04457400a4aa33063ef0d73221" alt="Formulario de producto unificado con Detalles Básicos, Medios y Descripción, Precios, y una vista previa de checkout en vivo uno al lado del otro" style={{ maxHeight: '500px', width: 'auto' }} width="1143" height="959" data-path="images/changelog/v1.99.0/product-form.png" />
</Frame>

Destacados:

* **Vista previa en vivo** — ve cómo aparece tu producto en el checkout y portal del cliente mientras editas, junto al formulario
* **Autoguardado** — los borradores se guardan automáticamente, por lo que navegar fuera o perder tu pestaña ya no significa perder tu trabajo
* **Editor Markdown** — las descripciones de los productos ahora soportan un editor de markdown completo con renderizado en vivo, vista previa de enlaces y controles de formato en línea
* **Paridad en el flujo de duplicación** — duplicar un producto abre el mismo formulario unificado pre-rellenado, en lugar de un diálogo reducido, para que puedas ajustar cada campo antes de guardar la copia

<Tip>
  Usa **Duplicar** para crear variantes regionales o de nivel de precios de un producto existente sin reingresar descripciones, metadatos o configuración de cumplimiento.
</Tip>

### 6. **Rediseño de la Página de Configuración de Negocios**

La página **Configuración → Negocios** ha sido rediseñada para facilitar la escaneabilidad de la configuración y acelerar las actualizaciones. Las configuraciones ahora están agrupadas en secciones más claras con texto explicativo que describe el impacto de cada conmutador antes de activarlo.

No hay **cambios de comportamiento** en las configuraciones existentes — solo el diseño, agrupamiento y las explicaciones circundantes han mejorado.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Ehnri26kKx69Tfxe/images/changelog/v1.99.0/business-settings.png?fit=max&auto=format&n=Ehnri26kKx69Tfxe&q=85&s=7603e02f67bb05a590681400f1e3f4b5" alt="Página de Configuración de Negocios rediseñada con secciones agrupadas para Información de Negocios, Marcas, moneda, seguridad y seguimiento" style={{ maxHeight: '500px', width: 'auto' }} width="1195" height="893" data-path="images/changelog/v1.99.0/business-settings.png" />
</Frame>

## Mejoras

* **El override `credits_amount` ahora se propaga correctamente a las rutas de consulta en sesión de checkout y enlace de pago** — cuando se creaba una sesión de checkout o enlace de pago con un override por-checkout `credit_entitlements`, al obtener esa sesión o enlace a través de GET se retornaba el `credits_amount` predeterminado a nivel de producto en lugar del valor sobrescrito. Esto ahora está corregido.
* **Acción de reembolso deshabilitada para pagos totalmente reembolsados** — el botón de Reembolso en un pago ahora se deshabilita una vez que un pago está totalmente reembolsado, con un mensaje de herramienta explicando por qué. Anteriormente el botón permanecía activo y retornaba un error solo después de la presentación.
* Correcciones de errores menores y mejoras de estabilidad en toda la plataforma.
