Recursos

Errores y límites de frecuencia de solicitudes

Formato de los errores

Todos los errores de la API devuelven JSON con esta estructura:

{
  "error": "Short error description",
  "detail": "Extended description (optional)"
}

Algunos puntos de conexión (con la configuración predeterminada de Django REST Framework) también pueden devolver:

{
  "detail": "Error message"
}

Códigos de estado HTTP

Estado Significado Cuándo se produce
200 Correcto La solicitud se ha completado correctamente
400 Solicitud incorrecta Faltan parámetros o no son válidos
401 No autorizado Falta el token de autenticación, ha caducado o no es válido
403 Acceso prohibido El token no tiene el alcance requerido o no permite acceder al espacio de trabajo
404 No encontrado El recurso no existe o el espacio de trabajo no tiene datos sincronizados
405 Método no permitido El método HTTP no es correcto para el punto de conexión
422 Entidad no procesable Ha fallado la validación del cuerpo de la solicitud
429 Demasiadas solicitudes Se ha superado el límite de frecuencia de solicitudes
500 Error interno del servidor Se ha producido un error inesperado en el servidor
503 Servicio no disponible Elasticsearch u otra dependencia no está disponible

Límites de frecuencia de solicitudes

API V1 (tokens de servicio)

Nivel Límite Ámbito
Ráfaga 20 solicitudes / 10 segundos Por token
Ventana 600 solicitudes / 15 minutos Por token

API de usuario (JWT)

Nivel Límite Ámbito
Autenticado 100 solicitudes / minuto Por usuario
Anónimo 20 solicitudes / minuto Por IP

Cabeceras de límites de frecuencia de solicitudes

Cuando se aplica una limitación de frecuencia de solicitudes, la respuesta incluye:

HTTP/1.1 429 Too Many Requests
Retry-After: 30

Cómo gestionar los límites de frecuencia de solicitudes: Espera el tiempo indicado en Retry-After (en segundos) antes de volver a intentarlo. Implementa una espera exponencial entre reintentos si recibes respuestas 429 repetidas.

Casos de error habituales

Errores de autenticación

// Missing Authorization header
{"detail": "Authentication credentials were not provided."}

// Invalid or expired JWT
{"detail": "Given token not valid for any token type", "code": "token_not_valid"}

// Invalid service token
{"error": "Invalid or revoked service token."}

// Expired service token
{"error": "Token has expired."}

Errores de permisos

// Token missing required scope
{"error": "Token does not have the required scope: graph:search"}

// Workspace not in token's allowed list
{"error": "Workspace not allowed for this token."}

Errores de validación

// Missing required parameter
{"error": "workspace_id is required."}

// Invalid UUID format
{"error": "Invalid node_id format."}

// Query too long (V1 API)
{"error": "Query too long (max 256 characters)."}

// Disallowed characters in query
{"error": "Query contains disallowed characters."}

Errores de recursos

// Workspace not synced
{"error": "No synced data found for this workspace."}

// Node not found
{"error": "Node not found."}

// Elasticsearch unavailable
{"error": "Search service unavailable."}