GET /v1/route
Vue d'ensemble
Calcule le meilleur itinéraire entre deux points du réseau routier : distance, durée, géométrie, et instructions de navigation optionnelles en français ou en anglais.
Coût : 2 crédits par requête. Disponibilité : tous les plans. Le profil car est inclus partout ; bike et foot nécessitent le plan Startup ou supérieur, truck et moto le plan Growth ou supérieur.
Requête
GET https://api.geocodeme.net/v1/route
Header requis : X-Api-Key: gm_YOUR_API_KEY
Paramètres
| Paramètre | Type | Requis | Défaut | Description |
|---|---|---|---|---|
from | string | Oui | aucun | Point de départ au format lon,lat (par ex. 2.3522,48.8566) |
to | string | Oui | aucun | Destination au format lon,lat (par ex. 4.8357,45.7640) |
profile | string | Non | car | Profil de véhicule : car, bike, foot, truck ou moto (selon le plan, voir ci-dessus) |
geometries | string | Non | geojson | Format de la géométrie : geojson, polyline ou polyline6 |
steps | boolean | Non | false | Inclure les instructions de navigation |
language | string | Non | en | Langue des instructions (en ou fr), utile uniquement avec steps=true |
use_tolls | boolean | Non | aucun | Privilégier (true) ou éviter (false) les routes à péage. Profils motorisés uniquement |
truck_height | float | Non | aucun | Hauteur du véhicule en mètres (0 à 10). Nécessite profile=truck |
truck_width | float | Non | aucun | Largeur du véhicule en mètres (0 à 5). Nécessite profile=truck |
truck_weight | float | Non | aucun | Poids du véhicule en tonnes (0 à 100). Nécessite profile=truck |
truck_height/truck_width/truck_weightne sont valides qu'avecprofile=truck; avec tout autre profil, l'API renvoie un400 INVALID_PARAMETER.use_tollsne s'applique qu'aux profils motorisés ; le combiner avecbikeoufootrenvoie un400 INVALID_PARAMETER.
Les requêtes rejetées par ces validations ne sont jamais facturées en crédits.
Exemples de code
- cURL
- Python
- JavaScript
curl -H "X-Api-Key: gm_YOUR_API_KEY" \
"https://api.geocodeme.net/v1/route?from=2.3522,48.8566&to=2.2945,48.8584&profile=car&steps=true&language=fr"
import os
import requests
api_key = os.environ["GEOCODEME_API_KEY"]
response = requests.get(
"https://api.geocodeme.net/v1/route",
params={
"from": "2.3522,48.8566",
"to": "2.2945,48.8584",
"profile": "car",
"steps": "true",
"language": "fr",
},
headers={"X-Api-Key": api_key},
)
response.raise_for_status()
data = response.json()
print(f"Distance : {data['distance_meters'] / 1000:.1f} km")
print(f"Durée : {data['duration_seconds'] / 60:.0f} min")
for step in data.get("steps", []):
print(f"- {step['instruction']}")
const apiKey = process.env.GEOCODEME_API_KEY;
const params = new URLSearchParams({
from: "2.3522,48.8566",
to: "2.2945,48.8584",
profile: "car",
steps: "true",
language: "fr",
});
const response = await fetch(
`https://api.geocodeme.net/v1/route?${params}`,
{ headers: { "X-Api-Key": apiKey } }
);
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
const data = await response.json();
console.log(`Distance : ${(data.distance_meters / 1000).toFixed(1)} km`);
console.log(`Durée : ${Math.round(data.duration_seconds / 60)} min`);
Réponse
Toutes les réponses incluent les headers de limitation de débit (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Monthly-Remaining, etc.).
Avec geometries=geojson (défaut) et steps=true (géométrie raccourcie pour la lisibilité) :
{
"coordinates": [
[2.3522, 48.8566],
[2.3488, 48.8589],
[2.3305, 48.8630],
[2.3079, 48.8621],
[2.2945, 48.8584]
],
"distance_meters": 6284.0,
"duration_seconds": 941.0,
"steps": [
{
"instruction": "Roulez vers l'ouest sur Rue de Rivoli.",
"distance_meters": 1520.0,
"duration_seconds": 210.0,
"type": 1,
"street_names": ["Rue de Rivoli"]
},
{
"instruction": "Tournez à droite sur Quai des Tuileries.",
"distance_meters": 980.0,
"duration_seconds": 145.0,
"type": 10,
"street_names": ["Quai des Tuileries"]
},
{
"instruction": "Vous êtes arrivé à destination.",
"distance_meters": 0.0,
"duration_seconds": 0.0,
"type": 4,
"street_names": []
}
],
"attribution": "Route data (c) OpenStreetMap contributors",
"meta": {
"took_ms": 38,
"cache_hit": false
}
}
Avec geometries=polyline (ou polyline6), la géométrie est renvoyée dans geometry_polyline (chaîne encodée) et coordinates est absent.
Cet endpoint omet les champs qui ne s'appliquent pas à votre requête au lieu de les renvoyer à null : coordinates et geometry_polyline sont mutuellement exclusifs, et steps n'est présent qu'avec steps=true.
Schéma
| Champ | Type | Description |
|---|---|---|
coordinates | array | Géométrie de l'itinéraire au format [[longitude, latitude], ...], présent avec geometries=geojson |
geometry_polyline | string | Polyline encodée, présent avec geometries=polyline ou polyline6 |
distance_meters | float | Distance totale de l'itinéraire en mètres |
duration_seconds | float | Durée de trajet estimée en secondes |
steps | array | Manœuvres de navigation, présent uniquement avec steps=true |
steps[].instruction | string | Instruction lisible, dans la langue demandée via language |
steps[].distance_meters | float | Longueur de la manœuvre en mètres |
steps[].duration_seconds | float | Durée de la manœuvre en secondes |
steps[].type | integer | Code de type de manœuvre (convention du moteur de routage : départ, virage, arrivée, ...) |
steps[].street_names | array | Noms des rues concernées par la manœuvre |
attribution | string | Toujours "Route data (c) OpenStreetMap contributors" |
meta.took_ms | integer | Temps de traitement serveur en millisecondes |
meta.cache_hit | boolean | Indique si la réponse a été servie depuis le cache |
Réponses d'erreur
Profil non inclus dans votre plan
{
"error": {
"code": "PLAN_UPGRADE_REQUIRED",
"message": "The 'truck' profile is not included in your plan. Upgrade to unlock it.",
"field": "profile",
"upgrade_url": "https://geocodeme.net/dashboard/billing"
}
}
Coordonnée mal formée
{
"error": {
"code": "INVALID_PARAMETER",
"message": "'from' must be 'lon,lat' (e.g. 2.3522,48.8566)",
"field": "from"
}
}
Dimensions camion sans le profil truck
{
"error": {
"code": "INVALID_PARAMETER",
"message": "truck_height/truck_width/truck_weight require profile=truck",
"field": "profile"
}
}
Tous les endpoints sont également soumis aux erreurs INVALID_API_KEY (401) et RATE_LIMIT_EXCEEDED / QUOTA_EXCEEDED (429). Consultez Codes d'erreur pour la référence complète.