Autenticación y tokenización
Autentica con tu llave API y cambia llave por access token para tokenizar tarjetas.
Todas las peticiones a la API de Tonder deben autenticarse. Usamos una llave API para asegurar que
toda la comunicación proviene de una fuente confiable. Una petición no autenticada devuelve
401 Unauthorized.
Métodos de autenticación
| Credencial | Sandbox | Producción |
|---|---|---|
| Llave API | dashboard-stage.tonder.io → Developers → API Keys | dashboard.tonder.io → Developers → API Keys |
Headers requeridos
| Header | Descripción |
|---|---|
Authorization | Tu llave API, con el prefijo Token. |
Content-Type | Debe ser application/json para peticiones con cuerpo. |
Authorization: Token <YOUR_API_KEY>
Content-Type: application/jsonEl esquema es Token seguido de un espacio y luego tu llave, no Bearer. Si falta el espacio,
obtienes 401 Unauthorized.
Agrega también X-Request-Id con un UUID v4 por petición: no es un header de autenticación, es la
llave de idempotencia que deduplica reintentos. Ver
Idempotencia.
Ejemplo de petición completa
import requests
API_KEY = "your_api_key_from_dashboard"
BASE_URL = "https://stage.tonder.io/api/v1" # usa https://app.tonder.io en producción
request_body = {
"operation_type": "payment",
"amount": 100.00,
"currency": "MXN",
"customer": {"name": "Test Customer", "email": "test@example.com"},
"payment_method": {"type": "SPEI"},
"client_reference": "ORD-001"
}
headers = {"Authorization": f"Token {API_KEY}", "Content-Type": "application/json"}
response = requests.post(f"{BASE_URL}/process/", headers=headers, json=request_body)
print(f"Status: {response.status_code}")
print(f"Response: {response.json()}")curl -X POST https://stage.tonder.io/api/v1/process/ \
-H "Authorization: Token <YOUR_API_KEY>" \
-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": "SPEI" },
"client_reference": "ORD-001"
}'Tokenización de tarjetas
Para guardar o procesar tarjetas con menor alcance PCI, intercambia tu llave por un access token de
corta duración: GET /api/v1/tokenization/auth/ (con tu llave API) devuelve un access_token
(JWT). Ese token autoriza la tokenización de los datos de la tarjeta (header
X-Skyflow-Authorization). Consulta el flujo completo en
Pagos con tarjeta.
Buenas prácticas de seguridad
- Nunca expongas tu llave API en código de cliente, apps móviles ni control de versiones.
- Usa variables de entorno para almacenar credenciales, no las dejes en el código.
- Rota las llaves de inmediato si sospechas que se filtraron.
- Usa llaves separadas para sandbox y producción.
- Restringe el acceso a las credenciales por necesidad.
Errores de autenticación
| Código | Mensaje | Causa | Solución |
|---|---|---|---|
401 | Unauthorized | Llave API inválida o ausente | Verifica que tu llave sea correcta e incluya el prefijo Token (con espacio). |
403 | Forbidden | La llave no tiene permiso para este endpoint | Revisa los permisos de tu cuenta o contacta a soporte. |
