> ## 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.112.0 (5 de agosto de 2026)

> Los códigos de descuento ahora admiten descuentos por Amount, programación, reglas de elegibilidad de clientes y opciones por moneda, junto con una experiencia de webhooks nativa completamente renovada con alertas por correo electrónico; además de Cash App Pay para suscripciones, SEPA Direct Debit para pagos únicos en EUR, mensajes de error de pago más claros para los clientes, webhooks de payouts, cambio autoservicio del correo electrónico de inicio de sesión, una configuración que permite a los clientes cancelar sus propias suscripciones y un filtro de moneda en la lista de pagos.

## Nuevas funcionalidades

### 1. **Códigos de descuento: descuentos por Amount, programación y reglas de elegibilidad**

Los códigos de descuento ya no se limitan a porcentajes. Ahora un código puede deducir un importe fijo, comenzar según una programación, aplicar un precio diferente por moneda y restringir quién puede canjearlo.

**Descuentos por Amount**

Configura `type` en `flat` para deducir un importe fijo en lugar de un porcentaje. La deducción se acumula para todo el carrito en vez de aplicarse a cada artículo de línea.

| Tipo       | Valor de API | Comportamiento                                                       |
| ---------- | ------------ | -------------------------------------------------------------------- |
| Porcentaje | `percentage` | Reduce el precio en un porcentaje, con un límite opcional por moneda |
| Amount     | `flat`       | Deduce un importe fijo, acumulado para todo el carrito               |

<Frame>
  <img src="https://mintcdn.com/dodopayments/Rh05LkBeJE32G3qq/images/discount-codes/discount-flat-discount-option.png?fit=max&auto=format&n=Rh05LkBeJE32G3qq&q=85&s=38ce7f39a1ccbd26c61718f685fc4e71" alt="Editor de códigos de descuento con el tipo Amount seleccionado, que muestra una deducción fija de 500 INR" style={{ maxHeight: '500px', width: 'auto' }} width="3474" height="1968" data-path="images/discount-codes/discount-flat-discount-option.png" />
</Frame>

**Opciones por moneda**

`currency_options` permite que un mismo código funcione correctamente con todas las monedas en las que vendes. Cada entrada establece, para una sola moneda, el descuento máximo (la deducción en sí para un código Amount, un límite para un código Percentage) y el valor mínimo del carrito. Un descuento Amount requiere al menos una opción de moneda con un valor predeterminado resoluble; las opciones de moneda siguen siendo opcionales para los descuentos Percentage.

**Elegibilidad de clientes**

`customer_eligibility` controla quién puede canjear un código:

| Valor        | Quién puede canjearlo                                             |
| ------------ | ----------------------------------------------------------------- |
| `any`        | Cualquier cliente. Esta es la opción predeterminada.              |
| `first_time` | Clientes que no te hayan comprado anteriormente.                  |
| `existing`   | Clientes que te hayan comprado anteriormente.                     |
| `specific`   | Solo los clientes que añadas a la lista de permitidos del código. |

<Frame>
  <img src="https://mintcdn.com/dodopayments/Rh05LkBeJE32G3qq/images/discount-codes/discount-restriction.png?fit=max&auto=format&n=Rh05LkBeJE32G3qq&q=85&s=3c01240807a7ca2f13b33a9f4cf4ce43" alt="Menú desplegable de elegibilidad de clientes que muestra las opciones Cualquiera, Primera compra, Existente y Cliente específico" style={{ maxHeight: '500px', width: 'auto' }} width="2832" height="830" data-path="images/discount-codes/discount-restriction.png" />
</Frame>

Administra la lista de permitidos desde el dashboard o con los nuevos endpoints: `GET /discounts/{discount_id}/customers` para enumerar los clientes asociados, `POST /discounts/{discount_id}/customers` para asociarlos y `DELETE /discounts/{discount_id}/customers/{customer_id}` para desvincular uno.

<Warning>
  Un código `specific` comienza con **cero** clientes elegibles y rechaza todos los canjes hasta que asocies clientes a él.
</Warning>

**Programación y límites por cliente**

