Errores
El formato RFC 9457 de los errores de la API de partners de SLAN, por qué se programa contra code y qué hacer con cada código de estado.
Todos los errores de la API llegan con el tipo de contenido application/problem+json y la
misma estructura, definida por RFC 9457.
{ "type": "https://docs.slan.mx/problems/400", "title": "BAD_REQUEST", "status": 400, "instance": "/v1/partner/users", "requestId": "01M2SJ4K5N6P7Q8R9S0T1U2V3W", "code": "VALIDATION_ERROR", "errors": ["email debe ser un correo electrónico válido"], "detail": "Falló la validación del cuerpo."}| Campo | Para qué sirve |
|---|---|
code |
El identificador estable del error. Es contra esto que se programa |
status |
El código de estado HTTP, repetido en el cuerpo |
title |
Nombre corto del estado |
detail |
Explicación legible. Puede cambiar de redacción |
errors |
Lista de campos que fallaron, solo en errores de validación |
instance |
La ruta que produjo el error |
requestId |
El identificador de esa petición concreta |
type |
Enlace a la página que describe ese estado |
requestId, o cómo pedir ayuda
Cada error trae un requestId. Guárdalo en tu registro junto con el error.
Cuando algo no cuadre y escribas a soporte, ese identificador nos lleva directamente a la petición exacta: qué llegó, qué se ejecutó y qué falló. Sin él, la única forma de encontrarla es adivinar por fecha y ruta.
Los códigos de estado
| Código | Qué significa | Qué hacer |
|---|---|---|
400 |
Los datos enviados no son válidos | Revisa errors[]: indica qué campo falló y por qué |
401 |
Falta x-api-key, o la llave no existe, expiró o fue revocada |
Verifica la cabecera. Si expiró, rótala |
403 |
La llave no tiene el scope que ese endpoint exige | Consulta GET /v1/partner/me para ver tus scopes y pide el que falte |
404 |
El recurso no existe o no es tuyo | Verifica el publicId. Un recurso de otro partner también responde 404 |
409 |
El recurso ya existe o hay un conflicto de estado | Lee el code para saber la causa |
422 |
Los datos son válidos pero violan una regla de negocio | Lee code y detail |
429 |
Excediste el límite de peticiones | Espera lo que diga Retry-After y reintenta |
500 |
Error inesperado de nuestro lado | Reintenta. Si persiste, reporta el requestId |
503 |
Servicio no disponible temporalmente | Reintenta con espera creciente |
Cada código tiene su propia página con los code que pueden aparecer con él. Son las mismas
URLs que verás en el campo type de cualquier error.
Reintentar, y cuándo no
Reintenta los 429, los 500 y los 503, con espera creciente entre intentos. Si la
operación era un POST, reintenta con la misma Idempotency-Key: es lo que evita
duplicar el recurso.
No reintentes los 400, 401, 403, 404, 409 ni 422 sin cambiar algo. Son
respuestas deterministas: la misma petición va a fallar igual las veces que la mandes.