Conecta las estadísticas de tu VTC a tu web o a tu bot de Discord. Solo lectura, JSON, CORS abierto: pensada para widgets, overlays e integraciones.
Lo más sencillo: sin clave, sin boost, para todas las VTC. Sustituye ma-vtc por el identificador de tu VTC (la dirección de su página /vtcs/ma-vtc). JSON, solo lectura, CORS abierto, 120 peticiones / minuto / IP.
GET https://hdispatch.eu/api/vtc lista de endpoints disponibles
GET https://hdispatch.eu/api/vtc/ma-vtc/stats miembros, en línea, km (total y mes), próximo evento, certificación
GET https://hdispatch.eu/api/vtc/ma-vtc/online conductores en línea (posiciones incluidas)
GET https://hdispatch.eu/api/vtc/ma-vtc/jobs?limit=10 últimas entregas (1 a 50, 10 por defecto)
GET https://hdispatch.eu/api/vtc/ma-vtc/events?limit=5 próximos eventos públicos (1 a 20, 5 por defecto)
GET https://hdispatch.eu/api/vtc/ma-vtc/members miembros activos ordenados por kilómetros (1 a 200, 50 por defecto), si la VTC los hace públicos
GET https://hdispatch.eu/api/vtc/ma-vtc/certification estado de certificación verificable
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'));
Respeta los ajustes de la VTC: nombres ocultos si «mostrar los miembros» está desactivado, ingresos ausentes si no son públicos, API totalmente desactivable en Ajustes → API. Las respuestas se guardan en caché de 5 segundos (en línea) a 5 minutos (certificación). Errores: 404 {"error":"not_found"} si la VTC no existe, está en la lista negra o ha desactivado su API; 429 {"success":false,"message":…} al superar el límite. Para datos detallados, usa la API v1 con clave de abajo.
Miembros en línea, últimos trayectos, kilómetros del mes, próximo evento, reclutamiento, tarjeta completa o minimapa en directo. Gratis, en 9 idiomas, tema claro u oscuro. Los códigos listos para pegar están en Dashboard → tu VTC → Widgets & insignia.
<div class="hd-widget" data-vtc="ma-vtc" data-type="online"></div>
<script src="https://hdispatch.eu/widgets/embed.js" async></script>
online · jobs · km · event · recruit · card · mapdark · light · autofr en de es it nl pl pt trdata-accent="ff8800" · data-limit="1..15" · data-header="0" · data-height="360" · data-game="ats" (mapa)Sin JavaScript, cada widget también funciona en iframe: https://hdispatch.eu/widgets/vtc/ma-vtc/online?theme=dark. Los widgets se actualizan solos (30 s para «en línea», hasta 10 min para «reclutamiento») y muestran un error si la VTC ha desactivado su API. Insignia de certificación: https://hdispatch.eu/badges/vtc/ma-vtc.svg (o .png), opciones ?style=flat, ?theme=light, ?lang=en, verificable en https://hdispatch.eu/verify/ma-vtc.
pk_ y puede exponerse sin peligro.x-api-key (o como parámetro ?key=).curl -H "x-api-key: pk_VOTRE_CLE" https://hdispatch.eu/api/v1/vtc
https://hdispatch.eu/api/v1x-api-key: pk_…GET (solo lectura)*GET https://hdispatch.eu/api/v1 devuelve la lista de endpoints. Los errores tienen la forma {"error":"…"} (ver más abajo).
⚠️ No confundas tu clave pública (pk_…, lectura) con tu clave del tracker (secreta, escritura): esta última no debe aparecer nunca en una página web. Una VTC puede desactivar su API u ocultar algunos campos (ingresos, miembros) desde sus ajustes.
/api/v1/vtc
Información y totales de la VTC (miembros, km, fecha de creación…).
{
"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"
}
/api/v1/members?limit=1..500
Miembros de la VTC, ordenados por kilometraje (100 por defecto).
{
"count": 42,
"members": [
{ "discordId": "1234…", "name": "Marco", "avatar": "…", "role": "driver",
"traction": false, "joinedAt": "…",
"stats": { "distanceKm": 84210, "deliveries": 190, "revenue": 512000 } }
]
}
/api/v1/events
Próximos eventos de la VTC, tanto públicos como reservados a miembros (50 como máximo).
{
"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": "" }
]
}
/api/v1/deliveries?limit=1..200
Entregas recientes (50 por defecto).
{
"count": 50,
"deliveries": [
{ "driverDiscordId": "…", "game": "ets2", "cargo": "Ciment", "from": "Lyon",
"to": "Milan", "distanceKm": 480, "damagePercent": 0, "truck": "Scania S",
"at": "…", "income": 42000 }
]
}
/api/v1/live
Conductores en línea (presencia < 60 s).
{
"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 }
]
}
/api/v1/news?limit=1..100
Anuncios públicos y publicados de la VTC.
{
"count": 5,
"news": [
{ "id": "…", "title": "Recrutement ouvert !", "content": "…", "coverUrl": "…",
"pinned": true, "authorName": "Léa", "at": "…", "updatedAt": "…" }
]
}
/api/v1/partners
Colaboraciones aceptadas (VTC asociadas).
{
"count": 3,
"partners": [
{ "id": "…", "name": "Nordic Logistics", "slug": "nordic-logistics",
"tag": "[NL]", "logoUrl": "…", "game": "ets2", "since": "…" }
]
}
/api/v1/divisions
Divisiones de transporte de la VTC.
{
"count": 4,
"divisions": [
{ "id": "…", "name": "Frigo", "description": "…", "imageUrl": "…",
"color": "#4ea1ff", "trucks": ["Scania S"], "trailers": ["Krone Cool"],
"position": 0 }
]
}
/api/v1/gallery?limit=1..100
Galerías de fotos públicas de la VTC (álbumes publicados desde el panel).
{
"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": "…" }
]
}
/api/v1/hd/events?limit=1..100
Eventos de Horizon Dispatch (globales, todas las VTC públicas).
{
"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": "" }
]
}
401missing_api_key403invalid_api_key403boost_required403api_disabled403members_hidden429rate_limited500server_errorAñade «Iniciar sesión con Horizon Dispatch» a tu web. Crea la aplicación en Dashboard → tu VTC → Ecosistema: el secreto solo se muestra una vez.
GET https://hdispatch.eu/connect/authorize?client_id=…&redirect_uri=…&scope=identity%20profile%20vtc&state=…
(PKCE: añade code_challenge, calculado 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>
El código de autorización es válido 5 minutos y solo sirve una vez; el token, 30 días. Ámbitos: identity (identificador), profile (perfil), vtc (VTC del usuario).
Pega esto en tu web y sustituye pk_VOTRE_CLE por tu clave pública:
<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>