Apple Maps API endpoint
Returns a transit stop or station's systems (e.g. BART, Muni Metro), lines (name, shield, color), and the upcoming departures Apple Maps shows, each with the line, headsign, direction, scheduled and live times, and real-time status. Takes the stop's Apple place ID (find stops with the search endpoint, e.g. a station name). A place that is not a transit stop returns 404.
/apple-maps/transit-departuresQuery parameters:
place_id (required) — the stop's Apple place ID, in the external I… form or the numeric id from /apple-maps/search (search for the station name, e.g. Powell St BART station).lang (optional) — display language as a BCP 47 tag, e.g. en-US. Defaults to en-US.country (optional) — two-letter ISO 3166-1 code, e.g. US. Defaults to US.A place that is not a transit stop returns a 404, as does an unknown id. Departures are the next departures at request time; ttl_seconds is how long Apple considers them fresh (typically 30). Outside service hours departures may be empty while lines is still populated.
status on a departure is Apple's real-time state: on_time, delayed, early, cancelled, or unknown. type on a line is Apple's numeric transit mode code (e.g. 400 subway/metro, 900 tram/light rail).
Response includes place (id, name), stop_name, systems[] (id, name), lines[] (id, name, shield, color as a hex RGB, system, type), departures[] (line_id, line, headsign, direction, origin, stop_id, scheduled, live, status), and ttl_seconds.
| Field | Filled in, of 131 checked | Values in the sample |
|---|---|---|
| line_id | 131 | |
| line | 131 | “J Church” and 13 other values |
| headsign | 131 | “Embarcadero Station” and 15 other values |
| direction | 72 | Eastbound (39), Westbound (33) |
| origin | 131 | Powell St in all 131 |
| stop_id | 131 | |
| scheduled | 131 | 2026-10-13 to 2026-10-17 |
| live | 71 | 2026-10-13 |
| status | 130 | on_time (61), scheduled (58), delays (11) |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| place_id | string | Yes | Apple place ID of a transit stop or station (external I... form or numeric id) | 5261664738367631956 | |
| lang | string | No | en-US | Display language as a BCP 47 tag, e.g. en-US. Defaults to en-US. | en-US |
| country | string | No | US | Two-letter ISO 3166-1 country code. Defaults to US. | US |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/apple-maps/transit-departures?place_id=5261664738367631956&lang=en&country=us" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"place": {
"id": "5261664738367631956",
"name": "Powell Street Station"
},
"stop_name": "Powell Street Station",
"systems": [
{
"id": "9062973006619269966",
"name": "Muni Metro"
},
{
"id": "17398764657373254141",
"name": "BART"
}
],
"lines": [
{
"id": "8826443973154773866",
"name": "J Church",
"shield": "J",
"color": "F9A533",
"system": "Muni Metro",
"type": 900
}
],
"departures": [
{
"line_id": "8826443973154773866",
"line": "J Church",
"headsign": "Embarcadero",
"direction": "Inbound",
"stop_id": "15726335230036528588",
"scheduled": "2026-09-06T00:02:35Z",
"live": "2026-09-06T00:04:25Z",
"status": "on_time"
}
],
"ttl_seconds": 30
}
}Request schema
No body schema
Response schema
#/definitions/applemaps.transitDeparturesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | applemaps.TransitDeparturesResponse | No | ||||
| data.departures | array | No | ||||
| data.departures[].direction | string | No | ||||
| data.departures[].headsign | string | No | ||||
| data.departures[].line | string | No | ||||
| data.departures[].line_id | string | No | ||||
| data.departures[].live | string | No | ||||
| data.departures[].origin | string | No | ||||
| data.departures[].scheduled | string | No | ||||
| data.departures[].status | string | No | ||||
| data.departures[].stop_id | string | No | ||||
| data.lines | array | No | ||||
| data.lines[].color | string | No | ||||
| data.lines[].id | string | No | ||||
| data.lines[].name | string | No | ||||
| data.lines[].shield | string | No | ||||
| data.lines[].system | string | No | ||||
| data.lines[].type | integer | No | ||||
| data.place | applemaps.PlaceRef | No | ||||
| data.place.id | string | No | ||||
| data.place.name | string | No | ||||
| data.stop_name | string | No | ||||
| data.systems | array | No | ||||
| data.systems[].id | string | No | ||||
| data.systems[].name | string | No | ||||
| data.ttl_seconds | integer | No | ||||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/apple-maps/transit-departures?place_id=5261664738367631956&lang=en&country=us" \
-H "x-api-key: $CRAWLORA_API_KEY"