Événements routiers
Trois points d'accès sur un même ensemble de données :
GET /incidents | tous les événements routiers en cours |
GET /closures | le sous-ensemble où une route est réellement fermée |
GET /road-conditions | le 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ètre | Notes |
|---|---|
jurisdiction | Codes 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 |
bbox | ouest,sud,est,nord en WGS84 |
near + radius | lng,lat et mètres, 25000 par défaut, 500000 au maximum |
type | closure, incident, construction, weather, restriction, ferry, hazard, special_event, unknown |
severity | minor, major, unknown |
status | active, planned, archived |
updated_since | ISO 8601. Événements modifiés par le producteur à partir de ce moment |
limit | 1 à 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
/routen'est encore affecté. Injecter les fermetures confirmées dans le graphe de routage est une étape distincte et n'est pas faite.