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>

Your public API key, with the word Token and a space in front of it. Example: Token 6534bc0a7e1f4d2b9c8e3a5f7b1d2c4e6f8a9b0c — that whole value is the header. Sending the key alone returns 401 'Authentication credentials were not provided'. In this playground you may paste just the key; the prefix is added for you.

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