TransitAI Core

Regional Data Exchange

What the region holds.

Contracts, APIs, semantics, policy, identity and audit. Not a regional lake, and never a raw copy of anyone's operations.

Contracts
Versioned shapes every party publishes to: GTFS for the plan, GTFS-Realtime for now, TIDES for what happened; GBFS and MDS for the mobility providers. Every field carries a classification.
Semantics
Shared identifiers so a stop, a zone, a mode and a moment mean the same thing to every party. Where vendors disagree, the adapter maps; the region does not guess.
APIs and events
Request/response for history and reference data; events for positions, disruptions and alerts. One policy enforcement point. Parties never call each other directly.
Policy
Data-sharing agreements written as policy: who, which contract, which fields, for what purpose, for how long. Restricted fields cross only aggregated or pseudonymised.
Identity
Each party keeps its own identity provider. The region trusts them through federation and short-lived roles; services use mutual TLS.
Audit
An immutable, cross-party record of every access and every contract change, plus one incident playbook with a named responder per party.

Why semantics is its own box.

From the sample data: one agency, four files, and the keys do not line up.

The AVL and APC files share a TRIP_ID (for example 3451682), but that number does not appear in the GTFS trips.txt from the same month. The board period 24AU05 turns up inside GTFS service_id values instead, and the AVL stop number matches the GTFS stop_code, not stop_id.

Within one agency that is a known quirk. Across seven parties it is the whole problem. The contract has to say which identifier is the identifier, and the adapter has to produce it.

↑ ↓ to move · ↵ to open · esc to close