Hub API v1

Veículos

Consulta os metadados e as posições em tempo real dos veículos de uma organização.

O Hub disponibiliza os metadados de veículos e as posições publicadas pelos operadores de uma organização.

Metadados

O tipo HubV1ApiVehicleMetadata contém:

PropriedadeTipoDescrição
_idStringID único do registo.
agency_idStringID do operador.
vehicle_idStringID do veículo no operador.
license_plateStringMatrícula.
makeStringMarca.
modelStringModelo.
available_seatsNonNegativeInteger (Integer) ou nullNúmero de lugares disponíveis indicado nos metadados.
contactlessBooleanDisponibilidade de pagamento sem contacto.
wheelchairBooleanDisponibilidade de acessibilidade para cadeira de rodas.
propulsionString ou nullTipo de propulsão, segundo VehiclePropulsion.
registration_dateOperationalDateInt (Integer) ou nullData de matrícula no formato AAAAMMDD.
vehicle_typeString ou nullTipo de veículo, segundo VehicleType.
export const HubV1ApiVehicleMetadataSchema = z.object({
	_id: z.string(),
	agency_id: z.string(),
	available_seats: NonNegativeIntegerSchema.nullable().default(null),
	contactless: z.boolean().default(false),
	license_plate: z.string(),
	make: z.string(),
	model: z.string(),
	propulsion: VehiclePropulsionSchema.nullable().default(null),
	registration_date: OperationalDateIntSchema.nullable().default(null),
	vehicle_id: z.string(),
	vehicle_type: VehicleTypeSchema.nullable().default(null),
	wheelchair: z.boolean().default(false),
});

Os valores permitidos para propulsion são gasoline, diesel, lpg_auto, mixture, biodiesel, electricity, hybrid e natural_gas. vehicle_type pode ser tram, subway, rail, bus, ferry, cable_tram, cable car, funicular, trolleybus ou monorail.

Posições

O tipo HubV1ApiVehiclePosition contém:

PropriedadeTipoDescrição
_idStringID único da posição.
agency_idStringID do operador.
vehicle_idStringID do veículo no operador.
trip_idStringID da viagem.
latitudeNumberLatitude da posição.
longitudeNumberLongitude da posição.
created_atUnixMilliseconds (Integer)Timestamp de criação da posição.
received_atUnixMilliseconds (Integer)Timestamp de receção da posição.
calendar_dateStringData de calendário, no formato AAAA-MM-DD.
operational_dateOperationalDateInt (Integer)Data operacional, no formato AAAAMMDD.
bearingDegrees (Number) ou nullOrientação em graus.
bearing_methodStringmeasured, inferred, kept_prev_value ou skipped.
current_statusGtfsRtVehicleStopStatus (String) ou nullEstado GTFS-RT: INCOMING_AT, STOPPED_AT ou IN_TRANSIT_TO.
direction_idGtfsTripDirection (String) ou nullSentido GTFS: "0" ou "1".
speedNonNegativeInteger (Integer) ou nullVelocidade reportada.
geohashString ou nullGeohash da posição.
license_plateString ou nullMatrícula.
ride_idString ou nullID da circulação.
route_idString ou nullID da rota.
route_short_nameString ou nullNome curto da rota.
pattern_idString ou nullID do percurso.
shape_idString ou nullID da geometria do percurso.
stop_idString ou nullID da paragem associada à posição.
export const HubV1ApiVehiclePositionSchema = z.object({
	_id: z.string(),
	agency_id: z.string(),
	bearing: DegreesSchema.nullable().default(null),
	bearing_method: z.enum(['measured', 'inferred', 'kept_prev_value', 'skipped']).default('skipped'),
	calendar_date: CalendarDateSchema,
	created_at: UnixMillisecondsSchema,
	current_status: GtfsRtVehicleStopStatusSchema.nullable().default(null),
	direction_id: GtfsTripDirectionSchema.nullable().default(null),
	geohash: z.string().nullable().default(null),
	latitude: LatitudeSchema,
	license_plate: z.string().nullable().default(null),
	longitude: LongitudeSchema,
	operational_date: OperationalDateIntSchema,
	pattern_id: z.string().nullable().default(null),
	received_at: UnixMillisecondsSchema,
	ride_id: z.string().nullable().default(null),
	route_id: z.string().nullable().default(null),
	route_short_name: z.string().nullable().default(null),
	shape_id: z.string().nullable().default(null),
	speed: NonNegativeIntegerSchema.nullable().default(null),
	stop_id: z.string().nullable().default(null),
	trip_id: z.string(),
	vehicle_id: z.string(),
});

Endpoints disponíveis

Base path: https://go.tmlmobilidade.pt/hub/api

MétodoPathTipo de resposta
GET/v1/:organizationId/vehicles/metadataHubV1ApiVehicleMetadata[] em data.
GET/v1/:organizationId/vehicles/positionsHubV1ApiVehiclePosition[] em data.
GET/v1/:organizationId/vehicles/positions/gtfsFeed GTFS-RT VehiclePositions em data.
GET/v1/:organizationId/vehicles/positions/gtfs.pbFeed GTFS-RT VehiclePositions em Protobuf.

Os feeds GTFS-RT JSON usam FeedMessage: header contém gtfs_realtime_version, feed_version (String ou null, opcional), incrementality (FULL_DATASET) e timestamp (UnixSeconds); entity contém entidades com id e vehicle. O endpoint .pb devolve a mesma estrutura em Protobuf.

Obtém :organizationId na lista de organizações. As respostas de sucesso usam HTTP 200 e cache pública de 3 segundos. As respostas JSON usam o formato comum do Hub; o Protobuf é devolvido diretamente com Content-Type: application/octet-stream.

Sem dados publicados, as listas de metadados e posições devolvem data: []. Uma organização inexistente ou sem dados abertos devolve HTTP 404. Os feeds GTFS-RT seguem as regras de combinação por organização.

On this page