- Lecture
- Preuves et données
- API pour développeurs
Chaque chiffre de ce site est à un appel JSON gratuit.API pour développeurs
Chaque chiffre ici est du JSON versionné. Gratuit, avec ou sans clé.Chaque chiffre ici est du JSON versionné. Gratuit, avec ou sans clé.
Adresse de base https://otranspo.ca/api/public/v1
Gratuit, clé facultative · 1 000 par jour, 60 par minute · code MIT · version 1.0.0
- Accès
Gratuit
clé facultative
- Limite de débit
1 000 par jour
60 par minute; plus avec Développeur
- Licence du code
MIT
les données gardent les conditions de leur source
- Version
1.0.0
un changement majeur reçoit un nouveau chemin
Forfaits
Gratuit
1 000 appels par jour, 60 par minute. Aucune clé requise; une clé gratuite compte vos appels séparément de ceux des autres sur votre réseau.
Mentionnez « Données : OTranspo (otranspo.ca) » partout où vous affichez les données.
Développeur
10 $ par moisou 100 $ par an (CAD)
- 100 000 appels par jour, 600 par minute
- Téléchargements en lot et historique complet
- Soutien par courriel
Journalistes, étudiants et personnel municipal : le forfait gratuit est pour vous. Écrivez-nous si vous avez besoin de plus pour un reportage ou une étude.
Comment envoyer une clé
curl -H "Authorization: Bearer otr_…" https://otranspo.ca/api/public/v1/route-statesLimites
Chaque réponse porte X-RateLimit-Remaining (cette minute) et X-RateLimit-Daily-Remaining (aujourd’hui, UTC). Au-delà de la limite, vous recevez 429 avec l’heure de réinitialisation.
Un appel, du début à la fin
Requête
curl https://otranspo.ca/api/public/v1/route-statesLa réponse est la vraie, tirée de ce site au moment où vous la demandez.
Réponse, abrégée Schéma
En cours…
Toutes les ressources, 39
Les chemins commencent par /api/public/v1 sauf indication complète. Ouvrez une ligne pour ses statuts HTTP, codes d’erreur, accès, incertitude et schéma.
Index et contratcommencez ici2
Index de l’APIGET /api /public /v1—JSON
Statut HTTP
200
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
endpoints.id · endpoints.path
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Contrat OpenAPI 3.1GET /openapi.json—JSON
Statut HTTP
200
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
operationId · path
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Service en ce momentce qui se passe cette minute5
Annulations affichées en ce momentGET /current-cancellations—JSON
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
unsupported_query 400 · current_cancellations_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
trips.tripId · trips.routeId
Source et incertitude
Seules les annulations ou suppressions explicites du flux courant sont listées. Un flux vide ou indisponible ne prouve pas l’absence d’annulations; les avis hors horaire peuvent être omis.
États des lignes : horaire et vusGET /route-states—JSON
Statut HTTP
200 · 503
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
operatorId · routeId
Source et incertitude
Comparaison entre l’horaire et les véhicules observés; ce n’est pas une alerte d’un exploitant. Les routes sans positions publiées sont indiquées explicitement.
Incidents, en anglais et en françaisGET /incidents—JSON
Statut HTTP
200 · 503
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
publicId · slug · updates.id
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Un avis officielGET /alerts /{alertId}format=json|csv · alertIdJSON · CSV
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
invalid_alert_id 400 · unsupported_format 400 · alert_not_found 400 · alert_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
alert.id · alert.operatorId
Source et incertitude
The notice is the operator’s own wording. Kept wordings start when we first saw the notice, not when the operator posted it, and an empty list does not prove the notice never changed.
Tableau d’une stationGET /stations /{stationId}format=json|csv · stationIdJSON
Statut HTTP
200 · 400 · 404 · 503
Codes de motif d’erreur
invalid_station_id 400 · unsupported_format 400 · station_not_found 404 · station_board_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
station.id · lines.routeRecordId · departures.tripId
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Preuves et rapportsles chiffres derrière chaque page11
Preuves de fiabilitéGET /reliability-evidenceformat=json|csvJSON · CSV
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
unsupported_format 400
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
routeId · window
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Preuves par ligneGET /routes /{routeId} /evidenceformat=json|csv · routeIdJSON
Statut HTTP
200 · 400 · 404 · 503
Codes de motif d’erreur
invalid_route_id 400 · unsupported_format 400 · route_not_found 404 · route_evidence_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
route.routeId
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Exemple d’appel
GET /api/public/v1/routes/{routeId}/evidence
Service d’une ligne par jourGET /routes /{routeId} /service-evidencewindow=day|week|month|28d · date · format=json|csv · routeIdJSON
Statut HTTP
200 · 400 · 404 · 503
Codes de motif d’erreur
invalid_route_id 400 · unsupported_window 400 · invalid_service_date 400 · unsupported_format 400 · route_not_found 404 · route_service_evidence_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
routeId · window
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Service d’une station ou d’un quartierGET /places /{kind} /{placeId} /service-evidencedate · kind=station|ward · placeIdJSON
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
unsupported_place_kind 400 · invalid_place_id 400 · unsupported_query 400 · invalid_service_date 400 · place_service_evidence_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
kind · placeId · operatorId
Source et incertitude
La couverture d’observation et des annulations reste non vérifiée; les décomptes inconnus restent à null et la comparaison est désactivée.
Téléchargement d’une preuveGET /evidence /{evidenceId}format=json|csv · evidenceIdJSON · CSV
Statut HTTP
200 · 400 · 404
Codes de motif d’erreur
unsupported_format 400 · not_found 404
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
evidenceId
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Fiches de quartierGET /ward-scorecardsformat=json|csvJSON · CSV
Statut HTTP
200 · 503
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
snapshotId · wardId
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Éditions passées des fichesGET /historical-scorecardssnapshotId=historical-scorecards:<sha256> · routeIdJSON
Statut HTTP
200 · 400 · 404 · 422
Codes de motif d’erreur
snapshot_id_required 400 · invalid_route_id 400 · invalid_parameters 400 · snapshot_not_found 404 · route_detail_not_published 422 · route_not_in_snapshot 404
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
snapshotId · routeId
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Archives des rapports de serviceGET /service-report-archivekindJSON
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
invalid_archive_query 400 · archive_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
kind · period
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Exactitude des prédictionsGET /prediction-calibration—JSON
Statut HTTP
200 · 503
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
operatorId · routeId · routeContext · horizonBucket
Source et incertitude
Une arrivée observée plus tard sert de comparaison, pas de vérité terrain ni d’intervalle validé; aucune validation indépendante n’est revendiquée.
Rapport de service sélectionnéGET /api /insights /reports /selected?period={period}&date={YYYY-MM-DD}period=day|week|month · date=YYYY-MM-DD · operator=all|oc_transpo|sto · routeJSON
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
invalid_selection 400 · selected_report_unavailable 503 · invalid_route_hour_selection 400 · route_hours_unavailable 503
Accès et limite de débit
Anonyme; aucune limite public-api configurée pour ce chemin.
Identifiants stables
period · date · operator · method
Source et incertitude
Le statut, la méthode, l’origine et les lacunes distinguent un calcul sélectionné d’une publication originale conservée.
Données de comparaison des prédictionsGET /api /insights /reports /selected /comparison-evidence?period={period}&date={YYYY-MM-DD}period=day|week|month · date=YYYY-MM-DD · operator=all|oc_transpo|stoJSON
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
invalid_comparison_evidence_selection 400
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
payload.edition · payload.selection · checksum.value
Source et incertitude
This opt-in export preserves the exact captured route/day read results, declared calendar, comparison refusals and measured source-code manifest. It is bounded to 20,000 input rows and 8 MiB and does not claim an atomic database snapshot, statistical independence, confidence intervals, physical service delivery, causation, equivalence or model eligibility. Schema validation alone does not verify checksum or replay; consumers must perform those checks separately.
Exemple d’appel
GET /api/insights/reports/selected/comparison-evidence?period={period}&date={YYYY-MM-DD}
Historique et rejeuce qui s’est déjà passé6
Annulations passées et lacunesGET /historical-cancellationswindow=day|week|28d|month · date · assessment=noneJSON
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
unsupported_query 400 · unsupported_window 400 · invalid_service_date 400 · unsupported_assessment 400 · historical_cancellations_unavailable 503 · historical_cancellation_limit_exceeded 400
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
period · records.tripId
Source et incertitude
La complétude des captures historiques n’est pas vérifiée et le rapprochement horaire peut ne pas être évalué; une couverture inconnue ne signifie pas zéro annulation.
Rejeu de la villeGET /replaydate · routeFamily · operator · fromMinute · minutes · summaryJSON
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
date_required 400 · invalid_route_family 400 · invalid_operator 400 · replay_positions_unavailable 503 · published_replay_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
date · routeFamily · operator
Source et incertitude
Le rejeu est historique, jamais en direct, et dépend des archives capturées ou publiées.
Véhicules vus, par jourGET /fleet-historydate · operator=all|oc_transpo|sto · route · feedIdJSON
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
invalid_fleet_history_lookup 400 · invalid_fleet_history_date 400 · invalid_fleet_history_operator 400 · fleet_history_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
serviceDate · operator · route
Source et incertitude
Retained feed observations are not a physical fleet inventory; missing retention is not zero service.
Identifiants de véhicules du flux, par jourGET /fleet-history /feed-idsdate · operator=all|oc_transpo|sto · cursorJSON
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
invalid_fleet_feed_id_selection 400 · invalid_fleet_history_date 400 · invalid_fleet_history_operator 400 · invalid_fleet_feed_id_cursor 400 · fleet_feed_id_census_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
date · operator · digest · collisionOrdinal
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Un identifiant de véhicule dans le tempsGET /vehicles /{vehicleId} /visibility-historyformat=json|csv · vehicleIdJSON
Statut HTTP
200 · 400 · 404 · 503
Codes de motif d’erreur
invalid_vehicle_id 400 · unsupported_format 400 · vehicle_history_unavailable 503 · vehicle_history_not_found 404
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
vehicleId
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Véhicules vus, en lotGET /bulk /fleet-historyfrom · to · operator=all|oc_transpo|sto · route · feedIdJSON
Statut HTTP
200 · 400 · 401 · 403 · 429 · 503
Codes de motif d’erreur
unsupported_query 400 · invalid_bulk_range 400 · invalid_fleet_history_lookup 400 · invalid_fleet_history_operator 400 · fleet_history_unavailable 503 · api_key_required 401 · invalid_api_key 401 · plan_required 403 · rate_limited 429
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
serviceDate · operator · route
Source et incertitude
Each line is the fleet-history evidence for one seven-day window; retained feed observations are not a physical fleet inventory and missing retention is not zero service.
Horaires et hors lignel’horaire publié6
Horaire d’une ligneGET /transit-planning /{routeId}date · routeIdJSON
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
invalid_route_or_date 400 · use_history_for_past_dates 400 · planning_baseline_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
routeId · serviceDate
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Horaire du réseauGET /transit-planning /networkdateJSON
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
invalid_parameters 400 · invalid_service_date 400 · network_baseline_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
serviceDate
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Tracé de rue entre deux pointsPOST /transit-planning /street-pathbodyJSON
Statut HTTP
200 · 400 · 503
Codes de motif d’erreur
invalid_body 400 · invalid_segment 400
Accès et limite de débit
Anonyme, origine de confiance requise; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
from · to
Source et incertitude
Les coordonnées servent à cette requête seulement; l’absence de tracé ne prouve pas l’absence d’un itinéraire accessible.
Paquets d’horaires hors ligneGET /offline-pack—JSON
Statut HTTP
200 · 503
Codes de motif d’erreur
offline_pack_not_published 503 · offline_pack_unavailable 503
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
packId · digest
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Manifeste du paquet hors ligneGET /offline-pack /manifestpackJSON
Statut HTTP
200 · 404 · 503
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
packId · shards.id
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Morceau du paquet hors ligneGET /offline-pack /shards /{id}idbytes
Statut HTTP
200 · 404 · 503
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
id · digest
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Registres et politiquesce que nous avons changé et pourquoi6
Registre des correctionsGET /correctionsformat=json|csvJSON · CSV
Statut HTTP
200 · 400
Codes de motif d’erreur
unsupported_format 400
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
records.id · records.revision
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Registre des politiquesGET /policy-register—JSON
Statut HTTP
200
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
records.id · records.revision
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Assurance d’accessibilitéGET /accessibility-assurance—JSON
Statut HTTP
200
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
evidence.id · remediationLog.id
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Couverture régionale et fraîcheurGET /regional-coverage—JSON
Statut HTTP
200 · 503
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
operators.operatorId
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Canaux de notification et d’aideGET /journey-service-policy—JSON
Statut HTTP
200
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
contractVersion · channels.channel
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Vérification de présentation des véhiculesGET /fleet-presentation—JSON
Statut HTTP
200 · 503
Codes de motif d’erreur
—
Accès et limite de débit
Accès anonyme; 60/min lorsque la limite distribuée est configurée.
Identifiants stables
evidence.operatorSamples.operatorId
Source et incertitude
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Partageliens et cartes sociales3
Accès et utilisation
Accès et utilisationLimites, cache, versions, vie privée et licence
- Accès
- Toute ressource GET est publique et gratuite, avec ou sans clé. Les ressources en lot et l’historique exigent une clé Développeur. Les deux ressources POST (créer un lien de partage, tracer un chemin de rue) n’acceptent que les requêtes d’otranspo.ca.
- Clés
- Envoyez la clé dans Authorization: Bearer otr_… ou X-API-Key. Jamais dans l’adresse. Une clé erronée, révoquée ou expirée reçoit 401, jamais une réponse sans clé.
- Limite de débit
- 1 000 appels par jour et 60 par minute, avec ou sans clé gratuite; 100 000 par jour et 600 par minute avec le forfait Développeur. Lisez les en-têtes X-RateLimit-* de chaque réponse; X-RateLimit-Status indique quand les limites sont dégradées.
- Cache
- Les ressources sont mises en cache brièvement en périphérie, et les ressources en direct, comme les annulations, sont envoyées no-store. Les morceaux d’horaire hors ligne ne changent jamais une fois publiés.
- Versions
- Chaque réponse nomme son schema et sa schemaVersion. Un changement majeur reçoit un nouveau chemin /v2, avec 180 jours de préavis dans les en-têtes Deprecation, Sunset et Link.
- Confidentialité
- N’envoyez pas de données personnelles. Les coordonnées envoyées au tracé de rue servent à cette requête seulement, sans journal ni conservation. Les réponses ne contiennent jamais d’identifiants de compte, de recherches de trajet, d’adresses courriel ou réseau, ni de liens de preuve internes.
- Inconnu n’est pas zéro
- Une réponse peut être indisponible même si la ressource existe. Lisez status, evidenceState, les heures des sources, la couverture et les limites. Les états de ligne comparent l’horaire aux autobus vus; ce ne sont pas des avis d’un transporteur.
- Licence
- Code : MIT. Les données d’OC Transpo et de la STO restent sous leurs propres conditions et exigent une mention. Nos chiffres : CC BY 4.0, mention otranspo.ca.
- Pas encore fait
- Aucun SDK n’est publié, aucune deuxième ville n’est prise en charge et l’accès par clé de partenaire n’est pas ouvert. Cette page ne les revendique pas.