API de transport en commun
Chaque requête nécessite une clé API; voir Authentification.
L'API de données de transport expose la version GTFS statique d'Unmap sous forme d'agences, d'arrêts proches, de lignes et de départs planifiés. Elle utilise la même clé et le même compteur que le routage. Il n'existe ni forfait ni quota distinct pour le transport en commun.
La version est nationale et reconstruite chaque semaine. Elle porte chaque flux que sert le graphe
de routage en transport et dont la licence permet la republication: 80 flux dans sept provinces
lors de sa première construction nationale, le 2026-10-09, contre huit flux pilotes auparavant.
Les flux dont aucun catalogue public ne donne les conditions restent en attente jusqu'à ce qu'on
les trouve, et ceux dont les conditions restreignent la redistribution sont écartés. VIA Rail
Canada est écarté parce qu'il publie des fréquences (frequencies.txt), qui ne peuvent pas être
présentées comme des départs exacts. GET /transit/agencies liste chaque agence de la version
servie, et GET /coverage.json explique pourquoi chaque autre flux en est absent. Chaque départ
est planifié, pas en temps réel. Quand aucune version n'est disponible, l'API donne un 503 avec retryable: true, donc un
compartiment vide ne peut jamais ressembler à un pays sans transport. Voir Couverture pour
les flux qui ont franchi les contrôles de licence et de validation.
Client
@unmap/sdk expose les cinq points d'accès sous unmap.transit:
import { Unmap } from "@unmap/sdk";
const unmap = new Unmap({ key: "um_live_..." });
const agencies = await unmap.transit.agencies();
const stops = await unmap.transit.nearbyStops([-73.5673, 45.5019], {
radius: 800,
limit: 10,
});
const stop = stops.data[0];
if (stop) {
const departures = await unmap.transit.departures(stop.id, {
at: new Date(),
window: 60,
limit: 20,
});
}Chaque méthode retourne { data, meta }. meta indique la version source, l'attribution et la
fraîcheur. Chaque appel de transport statique compte comme un appel normal de routage.
Une réponse peut couvrir plusieurs flux: les arrêts proches à Toronto peuvent venir à la fois de
la TTC, de GO Transit, de York Region Transit et de MiWay. meta.sources liste alors chaque flux et
meta.attribution réunit leurs mentions d'attribution en une seule chaîne. Affichez cette chaîne
partout où vous présentez les données.
Six flux québécois sont publiés sous l'Open Database License (ODbL) 1.0, une licence de partage à l'identique. Leur attribution le dit, et précise que la copie d'unmap est offerte sous l'ODbL 1.0. Si vous redistribuez des données de ces flux, elles restent sous l'ODbL.
Agences
GET /transit/agenciesRetourne toutes les agences de la version activée. Une agence dont l'identifiant GTFS est TTC
dans le flux ttc porte l'identifiant um:transit:agency:ttc:TTC. Un flux à agence unique qui
omet agency_id utilise la forme du flux, comme um:transit:agency:ttc. Les identifiants GTFS ne
sont uniques qu'à l'intérieur d'un flux; un identifiant brut n'est donc jamais présenté comme
mondial.
Arrêts proches
GET /transit/stops?near=-73.5673,45.5019&radius=800&limit=10nearest obligatoire sous la formelng,laten WGS84.radiusest exprimé en mètres, de 50 à 10 000. La valeur par défaut est 1 000.limitva de 1 à 100. La valeur par défaut est 20.
Le résultat est filtré selon la distance orthodromique exacte et trié du plus proche au plus
lointain. Chaque arrêt porte distance en mètres et un identifiant stable comme
um:transit:stop:ttc:1234.
Les stations parentes regroupent les lignes et les départs minutés de leurs quais enfants.
Recherche d'un arrêt ou d'une ligne
GET /transit/stops/{id}
GET /transit/routes/{id}Utilisez l'identifiant Unmap retourné par un autre appel de transport. Encodez-le comme segment de
chemin si vous construisez la requête vous-même. Le SDK le fait automatiquement avec getStop(id)
et getRoute(id).
Départs
GET /transit/stops/{id}/departures?at=2026-09-17T08:00:00-04:00&window=60&limit=50atest un instant ISO 8601 avecZou un décalage explicite. Sa valeur par défaut est maintenant. Une heure locale sans décalage est refusée, car un changement d'heure peut la rendre ambiguë.windowva de 1 à 240 minutes. La valeur par défaut est 60.limitva de 1 à 200. La valeur par défaut est 50.
Le compilateur conserve les heures GTFS après minuit et les exceptions de service de
calendar_dates.txt. L'API les résout dans le fuseau du flux, y compris aux changements d'heure,
et retourne des instants ISO absolus:
{
"data": [
{
"stop_id": "um:transit:stop:ttc:1234",
"route_id": "um:transit:route:ttc:1",
"trip_id": "um:transit:trip:ttc:night-1",
"headsign": "Finch",
"arrival": "2026-09-18T05:14:00.000Z",
"departure": "2026-09-18T05:15:00.000Z",
"stop_sequence": 7,
"schedule_type": "scheduled"
}
],
"meta": {
"source": "Toronto Transit Commission: TTC Routes and Schedules",
"source_updated_at": null,
"source_version": "mdb-732",
"content_hash": "<sha256>",
"data_version": "20260917-0123456789ab",
"unmap_updated_at": "2026-09-17T12:00:00.000Z",
"status": "current",
"attribution": "Open Government Licence - Toronto",
"schedule_type": "scheduled"
}
}schedule_type vaut toujours scheduled dans cette version, sur chaque ligne et dans meta, même
si le résultat est vide. Aucune réponse ne prétend décrire le déplacement d'un véhicule, un retard
ou une annulation en direct. GTFS-Realtime appartient à une phase ultérieure et distincte.
Les flux qui utilisent frequencies.txt sont refusés pour l'instant. Un trajet fondé sur une
fréquence ne peut pas devenir un départ exact sans inventer une précision que le producteur n'a
pas publiée.
Le routage suit un déploiement distinct
L'API statique ne porte que des flux prêts pour le routage sur le graphe de transport: une agence
listée ici est une agence que mode=transit peut emprunter. Les deux restent des déploiements
distincts: le capabilities.routing de chaque agence ne vaut true que lorsque le graphe de
transport est en service. Utilisez
mode=transit avec depart_at sur /route et /isochrone seulement lorsque la page de couverture
indique que le routage en transport est déployé; un centre d'isochrone sans transport en commun
prévu à proximité donne un 422. Il n'existe aucun contrat arrive_by ni de matrice pour le
transport en commun.
Prochaines étapes
- Couverture liste les agences incluses dans cette version.
- L'API d'itinéraires pour
mode=transit, qui est un déploiement distinct. - Erreurs pour le contrat d'échec.