Configura `starts_at` para programar el lanzamiento futuro de un código; si lo dejas sin configurar, el código se mantendrá activo de inmediato y debe ser estrictamente anterior a `expires_at`. Usa `per_customer_usage_limit` para limitar la frecuencia con la que un mismo cliente puede canjear un código, como un límite independiente que no puede superar el `usage_limit` general.

<Info>
  El valor mínimo del carrito siempre se mide con respecto a los precios originales del carrito, nunca al total acumulado a mitad de una combinación. Por lo tanto, el orden de combinación nunca cambia si se alcanza un mínimo.
</Info>

Más información: [Descuentos](/features/discount-codes) | [Crear descuento](/api-reference/discounts/create-discount)

### 2. **Una experiencia de webhooks renovada**

La sección de webhooks del dashboard se ha reconstruido como una experiencia nativa que reemplaza el portal integrado. Ahora todo se encuentra dentro del dashboard, con tablas, filtros y navegación coherentes, y funciona correctamente en dispositivos móviles.

* **Endpoints**: crea y edita endpoints en un panel lateral, selecciona tipos de eventos desde un árbol con búsqueda y consulta de un vistazo la tasa de errores de las últimas 24 horas.
* **Actividad y logs**: observa los intentos de entrega a lo largo del tiempo en el gráfico **Actividad de entrega**, explora los mensajes entregados y abre una página de **detalles del mensaje** para inspeccionar el payload y cada intento de entrega, junto con su código de respuesta y duración. Desde allí puedes reproducir cada intento.
* **Catálogo de eventos**: explora todos los tipos de eventos que envía Dodo Payments, junto con su esquema y un payload de ejemplo.
* **Resumen del endpoint**: estadísticas de entrega de las últimas 24 horas, el signing secret para consultar o rotar y el **historial de reproducciones**.
* **Pruebas**: envía un evento de ejemplo a un endpoint para verificar tu receptor antes de entrar en producción.
* **Avanzado**: limita la velocidad de entrega, administra los encabezados personalizados enviados con cada solicitud a ese endpoint y edita su transformación.
* **Reproducción masiva**: en un endpoint, recupera mensajes fallidos, reproduce los que nunca se enviaron o reproduce un intervalo filtrado.
* **Alertas por correo electrónico**: una nueva pestaña de **Configuración** donde puedes enumerar las direcciones que deben recibir un correo cuando las entregas a un endpoint comiencen a fallar. Separa varias direcciones con comas y déjalo vacío para desactivar las alertas.

<Info>
  Este cambio solo afecta al dashboard. Tus endpoints existentes, signing secrets, verificación de firmas, nombres de eventos y payloads no cambian; no se requiere trabajo de integración.
</Info>

Más información: [Webhooks](/developer-resources/webhooks) | [Eventos de Webhook](/developer-resources/webhooks/intents/webhook-events-guide)

### 3. **Cash App Pay para suscripciones**

Cash App Pay ahora puede respaldar una suscripción recurrente, no solo un pago único. Está disponible en checkouts de EE. UU. facturados en USD, junto con las opciones de tarjeta existentes.

Más información: [Billeteras digitales](/features/payment-methods/digital-wallets)

### 4. **SEPA Direct Debit**

SEPA Direct Debit ya está disponible en toda la eurozona, lo que permite a los clientes pagar directamente desde su cuenta bancaria en lugar de usar una tarjeta. Se ofrece en checkouts en EUR para pagos únicos.

<Warning>
  SEPA Direct Debit no es instantáneo. Un pago tarda **6 días hábiles** en confirmarse, así que no trates la autorización como liquidación: completa el pedido solo cuando el pago alcance el estado succeeded.
</Warning>

Más información: [Métodos de pago europeos](/features/payment-methods/europe)

### 5. **Mensajes de error de pago más claros**

Cuando un pago falla, tú y tu cliente ahora ven un texto redactado específicamente para la situación en lugar del texto sin procesar del procesador. Cada error se resuelve mediante una taxonomía de **46 códigos de error unificados**, cada uno asignado a dos audiencias:

