Errores
Gestiona el contrato de respuestas de problemas y correlaciona las solicitudes.
Los errores siguen el contrato JSON de problemas de RFC 9457, con el tipo de medio application/problem+json.
{
"type": "https://www.ninjabuy.com/api/v1/problems/bad-body",
"title": "Invalid request",
"status": 400,
"detail": "The request did not match the expected shape.",
"request_id": "REQUEST_ID",
"errors": [{"pointer": "/links", "detail": "Validation detail"}]
}type es el identificador estable del problema; title y detail lo describen. status coincide con el estado HTTP. Las entradas opcionales de errors contienen un JSON Pointer y detalles de validación; un puntero vacío indica el cuerpo completo. Incluye request_id (también en X-Request-Id) al reportar un problema.
Todos los tipos siguientes comienzan con https://www.ninjabuy.com/api/v1/problems/.
| Sufijo del tipo | HTTP | Significado / acción |
|---|---|---|
bad-json | 400 | El cuerpo no es JSON válido. Corrige la sintaxis. |
bad-body | 400 | El cuerpo, los parámetros de consulta o el cursor no pasan la validación. Lee errors. |
bad-idempotency-key | 400 | Usa de 1 a 255 caracteres ASCII imprimibles para Idempotency-Key. |
unauthorized | 401 | Proporciona un token bearer válido; WWW-Authenticate ofrece los metadatos de descubrimiento. |
not-found | 404 | El recurso no está disponible, es desconocido o no pertenece a esta cuenta. |
method-not-allowed | 405 | Usa el método indicado en Allow. |
idempotency-key-in-progress | 409 | La primera solicitud con esta clave está en curso. Espera el plazo de Retry-After. |
upload-too-large | 413 | Los bytes subidos superan el tamaño declarado o el límite de 20 MiB. |
unsupported-media-type | 415 | Envía Content-Type: application/json. |
idempotency-key-reused | 422 | Esta clave se usó con otra solicitud. Usa una clave nueva. |
invalid-workbook | 422 | La carga no es un XLSX/CSV legible dentro de los límites. Lee errors. |
upload-expired | 422 | La reserva de carga venció. Vuelve a subir el archivo. |
rate-limited | 429 | Espera los segundos de Retry-After antes de reintentar. |
search-rate-limited | 429 | La ventana de búsqueda por palabras clave está llena. Espera el plazo de Retry-After. |
service-unavailable | 503 | Reintenta en breve; respeta Retry-After cuando esté presente. |
internal-error | 500 | Reintenta más tarde; conserva el identificador de solicitud si persiste. |
Una solicitud exitosa puede contener errores en entradas individuales. Gestiona los estados de enlaces por separado de los errores HTTP. Usa Idempotency-Key para reproducir una solicitud de creación; sin clave, reintentar el envío de un lote crea otro trabajo.