Métodos de pago

Asigna una CLABE por usuario

Da a cada uno de tus usuarios su propia CLABE SPEI: una llamada, idempotente por usuario, y cada transferencia que reciba se acredita a tu cuenta.

POST /api/v1/clabe-assignments da a cada uno de tus usuarios finales su propia CLABE SPEI. Cualquier transferencia SPEI que tu usuario envíe a esa CLABE se acredita a tu cuenta de comercio.

Llámalo una vez por usuario — por ejemplo cuando se registra, o la primera vez que abre tu pantalla de depósitos. La llamada es idempotente por usuario: volver a llamarla con el mismo user_id devuelve la misma CLABE en vez de crear una nueva. Cada user_id corresponde a exactamente una CLABE dentro de tu cuenta de comercio, y dos valores distintos de user_id siempre reciben dos CLABEs distintas.

Las transferencias que llegan a una CLABE asignada son las transferencias directas que describe Frictionless SPEI: el cliente paga desde su app bancaria sin checkout, y tú confirmas cada depósito con un webhook.

URL base

Usa el dominio del API de Tonder de tu entorno y agrega /deposits antes de la ruta del endpoint.

EntornoURL baseEndpoint completo
Sandboxhttps://api-stage.tonder.io/depositshttps://api-stage.tonder.io/deposits/api/v1/clabe-assignments
Producciónhttps://api.tonder.io/depositshttps://api.tonder.io/deposits/api/v1/clabe-assignments

Si tu integración llama hoy a una URL execute-api.amazonaws.com, sigue funcionando. Cambia a los dominios de arriba: se mantienen iguales si la infraestructura de Tonder cambia.

Autenticación

Envía tu llave API de Tonder en el header Authorization, con el prefijo Token y un espacio:

Authorization: Token <tu-llave-api>

Usa la misma llave API que usas para el resto del API de Tonder. Tonder identifica tu cuenta de comercio a partir de la llave, así que la petición no lleva id de comercio. Una llave faltante o inválida se rechaza antes de que la petición llegue al endpoint.

Mantén la llave solo en tu servidor. Nunca llames a este endpoint desde un navegador o una app móvil.

Paso a paso

Asigna la CLABE

POST /api/v1/clabe-assignments con un cuerpo JSON y los headers Authorization: Token <tu-llave-api> y Content-Type: application/json.

CampoTipoRequeridoDescripción
user_idstringSíTu propio identificador del usuario final. Usa un valor que nunca cambie para ese usuario, como tu ID interno de cliente.
curl -X POST https://api-stage.tonder.io/deposits/api/v1/clabe-assignments \
  -H "Authorization: Token $TONDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"user_id": "customer-48213"}'
curl -X POST https://api.tonder.io/deposits/api/v1/clabe-assignments \
  -H "Authorization: Token $TONDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"user_id": "customer-48213"}'

Desde tu servidor, en Node.js (18+) o Python — cambia el dominio a https://api-stage.tonder.io y usa tu llave API de sandbox para probar:

