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:
| Header | Descripción |
|---|---|
Authorization | Tu llave API, como Token <YOUR_SANDBOX_API_KEY>. |
X-Request-Id | UUID v4 generado por petición. Es la llave de idempotencia, no un header de autenticación (ver Idempotencia). |
Content-Type | application/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ámetro | Tipo | Descripción |
|---|---|---|
operation_type | string | Debe ser "payment" para procesar un pago. |
amount | number | Monto del pago (p. ej. 100.00). |
currency | string | Código de moneda (p. ej. "MXN"). |
customer | object | Datos del cliente con name y email. |
payment_method | object | Detalles del método, incluido type y los datos de la tarjeta. |
client_reference | string | Tu referencia única para esta transacción. |
return_url | string | A 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
}| Campo | Descripción |
|---|---|
transaction_id | Identificador único de este pago en el sistema de Tonder. |
status | Estado actual del pago (p. ej. authorized, pending, declined). |
payment_id | ID interno del pago para seguimiento y referencia. |
client_reference | Tu referencia original para esta transacción. |
Usa el transaction_id para verificar el estado, configurar
webhooks o ver la transacción en el
dashboard.
