Skip to main content

Formes d’erreur

Il y a trois formes. Lisez d’abord le statut, puis le corps. 1. detail est une chaîne (la plupart des erreurs).
2. detail est un objet avec un code stable (faites correspondre sur code, pas sur le message).
3. code et message au niveau supérieur, sans detail. Ces erreurs viennent du limiteur de débit, du gestionnaire de route inconnue et du filet de sécurité pour les erreurs inattendues.
Une erreur de schéma 422 a une liste dans detail, une entrée par champ invalide :
loc indique où : ["body", "reference"] pour un corps JSON, ["query", "environment"] ou ["path", "key"]. Pour un champ de formulaire multipart, le premier élément est aussi body. Gérez les trois formes : un client qui suppose que detail est toujours un objet échouera à la première 422.

Identifiant de requête

Chaque réponse porte X-Request-ID. Si vous envoyez le vôtre (1 à 64 caractères parmi A-Z a-z 0-9 . _ : -), Sahl le renvoie ; sinon Sahl en crée un. Chaque appel de clé est listé dans Developers, Call log dans la console sous cet identifiant. Citez-le quand vous écrivez à Sahl.

Catalogue

400 Requête invalide

401 Non autorisé

403 Interdit

404 Introuvable

413 Charge trop volumineuse

422 Non traitable

Un kind invalide n’est pas une erreur : les valeurs inconnues comptent comme individual.

429 Trop de requêtes

Chaque réponse réussie porte aussi X-RateLimit-Limit et X-RateLimit-Remaining. La limite est par IP cliente, pas par clé, donc plusieurs serveurs derrière une même adresse la partagent. 100 par minute est la valeur par défaut dans le code et peut changer.

500 et 502

Un lecteur injoignable n’est pas une erreur : /extract répond 200 avec reader_unavailable: true. Voir Lire des documents.

Nouvelles tentatives

L’API n’a pas de clé d’idempotence. Réfléchissez à chaque appel avant de le réessayer. Règles pratiques :
  • Ne réessayez jamais une 4xx, sauf une 429 pour rate_limit_exceeded, qui a Retry-After. Une 4xx échouera de la même façon.
  • Réessayez une 5xx et un délai d’attente réseau avec un backoff exponentiel et un plafond, par exemple 2 s, 4 s, 8 s, puis arrêtez.
  • Fixez un délai d’attente client bien supérieur au temps de réponse habituel. Les exemples utilisent 120 secondes pour /extract.
  • Après un délai d’attente sur /extract, vous ne savez pas si la lecture a eu lieu. Consultez Documents pour la reference avant de renvoyer, ou acceptez le doublon.