API Direct (S2S)

Inicio rápido

Tu primer pago server-to-server en el sandbox, con los headers y el cuerpo completos.

API Direct te da control total del flujo de pago llamando a la API de Tonder directamente desde tu servidor. Este inicio rápido te guía para hacer tu primer pago de prueba en el sandbox —no se mueve dinero real.

Lo que construirás: una petición POST al endpoint Process Transaction que cobra una tarjeta de prueba y devuelve una transacción que puedes rastrear.

Antes de empezar

Entra a dashboard-stage.tonder.io —el dashboard de sandbox— con tus credenciales.

Recupérala en Developers → API Keys. Con ella autenticas todas tus peticiones.

Paso 1: Configura tu entorno

Usa el sandbox para todas las pruebas —valida tu integración de extremo a extremo sin mover dinero real. La URL base de cada petición de prueba es https://stage.tonder.io/api/v1/. Cada petición debe incluir estos headers:

HeaderDescripción
AuthorizationTu llave API, como Token <YOUR_SANDBOX_API_KEY>.
X-Request-IdUUID v4 generado por petición. Es la llave de idempotencia, no un header de autenticación (ver Idempotencia).
Content-Typeapplication/json.

Paso 2: Haz tu primer pago

Envía un POST al endpoint Process Transaction con estos parámetros. Para este primer pago de prueba se envían los datos de la tarjeta en crudo (solo válido para comercios certificados PCI Nivel 1); la mayoría de los comercios usa en su lugar el flujo tokenizado descrito en Pagos con tarjeta, donde estos mismos campos se reemplazan por tokens que obtienes del servicio de tokenización.

ParámetroTipoDescripción
operation_typestringDebe ser "payment" para procesar un pago.
amountnumberMonto del pago (p. ej. 100.00).
currencystringCódigo de moneda (p. ej. "MXN").
customerobjectDatos del cliente con name y email.
payment_methodobjectDetalles del método, incluido type y los datos de la tarjeta.
client_referencestringTu referencia única para esta transacción.
return_urlstringA dónde regresa el cliente al terminar (por ejemplo, tras un reto 3DS).

Las tarjetas de prueba solo funcionan en sandbox (stage.tonder.io). En producción usa una tarjeta real: el mismo request con la tarjeta de prueba será rechazado. Ver Tarjetas de prueba.

curl -X POST https://stage.tonder.io/api/v1/process/ \
  -H "Authorization: Token <YOUR_SANDBOX_API_KEY>" \
  -H "X-Request-Id: <uuid-v4>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation_type": "payment",
    "amount": 100.00,
    "currency": "MXN",
    "customer": { "name": "Test Customer", "email": "test@example.com" },
    "payment_method": {
      "type": "CARD",
      "card_number": "4000000000000077",
      "cardholder_name": "Ozzy Osbourne",
      "cvv": "123",
      "expiration_month": "07",
      "expiration_year": "26"
    },
    "client_reference": "ORD-001",
    "return_url": "https://tonder.io"
  }'
curl -X POST https://app.tonder.io/api/v1/process/ \
  -H "Authorization: Token <YOUR_API_KEY>" \
  -H "X-Request-Id: <uuid-v4>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation_type": "payment",
    "amount": 100.00,
    "currency": "MXN",
    "customer": { "name": "Test Customer", "email": "test@example.com" },
    "payment_method": {
      "type": "CARD",
      "card_number": "<REAL_CARD_NUMBER>",
      "cardholder_name": "Ozzy Osbourne",
      "cvv": "<CVV>",
      "expiration_month": "07",
      "expiration_year": "30"
    },
    "client_reference": "ORD-001",
    "return_url": "https://tonder.io"
  }'

Una petición exitosa devuelve 201 Created con un objeto de transacción:

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "operation_type": "payment",
  "status": "authorized",
  "amount": 100.00,
  "currency": "MXN",
  "client_reference": "ORD-001",
  "payment_id": 12345,
  "transaction_id": "txn_abc123",
  "created_at": "2024-07-26T10:30:00Z",
  "status_code": 201
}
CampoDescripción
transaction_idIdentificador único de este pago en el sistema de Tonder.
statusEstado actual del pago (p. ej. authorized, pending, declined).
payment_idID interno del pago para seguimiento y referencia.
client_referenceTu referencia original para esta transacción.

Usa el transaction_id para verificar el estado, configurar webhooks o ver la transacción en el dashboard.

Siguientes pasos

¿Te resultó útil esta página?

En esta página