🐝 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!
Datasets
Repositório no Github com coleções de dados interessantes e de utilização livre, como BDs georeferenciadas de escolas, hospitais, lojas navegante®, entre outros. As coleções são atualizadas de vez em quando, consoante a necessidade.
Text-to-Speech (TTS)
Este projeto tem como objetivo desambiguar, em texto, as abreviaturas mais comuns de toponímia e de pontos de interesse na área de Lisboa (e, de forma indireta, produzir o áudio falado). É o que alimenta os anúncios sonoros a bordo dos nossos autocarros.
Intermodal
Este ambicioso projeto open-source disponibiliza uma enorme quantidade de dados de alta qualidade, livres para explorar, sobre paragens de autocarro em Portugal. A base de dados de paragens da Carris Metropolitana é alimentada pelo Intermodal, garantindo que a espinha dorsal da nossa rede é precisa e fiável.
GTFShift
Explore and Analyse General Transit Feed Specification (GTFS) Files With a Focus on Urban Mobility
Horários LX
...
Discord Bot
Um bot do Discord que te avisa dos mais recentes Alertas de Serviço publicados pela Carris Metropolitana.
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.
| API | Version | Status | End of Life | Should I use it? |
|---|---|---|---|---|
| CM Schedules API | experimental | Discontinued | Late 2023 | ❌ |
| Carris Metropolitana API | v1 | Deprecated | Late 2026 | ❌ |
| Carris Metropolitana API | v2 | Active | - | ✅ |
| GO Hub API | v1 | Active | - | ⌛ |
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.
{
status: "success",
timestamp: 1721023200,
message: null,
data: [ ... ] or { ... } // The requested data
}{
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.
| Path | Descrição |
|---|---|
/v1/alerts | Todos os alertas de serviço publicados no GO, em JSON. |
/v1/alerts.rss | Todos os alertas de serviço publicados no GO, no formato RSS. |
/v1/alerts/gtfs | Todos os alertas de serviço publicados no GO, em JSON, mas no formato GTFS-RT Service Alerts. |
/v1/alerts/gtfs.pb | Todos 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.
| Path | Descrição |
|---|---|
/v1/plans | Histó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/gtfs | Ficheiro GTFS unificado de todos os planos de operação ativos, para todos os operadores de transporte. |
/v1/plans/gtfs/cm | Ficheiro 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®.
| Path | Descrição |
|---|---|
/v1/network/stops | Todas as paragens de todos os operadores. Este endpoint pode devolver paragens de zonas que não são da AML. |
/v1/network/stops/:id | Detalhe de uma paragem específica, com informação adicional. |
/v1/network/stops.csv | Todas as paragens no formato .csv (semelhante ao ficheiro stops.txt do GTFS). |
/v1/network/lines | Todas as linhas de todos os operadores em operação num determinado momento. |
/v1/network/patterns/:id | Todas 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.
| Path | Descrição |
|---|---|
/v1/realtime/vehicles/metadata | Metadados da maior parte dos veículos em operação, como modelo, matrícula, lugares disponíveis, entre outros. |
/v1/realtime/vehicles/positions | Todos 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/gtfs | Todos 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.pb | Todos 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/eta | Estimativas de chegada a cada paragem, para todas as viagens em operação, em JSON. |
/v1/realtime/eta/gtfs | Estimativas 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.pb | Estimativas 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)
| Path | Descrição |
|---|---|
/v1/locations/districts | Todos os distritos de Portugal. |
/v1/locations/districts/:id | Detalhe de um distrito específico, com informação geográfica. |
/v1/locations/municipalities | Todos os municípios de Portugal. |
/v1/locations/municipalities/:id | Detalhe de um município específico, com informação geográfica. |
/v1/locations/parishes | Todas as freguesias de Portugal. |
/v1/locations/parishes/:id | Detalhe de uma freguesia específica. com informação geográfica. |
/v1/locations/localities | Todas as localidades de Portugal, de acordo com agregação da BGRI. |
/v1/locations/localities/:id | Detalhe 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.
| Path | Descrição |
|---|---|
/v1/debug/time | Timestamps internos dos sistema. Útil para despistar problemas de stale data causados por caching, por exemplo. |
📍 Início
Neste sítio estão disponíveis guias, explicações e toda a documentação sobre os principais sistemas que suportam a operação de transportes públicos da TML, incluindo a Carris Metropolitana. É um trabalho em contínuo e com atualizações frequentes. Entra em contacto connosco para qualquer questão.
🗺️ Cobertura
Descobre que operadores e regiões estão disponíveis nos dados abertos.