- Lectura
- Pruebas y datos
- API para desarrolladores
Cada cifra de este sitio está a una llamada JSON gratuita.API para desarrolladores
Cada cifra aquí es JSON con versiones. Uso gratuito, con o sin clave.Cada cifra aquí es JSON con versiones. Gratuito, con o sin clave.
Dirección base https://otranspo.ca/api/public/v1
Gratis, clave opcional · 1,000 al día, 60 por minuto · código MIT · versión 1.0.0
- Acceso
Gratis
clave opcional
- Límite de solicitudes
1,000 a day
60 por minuto; más con Desarrollador
- Licencia del código
MIT
los datos conservan los términos de su fuente
- Versión
1.0.0
estable · aviso con 180 días
Planes
Gratis
1,000 calls a day, 60 a minute. No key needed; a free key counts your calls separately from everyone else on your network.
Cita «Data: OTranspo (otranspo.ca)» dondequiera que muestres los datos.
Desarrollador
10 $ al meso 100 $ al año (CAD)
- 100,000 calls a day, 600 a minute
- Descargas masivas e historial completo
- Asistencia por correo electrónico
Journalists, students and council staff: the free tier is yours. Write to us if you need more for a story or a study.
Cómo enviar una clave
curl -H "Authorization: Bearer otr_…" https://otranspo.ca/api/public/v1/route-statesLímites
Cada respuesta incluye X-RateLimit-Remaining (este minuto) y X-RateLimit-Daily-Remaining (hoy, UTC). Si superas el límite, recibes 429 con la hora en que se restablece.
Una llamada, de principio a fin
Solicitud
curl https://otranspo.ca/api/public/v1/route-statesLa respuesta es la real de este sitio, obtenida cuando la pides.
Respuesta, abreviada Esquema
Ejecutando…
Todos los recursos, 39
Las rutas empiezan en /api/public/v1 salvo que se escriban completas. Abre cualquier fila para ver sus estados HTTP, códigos de error, acceso, incertidumbre y esquema.
Índice y contratoempieza aquí2
Índice de la APIGET /api /public /v1—JSON
Estado HTTP
200
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
endpoints.id · endpoints.path
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Contrato OpenAPI 3.1GET /openapi.json—JSON
Estado HTTP
200
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
operationId · path
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Servicio ahoralo que pasa en este minuto5
Cancelaciones publicadas ahoraGET /current-cancellations—JSON
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
unsupported_query 400 · current_cancellations_unavailable 503
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
trips.tripId · trips.routeId
Fuente e incertidumbre
Only explicit CANCELED/DELETED notices for timetable trips in the current snapshot are listed. Empty or unavailable feeds do not prove that no trips were cancelled; outside-timetable notices may be withheld.
Estados de ruta: programado frente a vistoGET /route-states—JSON
Estado HTTP
200 · 503
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
operatorId · routeId
Fuente e incertidumbre
This is not an operator alert. Routes without published positions use positions_not_published; stale or missing feeds return unavailable.
Incidentes, en inglés y francésGET /incidents—JSON
Estado HTTP
200 · 503
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
publicId · slug · updates.id
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Un aviso oficialGET /alerts /{alertId}format=json|csv · alertIdJSON · CSV
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
invalid_alert_id 400 · unsupported_format 400 · alert_not_found 400 · alert_unavailable 503
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
alert.id · alert.operatorId
Fuente e incertidumbre
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.
Tablero de estaciónGET /stations /{stationId}format=json|csv · stationIdJSON
Estado HTTP
200 · 400 · 404 · 503
Códigos de motivo de error
invalid_station_id 400 · unsupported_format 400 · station_not_found 404 · station_board_unavailable 503
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
station.id · lines.routeRecordId · departures.tripId
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Evidencia e informeslas cifras detrás de cada página11
Pruebas de fiabilidadGET /reliability-evidenceformat=json|csvJSON · CSV
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
unsupported_format 400
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
routeId · window
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Datos de la rutaGET /routes /{routeId} /evidenceformat=json|csv · routeIdJSON
Estado HTTP
200 · 400 · 404 · 503
Códigos de motivo de error
invalid_route_id 400 · unsupported_format 400 · route_not_found 404 · route_evidence_unavailable 503
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
route.routeId
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Llamada de ejemplo
GET /api/public/v1/routes/{routeId}/evidence
Servicio de una ruta por díaGET /routes /{routeId} /service-evidencewindow=day|week|month|28d · date · format=json|csv · routeIdJSON
Estado HTTP
200 · 400 · 404 · 503
Códigos de motivo de error
invalid_route_id 400 · unsupported_window 400 · invalid_service_date 400 · unsupported_format 400 · route_not_found 404 · route_service_evidence_unavailable 503
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
routeId · window
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Servicio de una estación o distritoGET /places /{kind} /{placeId} /service-evidencedate · kind=station|ward · placeIdJSON
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
unsupported_place_kind 400 · invalid_place_id 400 · unsupported_query 400 · invalid_service_date 400 · place_service_evidence_unavailable 503
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
kind · placeId · operatorId
Fuente e incertidumbre
Observation and cancellation completeness are explicitly unverified; no-position candidate counts remain null and comparison eligibility is false.
Descarga de un registro de pruebasGET /evidence /{evidenceId}format=json|csv · evidenceIdJSON · CSV
Estado HTTP
200 · 400 · 404
Códigos de motivo de error
unsupported_format 400 · not_found 404
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
evidenceId
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Tarjetas de resultados por distritoGET /ward-scorecardsformat=json|csvJSON · CSV
Estado HTTP
200 · 503
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
snapshotId · wardId
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Ediciones pasadas de las fichasGET /historical-scorecardssnapshotId=historical-scorecards:<sha256> · routeIdJSON
Estado HTTP
200 · 400 · 404 · 422
Códigos de motivo de error
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
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
snapshotId · routeId
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Archivo de informes de servicioGET /service-report-archivekindJSON
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
invalid_archive_query 400 · archive_unavailable 503
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
kind · period
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Exactitud de las prediccionesGET /prediction-calibration—JSON
Estado HTTP
200 · 503
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
operatorId · routeId · routeContext · horizonBucket
Fuente e incertidumbre
Later observed arrival is a comparison, not ground truth or a validated prediction interval; independent validation is false.
Informe de servicio seleccionadoGET /api /insights /reports /selected?period={period}&date={YYYY-MM-DD}period=day|week|month · date=YYYY-MM-DD · operator=all|oc_transpo|sto · routeJSON
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
invalid_selection 400 · selected_report_unavailable 503 · invalid_route_hour_selection 400 · route_hours_unavailable 503
Acceso y límite de solicitudes
Anónimo; no hay un límite de public-api configurado para esta ruta.
Identificadores estables
period · date · operator · method
Fuente e incertidumbre
Without route, the selected-report contract is unchanged. With route, the selected-route-hours contract returns at most48 method-separated local-hour prediction groups, preserving requested report operator separately from routeOperator. These mutable retained predictions do not prove physical arrivals, complete archive coverage, zero service or an immutable publication.
Datos de comparación de prediccionesGET /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
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
invalid_comparison_evidence_selection 400
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
payload.edition · payload.selection · checksum.value
Fuente e incertidumbre
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.
Llamada de ejemplo
GET /api/insights/reports/selected/comparison-evidence?period={period}&date={YYYY-MM-DD}
Historial y repeticiónlo que ya pasó6
Cancelaciones y vacíos pasadosGET /historical-cancellationswindow=day|week|28d|month · date · assessment=noneJSON
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
unsupported_query 400 · unsupported_window 400 · invalid_service_date 400 · unsupported_assessment 400 · historical_cancellations_unavailable 503 · historical_cancellation_limit_exceeded 400
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
period · records.tripId
Fuente e incertidumbre
Historical polling completeness is unverified and schedule matching may be unassessed; unknown coverage is not zero cancellations.
Repetición de la ciudadGET /replaydate · routeFamily · operator · fromMinute · minutes · summaryJSON
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
date_required 400 · invalid_route_family 400 · invalid_operator 400 · replay_positions_unavailable 503 · published_replay_unavailable 503
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
date · routeFamily · operator
Fuente e incertidumbre
Replay is historical and never live; only captured/published archive evidence is returned.
Vehículos vistos, por díaGET /fleet-historydate · operator=all|oc_transpo|sto · route · feedIdJSON
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
invalid_fleet_history_lookup 400 · invalid_fleet_history_date 400 · invalid_fleet_history_operator 400 · fleet_history_unavailable 503
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
serviceDate · operator · route
Fuente e incertidumbre
Retained feed observations are not a physical fleet inventory; missing retention is not zero service.
Identificadores de vehículos del canal, por díaGET /fleet-history /feed-idsdate · operator=all|oc_transpo|sto · cursorJSON
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
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
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
date · operator · digest · collisionOrdinal
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Un identificador de vehículo en el tiempoGET /vehicles /{vehicleId} /visibility-historyformat=json|csv · vehicleIdJSON
Estado HTTP
200 · 400 · 404 · 503
Códigos de motivo de error
invalid_vehicle_id 400 · unsupported_format 400 · vehicle_history_unavailable 503 · vehicle_history_not_found 404
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
vehicleId
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Vehículos vistos, en bloqueGET /bulk /fleet-historyfrom · to · operator=all|oc_transpo|sto · route · feedIdJSON
Estado HTTP
200 · 400 · 401 · 403 · 429 · 503
Códigos de motivo de error
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
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
serviceDate · operator · route
Fuente e incertidumbre
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.
Horarios y sin conexiónel horario publicado6
Horario de una rutaGET /transit-planning /{routeId}date · routeIdJSON
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
invalid_route_or_date 400 · use_history_for_past_dates 400 · planning_baseline_unavailable 503
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
routeId · serviceDate
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Horario de la redGET /transit-planning /networkdateJSON
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
invalid_parameters 400 · invalid_service_date 400 · network_baseline_unavailable 503
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
serviceDate
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Camino por la calle entre dos puntosPOST /transit-planning /street-pathbodyJSON
Estado HTTP
200 · 400 · 503
Códigos de motivo de error
invalid_body 400 · invalid_segment 400
Acceso y límite de solicitudes
Anónimo, se exige un origen de confianza; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
from · to
Fuente e incertidumbre
Path may be unavailable when routing source data is absent; no path is not evidence of no accessible route.
Paquetes de horarios sin conexiónGET /offline-pack—JSON
Estado HTTP
200 · 503
Códigos de motivo de error
offline_pack_not_published 503 · offline_pack_unavailable 503
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
packId · digest
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Manifiesto del paquete sin conexiónGET /offline-pack /manifestpackJSON
Estado HTTP
200 · 404 · 503
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
packId · shards.id
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Pieza del paquete sin conexiónGET /offline-pack /shards /{id}idbytes
Estado HTTP
200 · 404 · 503
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
id · digest
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Registros y políticasqué cambiamos y por qué6
Registro de correccionesGET /correctionsformat=json|csvJSON · CSV
Estado HTTP
200 · 400
Códigos de motivo de error
unsupported_format 400
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
records.id · records.revision
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Registro de políticasGET /policy-register—JSON
Estado HTTP
200
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
records.id · records.revision
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Garantía de accesibilidadGET /accessibility-assurance—JSON
Estado HTTP
200
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
evidence.id · remediationLog.id
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Cobertura regional y actualidadGET /regional-coverage—JSON
Estado HTTP
200 · 503
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
operators.operatorId
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Canales de notificación y ayudaGET /journey-service-policy—JSON
Estado HTTP
200
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
contractVersion · channels.channel
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Comprobación de la presentación de vehículosGET /fleet-presentation—JSON
Estado HTTP
200 · 503
Códigos de motivo de error
—
Acceso y límite de solicitudes
Acceso anónimo; 60 por minuto cuando el límite distribuido está activo.
Identificadores estables
evidence.operatorSamples.operatorId
Fuente e incertidumbre
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Compartirenlaces y tarjetas sociales3
Acceso y uso
Acceso y usoLímites, caché, versiones, privacidad y licencia
- Acceso
- Todos los recursos GET son públicos y gratuitos, con o sin clave. Los recursos masivos y el historial requieren una clave Desarrollador. Los dos recursos POST (crear un enlace para compartir, trazar un recorrido a pie) solo aceptan solicitudes del propio otranspo.ca.
- Límite de solicitudes
- 1,000 llamadas al día y 60 por minuto, con o sin clave gratuita. 100,000 al día y 600 por minuto con el plan Developer. Lee los encabezados X-RateLimit-* en cada respuesta. X-RateLimit-Status te avisa cuándo los límites están reducidos.
- Claves
- Envía una clave como Authorization: Bearer otr_… o X-API-Key. Nunca en la dirección. Si la clave es incorrecta, fue revocada o venció, recibes un 401, nunca una respuesta sin clave.
- Caché
- El índice se guarda 30 segundos en tu navegador y 5 minutos en el borde. Los recursos en vivo, como las cancelaciones, se envían sin almacenar. Las piezas de horarios sin conexión no cambian una vez publicadas.
- Versiones
- Cada respuesta nombra su schema y su schemaVersion. Un cambio incompatible recibe una ruta /v2 nueva, con 180 días de aviso en los encabezados Deprecation, Sunset y Link.
- Privacidad
- No envíes datos personales. Las coordenadas enviadas al camino por la calle se usan solo para esa solicitud y nunca se registran ni se guardan. Las respuestas nunca contienen identificadores de cuenta, búsquedas de viaje, correos o direcciones de red, ni enlaces internos de pruebas.
- Desconocido no es cero
- Una respuesta puede no estar disponible aunque el recurso exista. Lee status, evidenceState, las horas de las fuentes, la cobertura y las limitaciones. Los estados de ruta comparan el horario con los autobuses vistos; no son avisos del operador.
- Licencia
- Código: MIT. Los datos de OC Transpo y STO siguen sus propios términos de datos abiertos y requieren crédito. Nuestras cifras: CC BY 4.0, crédito a otranspo.ca.
- Aún no está hecho
- No SDK is published, no second city is supported, and partner tenant-key access is not open. This page does not claim them.