* **Tú** ves un encabezado y una acción recomendada en el pago, para saber si debes pedirle al cliente que vuelva a intentarlo, se ponga en contacto con su banco o use otra tarjeta. `error_message` en el objeto Payment ahora contiene este texto cuando `error_code` es un código unificado reconocido.
* **Tu cliente** ve una explicación en lenguaje sencillo en la pantalla de error del checkout, en Customer Portal y en los correos electrónicos de dunning; por ejemplo, *"El código de seguridad de tu tarjeta (CVC) no parece correcto. Vuelve a introducirlo e inténtalo de nuevo."*

<Warning>
  Para los rechazos sensibles al fraude — `FRAUDULENT`, `LOST_CARD`, `STOLEN_CARD` y `PICKUP_CARD` — el cliente siempre ve un mensaje genérico para que nunca se revele el motivo real. Tú sigues viendo el motivo verdadero, marcado con una advertencia para no compartirlo.
</Warning>

Más información: [Errores de transacciones](/api-reference/transaction-failures) | [Pagos](/features/transactions/payments) | [Obtener detalles del pago](/api-reference/payments/get-payments-1)

### 6. **Permite que los clientes cancelen sus propias suscripciones**

**Permitir la cancelación de suscripciones** ahora es una configuración de primer nivel en la pestaña **Suscripciones** de la configuración del dashboard y se aplica de principio a fin. Cuando la desactivas, Customer Portal deshabilita el botón de cancelación y la API rechaza la cancelación iniciada por el cliente con un `403`, tanto para la cancelación inmediata como para el flujo de "cancelar en la próxima fecha de facturación". Antes, la configuración solo ocultaba el botón, por lo que un cliente decidido aún podía cancelar mediante la API.

La configuración está **habilitada de forma predeterminada**. Tus propias cancelaciones mediante la API del merchant y el dashboard nunca se ven afectadas, y un cliente siempre puede revocar una cancelación que ya haya programado.

Más información: [Customer Portal](/features/customer-portal) | [Suscripciones](/features/subscription)

### 7. **Webhooks de payouts**

Ahora recibes webhooks para tus propios payouts, de modo que puedes conciliarlos en tus sistemas contables sin hacer polling.

| Evento               | Se activa cuando                                                              |
| -------------------- | ----------------------------------------------------------------------------- |
| `payout.created`     | Se crea un payout, ya sea mediante el ciclo automático o fuera de ciclo       |
| `payout.in_progress` | Llega la fecha de vencimiento del payout y comienza el procesamiento          |
| `payout.on_hold`     | El payout se pausa o se somete a revisión                                     |
| `payout.success`     | El payout a tu cuenta bancaria se liquida                                     |
| `payout.failed`      | El payout falla y el importe y las comisiones se abonan de nuevo en tu wallet |

<Note>
  `payout.created` se emitía anteriormente como `payout.not_initiated`. Si un endpoint existente filtra por `payout.not_initiated`, actualiza el filtro a `payout.created` para que siga coincidiendo. El campo `status` del payload sigue informando `not_initiated` en esta etapa.
</Note>

Más información: [Webhooks de payouts](/developer-resources/webhooks/intents/payout) | [Proceso de payouts](/features/payouts/payout-structure)

### 8. **Cambia tu correo electrónico de inicio de sesión desde el dashboard**

Ahora puedes cambiar la dirección de correo electrónico con la que inicias sesión sin contactar con soporte. La pestaña Cuenta se ha rediseñado e incluye una nueva sección **Cambiar correo electrónico**, con un botón **Cambiar correo electrónico** que inicia el proceso.

La verificación se realiza en dos pasos: enviamos un código a tu dirección **actual** para confirmar que eres tú y, después, un segundo código a tu dirección **nueva** para confirmar que tienes control sobre ella. Una vez verificadas ambas:

* Iniciarás sesión con la nueva dirección a partir de ese momento. La dirección anterior dejará de funcionar para contraseñas, magic links y códigos enviados por correo electrónico.
* Cualquier proveedor de identidad vinculado, como el inicio de sesión de Google o GitHub, se desvinculará y deberá volver a conectarse.
* Tu contraseña, negocios, acceso del equipo y estado de verificación no cambian.
* Se envía una notificación a tu dirección anterior para que un cambio inesperado nunca pase desapercibido.

