BART
DATA · DATA & ANALYTICS
Service advisories, real-time departures, routes, and trip plans across BART.
Connecting BART in practice
BART publishes a working API key on its own developer page, MW9S-E7SL-26DU-VV8V, and notes in the same breath that it can be refreshed — so an integration built on the documented key breaks whenever BART rotates it. No rate limit, polling interval or caching rule is published anywhere, including in the Developer License Agreement; the entire stated policy is "don’t hog community resources".
Rate limits
- None published. BART’s developer page says only "Just follow our short and simple License Agreement, give our customers good information and don’t hog community resources", and the Developer License Agreement contains no polling-frequency, caching or excessive-use clause.
- The GTFS-realtime feeds require no key and no registration at all.
Worth knowing
- BART calls its own legacy API superseded and points at GTFS and GTFS-RT instead — "For more up-to-date, supported standards, check out our GTFS and GTFS-RT feeds" — but publishes no deprecation date, so it is discouraged rather than scheduled for removal.
- Real-time trip identifiers do not join to the schedule: "The trip_id values generated by the BART to Antioch system are not coordinated with the trip_id values generated by the BART schedule system."
- The real-time feed has a coverage hole the schedule does not: "The Oakland Airport Connector system does not publish real time arrival data."
- The GTFS-realtime feed URLs are published over plain http, and BART "reserves the right to alter and/or no longer provide Data at any time without prior notice" with no support commitment — "if we help you, it’s only fair that we help everyone else, too. We simply don’t have the resources for that."
Checked against BART legacy API overview (2026-09-29), BART developer API page (2026-09-29), BART GTFS-realtime (2026-09-29), Developer License Agreement (2026-09-29)
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
Often connected alongside
Put BART behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.