Realtime/SL

List stops

Every stop id mentioned anywhere in the feed, named, with counts.

GET /api/stops

Union of the stops named by trip updates, alerts and vehicles — a mix of platform-level and station-level ids, because the two SL feeds reference stops at different levels. parentStation tells you which you are looking at: present means a platform, absent means a station (or an unmatched id).

Counts are per-id, so a station's alert count and its platforms' trip-update counts sit on different rows.

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/stops?limit=3
curl "$API_BASE/api/stops?limit=3"
200 · application/json
{
  "data": [
    {
      "stopId": "10316",
      "name": "Duvbo torg",
      "latitude": 59.370423,
      "longitude": 17.952471,
      "tripUpdates": 0,
      "vehicles": 0,
      "alerts": 1
    },
    {
      "stopId": "10317",
      "name": "Lötsjön",
      "latitude": 59.372476,
      "longitude": 17.963862,
      "tripUpdates": 0,
      "vehicles": 0,
      "alerts": 1
    },
    {
      "stopId": "10364",
      "name": "Överjärna kyrka",
      "latitude": 59.08912,
      "longitude": 17.565711,
      "tripUpdates": 0,
      "vehicles": 0,
      "alerts": 1
    }
  ],
  "meta": {
    "count": 3,
    "total": 7279,
    "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.