- Leitura
- Dados probantes e dados
- API para desenvolvedores
Cada número deste site está a uma chamada JSON gratuita de distância.API para desenvolvedores
Every figure here is versioned JSON. Free to use, with or without a key.Every figure here is versioned JSON. Free to use, with or without a key.
Endereço base https://otranspo.ca/api/public/v1
Free, key optional · 1,000 a day, 60 a minute · code MIT · version 1.0.0
- Acesso
Free
key optional
- Limite de uso
1,000 a day
60 a minute; more on Developer
- Licença do código
MIT
os dados mantêm os termos da sua fonte
- Versão
1.0.0
stable · 180 days’ notice
Plans
Free
1,000 calls a day, 60 a minute. No key needed; a free key counts your calls separately from everyone else on your network.
Credit ‘Data: OTranspo (otranspo.ca)’ wherever you show the data.
Developer
$10 a monthor $100 a year (CAD)
- 100,000 calls a day, 600 a minute
- Bulk downloads and full history
- Support by email
Journalists, students and council staff: the free tier is yours. Write to us if you need more for a story or a study.
How to send a key
curl -H "Authorization: Bearer otr_…" https://otranspo.ca/api/public/v1/route-statesLimites
Each answer carries X-RateLimit-Remaining (this minute) and X-RateLimit-Daily-Remaining (today, UTC). Over the limit you get 429 with the time it resets.
Uma chamada, do início ao fim
Requisição
curl https://otranspo.ca/api/public/v1/route-statesA resposta é a real deste site, obtida quando você a solicita.
Resposta resumida Esquema
Executando…
Todos os recursos, 39
Os caminhos começam em /api/public/v1, a menos que estejam escritos por inteiro. Abra qualquer linha para ver os status HTTP, os códigos de erro, o acesso, a incerteza e o esquema.
Índice e contratocomece aqui2
Índice da APIGET /api /public /v1—JSON
Status HTTP
200
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
endpoints.id · endpoints.path
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Contrato OpenAPI 3.1GET /openapi.json—JSON
Status HTTP
200
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
operationId · path
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Serviço agorao que está acontecendo neste minuto5
Cancelamentos publicados agoraGET /current-cancellations—JSON
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
unsupported_query 400 · current_cancellations_unavailable 503
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
trips.tripId · trips.routeId
Fonte e incerteza
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 da linha: prevista e observadaGET /route-states—JSON
Status HTTP
200 · 503
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
operatorId · routeId
Fonte e incerteza
This is not an operator alert. Routes without published positions use positions_not_published; stale or missing feeds return unavailable.
Incidentes, em inglês e francêsGET /incidents—JSON
Status HTTP
200 · 503
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
publicId · slug · updates.id
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Um alerta oficialGET /alerts /{alertId}format=json|csv · alertIdJSON · CSV
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
invalid_alert_id 400 · unsupported_format 400 · alert_not_found 400 · alert_unavailable 503
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
alert.id · alert.operatorId
Fonte e incerteza
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.
Painel da estaçãoGET /stations /{stationId}format=json|csv · stationIdJSON
Status HTTP
200 · 400 · 404 · 503
Códigos de motivo de erro
invalid_station_id 400 · unsupported_format 400 · station_not_found 404 · station_board_unavailable 503
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
station.id · lines.routeRecordId · departures.tripId
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Dados probantes e relatóriosos números por trás de cada página11
Dados probantes de fiabilidadeGET /reliability-evidenceformat=json|csvJSON · CSV
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
unsupported_format 400
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
routeId · window
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Dados probantes da linhaGET /routes /{routeId} /evidenceformat=json|csv · routeIdJSON
Status HTTP
200 · 400 · 404 · 503
Códigos de motivo de erro
invalid_route_id 400 · unsupported_format 400 · route_not_found 404 · route_evidence_unavailable 503
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
route.routeId
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Exemplo de chamada
GET /api/public/v1/routes/{routeId}/evidence
Serviço da linha por diaGET /routes /{routeId} /service-evidencewindow=day|week|month|28d · date · format=json|csv · routeIdJSON
Status HTTP
200 · 400 · 404 · 503
Códigos de motivo de erro
invalid_route_id 400 · unsupported_window 400 · invalid_service_date 400 · unsupported_format 400 · route_not_found 404 · route_service_evidence_unavailable 503
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
routeId · window
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Serviço por estação ou distrito eleitoralGET /places /{kind} /{placeId} /service-evidencedate · kind=station|ward · placeIdJSON
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
unsupported_place_kind 400 · invalid_place_id 400 · unsupported_query 400 · invalid_service_date 400 · place_service_evidence_unavailable 503
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
kind · placeId · operatorId
Fonte e incerteza
Observation and cancellation completeness are explicitly unverified; no-position candidate counts remain null and comparison eligibility is false.
Baixar registro de evidênciasGET /evidence /{evidenceId}format=json|csv · evidenceIdJSON · CSV
Status HTTP
200 · 400 · 404
Códigos de motivo de erro
unsupported_format 400 · not_found 404
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
evidenceId
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Boletins por distrito eleitoralGET /ward-scorecardsformat=json|csvJSON · CSV
Status HTTP
200 · 503
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
snapshotId · wardId
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Edições anteriores do boletim de desempenhoGET /historical-scorecardssnapshotId=historical-scorecards:<sha256> · routeIdJSON
Status HTTP
200 · 400 · 404 · 422
Códigos de motivo de erro
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
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
snapshotId · routeId
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Arquivo de relatórios de serviçoGET /service-report-archivekindJSON
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
invalid_archive_query 400 · archive_unavailable 503
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
kind · period
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Precisão das previsõesGET /prediction-calibration—JSON
Status HTTP
200 · 503
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
operatorId · routeId · routeContext · horizonBucket
Fonte e incerteza
Later observed arrival is a comparison, not ground truth or a validated prediction interval; independent validation is false.
Relatório do serviço selecionadoGET /api /insights /reports /selected?period={period}&date={YYYY-MM-DD}period=day|week|month · date=YYYY-MM-DD · operator=all|oc_transpo|sto · routeJSON
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
invalid_selection 400 · selected_report_unavailable 503 · invalid_route_hour_selection 400 · route_hours_unavailable 503
Acesso e limite de uso
Anônimo; nenhum limite de API pública está configurado para este caminho.
Identificadores estáveis
period · date · operator · method
Fonte e incerteza
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.
Dados usados na comparação das previsõesGET /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
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
invalid_comparison_evidence_selection 400
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
payload.edition · payload.selection · checksum.value
Fonte e incerteza
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.
Exemplo de chamada
GET /api/insights/reports/selected/comparison-evidence?period={period}&date={YYYY-MM-DD}
Histórico e reproduçãoo que já aconteceu6
Cancelamentos e falhas do passadoGET /historical-cancellationswindow=day|week|28d|month · date · assessment=noneJSON
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
unsupported_query 400 · unsupported_window 400 · invalid_service_date 400 · unsupported_assessment 400 · historical_cancellations_unavailable 503 · historical_cancellation_limit_exceeded 400
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
period · records.tripId
Fonte e incerteza
Historical polling completeness is unverified and schedule matching may be unassessed; unknown coverage is not zero cancellations.
Replay da cidadeGET /replaydate · routeFamily · operator · fromMinute · minutes · summaryJSON
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
date_required 400 · invalid_route_family 400 · invalid_operator 400 · replay_positions_unavailable 503 · published_replay_unavailable 503
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
date · routeFamily · operator
Fonte e incerteza
Replay is historical and never live; only captured/published archive evidence is returned.
Veículos observados, por diaGET /fleet-historydate · operator=all|oc_transpo|sto · route · feedIdJSON
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
invalid_fleet_history_lookup 400 · invalid_fleet_history_date 400 · invalid_fleet_history_operator 400 · fleet_history_unavailable 503
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
serviceDate · operator · route
Fonte e incerteza
Retained feed observations are not a physical fleet inventory; missing retention is not zero service.
IDs de veículos do feed, por diaGET /fleet-history /feed-idsdate · operator=all|oc_transpo|sto · cursorJSON
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
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
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
date · operator · digest · collisionOrdinal
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Um ID de veículo ao longo do tempoGET /vehicles /{vehicleId} /visibility-historyformat=json|csv · vehicleIdJSON
Status HTTP
200 · 400 · 404 · 503
Códigos de motivo de erro
invalid_vehicle_id 400 · unsupported_format 400 · vehicle_history_unavailable 503 · vehicle_history_not_found 404
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
vehicleId
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Vehicles seen, in bulkGET /bulk /fleet-historyfrom · to · operator=all|oc_transpo|sto · route · feedIdJSON
Status HTTP
200 · 400 · 401 · 403 · 429 · 503
Códigos de motivo de erro
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
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
serviceDate · operator · route
Fonte e incerteza
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.
Horários e uso offlineo horário publicado6
Horário de uma linhaGET /transit-planning /{routeId}date · routeIdJSON
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
invalid_route_or_date 400 · use_history_for_past_dates 400 · planning_baseline_unavailable 503
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
routeId · serviceDate
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Horários da redeGET /transit-planning /networkdateJSON
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
invalid_parameters 400 · invalid_service_date 400 · network_baseline_unavailable 503
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
serviceDate
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Trajeto pelas ruas entre dois pontosPOST /transit-planning /street-pathbodyJSON
Status HTTP
200 · 400 · 503
Códigos de motivo de erro
invalid_body 400 · invalid_segment 400
Acesso e limite de uso
Anônimo, origem confiável obrigatória; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
from · to
Fonte e incerteza
Path may be unavailable when routing source data is absent; no path is not evidence of no accessible route.
Pacotes de horários offlineGET /offline-pack—JSON
Status HTTP
200 · 503
Códigos de motivo de erro
offline_pack_not_published 503 · offline_pack_unavailable 503
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
packId · digest
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Manifesto do pacote offlineGET /offline-pack /manifestpackJSON
Status HTTP
200 · 404 · 503
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
packId · shards.id
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Parte do pacote offlineGET /offline-pack /shards /{id}idbytes
Status HTTP
200 · 404 · 503
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
id · digest
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Registros e políticaso que mudamos e por quê6
Registro de correçõesGET /correctionsformat=json|csvJSON · CSV
Status HTTP
200 · 400
Códigos de motivo de erro
unsupported_format 400
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
records.id · records.revision
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Registro de políticasGET /policy-register—JSON
Status HTTP
200
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
records.id · records.revision
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Garantia de acessibilidadeGET /accessibility-assurance—JSON
Status HTTP
200
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
evidence.id · remediationLog.id
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Cobertura regional e atualidade dos dadosGET /regional-coverage—JSON
Status HTTP
200 · 503
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
operators.operatorId
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Canais de aviso e de ajudaGET /journey-service-policy—JSON
Status HTTP
200
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
contractVersion · channels.channel
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Verificação da apresentação do veículoGET /fleet-presentation—JSON
Status HTTP
200 · 503
Códigos de motivo de erro
—
Acesso e limite de uso
Acesso anônimo; 60 por minuto quando o limite de taxa distribuído está ativado.
Identificadores estáveis
evidence.operatorSamples.operatorId
Fonte e incerteza
Read the response status, evidenceState, source timestamps, limitations and gaps; absence is not proof of zero.
Compartilhamentolinks e cartões de redes sociais3
Acesso e uso
Acesso e usoLimits, caching, versions, privacy and licence
- Acesso
- Every GET resource is public and free to use, with or without a key. Bulk and history resources need a Developer key. The two POST resources (making a share link, drawing a street path) only accept requests from otranspo.ca itself.
- Limite de uso
- 1,000 calls a day and 60 a minute, with or without a free key; 100,000 a day and 600 a minute on the Developer plan. Read the X-RateLimit-* headers on every answer; X-RateLimit-Status says when limits are degraded.
- Keys
- Send a key as Authorization: Bearer otr_… or X-API-Key. Never in the address. A wrong, revoked or expired key gets 401, never a keyless answer.
- Cache
- The index is kept 30 seconds by your browser and 5 minutes at the edge. Live resources such as cancellations are sent no-store. Offline timetable pieces never change once published.
- Versões
- Cada resposta indica seu schema e schemaVersion. Uma mudança incompatível recebe um novo caminho /v2, com aviso prévio de 180 dias nos cabeçalhos Deprecation, Sunset e Link.
- Privacidade
- Não envie dados pessoais. As coordenadas enviadas ao caminho de ruas são usadas somente para aquele pedido. Nunca são registradas nem guardadas. As respostas nunca contêm IDs de conta, buscas de trajeto, e-mails, endereços de rede ou links internos de dados probantes.
- Desconhecido não é zero
- Uma resposta pode estar indisponível mesmo quando o recurso existe. Leia status, evidenceState, horários da fonte, cobertura e limitações. Os estados das linhas comparam o horário programado com os ônibus vistos. Eles não são alertas do operador.
- Licença
- Código: MIT. Os dados da OC Transpo e da STO seguem os próprios termos de dados abertos e exigem crédito. Nossos números: CC BY 4.0, crédito otranspo.ca.
- Ainda não feito
- No SDK is published, no second city is supported, and partner tenant-key access is not open. This page does not claim them.