Skip to main content

Quick Start

Create your first checkout session in under 5 minutes

API Reference

Full API documentation and interactive testing

Preview Endpoint

Calculate pricing and taxes before creating a session
Session Validity: Checkout sessions expire after 24 hours by default, or 15 minutes when confirm: true.
Single-Use Links: The checkout_url is not reusable. Generate a fresh session for each customer and payment attempt rather than sharing or reusing a link.

Prerequisites

You need:
  • An active Dodo Payments merchant account
  • API credentials from Developer → API Keys in the dashboard
  • At least one product created in Products

Creating Your First Checkout Session

API Response

All methods return:
Only session_id is guaranteed to be present. When payment_method_id is provided, the charge processes immediately and checkout_url is null. Use the returned payment_id instead. When confirm: true, the payment is created at session-creation time, and the response also includes payment_id, client_secret, and publishable_key for use with the Dodo Payments checkout SDK.

Redirect Your Customer

1

Extract the checkout URL

Get checkout_url from the API response.
2

Redirect to checkout

Send your customer to the URL:
Alternatively, open in a new window:
3

Handle the return

After payment, customers are redirected to your return_url with query parameters:Example redirect:
Instead of redirecting, you can embed checkout directly in your page using Overlay Checkout (modal), Inline Checkout (embedded), or Mobile SDKs (native apps). All consume the same session URL.

Comprobar el estado de la sesión

Para comprobar el estado de una sesión, llama a Obtener sesión de Checkout (GET /checkouts/{id}). La respuesta contiene id, created_at, customer_email y customer_name de la sesión, además de payment_id y payment_status. Ambos campos de pago son null mientras el cliente sigue introduciendo sus datos. Después de que el cliente envíe el pago, payment_status contiene el estado del pago, como succeeded, failed o processing. Usa webhooks como fuente de verdad para la gestión de pedidos.

Cuerpo de la solicitud

Campos obligatorios

array
requerido
Matriz de productos que se incluirán en la sesión de checkout. Cada producto debe tener un product_id válido de tu dashboard.Puedes combinar productos de pago único con un producto de suscripción en la misma sesión. Un carrito también puede contener dos o más productos de suscripción, pero entonces no puede contener productos de pago único. Consulta Carrito con varias suscripciones. Un carrito puede contener como máximo 20 productos.
Encuentra los ID de tus productos: Puedes encontrar los ID de producto en tu dashboard de Dodo Payments, en Products → View Details, o mediante la API List Products.

Campos opcionales

object
Información del cliente. Puedes asociar un cliente existente mediante su ID o crear un nuevo registro de cliente durante el checkout.
object
Información de la dirección de facturación para calcular correctamente los impuestos, prevenir el fraude y cumplir la normativa.Cuando confirm: true, todos los campos de la dirección de facturación se vuelven obligatorios, a menos que minimal_address sea true.
array
Controla los métodos de pago disponibles para los clientes durante el checkout. Esto ayuda a optimizar el proceso para mercados específicos o requisitos empresariales.Opciones habituales: credit, debit, upi_collect, apple_pay, google_pay, amazon_pay, klarna, affirm, afterpay_clearpay, cashapp, ach, multibanco, bancontact_card, eps, ideal, blik, gcash, ali_pay_hk, fps, touch_n_go, paypalConsulta la referencia de la API Create Checkout Session para ver la lista completa.
Incluye siempre credit y debit como opciones alternativas para evitar errores de checkout cuando los métodos de pago preferidos no estén disponibles.
Ejemplo:
string
Anula la selección de moneda predeterminada con una moneda de facturación fija. Usa códigos de moneda ISO 4217.Monedas compatibles: USD, EUR, GBP, CAD, AUD, INR y másEjemplo: "USD" para dólares estadounidenses, "EUR" para eurosEste campo solo es efectivo cuando el Adaptive Currency está habilitado. Si el Adaptive Currency está deshabilitado, la API descarta este campo y la moneda proviene del precio del producto o del país de facturación.
boolean
predeterminado:"false"
Muestra métodos de pago guardados anteriormente para clientes recurrentes, mejorando la velocidad del checkout y la experiencia del usuario.
string
URL a la que se redirige a los clientes después de completar el pago. Dodo Payments añade parámetros de consulta a tu URL durante la redirección (consulta la tabla de redirecciones anterior).URL de redirección de ejemplo:
Usa los parámetros de consulta license_key y email para mostrar claves de licencia o enviar una confirmación inmediatamente en tu página de retorno, sin necesidad de realizar otra llamada a la API.
string
URL a la que se redirige a los clientes cuando hacen clic en el botón de volver o cancelan la sesión de checkout. Si no se proporciona, el botón de volver no se mostrará.Establece un cancel_url para ofrecer a los clientes una forma clara de volver a tu sitio sin completar la compra.
boolean
predeterminado:"false"
Si es true, finaliza inmediatamente todos los datos de la sesión. La API genera un error si faltan datos obligatorios.Cuando confirm: true:
  • Todos los campos de la dirección de facturación se vuelven obligatorios (solo country y zipcode cuando minimal_address es true)
  • Se puede proporcionar payment_method_id para procesar el cargo de inmediato
  • La sesión caduca después de 15 minutos en lugar de 24 horas
  • Se requiere un customer_id existente si se proporciona payment_method_id