Más información: [Mi cuenta](/miscellaneous/accounts)

### 9. **Analytics: nuevos widgets y mejoras**

Sobre la base de la renovación de Analytics v3, esta versión incorpora nuevas visualizaciones y perfecciona las existentes.

* **Los ingresos por país ahora se muestran en un mapa coroplético de ancho completo**, con la lista de países ordenada a su lado; la tarjeta se puede compartir como el resto.
* **Gráficos de tendencias rediseñados** con cursor de precisión al pasar el ratón, una etiqueta de fecha desplazable en el eje x y un tooltip compacto.
* **Nuevos preajustes de fecha**: **Últimos 30 días** reemplaza a Últimas 4 semanas y **Últimos 6 meses** se añade a la lista.
* **Tus filtros se conservan.** El preajuste de fecha y el modo de comparación ahora persisten por negocio y te siguen entre dispositivos, en lugar de restablecerse a los valores predeterminados en cada sesión.
* **Los clientes principales se identifican por nombre**, con el correo electrónico como alternativa.
* Los ingresos por país ahora devuelven hasta los **150 principales** países.

Más información: [Analytics del dashboard](/features/analytics-and-reporting)

## Mejoras y correcciones de errores

### 10. **Filtra los pagos por moneda**

`GET /payments` acepta un parámetro de consulta opcional **`currency`**, para que puedas enumerar solo los pagos liquidados en una moneda determinada; por ejemplo, `GET /payments?currency=EUR`. El mismo filtro está disponible en la tabla Payments del dashboard.

Más información: [Enumerar pagos](/api-reference/payments/get-payments)

### 11. **El plazo de respuesta a disputas se amplía a 10 días**

Ahora tienes **10 días** para responder a una disputa después de su creación, frente a los 4 días anteriores. La cuenta atrás de la disputa en tu dashboard y la fecha límite de respuesta devuelta por la API reflejan el plazo ampliado.

Más información: [Disputas](/features/transactions/disputes)

### 12. **Formularios más claros para cuentas bancarias de payouts**

Añadir una cuenta bancaria para payouts es menos ambiguo. Las etiquetas de los campos, las descripciones y los tooltips ahora se adaptan al tipo de negocio, por lo que el nombre del titular de la cuenta y el del beneficiario dejan de parecer duplicados para los empresarios individuales. Si eliges **Otro** como banco, puedes escribir el nombre libremente; el código bancario nacional de China aparece etiquetado como **CNAPS**, y la página de payouts sigue visible en modo de prueba para que puedas acceder a tus cuentas vinculadas desde cualquiera de los dos modos.

Más información: [Proceso de payouts](/features/payouts/payout-structure)

### Otras correcciones y mejoras

* **Los créditos por cambios de plan se revierten cuando falla un pago.** Los créditos de prorrateo emitidos durante un cambio de plan de suscripción ya no permanecen si el pago resultante no tiene éxito.
* **Las facturas de pruebas pagadas muestran el cargo de la prueba**, no el precio recurrente habitual.
* **Los descuentos porcentuales respetan el valor mínimo del carrito**, medido con respecto al precio base y no al total acumulado; además, el tiempo de espera de bloqueo de un descuento ahora devuelve un código de error distinto en lugar de un `503` genérico.
* **Eliminar un método de pago ya eliminado ahora tiene éxito** en lugar de devolver un error, lo que hace que la llamada sea idempotente de forma segura.
* **Se ha corregido la moneda utilizada para el mínimo del mandato de India** al actualizar el método de pago de una suscripción.
* **Las entradas del ledger de crédito que superan los límites permitidos** se rechazan con un `400` tipado en lugar de fallar posteriormente.
* **Los productos Pay-what-you-want admiten un importe fijo** en enlaces de checkout compartidos, y los ID de entitlement se muestran en el panel de detalles del entitlement.
* Correcciones de Analytics: series de valor de vida del cliente, add-ons incluidos en MRR, ausencia de comparación de periodos en intervalos de todo el tiempo, series que se detienen en el bucket actual y etiquetas de intervalo y comparación más claras.
* Correcciones menores de errores y mejoras de estabilidad en toda la plataforma.
