Contenido
Cuando una solicitud falla, la API devuelve un objeto JSON de error consistente independientemente del endpoint. El código de estado HTTP indica la categoría de la falla; el cuerpo proporciona los detalles.
{
"statusCode": 400,
"error": "validation_error",
"message": "Model validation failed.",
"details": {
"itemID": ["The itemID field is required."],
"units": ["The field units must be greater than 0."]
}
}| Campo | Tipo | Descripción |
|---|---|---|
statusCode | integer | Código de estado HTTP (refleja el estado de la respuesta) |
error | string | Código de error legible por máquina (ver tabla a continuación) |
message | string | Descripción legible por humanos de lo que salió mal |
details | object o null | Errores de validación a nivel de campo (solo presentes en fallos de validación) |
El objeto details mapea nombres de campo a arreglos de mensajes de error. Solo está presente cuando el código de error es validation_error.
| Código | Estado HTTP | Significado |
|---|---|---|
bad_request | 400 | La solicitud está malformada o faltan datos requeridos |
validation_error | 400 | Uno o más campos fallaron la validación (ver details) |
unauthorized | 401 | Falta la autenticación o el token está expirado |
forbidden | 403 | Autenticado pero sin permiso para esta acción |
not_found | 404 | El recurso solicitado no existe |
conflict | 409 | La solicitud conflictúa con el estado actual (ej., ShortID duplicado) |
rate_limited | 429 | Demasiadas solicitudes — reduzca la velocidad y reintente |
not_implemented | 501 | El endpoint existe pero la operación no está disponible |
internal_error | 500 | Error inesperado del servidor |
| Estado | Cuando lo Verá |
|---|---|
| 200 OK | Lectura o actualización exitosa |
| 201 Created | Recurso creado exitosamente |
| 400 Bad Request | Entrada inválida, campos faltantes, JSON malformado |
| 401 Unauthorized | Sin token, token expirado, o token inválido |
| 403 Forbidden | Token válido pero la acción no está permitida para este cliente |
| 404 Not Found | El ID del recurso no existe |
| 409 Conflict | Duplicado o conflicto de estado |
| 429 Too Many Requests | Límite de tasa excedido |
| 500 Internal Server Error | Falla del lado del servidor (reporte a su administrador) |
Cuando envía datos inválidos, la API devuelve un 400 con detalle a nivel de campo:
curl -X POST https://su-host/api/v1/Item \
-H "Authorization: Bearer ..." \
-H "Content-Type: application/json" \
-d '{}'{
"statusCode": 400,
"error": "validation_error",
"message": "Model validation failed.",
"details": {
"itemID": ["The itemID field is required."]
}
}Corrija los campos señalados y reintente.
Si sus credenciales no incluyen el permiso requerido:
{
"statusCode": 403,
"error": "forbidden",
"message": "Insufficient permissions."
}Otras variantes de 403:
| Mensaje | Causa |
|---|---|
| ”Account is read-only.” | El usuario de integración está marcado como solo lectura — no se permiten operaciones de escritura |
| ”Warehouse is outside the client’s authorized scope.” | El ID de almacén en su solicitud no está asignado a su usuario de integración |
| ”Insufficient permissions.” | Su grupo no otorga el permiso de seguridad para este endpoint |
| ”Report access denied.” | Su grupo no tiene acceso al reporte solicitado |
{
"message": "Rate Limit Exceeded. 100 per Minute"
}Nota: La respuesta de límite de tasa usa un formato más simple que la estructura estándar de error. Espere y reintente después de un intervalo razonable (30-60 segundos).
var response = await client.PostAsync(url, content);
if (!response.IsSuccessStatusCode)
{
var body = await response.Content.ReadAsStringAsync();
var error = JsonConvert.DeserializeObject<ApiError>(body);
switch (error.Error)
{
case "validation_error":
// Fix the fields listed in error.Details
break;
case "rate_limited":
// Wait and retry
break;
case "unauthorized":
// Token expired — refresh and retry
break;
default:
// Log and alert
break;
}
}$response = Invoke-WebRequest -Uri $url -Method Post -Body $json `
-Headers @{ Authorization = "Bearer $token" } `
-ContentType "application/json" -ErrorAction SilentlyContinue
if ($response.StatusCode -ge 400) {
$error = $response.Content | ConvertFrom-Json
Write-Warning "$($error.error): $($error.message)"
}En esta página