API Direct (S2S)

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
CampoTipoDescripción
operation_typestringDebe ser "payment" para procesar un pago.
amountdecimalMonto usando punto como separador decimal (p. ej. 100.00).
currencystringMoneda: "MXN", "USD" o "CLP". México y Chile usan el mismo flujo; solo cambia este valor.
customerobjectDatos del cliente, con al menos name y email.
payment_methodobjectConfiguración del método, con type y parámetros específicos.
client_referencestringTu 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:

EstadoDescripción
PendingLa transacción se está procesando (común en pagos asíncronos).
ProcessingEl proveedor la está procesando.
AuthorizedAutorizada, pendiente de captura o liquidación.
SuccessCompletada con éxito.
DeclinedRechazada por el proveedor o el banco emisor.
CancelledCancelada antes de completarse.
FailedFalló al procesarse.
ExpiredLa 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}/.

Siguientes pasos

¿Te resultó útil esta página?

En esta página