Pagos no-tarjeta (APMs)
Cobra con SPEI, OXXO Pay, MercadoPago y cash vouchers desde el mismo endpoint.
Esta guía muestra cómo crear pagos con métodos alternativos (APMs) a través del endpoint unificado
/process/. Procesas opciones locales como transferencias SPEI y pagos en efectivo OXXO Pay con una
sola llamada consistente.
La petición base
Todos los pagos se crean con un POST a /process/. El cuerpo contiene los campos comunes a todos
los métodos, más un objeto payment_method con campos específicos del método elegido.
POST https://stage.tonder.io/api/v1/process/ # Sandbox
POST https://app.tonder.io/api/v1/process/ # Producción| Campo | Tipo | Descripción |
|---|---|---|
operation_type | string | Debe ser "payment" para procesar un pago. |
amount | decimal | Monto usando punto como separador decimal (p. ej. 100.00). |
currency | string | Moneda: "MXN", "USD" o "CLP". México y Chile usan el mismo flujo; solo cambia este valor. |
customer | object | Datos del cliente, con al menos name y email. |
payment_method | object | Configuración del método, con type y parámetros específicos. |
client_reference | string | Tu identificador único de la transacción para conciliación. |
Según el método, pueden requerirse campos adicionales dentro de payment_method. Consulta los
detalles de cada método en Métodos de pago.
Ejemplos por método
{
"operation_type": "payment",
"amount": 500.00,
"currency": "MXN",
"customer": { "name": "Carlos Eduardo López", "email": "carlos.lopez@empresa.mx" },
"payment_method": { "type": "SPEI" },
"client_reference": "ORD-001"
}Una respuesta SPEI exitosa tiene estado Pending e incluye instrucciones de pago para el cliente:
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"operation_type": "payment",
"status": "Pending",
"amount": 500.00,
"currency": "MXN",
"client_reference": "ORD-001",
"payment_id": 12346,
"transaction_id": "txn_spei456",
"provider": "spei_provider",
"created_at": "2024-07-26T10:35:00Z",
"status_code": 201,
"payment_instructions": {
"clabe": "646180157000000004",
"reference": "7812345678",
"expires_at": "2024-07-27T10:35:00Z",
"bank_name": "STP"
}
}{
"operation_type": "payment",
"amount": 250.00,
"currency": "MXN",
"customer": { "name": "María Isabel Fernández", "email": "maria.fernandez@email.com" },
"payment_method": { "type": "oxxopay" },
"client_reference": "ORD-001"
}Una respuesta OXXO Pay exitosa tiene estado Pending e incluye una URL con las instrucciones de
pago y la referencia para el cliente:
{
"id": "887e3ff0-4f28-456d-bf33-857de2cdf788",
"operation_type": "payment",
"status": "Pending",
"amount": 34.0,
"currency": "MXN",
"client_reference": "ORD-001",
"provider": "tonder",
"created_at": "2026-02-17T21:32:28.887557Z",
"status_code": 201,
"next_action": {
"redirect_to_url": {
"url": "https://stage-payflow.tonder.io/oxxo-pay?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
},
"verify_transaction_status_url": "/transactions/887e3ff0-4f28-456d-bf33-857de2cdf788/"
}Estados de la respuesta
El campo status puede tener uno de estos valores:
| Estado | Descripción |
|---|---|
Pending | La transacción se está procesando (común en pagos asíncronos). |
Processing | El proveedor la está procesando. |
Authorized | Autorizada, pendiente de captura o liquidación. |
Success | Completada con éxito. |
Declined | Rechazada por el proveedor o el banco emisor. |
Cancelled | Cancelada antes de completarse. |
Failed | Falló al procesarse. |
Expired | La referencia expiró sin pagarse. |
Valida siempre id (identificador único, guárdalo) y status (estado actual). Nunca confíes solo
en el código HTTP.
Flujo asíncrono
SPEI y OXXO son asíncronos: el estado inicial siempre es pending porque requieren una acción
del cliente (completar la transferencia o pagar en una tienda).
POST /process/ con el método elegido → 201 Pending + payment_instructions.
Presenta al cliente la CLABE/referencia (SPEI) o el voucher (OXXO).
Completa la transferencia bancaria o paga en efectivo en la tienda.
Recibe el webhook (status: success) o consulta
GET /api/v1/transactions/{id}/.
