Documentation menu
transit
GET/v1/transit/vehicles
API key required, sent as Authorization: Bearer snk_… or ?api_key=snk_….
Call it
bash
curl -fsS -X GET "https://api.mapmap.ai/v1/transit/vehicles?bbox=…" \
-H "Authorization: Bearer $MAPMAP_KEY"Parameters
| Name | In | Required | Description |
|---|---|---|---|
| bbox | query | yes | Required. west,south,east,north in WGS84 degrees, covering at most 4 square degrees (for example 2 by 2 degrees). A box across the antimeridian is not supported |
| operator | query | no | Only this operator's vehicles: a National Operator Code such as TFLO (case-insensitive) |
| line | query | no | Only vehicles on this line, as riders see it, e.g. 88 (case-insensitive) |
| limit | query | no | Most features to return, 1 to 5000 (default 2000). Past it truncated is true and the features are spread evenly across the matches |
Responses
200GeoJSON FeatureCollection of live bus positions inside the box, with
feed (freshness: ok, stale past 180 s, or unknown), coverage and the OGL v3.0 attribution. A stale feed still returns its features: staleness is a field, never an error. Display only: no arrival, journey-time or delay prediction| Field | Type | Required | Description |
|---|---|---|---|
| attribution | string | yes | Licence attribution (OGL v3.0), to be shown with the data. |
| count | integer | yes | Features in this answer. |
| coverage | string | yes | What the feed covers and what it does not. |
| features | TransitVehicleFeature[] | yes | One Point feature per vehicle. |
| feed | TransitFeed | yes | How fresh the feed is. Read it before drawing positions as live. |
| generated_at | string | no | When the box built the snapshot this answer reads (RFC 3339).
null before the first snapshot exists. |
| matched | integer | yes | Vehicles inside the box that matched the filters, before limit. |
| recorded_at_max | string | no | The newest vehicle fix in that snapshot (RFC 3339). |
| truncated | boolean | yes | True when matched exceeded limit. The features returned are
then spread evenly across the matches (in longitude order), not the
westernmost limit of them. |
| type | string | yes | Always FeatureCollection. |
400
bbox missing, malformed, inverted or larger than 4 square degrees; or a malformed operator, line or limit. Not billed401Missing or invalid API key
429Quota or rate limit exceeded
501Live bus positions not enabled (
SN_TRANSIT_DIR unset). Not billedError bodies follow the shared problem model documented on API conventions.
Generated from https://api.mapmap.ai/openapi.json on 2026-10-12 · operationId get_transit_vehicles