> ## Documentation Index
> Fetch the complete documentation index at: https://docs.thaliq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Errores

> Codigos de error y como manejarlos

## Codigos HTTP

| Status | Significado       | Causa comun                         |
| :----: | ----------------- | ----------------------------------- |
|  `200` | OK                | Peticion exitosa                    |
|  `400` | Bad Request       | Parametros faltantes o invalidos    |
|  `401` | Unauthorized      | API Key no proporcionada o invalida |
|  `403` | Forbidden         | Feature no disponible en tu plan    |
|  `429` | Too Many Requests | Rate limit alcanzado                |
|  `500` | Internal Error    | Error del servidor                  |

## Error 401: API Key invalida

```json theme={null}
{
  "statusCode": 401,
  "message": "Invalid API key"
}
```

**Solucion:** Verifica que el header `X-API-Key` tenga una key valida y activa. Puedes crear una nueva en la plataforma.

## Error 403: Feature no disponible

```json theme={null}
{
  "statusCode": 403,
  "message": "Feature not available in your plan",
  "currentPlan": "STARTER",
  "requiredFeatures": ["mcp_servers"]
}
```

**Solucion:** Algunas features solo estan disponibles en planes superiores. Revisa los [planes](/introduction/plans) o contacta ventas para un upgrade.

## Error 429: Rate limit

```json theme={null}
{
  "statusCode": 429,
  "message": "Rate limit exceeded"
}
```

El header `Retry-After` indica cuantos segundos esperar antes de reintentar:

```
HTTP/1.1 429 Too Many Requests
Retry-After: 12
```

**Limites por plan:**

| Plan       | Requests/min |
| ---------- | :----------: |
| Starter    |       5      |
| Growth     |      50      |
| Enterprise |  Sin limite  |

### Manejo recomendado

```javascript theme={null}
const response = await fetch(url, { headers });

if (response.status === 429) {
  const retryAfter = parseInt(response.headers.get('Retry-After') || '60');
  console.log(`Rate limit. Reintentando en ${retryAfter}s...`);
  await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
  // Reintentar
}
```

## Errores en streaming (SSE)

Durante un stream, los errores se envian como eventos SSE:

```
event: error
data: {"message":"Error procesando la solicitud"}
```

El widget maneja estos errores automaticamente. Si usas la API directamente, escucha el evento `error`:

```javascript theme={null}
// Con fetch + ReadableStream
switch (eventType) {
  case 'error':
    const data = JSON.parse(rawData);
    console.error('Error del agente:', data.message);
    break;
}
```

## Errores comunes

<AccordionGroup>
  <Accordion title="'API key is required'">
    No se envio el header `X-API-Key`. Asegurate de incluirlo en todas las peticiones.
  </Accordion>

  <Accordion title="'Invalid API key'">
    La API Key no corresponde a ningun tenant activo. Verifica que no este revocada y que sea correcta.
  </Accordion>

  <Accordion title="'Feature not available in your plan'">
    Intentaste usar una feature que requiere un plan superior (ej: MCP Servers en plan Starter).
  </Accordion>

  <Accordion title="'Rate limit exceeded'">
    Excediste el limite de requests por minuto de tu plan. Espera el tiempo indicado en `Retry-After`.
  </Accordion>

  <Accordion title="Timeout / Sin respuesta">
    El agente puede tardar mas si ejecuta multiples tools. El timeout default es de 60 segundos. Si usas tools HTTP lentas, considera optimizar tus endpoints.
  </Accordion>
</AccordionGroup>
