API

API Horizon Dispatch

Branche les stats de ta VTC sur ton site ou ton bot Discord. Lecture seule, JSON, CORS ouvert — pensée pour les widgets, overlays et intégrations.

0résultats

API publique sans clé

Le plus simple : aucune clé, aucun boost, pour toutes les VTC. Remplace ma-vtc par l'identifiant de ta VTC (l'adresse de sa page /vtcs/ma-vtc). JSON, lecture seule, CORS ouvert, 120 requêtes / minute / IP.

GET https://hdispatch.eu/api/vtc                       liste des endpoints disponibles
GET https://hdispatch.eu/api/vtc/ma-vtc/stats          membres, en ligne, km (total et mois), prochain événement, certification
GET https://hdispatch.eu/api/vtc/ma-vtc/online         chauffeurs en ligne (positions comprises)
GET https://hdispatch.eu/api/vtc/ma-vtc/jobs?limit=10  dernières livraisons (1 à 50, 10 par défaut)
GET https://hdispatch.eu/api/vtc/ma-vtc/events?limit=5 prochains événements publics (1 à 20, 5 par défaut)
GET https://hdispatch.eu/api/vtc/ma-vtc/members        membres actifs classés par kilomètres (1 à 200, 50 par défaut), si la VTC les rend publics
GET https://hdispatch.eu/api/vtc/ma-vtc/certification  statut de certification vérifiable
fetch('https://hdispatch.eu/api/vtc/ma-vtc/stats')
  .then((r) => r.json())
  .then((d) => console.log(d.members.online + ' en ligne · ' + d.month.km + ' km ce mois-ci'));

Respecte les réglages de la VTC : noms masqués si « afficher les membres » est coupé, revenus absents si les revenus ne sont pas publics, API entièrement désactivable dans Paramètres → API. Les réponses sont mises en cache de 5 secondes (en ligne) à 5 minutes (certification). Erreurs : 404 {"error":"not_found"} si la VTC n'existe pas, est sous blacklist ou a coupé son API ; 429 {"success":false,"message":…} au-delà de la limite. Pour les données détaillées, utilise l'API v1 à clé ci-dessous.

Widgets pour le site de ta VTC

Membres en ligne, derniers trajets, kilomètres du mois, prochain événement, recrutement, carte complète ou mini carte live. Gratuits, en 9 langues, thème clair ou sombre. Les codes prêts à coller sont dans Dashboard → ta VTC → Widgets & badge.

<div class="hd-widget" data-vtc="ma-vtc" data-type="online"></div>
<script src="https://hdispatch.eu/widgets/embed.js" async></script>
data-type
online · jobs · km · event · recruit · card · map
data-theme
dark · light · auto
data-lang
fr en de es it nl pl pt tr
Autres
data-accent="ff8800" · data-limit="1..15" · data-header="0" · data-height="360" · data-game="ats" (carte)

Sans JavaScript, chaque widget fonctionne aussi en iframe : https://hdispatch.eu/widgets/vtc/ma-vtc/online?theme=dark. Les widgets se rafraîchissent seuls (30 s pour « en ligne », jusqu'à 10 min pour « recrutement ») et affichent une erreur si la VTC a coupé son API. Badge de certification : https://hdispatch.eu/badges/vtc/ma-vtc.svg (ou .png), options ?style=flat, ?theme=light, ?lang=en, vérifiable sur https://hdispatch.eu/verify/ma-vtc.

Démarrage rapide

  1. Débloque l'API — elle fait partie du palier 5 boosts (comme le site web de la VTC).
  2. Récupère ta clé publique dans Dashboard → Paramètres → API. Elle commence par pk_ et peut être exposée sans danger.
  3. Appelle l'API avec ta clé dans l'en-tête x-api-key (ou en paramètre ?key=).
curl -H "x-api-key: pk_VOTRE_CLE" https://hdispatch.eu/api/v1/vtc

Authentification & règles

URL de base
https://hdispatch.eu/api/v1
En-tête
x-api-key: pk_…
Méthodes
GET (lecture seule)
Limite de débit
120 requêtes / minute / clé
Format
JSON · CORS *
Accès
Palier 5 boosts requis

GET https://hdispatch.eu/api/v1 renvoie la liste des endpoints. Les erreurs ont la forme {"error":"…"} (voir plus bas).

⚠️ Ne confonds pas ta clé publique (pk_…, lecture) avec ta clé tracker (secrète, écriture) : cette dernière ne doit jamais apparaître dans une page web. Une VTC peut couper son API ou masquer certains champs (revenu, membres) depuis ses réglages.

Endpoints

Aucun résultat pour cette recherche.
GET /api/v1/vtc

Infos et totaux de la VTC (membres, km, date de création…).

Exemple de réponse
{
  "id": "6600…", "name": "Horizon Dispatch", "slug": "horizon-dispatch",
  "tag": "[HDX]", "description": "…", "game": "ets2", "color": "#cfd4dc",
  "recruitmentOpen": true, "hdPartner": false, "premium": false,
  "memberCount": 42,
  "totals": { "distanceKm": 1284000, "deliveries": 3120, "revenue": 9800000 },
  "createdAt": "2025-01-08T12:00:00.000Z"
}
GET /api/v1/members?limit=1..500

Membres de la VTC, triés par kilométrage (100 par défaut).

Exemple de réponse
{
  "count": 42,
  "members": [
    { "discordId": "1234…", "name": "Marco", "avatar": "…", "role": "driver",
      "traction": false, "joinedAt": "…",
      "stats": { "distanceKm": 84210, "deliveries": 190, "revenue": 512000 } }
  ]
}
GET /api/v1/events

