Get route
Everything the feed says about one route, in a single response.
/api/routes/:routeId A composite: vehicles, trip updates and alerts for the route, together. Saves three round trips when building a route view.
limit caps each of the three collections independently — limit=10 can return 30 objects. counts always reports the untruncated totals.
Try it
Runs from your browser against the API in .
Path
Query
Run this in your terminal
curl equivalent
Parameters
Path
| Parameter | Type | Default | Description |
|---|---|---|---|
routeIdrequiredpath | string | — | GTFS route id. |
Query
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 50 | Caps each of |
at | timestamp | now | The instant to evaluate |
lang | string | — | Language tag used to pick among an alert's translations. Matches an exact tag first ( Inert in this capture. None of the 177 alerts tag their translations with a language, so every request falls through to the untagged translation regardless of what you pass. |
Response
Not the list envelope: data is a single object holding three arrays, and meta carries only limit, feedTimestamp and loadedAt — no count, total or offset, because there are three collections and one meta.
curl "$API_BASE/api/routes/9011001087500000?limit=1" {
"data": {
"routeId": "9011001087500000",
"counts": {
"vehicles": 5,
"tripUpdates": 5,
"alerts": 2
},
"vehicles": [
{
"id": "9031001001501640",
"vehicle": {
"id": "9031001001501640"
},
"trip": {
"tripId": "14010000703221328",
"routeId": "9011001087500000",
"directionId": 0,
"scheduleRelationship": "SCHEDULED",
"routeIdSource": "static",
"route": {
"routeId": "9011001087500000",
"agencyId": "505000000000000001",
"shortName": "875",
"type": 700
}
},
"position": {
"latitude": 59.249111,
"longitude": 18.174082,
"bearing": 315,
"speed": 23.299999
},
"currentStatus": "IN_TRANSIT_TO",
"timestamp": {
"epoch": 1777288957,
"iso": "2026-04-27T11:22:37.000Z"
}
}
],
"tripUpdates": [
{
"id": "14010000710000247",
"trip": {
"tripId": "14010000710000247",
"routeId": "9011001087500000",
"directionId": 1,
"startDate": "20260427",
"scheduleRelationship": "SCHEDULED",
"routeIdSource": "static",
"route": {
"routeId": "9011001087500000",
"agencyId": "505000000000000001",
"shortName": "875",
"type": 700
}
},
"vehicle": {
"id": "9031001001501595"
},
"timestamp": {
"epoch": 1777288916,
"iso": "2026-04-27T11:21:56.000Z"
},
"stopTimeUpdates": [
{
"stopSequence": 6,
"stopId": "9022050000778004",
"stop": {
"stopId": "9022050000778004",
"name": "Tyresö centrum",
"latitude": 59.245505,
"longitude": 18.230545,
"locationType": 0,
"parentStation": "778",
"platformCode": "G"
},
"arrival": {
"delay": 9,
"time": {
"epoch": 1777288329,
"iso": "2026-04-27T11:12:09.000Z"
},
"uncertainty": 0
},
"departure": {
"delay": 100,
"time": {
"epoch": 1777288420,
"iso": "2026-04-27T11:13:40.000Z"
},
"uncertainty": 0
},
"scheduleRelationship": "SCHEDULED"
},
{
"stopSequence": 7,
"stopId": "9022050010412001",
"stop": {
"stopId": "9022050010412001",
"name": "Sikvägen",
"latitude": 59.247937,
"longitude": 18.231077,
"locationType": 0,
"parentStation": "10412",
"platformCode": "1"
},
"arrival": {
"delay": 76,
"time": {
"epoch": 1777288460,
"iso": "2026-04-27T11:14:20.000Z"
},
"uncertainty": 0
},
"departure": {
"delay": 128,
"time": {
"epoch": 1777288512,
"iso": "2026-04-27T11:15:12.000Z"
},
"uncertainty": 0
},
"scheduleRelationship": "SCHEDULED"
}
]
}
],
"alerts": [
{
"id": "sl-service-alerts.pb:14050001915652028",
"activePeriods": [
{
"start": {
"epoch": 1773631140,
"iso": "2026-03-16T03:19:00.000Z"
},
"end": {
"epoch": 1798729920,
"iso": "2026-12-31T15:12:00.000Z"
}
}
],
"informedEntities": [
{
"routeId": "9011001087300000",
"route": {
"routeId": "9011001087300000",
"agencyId": "505000000000000001",
"shortName": "873",
"type": 700
},
"stopId": "9022050000778008",
"stop": {
"stopId": "9022050000778008",
"name": "Tyresö centrum",
"latitude": 59.243172,
"longitude": 18.226977,
"locationType": 0,
"parentStation": "778",
"platformCode": "H"
}
},
{
"routeId": "9011001087500000",
"route": {
"routeId": "9011001087500000",
"agencyId": "505000000000000001",
"shortName": "875",
"type": 700
},
"stopId": "9022050000778008",
"stop": {
"stopId": "9022050000778008",
"name": "Tyresö centrum",
"latitude": 59.243172,
"longitude": 18.226977,
"locationType": 0,
"parentStation": "778",
"platformCode": "H"
}
}
],
"cause": "CONSTRUCTION",
"effect": "UNKNOWN_EFFECT",
"headerText": {
"text": "Nytt hållplatsläge",
"translations": [
{
"text": "Nytt hållplatsläge"
}
]
},
"descriptionText": {
"text": "Linje 873, 875 och 890 från hållplatsläge H flyttas till Bollmoravägen södra. Se anslag.",
"translations": [
{
"text": "Linje 873, 875 och 890 från hållplatsläge H flyttas till Bollmoravägen södra. Se anslag."
}
]
},
"isActive": true
}
]
},
"meta": {
"limit": 1,
"feedTimestamp": "2026-04-27T11:22:38.000Z",
"loadedAt": "2026-08-07T12:01:42.748Z"
}
} Errors
{ "error": "request_failed", … } That route id appears nowhere in the feed.