Accueil / Référence / Erreurs
Référence

Erreurs

Reconnaître d'où vient une erreur, la lire et y réagir : réessayer, corriger la requête ou prévenir Galigeo.

Principe

Deux familles d'erreurs

Une réponse en erreur vient soit du GeoService lui-même, soit du moteur qui a traité la requête. Le type de contenu permet de les distinguer à coup sûr :

OrigineContent-TypeExemples
GeoServiceapplication/problem+jsonClé invalide, fonction non ouverte, moteur indisponible
MoteurCelui du moteur, en général application/jsonParamètre manquant, aucun itinéraire trouvé, limite dépassée

Exception : hexodos. Le moteur des cellules H3 écrit ses erreurs au même format que le GeoService, application/problem+json. Elles se reconnaissent à l'en-tête X-GGO-Upstream: hexodos:… et à leur code, listé plus bas ; le code de lecture ci-dessous les traite sans changement.

Une recherche sans résultat n'est pas une erreur : la réponse est 200, avec une liste vide.

Format

Les erreurs du GeoService

Elles suivent la norme RFC 9457 « Problem Details for HTTP APIs », un format JSON standard que de nombreuses bibliothèques savent lire.

401 Unauthorized · application/problem+json
{
  "type": "tag:galigeo.com,2026:geoservice:unauthorized",
  "title": "Authentification requise",
  "status": 401,
  "detail": "Clé d'API absente ou invalide.",
  "instance": "/v2/routing/status",
  "code": "unauthorized"
}
MembreRôle
codeCode court et stable : c'est lui qu'il faut tester dans votre code.
statusCode HTTP, identique à celui de la réponse.
titleLibellé fixe du type d'erreur, en français.
detailExplication propre à cette occurrence, à journaliser ou afficher. Son texte peut changer.
instanceChemin de la requête en erreur.
typeIdentifiant unique du type d'erreur (un identifiant, pas une adresse web).
Référence

Codes d'erreur du GeoService

HTTPcodeCauseQue faire
400http_errorRequête HTTP mal forméeVérifier la requête.
401unauthorizedClé d'API absente ou invalideVérifier l'en-tête X-API-Key. Ne pas réessayer.
404not_foundChemin inexistant, par exemple sans /v2Corriger l'URL.
404unknown_endpointFonction du moteur non ouverteUtiliser une fonction documentée.
405method_not_allowedMéthode non acceptée, par exemple POST sur le géocodage OSMUtiliser la méthode indiquée par l'en-tête Allow.
408request_timeoutFichier CSV envoyé trop lentementRéessayer, ou envoyer un fichier plus petit.
413payload_too_largeFichier CSV trop volumineuxDécouper le fichier.
429—Trop de requêtes en peu de temps (voir ci-dessous)Ralentir, puis réessayer.
500internal_errorErreur inattendue du GeoServicePrévenir Galigeo.
503upstream_unavailableMoteur momentanément injoignableRéessayer après un délai.
503service_not_configuredService facultatif non ouvert sur ce serveur, par exemple hexodosNe pas réessayer : contacter Galigeo.
504upstream_timeoutLe moteur a mis trop de temps à répondreRéessayer, ou alléger la requête (matrice plus petite…).
4xx
à corriger

La requête est en cause : la renvoyer telle quelle échouera de nouveau.

429 · 503 · 504
à réessayer

Passagères : réessayez avec un délai croissant (voir réessais).

500
à signaler

Prévenez Galigeo, avec l'heure et la requête.

Débit

Trop de requêtes : 429

Le nombre de requêtes par seconde est limité pour chaque client. Au-delà, la réponse est 429 Too Many Requests, renvoyée avant même d'atteindre le GeoService : son corps n'est pas au format application/problem+json. Testez donc le code HTTP, pas le corps.

Moteurs

Les erreurs des moteurs

Une requête que le moteur refuse reçoit son erreur telle quelle, en général avec le code 400. L'en-tête X-GGO-Upstream indique quel moteur a répondu.

ServiceFormat de l'erreur
Itinéraires{"error_code": 120, "error": "Insufficient number of locations provided", "status_code": 400, "status": "Bad Request"}
Géocodage OSM{"error": {"code": 400, "message": "Parameter 'lat' must be a number."}}
En XML si la requête ne précise pas format.
Géocodage BAN{"title": "Missing query"}, {"title": "Invalid args"}

Pour les itinéraires, toutes les erreurs de requête partagent le code HTTP 400 : c'est error_code qui les distingue. Les principaux codes sont listés dans Itinéraires › Limites et erreurs.

Moteurs

Les erreurs d'hexodos

Les erreurs des fonctions /v2/hexodos/* sont au format Problem Details ci-dessus. Leur instance est le chemin de la fonction dans le moteur (/route, /isochrone) et leur detail ne reprend jamais une valeur envoyée : il nomme le champ en cause.

HTTPcodeCauseQue faire
400invalid_parameterCorps illisible ; champ absent, mal formé ou inconnu ; coordonnées et cellule à la fois ; mode inconnu ; durée ou distance au-delà de la limiteCorriger la requête.
413payload_too_largeCorps de requête trop volumineuxVérifier ce qui est envoyé.
422no_network_nearbyAucun réseau du mode à environ 500 m du point (hors de l'emprise, par exemple)Rapprocher le point d'une voie, ou changer de mode.
422route_impossibleDépart et arrivée non reliés par le réseau du modeChanger de point ou de mode.
422limit_exceededRéponse trop grande, détectée pendant le calculAlléger la requête, ou demander "closing": 0 si le message le propose.
500internal_errorErreur inattendue du moteurPrévenir Galigeo.
503index_unavailableDonnées du moteur momentanément indisponiblesRéessayer après un délai.

Le détail de chaque cas est dans Cellules H3 › Erreurs.

Ancienne API

Les erreurs de l'ancienne API /services

L'ancienne API, dépréciée, traduit toutes les erreurs au format du GeoService, celles des moteurs comprises. Là où les routes /v2 de géocodage et d'itinéraires transmettent l'erreur du moteur telle quelle, elle renvoie donc trois codes : 400 invalid_parameter (paramètre invalide ou limite dépassée), 422 route_impossible (aucun itinéraire possible) et 502 upstream_invalid_response (réponse du moteur inexploitable). Les deux premiers existent aussi sur /v2/hexodos/*, ci-dessus ; le troisième n'existe que sur /services. Leur détail est dans Ancienne API › Erreurs ; leurs équivalents en v2, dans le guide de migration.

Exemple

Gérer les erreurs dans votre code

Un schéma qui couvre les deux familles : lire le code d'une erreur du GeoService, sinon le corps brut de l'erreur du moteur.

class GeoServiceError extends Error {
  constructor(status, code, detail) {
    super(`${status} ${code}: ${detail}`);
    Object.assign(this, { status, code, detail });
  }
}

async function readResponse(res) {
  if (res.ok) return res.json();
  const type = res.headers.get("Content-Type") || "";
  if (type.startsWith("application/problem+json")) {
    // Erreur du GeoService : tester problem.code
    const problem = await res.json();
    throw new GeoServiceError(res.status, problem.code, problem.detail);
  }
  // Erreur du moteur (ou 429) : corps au format du moteur
  throw new GeoServiceError(res.status, "engine_error", await res.text());
}