Événements à venir de la VTC, publics comme réservés aux membres (50 au maximum).

Exemple de réponse
{
  "count": 2,
  "events": [
    { "id": "…", "title": "Convoi du dimanche", "game": "ets2", "server": "Simulation 1",
      "departureCity": "Paris", "arrivalCity": "Berlin", "plannedKm": 1050,
      "meetupAt": "…", "startAt": "…", "slots": { "total": 20, "taken": 12 },
      "going": 18, "externalUrl": "" }
  ]
}
GET /api/v1/deliveries?limit=1..200

Livraisons récentes (50 par défaut).

Exemple de réponse
{
  "count": 50,
  "deliveries": [
    { "driverDiscordId": "…", "game": "ets2", "cargo": "Ciment", "from": "Lyon",
      "to": "Milan", "distanceKm": 480, "damagePercent": 0, "truck": "Scania S",
      "at": "…", "income": 42000 }
  ]
}
GET /api/v1/live

Chauffeurs en ligne (présence < 60 s).

Exemple de réponse
{
  "count": 3,
  "drivers": [
    { "discordId": "…", "name": "Marco", "avatar": "…", "game": "ETS2",
      "onJob": true, "cargo": "Bois", "from": "Oslo", "to": "Stockholm",
      "truck": "Volvo FH", "speed": 88, "distanceLeft": 120, "progressPct": 64 }
  ]
}
GET /api/v1/news?limit=1..100

Annonces publiques et publiées de la VTC.

Exemple de réponse
{
  "count": 5,
  "news": [
    { "id": "…", "title": "Recrutement ouvert !", "content": "…", "coverUrl": "…",
      "pinned": true, "authorName": "Léa", "at": "…", "updatedAt": "…" }
  ]
}
GET /api/v1/partners

Partenariats acceptés (VTC partenaires).

Exemple de réponse
{
  "count": 3,
  "partners": [
    { "id": "…", "name": "Nordic Logistics", "slug": "nordic-logistics",
      "tag": "[NL]", "logoUrl": "…", "game": "ets2", "since": "…" }
  ]
}
GET /api/v1/divisions

Divisions transport de la VTC.

Exemple de réponse
{
  "count": 4,
  "divisions": [
    { "id": "…", "name": "Frigo", "description": "…", "imageUrl": "…",
      "color": "#4ea1ff", "trucks": ["Scania S"], "trailers": ["Krone Cool"],
      "position": 0 }
  ]
}
GET /api/v1/gallery?limit=1..100

Galeries photo publiques de la VTC (albums publiés depuis le dashboard).

Exemple de réponse
{
  "count": 6,
  "galleries": [
    { "id": "…", "title": "Convoi de Noël", "description": "…",
      "images": ["https://…/1.jpg", "https://…/2.jpg"], "photoCount": 2,
      "authorName": "Léa", "discordUrl": "https://discord.com/channels/…",
      "at": "…" }
  ]
}
GET /api/v1/hd/events?limit=1..100

Événements Horizon Dispatch (globaux, toutes VTC publiques).

Exemple de réponse
{
  "count": 10,
  "events": [
    { "id": "…", "title": "Grand convoi HD", "game": "ets2", "server": "Simulation 1",
      "departureCity": "Madrid", "arrivalCity": "Lisbonne", "plannedKm": 620,
      "meetupAt": "…", "startAt": "…",
      "vtc": { "name": "Horizon Dispatch", "slug": "horizon-dispatch", "tag": "[HDX]", "logoUrl": "…" },
      "externalUrl": "" }
  ]
}

Erreurs

Code
error
Signification
401
missing_api_key
Aucune clé fournie.
403
invalid_api_key
Clé inconnue.
403
boost_required
La VTC n'a pas le palier 5 boosts.
403
api_disabled
La VTC a coupé son API publique.
403
members_hidden
La VTC masque la liste des membres (/members).
429
rate_limited
Limite de débit dépassée (voir en-tête Retry-After).
500
server_error
Erreur interne, réessaie plus tard.

Horizon Connect (OAuth 2)

Ajoute « Se connecter avec Horizon Dispatch » à ton site. Crée l'application dans Dashboard → ta VTC → Écosystème : le secret n'est affiché qu'une fois.

GET  https://hdispatch.eu/connect/authorize?client_id=…&redirect_uri=…&scope=identity%20profile%20vtc&state=…
     (PKCE : ajoute code_challenge, calculé en S256)
POST https://hdispatch.eu/connect/token      client_id, client_secret, code, redirect_uri (code_verifier si PKCE)
     → { "access_token": "…", "token_type": "Bearer", "expires_in": 2592000, "scope": "…" }
GET  https://hdispatch.eu/connect/userinfo   Authorization: Bearer <access_token>

Le code d'autorisation est valable 5 minutes et ne sert qu'une fois ; le jeton, 30 jours. Portées : identity (identifiant), profile (profil), vtc (VTC de l'utilisateur).

Widget à copier-coller

Colle ceci dans ton site et remplace pk_VOTRE_CLE par ta clé publique :

<div id="hd-stats">Chargement…</div>
<script>
  fetch("https://hdispatch.eu/api/v1/vtc", { headers: { "x-api-key": "pk_VOTRE_CLE" } })
    .then(function (r) { return r.json(); })
    .then(function (v) {
      document.getElementById("hd-stats").innerHTML =
        "<b>" + v.name + "</b> — " + v.memberCount + " membres · " +
        v.totals.distanceKm.toLocaleString() + " km";
    });
</script>
Se connecter pour obtenir une clé