Votre première optimisation de tournée
En cinq minutes environ, vous allez envoyer trois arrêts de livraison à l'API d'optimisation de tournées Otiggo et lire l'ordre de visite optimal, la distance, la durée et l'heure d'arrivée à chaque arrêt. Tout se passe avec une clé sandbox gratuite : rien n'est débité.
1. Créer une clé sandbox gratuite
Ouvrez la console et créez une clé de test. Elle commence par otg_test_ et n'est affichée qu'une fois : copiez-la tout de suite.
2. Stocker la clé dans une variable d'environnement
export OTIGGO_API_KEY="otg_test_..."Ne mettez jamais une clé dans votre code source ni dans une application mobile : appelez l'API depuis votre backend.
3. Écrire et lancer le script
La requête demande un point de départ start et au moins deux stops, chacun avec un id unique. L'arrêt A a une deadline à 10:30 et 2 minutes de temps de service : l'API planifie en tenant compte des deux.
// optimize.mjs — Node 18+ (built-in fetch), no dependency
const API_KEY = process.env.OTIGGO_API_KEY; // otg_test_...
const res = await fetch("https://app.otiggo.com/api/v1/optimize", {
method: "POST",
headers: {
Authorization: "Bearer " + API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
start: { latitude: 48.8566, longitude: 2.3522 },
stops: [
{ id: "A", latitude: 48.8738, longitude: 2.295, deadline: "10:30", serviceSeconds: 120 },
{ id: "B", latitude: 48.8606, longitude: 2.3376 },
{ id: "C", latitude: 48.853, longitude: 2.3499 },
],
}),
});
const data = await res.json();
if (!res.ok) {
console.error(res.status, data.error, data.message);
process.exit(1);
}
console.log("Order:", data.order.join(" -> "));
console.log(data.totalDistanceKm + " km, " + data.estimatedTimeMin + " min");
for (const { colisId, arrivee } of data.schedule ?? []) {
console.log(colisId, "arrives at", arrivee);
}
if (data.lateStops) console.warn("Late stops:", data.lateStops);node optimize.mjs
# ou
python optimize.py4. Lire le résultat
La sortie ressemble à ceci (les distances et horaires varient) :
Order: A -> B -> C
6.1 km, 32 min
A arrives at 2026-10-20T05:40:00Z
B arrives at 2026-10-20T05:52:00Z
C arrives at 2026-10-20T05:58:00Zorder— vos identifiants d'arrêts dans l'ordre de visite optimal.schedule— l'heure d'arrivée estimée à chaque arrêt.lateStops— les arrêts qui arriveraient après leurdeadline(sinonnull).stopsCharged—0en sandbox ; le nombre d'arrêts débités avec une clé live.
5. En cas de problème
401 unauthorized— clé absente, invalide ou révoquée.400 invalid_request— le message désigne le champ fautif (par exemplestops[1].id).400 sandbox_addresses_unsupported— utilisez des coordonnées avec une clé de test.429 sandbox_rate_limited— attendez le délai indiqué parRetry-After.
Tous les codes d'erreur sont listés sur la page Erreurs.
6. Passer en production
- Achetez un pack de stops : la clé live (
otg_live_…) vous est envoyée par email après paiement. Prépayé, sans abonnement, et un appel en échec n'est jamais débité. - Remplacez la clé. Vous pouvez désormais envoyer jusqu'à 200 arrêts par appel et fournir des adresses complètes (
street,postalCode,city) au lieu de coordonnées ; elles sont géocodées pour vous. - Consultez votre solde à tout moment avec GET /balance.