Skip to main content
L’API publique Le Commis renvoie un format d’erreur plat et un petit ensemble de codes HTTP. Les endpoints de lecture (GET) ne renvoient ni 400 ni 422.

Format d’erreur

Toutes les erreurs partagent la même structure JSON à plat :
{
  "error": "Unauthorized"
}
Certaines erreurs peuvent inclure un tableau details pour préciser le problème :
{
  "error": "Validation failed",
  "details": ["champ X manquant", "champ Y invalide"]
}
error
string
required
Message d’erreur lisible décrivant la nature du problème.
details
string[]
Optionnel. Tableau de précisions, une chaîne par point de détail. Absent quand il n’y a rien à détailler.

Codes HTTP

CodeerrorCause
401UnauthorizedClé d’API absente ou invalide dans X-Api-Key.
404Not foundSlug inconnu, ou API publique désactivée, ou menu inexistant.
429Rate limit exceededQuota de requêtes dépassé.
Les endpoints de lecture n’émettent pas de 400 Bad Request ni de 422 Unprocessable Entity. Un paramètre invalide (par exemple une locale inconnue) est silencieusement corrigé plutôt que rejeté.

401 Unauthorized

La clé d’API est absente de l’en-tête X-Api-Key, ou ne correspond à aucun établissement.
{
  "error": "Unauthorized"
}
Voir Authentification pour transmettre correctement la clé.

404 Not found

Trois causes possibles, indistinguables par conception :
  • le slug d’établissement n’existe pas ;
  • l’établissement existe mais son API publique est désactivée (public_api_enabled à false) ;
  • le menu_type_slug demandé n’a pas de menu courant.
{
  "error": "Not found"
}
Le 404 est volontairement renvoyé à la place d’un 403 quand l’API est désactivée, afin de ne pas divulguer l’existence de l’établissement. Détails dans Authentification.

429 Rate limit exceeded

Le 429 peut provenir du quota par clé d’API ou du quota par adresse IP. Le corps de réponse ne précise pas lequel des deux a été atteint : appliquez la même stratégie de backoff dans les deux cas.
Vous avez dépassé un quota de requêtes (par clé ou par IP).
{
  "error": "Rate limit exceeded"
}
Appliquez un backoff avant de réessayer — voir Quotas de requêtes.

Réagir aux erreurs

JavaScript
const response = await callLecommisApi();

switch (response.status) {
  case 200:
    return await response.json();
  case 401:
    throw new Error("Clé d'API invalide ou absente");
  case 404:
    // slug inconnu, API désactivée, ou menu inexistant
    return null;
  case 429:
    // attendre puis réessayer avec backoff
    return scheduleRetryWithBackoff();
  default:
    throw new Error(`Erreur inattendue : ${response.status}`);
}