API

API de Horizon Dispatch

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.

0resultados

API pública sin clave

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.

Widgets para la web de tu VTC

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>
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
Otros
data-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.

Inicio rápido

  1. Desbloquea la API: forma parte del nivel de 5 boosts (como la web de la VTC).
  2. Consigue tu clave pública en Dashboard → Ajustes → API. Empieza por pk_ y puede exponerse sin peligro.
  3. Llama a la API con tu clave en la cabecera x-api-key (o como parámetro ?key=).
curl -H "x-api-key: pk_VOTRE_CLE" https://hdispatch.eu/api/v1/vtc

Autenticación y reglas

URL base
https://hdispatch.eu/api/v1
Cabecera
x-api-key: pk_…
Métodos
GET (solo lectura)
Límite de peticiones
120 peticiones / minuto / clave
Formato
JSON · CORS *
Acceso
Requiere el nivel de 5 boosts

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.

Endpoints

No hay resultados para esta búsqueda.
GET /api/v1/vtc

Información y totales de la VTC (miembros, km, fecha de creación…).

Ejemplo de respuesta
{
  "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

Miembros de la VTC, ordenados por kilometraje (100 por defecto).

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

Próximos eventos de la VTC, tanto públicos como reservados a miembros (50 como máximo).

Ejemplo de respuesta
{
  "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

Entregas recientes (50 por defecto).

Ejemplo de respuesta
{
  "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

Conductores en línea (presencia < 60 s).

Ejemplo de respuesta
{
  "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

Anuncios públicos y publicados de la VTC.

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

Colaboraciones aceptadas (VTC asociadas).

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

Divisiones de transporte de la VTC.

Ejemplo de respuesta
{
  "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

Galerías de fotos públicas de la VTC (álbumes publicados desde el panel).

Ejemplo de respuesta
{
  "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

Eventos de Horizon Dispatch (globales, todas las VTC públicas).

Ejemplo de respuesta
{
  "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": "" }
  ]
}

Errores

Código
error
Significado
401
missing_api_key
No se ha proporcionado ninguna clave.
403
invalid_api_key
Clave desconocida.
403
boost_required
La VTC no tiene el nivel de 5 boosts.
403
api_disabled
La VTC ha desactivado su API pública.
403
members_hidden
La VTC oculta la lista de miembros (/members).
429
rate_limited
Límite de peticiones superado (ver la cabecera Retry-After).
500
server_error
Error interno, inténtalo más tarde.

Horizon Connect (OAuth 2)

Añ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).

Widget para copiar y pegar

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>
Inicia sesión para obtener una clave