const res = await fetch(
  "https://api.tonder.io/deposits/api/v1/clabe-assignments",
  {
    method: "POST",
    headers: {
      Authorization: `Token ${process.env.TONDER_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ user_id: "customer-48213" }),
  }
);

if (!res.ok) throw new Error(`CLABE assignment failed: ${res.status}`);
const { clabe, is_new } = await res.json();
import os, requests

res = requests.post(
    "https://api.tonder.io/deposits/api/v1/clabe-assignments",
    headers={"Authorization": f"Token {os.environ['TONDER_API_KEY']}"},
    json={"user_id": "customer-48213"},
    timeout=30,
)
res.raise_for_status()
clabe = res.json()["clabe"]

Muestra la CLABE a tu usuario

Una CLABE nueva devuelve 201 Created. Si el usuario ya tenía una, recibes 200 OK con la misma CLABE e is_new: false. Ambos casos comparten el mismo cuerpo:

{
  "assignment_id": "9b2f6c1e-4d3a-4f7b-8a51-2c6e0d9f7a14",
  "clabe": "710969000012345678",
  "merchant_id": "1234",
  "user_id": "customer-48213",
  "provider_type": "Tonder",
  "assigned_at": "2026-10-13T18:22:05.123456+00:00",
  "is_new": true
}
CampoTipoDescripción
clabestringLa CLABE de 18 dígitos que muestras a tu usuario. Él envía transferencias SPEI a ella.
assignment_idstring (UUID)El ID de Tonder para esta asignación. Guárdalo para solicitudes de soporte.
user_idstringEl user_id que enviaste.
merchant_idstringTu ID de comercio, resuelto a partir de tu llave API.
provider_typestringSiempre Tonder.
assigned_atstring (ISO 8601, UTC)Cuándo se asignó la CLABE por primera vez. No cambia en llamadas repetidas.
is_newbooleantrue si esta llamada creó la CLABE, false si ya existía.

Recibe los depósitos

Cada transferencia SPEI a esa CLABE se acredita a tu cuenta de comercio. Confirma cada depósito con un webhook — las claves de conciliación y el flujo de transferencias directas están en Frictionless SPEI — o consulta un depósito con el endpoint de status de depósitos.

Errores

Los errores del endpoint devuelven un cuerpo JSON con error y message. Los dos errores de autenticación vienen del gateway y solo incluyen message.

Status HTTPerrorCuándo ocurreQué hacer
400INVALID_PARAMETERuser_id falta o no es un string.Corrige el cuerpo de la petición. No reintentes sin cambios.
400DOMAIN_ERRORNo se pudo asignar la CLABE, por ejemplo porque el proveedor bancario no estaba disponible.Reintenta con backoff. Reintentar es seguro: nunca recibes dos CLABEs para el mismo user_id.
401ninguno ("message": "Unauthorized")Falta el header Authorization.Agrega el header.
403ninguno ("message": "User is not authorized to access this resource…")La llave API es inválida, o el header no usa el formato Token <llave>.Revisa la llave y el prefijo Token .
500INTERNAL_ERRORError inesperado del lado de Tonder.Reintenta con backoff. Si persiste, contacta a soporte de Tonder.
{
  "error": "INVALID_PARAMETER",
  "message": "user_id is required"
}

Referencia de la API

POST
/api/v1/clabe-assignments

Autorización

Authorization
Authorization<token>

Your public API key, with the word Token and a space in front of it. Example: Token 6534bc0a7e1f4d2b9c8e3a5f7b1d2c4e6f8a9b0c — that whole value is the header. Sending the key alone returns 401 'Authentication credentials were not provided'. In this playground you may paste just the key; the prefix is added for you.

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

curl -X POST "https://example.com/api/v1/clabe-assignments" \  -H "Content-Type: application/json" \  -d '{    "user_id": "customer-48213"  }'
{
  "assignment_id": "9b2f6c1e-4d3a-4f7b-8a51-2c6e0d9f7a14",
  "clabe": "710969000012345678",
  "merchant_id": "1234",
  "user_id": "customer-48213",
  "provider_type": "Tonder",
  "assigned_at": "2026-10-13T18:22:05.123456+00:00",
  "is_new": false
}
{
  "assignment_id": "9b2f6c1e-4d3a-4f7b-8a51-2c6e0d9f7a14",
  "clabe": "710969000012345678",
  "merchant_id": "1234",
  "user_id": "customer-48213",
  "provider_type": "Tonder",
  "assigned_at": "2026-10-13T18:22:05.123456+00:00",
  "is_new": true
}
{
  "error": "INVALID_PARAMETER",
  "message": "user_id is required"
}
{
  "message": "Unauthorized"
}
{
  "message": "User is not authorized to access this resource"
}
{
  "error": "INTERNAL_ERROR",
  "message": "Unexpected error"
}

Siguientes pasos

¿Te resultó útil esta página?

En esta página