Recursos

Erros & limites de requisições

Formato dos erros

Todos os erros da API retornam JSON com esta estrutura:

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

Alguns endpoints (com as configurações padrão do Django REST Framework) também podem retornar:

{
  "detail": "Error message"
}

Códigos de status HTTP

Status Significado Quando ocorre
200 OK Requisição bem-sucedida
400 Requisição inválida Parâmetros ausentes ou inválidos
401 Não autorizado Token de autenticação ausente, expirado ou inválido
403 Acesso proibido O token não tem o escopo necessário ou acesso ao espaço de trabalho
404 Não encontrado O recurso não existe ou o espaço de trabalho não tem dados sincronizados
405 Método não permitido Método HTTP incorreto para o endpoint
422 Entidade não processável Falha na validação do corpo da requisição
429 Requisições em excesso Limite de requisições excedido
500 Erro interno do servidor Erro inesperado no servidor
503 Serviço indisponível Elasticsearch ou outra dependência fora do ar

Limites de requisições

API V1 (tokens de serviço)

Categoria Limite Escopo
Rajada 20 requisições / 10 segundos Por token
Janela 600 requisições / 15 minutos Por token

API de usuário (JWT)

Categoria Limite Escopo
Autenticado 100 requisições / minuto Por usuário
Anônimo 20 requisições / minuto Por IP

Cabeçalhos de limite de requisições

Quando o limite de requisições é atingido, a resposta inclui:

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

Como lidar com os limites de requisições: Aguarde o tempo indicado em Retry-After (em segundos) antes de tentar novamente. Implemente uma estratégia de aumento exponencial do tempo de espera para respostas 429 repetidas.

Cenários comuns de erro

Erros de autenticação

// 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."}

Erros de permissão

// 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."}

Erros de validação

// 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."}

Erros 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."}