array
Aplica uno o más códigos de descuento acumulables a la sesión de checkout. Los códigos se aplican en el orden de la matriz (el primero reduce el precio inicial, el segundo reduce el precio ya rebajado, y así sucesivamente), hasta un máximo de 20 códigos por sesión.Cuando Purchasing Power Parity está habilitado, el precio inicial es el importe ajustado por PPP, no el precio base.
El campo singular discount_code que aparece a continuación está obsoleto, pero sigue siendo totalmente compatible. No se puede combinar con discount_codes en la misma solicitud.
string
obsoleto
Obsoleto: para nuevas integraciones, usa discount_codes. Este campo sigue funcionando por compatibilidad con versiones anteriores, pero no se puede combinar con discount_codes en la misma solicitud.
object
Pares clave-valor personalizados para almacenar información adicional sobre la sesión.
boolean
Anula el comportamiento predeterminado de 3DS del merchant para esta sesión.
boolean
predeterminado:"false"
Habilita el modo de recopilación mínima de la dirección. Cuando está habilitado, el checkout solo recopila:
  • País: siempre obligatorio para determinar los impuestos
  • Código postal: solo en regiones donde sea necesario para calcular el impuesto sobre las ventas, VAT o GST
Esto reduce significativamente la fricción del checkout al eliminar campos de formulario innecesarios.Con confirm: true, solo se requiere zipcode (además de country); los demás campos de la dirección de facturación siguen siendo opcionales.
string
Un método de pago guardado que pertenece al customer adjunto. Requiere confirm: true y un customer.customer_id existente. La elegibilidad del método de pago se valida con la moneda del pago. Cuando se establece, el cargo se procesa de inmediato y checkout_url se devuelve como null. Usa el payment_id devuelto en su lugar.
Si es true, devuelve una URL de checkout abreviada en lugar de la URL completa de la sesión.
string
ID de la colección de productos para el flujo de checkout basado en colecciones. Al establecerlo, proporciona un array product_cart vacío. Los códigos de descuento no se pueden aplicar previamente durante la creación de la sesión. Consulta Colecciones de productos.
string
ID fiscal del customer (por ejemplo, un número de VAT). Requiere billing_address con un country.
string
Nombre comercial o legal opcional asociado al ID fiscal, de hasta 250 caracteres. Cuando se proporciona junto con un tax_id válido, se muestra en la factura en lugar del nombre personal del customer.
integer
Anula el límite mínimo de mandato a nivel del merchant (en paise de INR) para los e-mandatos de INR en tarjetas indias.El importe del mandato enviado al procesador es max(this_floor, actual_billing_amount), por lo que este es efectivamente el límite máximo de autorización visible para el customer cuando la facturación es inferior. Si no se establece, se aplica la configuración del merchant; si esta tampoco se establece, se aplica el valor predeterminado del sistema de ₹15,000.
object
Personaliza la apariencia y el comportamiento de la interfaz de checkout.
object
Configura funciones y comportamientos específicos para la sesión de checkout.
array
Recopila información adicional de los customers durante el checkout mediante campos de formulario personalizados. Puedes definir hasta 5 campos personalizados por sesión de checkout. Las respuestas de los customers se incluyen en los payloads de webhook y están disponibles mediante la API.
Las respuestas de los customers a los campos personalizados se incluyen en:
  • Webhooks: payment.succeeded, subscription.active y otros payloads de eventos relevantes contienen el array custom_field_responses
  • Respuestas de la API: los objetos de pago y suscripción incluyen custom_field_responses
object
Configuración adicional para sesiones de checkout que contienen productos de suscripción.

Ejemplos de uso

Checkout simple de un solo producto

Carrito con varios productos

Carrito con varias suscripciones

Para vender varios productos de suscripción en un solo checkout, añade dos o más productos de suscripción a product_cart. El customer paga una vez y Dodo Payments crea un pago, una factura y una suscripción por cada producto. Cada suscripción tiene su propio ciclo de facturación y se renueva por separado, por lo que un producto mensual y uno anual pueden compartir un carrito.
Un carrito con varias suscripciones tiene estos límites:
  • No puede contener productos de pago único. La API rechaza la solicitud con un 422.
  • Puede contener como máximo 20 productos de suscripción.
  • No puede incluir el mismo producto dos veces. Para vender más de una unidad de un producto, establece quantity.
  • No puede utilizar facturación on-demand (subscription_data.on_demand).
  • Un código de descuento aplicado al carrito cuenta como un canje.
