API Direct (S2S)

Resumen

El endpoint unificado `/process/`: un solo contrato para pagos, APMs y retiros.

API Direct (Tonder Direct) es una API de procesamiento de pagos unificada que te permite aceptar pagos y enviar retiros en América Latina. En lugar de manejar integraciones complejas por cada método o país, gestionas todo con una sola llamada al endpoint /process/.

Características clave

  • Un solo endpoint. Todos los pagos y retiros pasan por el endpoint unificado /process/. Tú indicas el tipo de operación y Tonder lo enruta automáticamente.
  • Respuesta instantánea. Procesamiento en tiempo real con actualizaciones de estado inmediatas.
  • Métodos regionales. Soporte nativo para SPEI, OXXO Pay, Cash vouchers, MercadoPago y tarjetas en MX · CO · CL.
  • Seguro por diseño. El servicio de tokenización maneja los datos sensibles de la tarjeta. Dos flujos: tokenizado (menor alcance PCI) y datos en crudo (requiere PCI L1).

Cómo funciona

La API se basa en la simplicidad: un único endpoint /process/ que cubre todas tus necesidades de transacción. Cuando envías una petición, especificas qué tipo de operación quieres realizar y el sistema la enruta al procesador correcto. La misma estructura procesa pagos con tarjeta, SPEI, OXXO y otros métodos, y también retiros.

Fuente de verdad: GET /api/v1/transactions/{id}/. Nunca confíes solo en la respuesta inicial; verifica siempre el estado aquí.

Endpoints y autenticación

ServicioSandboxProducción
API Direct (S2S)https://stage.tonder.io/api/v1/https://app.tonder.io/api/v1/
Hosted Checkouthttps://api-stage.tonder.io/checkout/v1/https://api.tonder.io/checkout/v1/
Tokenización de tarjetashttps://token-sandbox.tonder.io/https://token.tonder.io/
Datos de tarjeta en crudo (PCI L1)https://process-sandbox.tonder.io/https://process.tonder.io/
Dashboardhttps://dashboard-stage.tonder.io/https://dashboard.tonder.io/
VerboOperaciónEndpointNotas
POSTPagos no-tarjeta (APMs)/api/v1/process/No requiere tokenización ni PCI L1 — solo tu llave API
GETObtener access token (tokenización)/api/v1/tokenization/auth/Requerido antes de tokenizar una tarjeta · usa tu llave API
POSTTokenizar datos de tarjetaSandbox: https://token-sandbox.tonder.io/v1/gateway/inboundRoutes/{route_id}/token · Producción: https://token.tonder.io/v1/gateway/inboundRoutes/{route_id}/tokenRequiere el access_token de tokenization/auth primero · el endpoint vive en un dominio distinto, no bajo /api/v1/ de Tonder · el route_id de la ruta es distinto por ambiente, no confundas stage con producción
POSTPago con tarjeta tokenizada/api/v1/process/Envía los tokens en payment_method · alcance PCI reducido (SAQ A / SAQ A-EP)
POSTDatos de tarjeta en crudoprocess[-sandbox].tonder.io/raw-dataRequiere PCI DSS Nivel 1
GETEstado de transacción/api/v1/transactions/{id}/Fuente de verdad — verifica siempre aquí
POSTRetiro/api/v1/process/Solo server-side — requiere la llave API

Headers para peticiones POST /process/:

Authorization: Token YOUR_API_KEY
X-Request-Id: <uuid-v4>
Content-Type: application/json

X-Request-Id no es un header de autenticación — es la llave de idempotencia para deduplicar reintentos (ver Idempotencia). Detalles completos de ambos en Autenticación.

Alcance PCI

Modo de integraciónCertificación PCI requerida
Hosted CheckoutNinguna — Tonder aloja la captura de la tarjeta
SDK (Full o Lite)Ninguna — los datos de tarjeta se tokenizan en el cliente
HíbridoNinguna — las tarjetas pasan por el leg de SDK/Hosted
API Direct (S2S) — flujo tokenizadoSAQ A o SAQ A-EP — la tarjeta se tokeniza antes de llegar a ti
API Direct (S2S) — datos en crudoPCI DSS Nivel 1 — la tarjeta pasa por tus servidores

Webhooks

API Direct recibe webhooks en formato Short. Concilia por metadata.external_id. Consulta el Modelo de webhooks.

Referencia de la API

El endpoint unificado de pagos y retiros, y la consulta de estado (fuente de verdad):

POST
/process/

Autorización

Authorization
Authorization<token>

