Événements routiers

Trois points d'accès sur un même ensemble de données :

GET /incidentstous les événements routiers en cours
GET /closuresle sous-ensemble où une route est réellement fermée
GET /road-conditionsle sous-ensemble portant un état de chaussée

Colombie-Britannique seulement. Voir Couverture : la raison n'est pas technique.

curl "https://api.unmap.dev/closures?key=$UNMAP_KEY&limit=3"
{
  "data": [
    {
      "id": "um:road:ca-bc:drivebc.ca%2FRIDE-101916",
      "source_id": "drivebc.ca/RIDE-101916",
      "jurisdiction": "CA-BC",
      "type": "closure",
      "severity": "major",
      "condition": "closed",
      "description": "Bridge construction at Kicking Horse Drive. Starting Fri Sep 25. All day, every day. Closed for repairs.",
      "roads": [
        { "name": "Other Roads", "direction": "both", "closed": true, "from": "Kicking Horse Drive", "condition": "closed" }
      ],
      "geometry": { "type": "Point", "coordinates": [-116.96, 51.29] },
      "source_updated_at": "2026-09-17T08:06:31-07:00",
      "unmap_updated_at": "2026-09-17T15:55:16.508Z",
      "source": "roads.drivebc-open511"
    }
  ],
  "meta": {
    "source": "Government of British Columbia, DriveBC: DriveBC Open511 events",
    "status": "current",
    "attribution": "Contains information licensed under the Open Government Licence - British Columbia"
  }
}

La description reste dans la langue du producteur : DriveBC ne publie qu'en anglais, et traduire le texte d'un organisme routier reviendrait à réécrire un avis de sécurité.

Depuis le SDK

import { Unmap } from "@unmap/sdk";
const unmap = new Unmap({ key: process.env.UNMAP_KEY! });
 
const { data, meta } = await unmap.roads.closures({ jurisdiction: "CA-BC" });
if (meta.unavailable?.length) {
  // Une province n'a pas pu être jointe. Une liste `data` vide n'est PAS « rien n'est fermé ».
  console.warn(meta.unavailable);
}

unmap.roads.incidents(), .closures() et .conditions() acceptent la même requête que les points d'accès.

Paramètres

Les trois points d'accès prennent les mêmes.

ParamètreNotes
jurisdictionCodes ISO 3166-2 séparés par des virgules. Seulement CA-BC aujourd'hui; tout autre code donne un 400 nommant ce qui est couvert
bboxouest,sud,est,nord en WGS84
near + radiuslng,lat et mètres, 25000 par défaut, 500000 au maximum
typeclosure, incident, construction, weather, restriction, ferry, hazard, special_event, unknown
severityminor, major, unknown
statusactive, planned, archived
updated_sinceISO 8601. Événements modifiés par le producteur à partir de ce moment
limit1 à 500, 100 par défaut

Les résultats sont triés du plus grave au moins grave, puis du plus récemment modifié.

Quatre décisions à connaître

Une fermeture signifie que le producteur a dit « fermé ». Elle est lue depuis l'état de route en amont et de nulle part ailleurs. La catégorie de l'événement dit pourquoi une route est touchée, jamais si elle est fermée : le jour de la livraison, les 16 fermetures de la Colombie-Britannique se répartissaient entre des événements de type chantier et incident, et plusieurs événements de chantier décrivaient de brèves fermetures en prose tout en déclarant toutes les voies ouvertes. Ceux-là n'apparaissent pas dans /closures.

La description du producteur est retournée mot pour mot. Nos catégories sont une projection avec perte de la taxonomie d'autrui, et la phrase dont un conducteur a réellement besoin se trouve dans la prose. Si notre catégorie et la description se contredisent, croyez la description et signalez-le-nous.

Une valeur amont non reconnue devient unknown, jamais une supposition. Un flux qui inventerait SNOW_SQUALL ressort en unknown avec sa description intacte plutôt que d'être arrondi vers weather parce que le mot évoque la météo.

/road-conditions est maigre, et dry est rare. L'état de route d'Open511 décrit la disponibilité des voies, pas la surface. Des voies ouvertes ne prouvent pas une chaussée sèche : unmap répond unknown plutôt que d'inventer une mesure que personne n'a prise.

Fraîcheur, et ce qui arrive quand une province est indisponible

Ces données sont interrogées en direct derrière un cache de 60 secondes, non ingérées selon un calendrier. Un événement routier vieux d'une heure ne vaut rien, et un instantané en cache cache son propre âge.

meta.status est calculé à partir de ce qui vient d'être récupéré : current normalement, stale quand la source répond mais que rien n'y a bougé depuis plus d'une heure, ce qui signale habituellement un problème chez elle plutôt qu'une province exceptionnellement calme.

Quand une juridiction est injoignable, la réponse le dit au lieu de retourner une liste vide :

{
  "data": [],
  "meta": {
    "status": "partial",
    "unavailable": [{ "jurisdiction": "CA-BC", "reason": "upstream timed out" }]
  }
}

Cette distinction compte surtout sur /closures, où une liste vide se lit comme « rien n'est fermé » pour quelqu'un qui décide de prendre la route. Si toutes les juridictions demandées échouent, le code de statut est 503.

Couverture

Une province sur treize, et la lacune mérite d'être dite clairement.

511 Alberta exige une clé d'API. Une requête non authentifiée retourne <Error><Message>Invalid Key</Message></Error>, vérifié le 2026-09-17. L'Alberta est absente parce que personne n'a fait la demande de clé, non parce que l'adaptateur serait difficile. Open511 est une spécification et non l'invention d'une seule province : une deuxième juridiction qui la sert ouvertement est une entrée de configuration, pas du code nouveau.

Autres limites :

  • Routes provinciales seulement. Les rues municipales ne figurent pas dans ce flux.
  • 500 événements par réponse, sans pagination. La Colombie-Britannique comptait 286 événements actifs à la première mesure : le plafond ne contraint donc pas aujourd'hui. Il le fera pour une juridiction plus vaste.
  • Le routage n'évite pas les fermetures. Rien dans /route n'est encore affecté. Injecter les fermetures confirmées dans le graphe de routage est une étape distincte et n'est pas faite.