Requisitos previos
Antes de comenzar, necesitas:- Una cuenta de comerciante de Dodo Payments
- Una API key de Developer → API Keys en el dashboard, almacenada en
DODO_PAYMENTS_API_KEY - Un webhook secret de Developer → Webhooks, almacenado en
DODO_PAYMENTS_WEBHOOK_KEY - Al menos un producto de suscripción creado en Products
Integración de API
Sesiones de checkout
Crea una suscripción mediante una sesión de checkout con tu producto de suscripción. El cliente autoriza un método de pago y la suscripción se activa cuando completa el checkout.- Node.js SDK
- Python SDK
- REST API
Respuesta de API
La respuesta incluye uncheckout_url:
Webhooks
Los webhooks notifican a tu servidor cuando ocurren eventos de suscripción. Configura tu endpoint en Developer → Webhooks en el dashboard. Para configurar tu endpoint de webhook, consulta Webhooks.Tipos de eventos de suscripción
Registra estos eventos para gestionar el ciclo de vida de la suscripción:subscription.active— La suscripción se activasubscription.updated— Un campo de la suscripción cambiósubscription.on_hold— Falló un cobro de renovación o de cambio de plansubscription.failed— Falló la creación de la suscripción (terminal; el cliente debe suscribirse de nuevo)subscription.renewed— Un cobro recurrente se realizó correctamentesubscription.past_due— Falló una renovación y comenzó el período de gracia; el cliente conserva el acceso hastapast_due_ends_atsubscription.plan_changed— El plan se actualizó, degradó o modificósubscription.cancelled— La suscripción se cancelósubscription.expired— La suscripción llegó al final de su plazo
paused, unpaused y update_payment_method, consulta Webhooks de suscripción.
Escenarios de pago
Flujo de pago exitoso La secuencia de webhooks depende de si la suscripción tiene un período de prueba. Facturación inmediata (0 días de prueba):subscription.active: el mandato se autoriza y la suscripción se activa.payment.succeeded: confirma el primer cobro. Recíbelo entre 2 y 10 minutos después del checkout.
- Al comenzar la prueba (checkout):
subscription.activese activa una vez autorizado el método de pago. Todavía no se realiza ningún cobro recurrente. El primer cobro real se aplaza hasta que finalice la prueba. - Al finalizar la prueba: se cobra el importe recurrente y recibes
payment.succeededjunto consubscription.renewed.
subscription.renewed: se activa en cada ciclo de facturación cuando se deduce el pago de renovación, siempre junto conpayment.succeeded. También incluye elnext_billing_dateactualizado.
Cada vez que se deduce dinero por un producto de suscripción, recibes
subscription.renewed y payment.succeeded. Usa subscription.renewed (en lugar de usar solo payment.succeeded) como señal para extender el acceso durante el siguiente ciclo.- Fallo de la suscripción
subscription.failed- Falló la creación de la suscripción porque no se pudo crear un mandato.payment.failed- Indica un pago fallido.
- Suscripción en espera
subscription.on_hold- La suscripción se pone en espera debido a un pago de renovación fallido o a un cobro fallido por cambio de plan. Si tu negocio tiene un período de gracia, una renovación fallida mueve primero la suscripción apast_due(subscription.past_due), y solo pasa aon_hold(ocancelled, según la configuración del período de gracia) cuando este finaliza. Consulta Estados de la suscripción.- Cuando una suscripción pasa a estar en espera, no se renovará automáticamente hasta que se actualice el método de pago.
Práctica recomendada: Para simplificar la implementación, recomendamos realizar principalmente el seguimiento de los eventos de suscripción para gestionar su ciclo de vida.
subscription.failed frente a subscription.on_hold
Es fácil confundir estos dos eventos, pero requieren un tratamiento muy diferente:
Gestionar una suscripción en espera
Cuando una suscripción entra en el estadoon_hold, debes actualizar el método de pago para reactivarla. En esta sección se explica cuándo las suscripciones pasan a estar en espera y cómo gestionarlas.
Cuándo las suscripciones pasan a estar en espera
Una suscripción pasa a estar en espera cuando:- Falla el pago de renovación: falla el cobro automático de renovación debido a fondos insuficientes, una tarjeta vencida o un rechazo bancario
- Falla el cobro por cambio de plan: falla un cobro inmediato durante la actualización o degradación del plan
- Falla la autorización del método de pago: no se puede autorizar el método de pago para cobros recurrentes
Reactivar suscripciones en espera
Para reactivar una suscripción desde el estadoon_hold, usa la API Update Payment Method. Esto automáticamente:
- Crea un cobro por las cantidades pendientes
- Genera una factura para el cobro
- Procesa el pago con el nuevo método de pago
- Reactiva la suscripción al estado
activecuando el pago se realiza correctamente
1
Handle subscription.on_hold webhook
Cuando recibas un webhook
subscription.on_hold, actualiza el estado de tu aplicación y notifica al cliente:2
Update payment method
Cuando el cliente esté listo para actualizar su método de pago, llama a la API Update Payment Method:
También puedes usar un ID de método de pago existente si el cliente tiene métodos de pago guardados:
3
Monitor webhook events
Después de actualizar el método de pago, supervisa estos eventos de webhook:
payment.succeeded- El cobro por las cantidades pendientes se realizó correctamentesubscription.active- La suscripción se reactivó
Ejemplo de payload de evento de suscripción
Cambiar planes de suscripción
Puedes actualizar o degradar un plan de suscripción mediante el endpoint de API de cambio de plan. Esto te permite modificar el producto, la cantidad y gestionar el prorrateo de la suscripción.Change Plan API Reference
Para obtener información detallada sobre cómo cambiar los planes de suscripción, consulta nuestra documentación de la API Change Plan.
Opciones de prorrateo
Al cambiar los planes de suscripción, tienes cuatro opciones para gestionar el cobro inmediato:1. prorated_immediately
- Abona la parte no utilizada del ciclo de facturación actual, prorrateada según el tiempo restante. El crédito cubre el plan base, la cantidad y cualquier complemento
- Después cobra un ciclo completo con el nuevo plan, cantidad y complementos. El cobro nunca se prorratea
- Cobro inmediato neto = (ciclo nuevo completo) menos (fracción restante x ciclo antiguo completo). Si el crédito es mayor, la diferencia se conserva como crédito asociado a la suscripción para futuras renovaciones
- Durante un período de prueba, esto cambia inmediatamente al usuario al nuevo plan y cobra al cliente de inmediato
2. full_immediately
- Cobra al cliente el importe total de la suscripción del nuevo plan sin crédito por el ciclo anterior
- Tanto al actualizar como al degradar el plan, el cliente paga desde cero el precio completo del nuevo plan
- Es útil cuando quieres cobrar el importe total independientemente del tiempo restante del plan anterior
3. difference_immediately
- El cliente paga únicamente la diferencia entre el precio del plan anterior y el nuevo
- El importe no depende de cuándo se realiza el cambio dentro del ciclo. La misma actualización cuesta lo mismo el día 1 y el día 29
- Al actualizar el plan, al cliente se le cobra inmediatamente la diferencia. Por ejemplo, $30/mes → $80/mes = se cobran $50 al instante
- Al degradar el plan, la diferencia de precio se almacena como crédito asociado a la suscripción y se aplica automáticamente a futuras renovaciones. Por ejemplo, $50/mes → $20/mes = se almacenan $30 como crédito
4. do_not_bill
- Aplica el cambio de plan inmediatamente, pero no cobra nada en el momento del cambio. El nuevo plan, la cantidad y los complementos se pueden usar de inmediato
- Como no se cobra nada ahora, una actualización proporciona al cliente el plan superior de forma gratuita durante el resto del ciclo actual. Una degradación entra en vigor inmediatamente sin crédito por la parte no utilizada del ciclo que el cliente ya pagó
- Los complementos concedidos mediante
do_not_billno se acreditan en un cambio de plan posterior, porque nunca se facturaron. Un cambio posterior factura íntegramente la nueva cantidad de complementos - El plan actualizado (y la cantidad o los complementos) se factura en la siguiente renovación programada, y se conserva la fecha de facturación original
Comportamiento
- Cuando llamas a esta API, Dodo Payments inicia inmediatamente un cobro según la opción de prorrateo seleccionada
- Con
prorated_immediately, se calcula un crédito por la parte no utilizada del ciclo actual en cada cambio, tanto al actualizar como al degradar el plan. Si ese crédito supera el cobro del nuevo ciclo, el importe restante se añade al saldo de crédito de la suscripción. Estos créditos son específicos de esa suscripción y solo se utilizarán para compensar futuros pagos recurrentes de la misma suscripción - Con
difference_immediately, el importe neto siempre es la diferencia exacta de precio. En las degradaciones, el excedente se almacena como crédito asociado a la suscripción, igual que conprorated_immediately - La opción
full_immediatelyomite los cálculos de crédito y cobra el importe completo del nuevo plan - La opción
do_not_billaplica el cambio inmediatamente, pero aplaza la facturación hasta la siguiente fecha de renovación, que se conserva
Procesamiento del cobro
- El cobro inmediato iniciado al cambiar el plan suele terminar de procesarse en menos de 2 minutos
- Si este cobro inmediato falla por cualquier motivo, la suscripción pasa automáticamente a estar en espera hasta que se resuelva el problema
Suscripciones bajo demanda
Las suscripciones bajo demanda te permiten cobrar a los clientes de forma flexible, no solo según un calendario fijo. Esta función está disponible para todas las cuentas.
subscription_data.on_demand en el cuerpo de la solicitud. Esto te permite autorizar un método de pago sin realizar un cobro inmediato o establecer un precio inicial personalizado.
Para cobrar una suscripción bajo demanda:
Para los cobros posteriores, usa el endpoint POST /subscriptions//charge y especifica el importe que se cobrará al cliente por esa transacción.
Para consultar una guía completa paso a paso (incluidos ejemplos de solicitudes y respuestas, políticas de reintento seguras y gestión de webhooks), consulta la Guía de suscripciones bajo demanda.
Aspectos clave de la facturación de suscripciones
Las pruebas crean una autorización de $0, no un cobro. Cuando una suscripción tiene un período de prueba, al comenzar la prueba se crea una autorización de mandato de $0 para guardar la tarjeta; el primer cobro real se realiza cuando termina la prueba. En la lista de pagos, una suscripción en una prueba gratuita muestra exactamente un pago con
total_amount de 0. Una prueba de pago cobra por adelantado su trial_amount.Ciclo de vida de la suscripción:
past_due = falló una renovación y el período de gracia está activo (el cliente conserva el acceso). on_hold = falló una renovación (recuperable: solicita al cliente que actualice su método de pago; se aplican reintentos de dunning). expired = el plazo terminó sin renovación y no se puede reactivar. El cliente debe suscribirse de nuevo. cancelled = finalizada por el cliente o el comerciante. La mayoría de los fallos de renovación son rechazos del emisor (fondos insuficientes, tarjeta rechazada), no un error de Dodo.Referencia de API relacionada
Create Subscription (Deprecated)
API heredada para crear directamente una suscripción. Usa Checkout Sessions para nuevas integraciones
Change Subscription Plan
Referencia de API para actualizar, degradar o cambiar planes de suscripción con opciones de prorrateo
Update Payment Method
Referencia de API para actualizar métodos de pago y reactivar suscripciones en espera
Patch Subscription
Referencia de API para actualizar los detalles y la configuración de la suscripción