Ressources

Erreurs et limites de fréquence des requêtes

Format des erreurs

Toutes les erreurs de l’API renvoient du JSON avec la structure suivante :

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

Certains points de terminaison (comportement par défaut de Django REST Framework) peuvent aussi renvoyer :

{
  "detail": "Error message"
}

Codes de statut HTTP

Statut Signification Cas de figure
200 Succès La requête a abouti
400 Requête incorrecte Paramètres manquants ou non valides
401 Non authentifié Jeton d’authentification manquant, expiré ou non valide
403 Accès interdit Le jeton ne possède pas la portée requise ou ne permet pas d’accéder à l’espace de travail
404 Ressource introuvable La ressource n’existe pas ou l’espace de travail ne contient aucune donnée synchronisée
405 Méthode non autorisée Méthode HTTP incorrecte pour ce point de terminaison
422 Entité non traitable Échec de la validation du corps de la requête
429 Trop de requêtes Limite de fréquence des requêtes dépassée
500 Erreur interne du serveur Erreur inattendue du serveur
503 Service indisponible Elasticsearch ou une autre dépendance est indisponible

Limites de fréquence des requêtes

API V1 (jetons de service)

Niveau Limite Périmètre
Rafale 20 requêtes / 10 secondes Par jeton
Fenêtre 600 requêtes / 15 minutes Par jeton

API utilisateur (JWT)

Niveau Limite Périmètre
Authentifié 100 requêtes / minute Par utilisateur
Anonyme 20 requêtes / minute Par adresse IP

En-têtes de limitation de la fréquence des requêtes

Lorsque les requêtes sont limitées en fréquence, la réponse inclut :

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

Gestion des limites de fréquence des requêtes : Attendez la durée indiquée par Retry-After (en secondes) avant de réessayer. En cas de réponses 429 répétées, augmentez de façon exponentielle le délai d’attente entre les tentatives.

Cas d’erreur courants

Erreurs d’authentification

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

Erreurs d’autorisation

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

Erreurs de validation

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

Erreurs liées aux ressources

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

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

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