Empezar

Inicio rápido

Cobra tu primer pago de prueba con Hosted Checkout en cuatro pasos, sin escribir un formulario de tarjeta.

Hosted Checkout es la forma más rápida de cobrar: Tonder aloja la página de pago, así que los datos de tarjeta nunca tocan tus servidores (sin alcance PCI). Este inicio rápido te lleva de cero a un pago de prueba verificado en cuatro pasos.

Antes de empezar

  • Una cuenta de Tonder — inicia sesión en dashboard.tonder.io (Producción) o dashboard-stage.tonder.io (Sandbox).
  • Tu llave API de prueba desde Developers → API Keys. Autentica cada petición con tu llave pública: Authorization: Token YOUR_TEST_API_KEY.

Los montos van en formato decimal: 150.00 = MXN 150.00. Usa external_id con la referencia de tu pedido, es la clave con la que conciliarás los pagos.

Pasos

Crea una sesión de checkout

Desde tu servidor, crea una sesión con tu llave pública. La respuesta devuelve una url a la que enviar al cliente.

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": "Vicente",
      "last_name": "Quintero",
      "email": "vquintero@testuser.com"
    },
    "amount_total": 150.00,
    "currency": "MXN",
    "line_items": [
      {
        "name": "Deposit",
        "quantity": 1,
        "unit_price": 150.00,
        "product_id": "your internal product id"
      }
    ],
    "payment_method_types": [
      "card",
      "mercadopago",
      "oxxopay",
      "spei",
      "safetypayCash",
      "safetypayTransfer",
      "neosurf"
    ],
    "return_url": "https://tonder.io",
    "external_id": "ORD-12345-4",
    "metadata": { "external_id": "ORD-12345-4" }
  }'
curl -X POST 'https://api.tonder.io/checkout/v1/sessions' \
  -H 'Authorization: Token YOUR_LIVE_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "customer": {
      "first_name": "Vicente",
      "last_name": "Quintero",
      "email": "vquintero@testuser.com"
    },
    "amount_total": 150.00,
    "currency": "MXN",
    "line_items": [
      {
        "name": "Deposit",
        "quantity": 1,
        "unit_price": 150.00,
        "product_id": "your internal product id"
      }
    ],
    "payment_method_types": [
      "card",
      "mercadopago",
      "oxxopay",
      "spei",
      "safetypayCash",
      "safetypayTransfer",
      "neosurf"
    ],
    "return_url": "https://tonder.io",
    "external_id": "ORD-12345-4",
    "metadata": { "external_id": "ORD-12345-4" }
  }'

La respuesta (200 Created) incluye la url de redirección, el id de la sesión y un estado pending:

{
  "id": "cs_97_41521_d11ba771527b4056c7f85786cfbb980b",
  "url": "https://stage-payflow.tonder.io/checkout/cs_97_41521_d11ba771527b4056c7f85786cfbb980b",
  "status": "pending",
  "payment_id": 41521,
  "amount_total": 150.00,
  "currency": "MXN",
  "external_id": "ORD-12345-4",
  "transaction_status": "Pending"
}

Redirige al cliente

Envía al cliente a la url de la respuesta — esa es la página de pago alojada por Tonder.

res.redirect(session.url);

Completa un pago de prueba

En la página alojada, paga con una tarjeta de prueba: 4000 0000 0000 0077 (aprobada), cualquier fecha futura (p. ej. 12/30) y cualquier CVC de 3 dígitos (p. ej. 123). Encuentra el listado completo de tarjetas de prueba en Developers → Test Data del dashboard.

Al terminar, Tonder regresa al cliente a tu return_url con el id de la sesión: https://tu-tienda.com/checkout/complete?session_id=cs_97_41521_….

Confirma el resultado

Confirma siempre del lado del servidor — no asumas que el redirect significa éxito.

  • Webhook (recomendado). Tonder envía un evento session.completed a tu endpoint (Developers → Webhooks). Asócialo a tu pedido con metadata.external_id y responde 200.
  • Consulta de estado. O consulta la sesión y lee status:
curl -X GET 'https://api-stage.tonder.io/checkout/v1/sessions/cs_97_41521_d11ba771527b4056c7f85786cfbb980b' \
  -H 'Authorization: Token YOUR_TEST_API_KEY'
curl -X GET 'https://api.tonder.io/checkout/v1/sessions/cs_97_41521_d11ba771527b4056c7f85786cfbb980b' \
  -H 'Authorization: Token YOUR_LIVE_API_KEY'

Un pago exitoso devuelve status: "completed" y transaction_status: "Success":

{
  "id": "cs_97_41521_d11ba771527b4056c7f85786cfbb980b",
  "status": "completed",
  "transaction_status": "Success",
  "amount_total": 150.00,
  "currency": "MXN",
  "external_id": "ORD-12345-4",
  "paid_at": 1751478550234
}

Los webhooks son la forma más confiable de confirmar pagos — prefiérelos sobre el polling. Reconoce cada evento con un 200 y concilia usando metadata.external_id.

Siguientes pasos

¿Te resultó útil esta página?

En esta página