API for agents and developers
Everything on the site is also plain JSON, static and free to use under the ODbL with attribution ("Data: pickthebus.com, from official open timetables"). No key, no rate limit beyond fair use.
| Endpoint | Returns |
|---|---|
/api/v1/cities.json | Every city: id, name, country, coordinates, population, its main bus stops, nearby airports, its pickthetrain id |
/api/v1/routes.json | Every city pair with a direct bus across a border: buses a day (the busier direction), fastest minutes, whether a night bus runs, the operators |
/api/v1/from/{city}.json | Every direct destination abroad from one city, each with all its buses: dep/arr (local minutes after midnight; plus = days later), dur, op + opUrl, line, the stops, via, night, days and on (one character per day of the window from window.start: 1 = leaves that day). depOn/arrOn: times that differ on a date (the night the clocks change). |
/api/v1/live/{date}.json | Every international bus on the road that UTC day, for the live map: runs = [trip, start minute, then per stop: stop index, minutes to arrive, minutes stopped], stops in /api/v1/live/stops.json as [lon, lat] |
/api/v1/meta.json | When the timetables were last checked, the window they cover, the build date |
/api/v1/sources.json | Every timetable source: operator, what it covers, licence, the publisher's page and the date of each file the site uses |
City ids are lowercase slugs, the same as pickthetrain's where both have the city: zurich, new-york, frankfurt. Example: /api/v1/from/zurich.json. Human pages: /bus/{from}-to-{to}/ for the busier pairs (else /bus/?from=&to=) and /from/{city}/. See also llms.txt and intents.md.