Hosted Checkout

Crear una sesión de pago

El cuerpo de la petición que crea una sesión de pago, campo por campo, y la URL que devuelve.

Este es el endpoint principal para iniciar un pago con Hosted Checkout. Crea una nueva sesión de pago y devuelve una URL segura donde tu cliente completa su pago.

POST https://api-stage.tonder.io/checkout/v1/sessions   # Sandbox
POST https://api.tonder.io/checkout/v1/sessions          # Producción

Cómo funciona

  1. Tu servidor llama a este endpoint con los datos del pago (monto, artículos, datos del cliente).
  2. Tonder crea una sesión segura y devuelve una URL de checkout.
  3. Rediriges a tu cliente a esa URL.
  4. El cliente completa el pago en la página alojada de Tonder.
  5. El cliente es redirigido de vuelta a tu success_url o return_url.

Incluye el header x-idempotency-key para evitar sesiones duplicadas (consulta Idempotencia) y el objeto ui_config para personalizar la página (consulta Personalizar el checkout).

El campo payment_method_types por defecto es ["card"]. Valores aceptados: card, mercadopago, oxxopay, spei, safetypayCash, safetypayTransfer, neosurf, saved_cards.

Tarjetas guardadas

Incluye saved_cards en payment_method_types y el cajero muestra las tarjetas que el cliente ya guardó, junto al formulario de tarjeta nueva. Listarlas, seleccionarlas y eliminarlas se maneja solo — no hay un endpoint extra que llamar.

Esta es la vía de Hosted Checkout. Si renderizas tu propio formulario con el SDK Web, las tarjetas guardadas funcionan distinto — ver Tarjetas guardadas (secure_token).

La casilla de guardar tarjeta

Pon payment_method_config.saved_cards.show_save_card_checkbox en true para mostrar una casilla Guardar tarjeta para futuros pagos en el formulario de tarjeta nueva, para que el cliente decida si quiere guardarla.

CampoTipoDescripción
show_save_card_checkboxbooleanMuestra una casilla "Guardar tarjeta para futuros pagos" en el formulario de tarjeta nueva, para que el cliente decida si quiere guardarla.
curl -X POST 'https://api-stage.tonder.io/checkout/v1/sessions' \
  -H 'Authorization: Token YOUR_TEST_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "customer": { "first_name": "Maria", "last_name": "Garcia", "email": "maria@example.com" },
    "amount_total": 150.00,
    "currency": "MXN",
    "line_items": [
      { "name": "Premium Plan", "quantity": 1, "unit_price": 150.00 }
    ],
    "payment_method_types": ["card", "saved_cards"],
    "payment_method_config": {
      "saved_cards": { "show_save_card_checkbox": true }
    },
    "external_id": "ORD-001",
    "return_url": "https://tu-tienda.com/checkout/complete"
  }'
curl -X POST 'https://api.tonder.io/checkout/v1/sessions' \
  -H 'Authorization: Token YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "customer": { "first_name": "Maria", "last_name": "Garcia", "email": "maria@example.com" },
    "amount_total": 150.00,
    "currency": "MXN",
    "line_items": [
      { "name": "Premium Plan", "quantity": 1, "unit_price": 150.00 }
    ],
    "payment_method_types": ["card", "saved_cards"],
    "payment_method_config": {
      "saved_cards": { "show_save_card_checkbox": true }
    },
    "external_id": "ORD-001",
    "return_url": "https://tu-tienda.com/checkout/complete"
  }'

Card-on-File

Card-on-File (COF) guarda las tarjetas automáticamente y permite que el cliente vuelva a pagar sin volver a capturar su CVV. Funciona sobre la infraestructura de suscripciones y tokenización de Tonder.

Cuando tu negocio tiene una conexión activa con Tonder con active_subscription, el cajero:

  1. Ejecuta la verificación 3DS al guardar la tarjeta.
  2. Crea una suscripción para esa tarjeta.
  3. Acepta pagos sin CVV con ella en visitas posteriores.

No hay nada que configurar. Si Card-on-File está habilitado para tu cuenta, el cajero se encarga de todo esto solo. Es la misma suscripción que el SDK expone como subscription_id — ver la Referencia del SDK Web.

Enviar show_save_card_checkbox: true con Card-on-File activo no mostrará la casilla. Es el comportamiento esperado: Card-on-File tiene precedencia y las tarjetas se guardan automáticamente de cualquier forma.

Referencia de la API

POST
/checkout/v1/sessions

Autorización

Authorization
Authorization<token>

Tu API key con prefijo Token , p. ej. Token <API_KEY>

In: header

Cuerpo de la petición

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Cuerpo de la respuesta

application/json

curl -X POST "https://example.com/checkout/v1/sessions" \  -H "Content-Type: application/json" \  -d '{    "customer": {      "first_name": "John",      "last_name": "Doe",      "email": "john.doe@example.com"    },    "amount_total": 350,    "currency": "MXN",    "line_items": [      {        "name": "Product 1",        "quantity": 1,        "unit_price": 150,        "product_id": "prod-001"      },      {        "name": "Product 2",        "quantity": 2,        "unit_price": 100,        "product_id": "prod-002"      }    ],    "return_url": "https://my-store.com/checkout/complete",    "external_id": "ORD-12345"  }'
{
  "id": "cs_97_41521_d11ba771527b4056c7f85786cfbb980bc105efaf42af113d",
  "url": "https://stage-payflow.tonder.io/checkout/cs_97_41521_d11ba771527b4056c7f85786cfbb980bc105efaf42af113d",
  "status": "pending",
  "payment_id": 41521,
  "amount_total": 350,
  "currency": "MXN",
  "expires_at": 1751564943,
  "external_id": "ORD-12345",
  "session_type": "payment",
  "checkout_type": "hosted",
  "return_url": "https://my-store.com/checkout/complete",
  "metadata": {},
  "payment_method_types": [
    "card"
  ],
  "ui_config": {},
  "ui_config_version": "V1",
  "created_at": 1751478543567,
  "modified_at": 1751478543567,
  "customer": {
    "first_name": "John",
    "last_name": "Doe",
    "email": "john.doe@example.com"
  },
  "line_items": [
    {
      "name": "Product 1",
      "quantity": 1,
      "unit_price": 150,
      "product_id": "prod-001"
    }
  ],
  "transaction_status": "Pending",
  "provider": "tonder"
}

La sesión empieza en pending y avanza a un estado final. Consulta los valores completos en la Referencia.

Siguientes pasos

¿Te resultó útil esta página?

En esta página