🐝 Dados Abertos

Descobre como podes usar o API para construir aplicações com dados de transportes em tempo real.

Comprometidos em ser abertos

Estamos profundamente comprometidos com a transparência. A maior parte do código produzido no âmbito do desenvolvimento da Carris Metropolitana e do GO está publicado no Github. Agradecemos o teu feedback, comentários ou PRs! Também são regularmente publicados dados sobre a nossa operação rodoviária, o que inclui grandes números (ex. total de passageiros transportados) e outras informações mais detalhadas (ex. qualidade do serviço prestado para cada linha).

A maior parte destes números estão disponíveis livremente no API e podem ser consumidos em tempo real. Todas as rotas aqui documentadas são as mesmas que utilizamos para suportar as aplicações da TML, como o website e app da Carris Metropolitana e inúmeras ferramentas internas. Não aplicamos qualquer "tratamento especial" aos nossos APIs — todos têm acesso à mesma informação ao mesmo tempo, garantindo equidade e transparência na partilha dos dados.

Esta estratégia permite simplificar a nossa stack técnica e melhorar a qualidade dos sistemas para todos.

Existem claro determinados dados que requerem autenticação, pela sua natureza mais sensível ou impossibilidade técnica. Estamos disponíveis para avaliar cada caso, e para isso basta entrar em contacto connosco.

Projetos que gostamos 💛

Estes são alguns dos projetos que utilizam os nossos dados abertos e que achamos extremamente interessantes!

Versões

Todos os endpoints públicos do GO são versionados pois destinam-se a consumo externo, permitindo o desenvolvimento de novas funcionalidades sem comprometer a compatibilidade com sistemas que dependem das estruturas de dados de versões anteriores.

Uma vez que todas as respostas são JSON, adicionar novas propriedades aos endpoints não é considerado uma alteração significativa, pois estas propriedades podem ser ignoradas com segurança pelos consumidores. Portanto, nesses casos, a versão pode não ser alterada. Esta abordagem parece-nos equilibrada pois permite-nos introduzir melhorias mais rapidamente enquanto minimizamos o impacto nas integrações existentes.

Os restantes endpoints autenticados do GO não são versionados. Esta é uma decisão controversa que tomámos para permitir maior agilidade no desenvolvimento dos sistemas. A grande maioria dos endpoints requer autenticação e é utilizada apenas para a própria aplicação de frontend. A estrutura em monorepo, preview environments, deploys automáticos, kubernetes, e a própria natureza web do projeto, permite-nos manter o frontend e o backend sincronizados e atualizados.

APIVersionStatusEnd of LifeShould I use it?
CM Schedules APIexperimentalDiscontinuedLate 2023
Carris Metropolitana APIv1DeprecatedLate 2026
Carris Metropolitana APIv2Active-
GO Hub APIv1Active-

Estrutura uniforme da resposta

Todas as respostas do API seguem a mesma estrutura padronizada, que garante a consistência em todos os endpoints e fornece uma framework para incluir informações adicionais de debugging quando necessário.

Em caso de erros, este formato oferece uma forma clara e estruturada para descrever o que correu mal e, quando possível, como o problema poderá ser resolvido.

Success Response
{
	status: "success",
	timestamp: 1721023200,
	message: null,
	data: [ ... ] or { ... } // The requested data
}
Error Response
{
	status: "error",
	timestamp: 1721023200,
	message: "Unable to communicate with database",
	data: null
}

TypeScript

A utilização de uma linguagem tipificada é fortemente recomendada. Para utilizadores de Typescript, fornecemos um pacote no NPM com tipos para todas as estruturas utilizadas. Decidimos utilizar Calendar Versioning para este pacote, pelo que apenas garantimos compatibilidade com a versão mais recente do API.

Endpoints disponíveis

O GO tem um módulo dedicado aos dados abertos, chamado hub, com o objetivo de facilitar o acesso à informação da rede de transportes. O objetivo é ir adicionando mais endpoints públicos, sempre que possível, para cumprir a nossa promessa de transparência.

Uma vez que o GO toca em vários temas de uma operação de transportes, e que está desenvolvido por módulos, agrupámos os endpoints para estruturar a informação que cada um disponibiliza. Podes utilizar qualquer um destes endpoints diretamente nos teus frontends sem te preocupares com limites ou muitos utilizadores. Temos políticas de cache agressivas que permitem responder rapidamente a um elevado número de clientes, mas pedimos respeito e bom senso para que todos possam usufruir de um API estável.

URL base: https://go.tmlmobilidade.pt/hub/api/:version/:path

Alertas

Com estes endpoints consegues ir buscar informação de desvios, supressões, alterações de oferta, novos horários, etc. que os vários operadores de transporte publicam ao público. Em muitos casos, são estes endpoints que são disponibilizados às aplicações de planeamento, como Google Maps, Transit, CityMapper, etc.

