Realtime/SL

List routes

Routes present in the feed, named, with per-route entity counts.

GET /api/routes

Routes are not entities in GTFS-realtime — this list is derived from the route_id values appearing on vehicles, trip updates and alert selectors. So it is the routes currently in the feed, not SL's route catalogue: 369 here, against 7,880 in the static archive.

Names come from the static join and are omitted, not guessed, when there is no match.

Try it

Runs from your browser against the API in .

Query

GET
curl equivalent
 

Parameters

Query

ParameterTypeDefaultDescription
limitinteger50

Page size, 1–1000. Values outside that range are a 400 rather than a silent clamp.

offsetinteger0

Rows to skip. Compare against meta.total to know when you have them all.

Response

The standard list envelope: data plus meta with count, total, limit, offset, feedTimestamp and loadedAt.

GET /api/routes?limit=3
curl "$API_BASE/api/routes?limit=3"
200 · application/json
{
  "data": [
    {
      "routeId": "9011001000100000",
      "shortName": "1",
      "type": 700,
      "agencyId": "505000000000000001",
      "vehicles": 11,
      "tripUpdates": 11,
      "alerts": 0
    },
    {
      "routeId": "9011001000200000",
      "shortName": "2",
      "type": 700,
      "agencyId": "505000000000000001",
      "vehicles": 9,
      "tripUpdates": 8,
      "alerts": 0
    },
    {
      "routeId": "9011001000300000",
      "shortName": "3",
      "type": 700,
      "agencyId": "505000000000000001",
      "vehicles": 11,
      "tripUpdates": 10,
      "alerts": 0
    }
  ],
  "meta": {
    "count": 3,
    "total": 369,
    "limit": 3,
    "offset": 0,
    "feedTimestamp": "2026-04-27T11:22:38.000Z",
    "loadedAt": "2026-08-07T12:01:42.748Z"
  }
}

Errors

400
{ "error": "request_failed", … }

`limit` or `offset` out of range.