subscription_data.trial_period_days se aplica a cada suscripción del carrito. Sin él, cada suscripción utiliza la prueba configurada en su propio producto. Si no lo estableces y Prevent Trial Misuse está activado, un producto que el customer ya probó comienza sin período de prueba. El pago resultante tiene is_multi_subscription: true y enumera cada suscripción que inicia en subscription_ids. Su subscription_id es null, porque ninguna suscripción individual es propietaria del pago. El webhook payment.succeeded contiene los mismos campos. Lee is_multi_subscription para encontrar el tipo de pago, no la longitud de subscription_ids. Después de que el pago se realiza correctamente, recibes un evento payment.succeeded para el carrito y un evento subscription.active para cada suscripción. A partir de entonces, cada suscripción se renueva, cambia de plan y se cancela por separado, con su propia factura para cada renovación. Todas las suscripciones de un carrito comparten el método de pago que el customer utilizó durante el checkout. Cuando actualizas el método de pago de una de ellas, Dodo Payments mueve el nuevo método de pago a cada suscripción del mismo carrito que tenga la misma moneda de liquidación y moneda de facturación y sea active, on_hold, past_due o paused. Todas las suscripciones de un carrito comienzan con la misma moneda de liquidación y moneda de facturación, incluso cuando sus productos tienen monedas de precio diferentes. Un cambio posterior, como un cambio de plan, puede trasladar una suscripción a otra moneda de liquidación o de facturación. Esa suscripción conserva su método de pago anterior, por lo que debes actualizarlo por separado. Para una suscripción on_hold, la actualización solo reintenta la factura impagada de esa suscripción.

Suscripción con período de prueba

Checkout preconfirmado

Checkout con anulación de moneda

Métodos de pago guardados para customers recurrentes

Checkout B2B con recopilación de Tax ID

Checkout con tema oscuro y códigos de descuento apilados

Métodos de pago regionales (UPI para India)

Para obtener información detallada sobre la configuración y las pruebas de UPI, consulta la página Métodos de pago de India.

Checkout con BNPL (Buy Now Pay Later)

Para obtener información detallada sobre la configuración y las pruebas de BNPL, consulta la página Buy Now Pay Later (BNPL).

Checkout instantáneo con un método de pago existente

Enlaces cortos para URL de pago más limpias

Omitir la página de éxito del pago con redirección inmediata

Forzar un idioma

Recopilar campos personalizados

Previsualizar sesiones de checkout

Usa el endpoint Preview Checkout Session para calcular precios, impuestos y totales antes de crear una sesión. Esto resulta útil para mostrar información de precios precisa en tu sitio.
El current_breakup.subtotal previsualizado ya refleja Purchasing Power Parity y Charm Pricing cuando se aplican al producto.
Cuando el carrito contiene un producto de suscripción, la respuesta de previsualización también devuelve un next_billing_date: una previsualización de la próxima fecha de facturación, para que puedas mostrarla antes de crear la suscripción. Se calcula en relación con el momento actual: now + trial period cuando se aplica una prueba; de lo contrario, now + one payment frequency. El campo se omite en los carritos que solo contienen productos de pago único. Es una estimación basada en el momento de la previsualización; el next_billing_date autorizado se establece cuando se activa la suscripción.
La previsualización también devuelve trial_period_days (la duración efectiva de la prueba, gratuita o de pago) y trial_amount (el cargo de prueba por unidad después de los descuentos, en las unidades menores de la moneda del precio). trial_amount solo está presente para una prueba de pago y es null para una prueba gratuita o cuando no hay prueba. Usa current_breakup para obtener el total gravado que realmente se debe pagar hoy.
Para un carrito con varias suscripciones, la respuesta también devuelve un array subscriptions con una entrada por suscripción: product_id, amount_due_now, tax_due_now, recurring_amount, recurring_tax, trial_period_days y next_billing_date. El next_billing_date de nivel superior es la fecha más temprana del carrito, y trial_period_days e trial_amount de nivel superior son null. Lee los importes de subscriptions y current_breakup. recurring_breakup suma los importes de renovación de todas las suscripciones, incluso cuando se renuevan en fechas diferentes, por lo que debes leer cada renovación de subscriptions.
Si utilizas Dynamic Links, Checkout Sessions ofrecen más flexibilidad. Con Dynamic Links, tenías que proporcionar la dirección de facturación completa del customer. Con Checkout Sessions, puedes enviar la información que tengas y el flujo de checkout recopila el resto. Por ejemplo:
  • Proporciona solo el país de facturación del customer y el checkout recopila los datos restantes.
  • O proporciona toda la información y establece confirm: true para pasar directamente a la página de pago.
La migración es sencilla: actualiza tu integración para utilizar la API de Checkout Sessions o el método del SDK, ajusta el payload de la solicitud para que coincida con el formato de Checkout Sessions y listo. No se requiere ningún tratamiento adicional.

Recursos relacionados

Overlay Checkout

Abre el checkout como una ventana modal superpuesta en tu página

Inline Checkout

Integra el checkout directamente en tu página

Mobile Integration

Integra el checkout en aplicaciones móviles nativas

Webhooks

Escucha eventos de pago y suscripción

Payment Methods

Métodos de pago compatibles por región

Subscriptions

Facturación recurrente y gestión de suscripciones
Última modificación el 8 de octubre de 2026