# Errores

> Forma de las respuestas de error de la API de Blogenia, códigos HTTP y códigos de error propios.

Versión web: https://blogelia.com/docs/errores

Los errores usan el código HTTP correspondiente y un cuerpo JSON con la misma forma.

**Cuerpo de error**

```json
{
  "statusCode": 404,
  "error": "Not Found",
  "message": "Blog no encontrado",
  "requestId": "0b8e2f6c-6d63-4d0e-9c1a-5d8f3c1d7a11"
}
```

**Campos**

| Campo | Tipo | Descripción |
| --- | --- | --- |
| `statusCode` | number | Código HTTP. |
| `error` | string | Nombre estándar del código HTTP. |
| `message` | string \| string[] | Explicación en español. En errores de validación puede ser una lista de textos. |
| `requestId` | string | Identificador de la petición. Indícalo si escribes a soporte. |
| `code` | string | Solo en algunos errores: código estable para tratarlo en tu programa. |

## Códigos HTTP

| Código | Significado |
| --- | --- |
| `400` | Un parámetro no es válido o no existe (por ejemplo `limit=500`, `page=0` o `format=xml`). En las rutas de analítica y cuenta, un rango de fechas no válido lleva un `code`. |
| `401` | Falta la clave, no es válida o la ruta no admite claves. Ver [Autenticación](https://blogelia.com/docs/autenticacion). |
| `403` | Tu plan no incluye la API o la organización está suspendida. |
| `404` | El blog o el artículo no existe, no es de tu organización, el identificador está mal formado o el artículo no está publicado. |
| `429` | Has superado el límite de tu plan. Ver [Límites de uso](https://blogelia.com/docs/limites). |
| `5xx` | Error nuestro. Reintenta con espera creciente. |

## Códigos de error propios

| `code` | HTTP | Cuándo |
| --- | --- | --- |
| `plan_required` | 403 | La organización está en el plan Free. |
| `ORGANIZATION_SUSPENDED` | 403 | La organización está suspendida. |
| `insufficient_scope` | 403 | La clave no tiene el permiso de la ruta. Ver [Permisos](https://blogelia.com/docs/autenticacion#scopes). |
| `owner_required` | 403 | Al crear en el panel una clave con `account:read` sin ser el propietario de la cuenta. |
| `invalid_date` | 400 | Una fecha de `from`, `to`, `desde` o `hasta` no es un `YYYY-MM-DD` real. |
| `invalid_range` | 400 | La fecha inicial es posterior a la final. |
| `range_in_future` | 400 | `to` es una fecha futura. |
| `range_too_long` | 400 | El rango de `from` a `to` supera los 400 días. |
| `rate_limited` | 429 | Límite de peticiones superado. |

> **Consejo:** Trata el error por `statusCode` y, si existe, por `code`. El texto de `message` puede cambiar.
