We poll 113 GTFS-Realtime feeds from 105+ transit agencies every 30 seconds. Your agent gets normalized vehicle positions, service alerts, and arrival predictions. No API keys. Free tier or pay per query in USDC.
113
Active feeds
polled every 30s
372
Vehicles now
last 5 min window
6,358
Active alerts
last 24 hours
105
Agencies
GTFS-Realtime
Loading...
This is a live response from the API. Free, no auth required. 10 req/min.
Full catalog of transit feeds with agency, enabled state, and last-poll status.
Real-time positions of buses, trains, and ferries near a coordinate.
Service alerts and disruptions for any feed.
Arrival and departure predictions per stop.
Server-Sent Events stream of vehicle positions. Rate limited.
| Data | Price / query | Source |
|---|---|---|
| Vehicles, alerts, predictions | $0.001 USDC | Public GTFS-Realtime |
Network: Base mainnet (eip155:8453) · x402 protocol · no API keys, no signup.
# pip install x402[httpx,evm] eth-account from x402.http.clients import x402HttpxClient from x402 import x402Client from x402.mechanisms.evm import EthAccountSigner from x402.mechanisms.evm.exact.register import register_exact_evm_client from eth_account import Account account = Account.from_key("YOUR_PRIVATE_KEY") client = x402Client() register_exact_evm_client(client, EthAccountSigner(account)) async with x402HttpxClient(client) as http: # Vehicles near Boston: $0.001 r = await http.get("https://transit.motioninfo.com/api/vehicles?lat=42.35&lon=-71.08") # Service alerts for MBTA r = await http.get("https://transit.motioninfo.com/api/alerts?feed=mbta")
Or just curl it:
# Free tier, no auth needed
curl https://transit.motioninfo.com/api/feeds | jq '.feeds[:3]'