PathDescrição
/v1/alertsTodos os alertas de serviço publicados no GO, em JSON.
/v1/alerts.rssTodos os alertas de serviço publicados no GO, no formato RSS.
/v1/alerts/gtfsTodos os alertas de serviço publicados no GO, em JSON, mas no formato GTFS-RT Service Alerts.
/v1/alerts/gtfs.pbTodos os alertas de serviço publicados no GO, em Protobuf e no formato GTFS-RT Service Alerts.

Planos

Se precisas de aceder ao histórico da oferta de todos os operadores, então encontraste os endpoints que procuras. Dependendo do operador tens mais ou menos histórico, mas no geral quase todos estão disponíveis desde o início de 2026. Para a CM tens desde 1 Jan 2024. O formato de publicação desta informação é através de ficheiros GTFS, que é o standard internacional para comunicar informação planeada para uma rede de transportes. Consegues também fazer o download de um GTFS unificado para todos os operadores de transporte, que é essencialmente uma agregação dos planos de operação que estão ativos num determinado momento.

PathDescrição
/v1/plansHistórico de ficheiros GTFS (planos de operação) para todos os operadores. A propriedade operation_file_url permite fazer o download do ficheiro GTFS.zip correspondente.
/v1/plans/gtfsFicheiro GTFS unificado de todos os planos de operação ativos, para todos os operadores de transporte.
/v1/plans/gtfs/cmFicheiro GTFS unificado de todos os planos de operação ativos, para os operadores da Carris Metropolitana.

Rede de Transportes

Informação da rede de transportes em JSON. Muito útil para construir aplicações sem ser necessário um grande investimento em servidores ou código para o processamento de ficheiros GTFS. Estes endpoints são também utilizados nos suportes de informação ao público do navegante®.

PathDescrição
/v1/network/stopsTodas as paragens de todos os operadores. Este endpoint pode devolver paragens de zonas que não são da AML.
/v1/network/stops/:idDetalhe de uma paragem específica, com informação adicional.
/v1/network/stops.csvTodas as paragens no formato .csv (semelhante ao ficheiro stops.txt do GTFS).
/v1/network/linesTodas as linhas de todos os operadores em operação num determinado momento.
/v1/network/patterns/:idTodas as linhas de todos os operadores em operação num determinado momento.

Tempo Real

Informação em tempo real da rede de transportes, como posições de veículos e estimativas de chegada. O estimador de horários ainda está em fase experimental, pelo que deve ser utilizado com algum cuidado.

PathDescrição
/v1/realtime/vehicles/metadataMetadados da maior parte dos veículos em operação, como modelo, matrícula, lugares disponíveis, entre outros.
/v1/realtime/vehicles/positionsTodos os veículos de todos os operadores em operação num determinado momento, em JSON. Sugerimos uma atualização a cada 3 segundos para melhores resultados.
/v1/realtime/vehicles/positions/gtfsTodos os veículos de todos os operadores em operação num determinado momento, em JSON mas no formato standard GTFS-RT Vehicle Positions.
/v1/realtime/vehicles/positions/gtfs.pbTodos os veículos de todos os operadores em operação num determinado momento, em Protobuf e no formato standard GTFS-RT Vehicle Positions.
/v1/realtime/etaEstimativas de chegada a cada paragem, para todas as viagens em operação, em JSON.
/v1/realtime/eta/gtfsEstimativas de chegada a cada paragem, para todas as viagens em operação, em JSON mas no formato GTFS-RT Trip Updates. (StopTime Updates?)
/v1/realtime/eta/gtfs.pbEstimativas de chegada a cada paragem, para todas as viagens em operação, em Protobuf e no formato GTFS-RT Trip Updates. (StopTime Updates?)

Localizações

Listas de limites geográficos, como distritos, municípios, localidades, etc. úteis para situar administrativamente e de forma automática coordenadas geográficas. Os IDs de cada feature seguem a nomenclatura DICOFRE (Distrito, Concelho, Freguesia)

PathDescrição
/v1/locations/districtsTodos os distritos de Portugal.
/v1/locations/districts/:idDetalhe de um distrito específico, com informação geográfica.
/v1/locations/municipalitiesTodos os municípios de Portugal.
/v1/locations/municipalities/:idDetalhe de um município específico, com informação geográfica.
/v1/locations/parishesTodas as freguesias de Portugal.
/v1/locations/parishes/:idDetalhe de uma freguesia específica. com informação geográfica.
/v1/locations/localitiesTodas as localidades de Portugal, de acordo com agregação da BGRI.
/v1/locations/localities/:idDetalhe de uma localidade específica. com informação geográfica.

Debug

Endpoints para debugging do sistema. Uma vez que utilizamos estes endpoints nos suportes de informação ao público, como o site e app da Carris Metropolitana e app navegante®, é importante garantir que o sistema está online e a funcionar.

PathDescrição
/v1/debug/timeTimestamps internos dos sistema. Útil para despistar problemas de stale data causados por caching, por exemplo.

On this page