Tu API key con prefijo Token , p. ej. Token <API_KEY>

In: header

Cuerpo de la petición

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Cuerpo de la respuesta

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/process/" \  -H "Content-Type: application/json" \  -d '{    "operation_type": "payment",    "amount": 150,    "currency": "MXN",    "customer": {      "name": "Ana María Rodríguez",      "email": "ana.rodriguez@email.com"    },    "payment_method": {      "type": "CARD",      "card_number": "9230-0892-4469-1474",      "cardholder_name": "c05d89b2-299c-4f93-b49a-42be00d3b64b",      "cvv": "d31f0da3-0ed3-4ad8-8b68-14c2669a99a7",      "expiration_month": "e401a32e-4174-424f-9688-727005f6a80e",      "expiration_year": "bd9ccc23-3d00-4109-9626-fc6581389063"    },    "client_reference": "order-789",    "return_url": "https://mystore.com/payment/return"  }'
{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "operation_type": "payment",
  "status": "Pending",
  "amount": 0,
  "currency": "string",
  "client_reference": "string",
  "payment_id": 0,
  "transaction_id": "string",
  "provider": "string",
  "created_at": "2019-08-24T14:15:22Z",
  "status_code": 0,
  "next_action": {
    "redirect_to_url": {
      "url": "http://example.com",
      "return_url": "http://example.com",
      "verify_transaction_status_url": "string"
    }
  },
  "payment_instructions": {
    "reference": "string",
    "account_number": "string",
    "bank_name": "string",
    "amount": 0,
    "expires_at": "2019-08-24T14:15:22Z",
    "reference_code": "string",
    "barcode": "string",
    "store_name": "string",
    "expiration_date": "2019-08-24T14:15:22Z",
    "instructions": [
      "string"
    ],
    "voucher_pdf": "http://example.com"
  }
}
{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "operation_type": "payment",
  "status": "Pending",
  "amount": 0,
  "currency": "string",
  "client_reference": "string",
  "payment_id": 0,
  "transaction_id": "string",
  "provider": "string",
  "created_at": "2019-08-24T14:15:22Z",
  "status_code": 0,
  "next_action": {
    "redirect_to_url": {
      "url": "http://example.com",
      "return_url": "http://example.com",
      "verify_transaction_status_url": "string"
    }
  },
  "payment_instructions": {
    "reference": "string",
    "account_number": "string",
    "bank_name": "string",
    "amount": 0,
    "expires_at": "2019-08-24T14:15:22Z",
    "reference_code": "string",
    "barcode": "string",
    "store_name": "string",
    "expiration_date": "2019-08-24T14:15:22Z",
    "instructions": [
      "string"
    ],
    "voucher_pdf": "http://example.com"
  }
}
{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "operation_type": "payment",
  "status": "Pending",
  "amount": 0,
  "currency": "string",
  "client_reference": "string",
  "payment_id": 0,
  "transaction_id": "string",
  "provider": "string",
  "created_at": "2019-08-24T14:15:22Z",
  "status_code": 0,
  "next_action": {
    "redirect_to_url": {
      "url": "http://example.com",
      "return_url": "http://example.com",
      "verify_transaction_status_url": "string"
    }
  },
  "payment_instructions": {
    "reference": "string",
    "account_number": "string",
    "bank_name": "string",
    "amount": 0,
    "expires_at": "2019-08-24T14:15:22Z",
    "reference_code": "string",
    "barcode": "string",
    "store_name": "string",
    "expiration_date": "2019-08-24T14:15:22Z",
    "instructions": [
      "string"
    ],
    "voucher_pdf": "http://example.com"
  }
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
GET
/transactions/{transaction_id}/

Autorización

Authorization
Authorization<token>

Tu API key con prefijo Token , p. ej. Token <API_KEY>

In: header

Parámetros de ruta

transaction_id*string

The unique transaction identifier returned from the /process/ endpoint

Cuerpo de la respuesta

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/transactions/550e8400-e29b-41d4-a716-446655440000/"

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "operation_type": "payment",
  "status": "Success",
  "amount": 150,
  "currency": "MXN",
  "client_reference": "ORD-001",
  "created_at": "2024-07-26T10:30:00Z",
  "updated_at": "2024-07-26T10:32:15Z",
  "completion_details": {
    "completed_at": "2024-07-26T10:32:15Z"
  }
}

{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}
{
  "error": {
    "code": "string",
    "message": "string",
    "type": "request_error",
    "details": {}
  },
  "request_id": "string"
}

Siguientes pasos

¿Te resultó útil esta página?

En esta página