List alerts
Service alerts, soonest-starting first, with an isActive flag.
/api/alerts Every alert returned carries isActive, computed against at (default: now). An alert with no activePeriods is always active.
Pass at when exploring. The data is a capture from 2026-04-27T11:22:38Z, so filtering against the wall clock answers a question about today, not about the feed — see It's a snapshot.
informedEntities is what the alert applies to: any mix of agency, route, stop, trip and route type. A single alert commonly names several. Filtering by routeId or stopId matches if *any* selector matches.
Try it
Runs from your browser against the API in .
Query
Run this in your terminal
curl equivalent
Parameters
Query
| Parameter | Type | Default | Description |
|---|---|---|---|
routeId | string | — | Keeps alerts naming this route in any selector. |
stopId | string | — | Keeps alerts naming this stop. Alerts reference station ids ( |
agencyId | string | — | Keeps alerts naming this agency. |
cause | enum | — | Why. Defaults to
Genuinely populated here: 84 |
effect | enum | — | What it does to service. Defaults to
Only |
severity | enum | — | How bad. Has no spec default, so it is absent when unset.
Matches nothing in this capture. None of the 177 alerts carries a severity, and unlike |
active | boolean | — | Keeps only alerts active (or inactive) at Against the wall clock this returns roughly 40 of 177 — only the long-running alerts whose periods happen to still span today. That is a misleading subset, not a live view. Pair it with |
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. |
limit | integer | 50 | Page size, 1–1000. Values outside that range are a 400 rather than a silent clamp. |
offset | integer | 0 | Rows to skip. Compare against |
Response
Each item gains an isActive boolean that is not part of the stored alert.
curl "$API_BASE/api/alerts?at=2026-04-27T11:22:38Z&limit=2" {
"data": [
{
"id": "sl-service-alerts.pb:14050001655131049",
"activePeriods": [
{
"start": {
"epoch": 1704264355,
"iso": "2024-01-03T06:45:55.000Z"
},
"end": {
"epoch": 1798756200,
"iso": "2026-12-31T22:30:00.000Z"
}
}
],
"informedEntities": [
{
"routeId": "9011001081900000",
"route": {
"routeId": "9011001081900000",
"agencyId": "505000000000000001",
"shortName": "819",
"type": 700
},
"stopId": "10741",
"stop": {
"stopId": "10741",
"name": "Södergården",
"latitude": 59.219074,
"longitude": 18.209736,
"locationType": 1
}
},
{
"routeId": "9011001082400000",
"route": {
"routeId": "9011001082400000",
"agencyId": "505000000000000001",
"shortName": "824",
"type": 700
},
"stopId": "10741",
"stop": {
"stopId": "10741",
"name": "Södergården",
"latitude": 59.219074,
"longitude": 18.209736,
"locationType": 1
}
},
{
"routeId": "9011001082300000",
"route": {
"routeId": "9011001082300000",
"agencyId": "505000000000000001",
"shortName": "823",
"type": 700
},
"stopId": "10741",
"stop": {
"stopId": "10741",
"name": "Södergården",
"latitude": 59.219074,
"longitude": 18.209736,
"locationType": 1
}
}
],
"cause": "OTHER_CAUSE",
"effect": "UNKNOWN_EFFECT",
"headerText": {
"text": "Indragna hållplatser",
"translations": [
{
"text": "Indragna hållplatser"
}
]
},
"descriptionText": {
"text": "Buss linje 819, 823 och 824 stannar inte vid Södergården från och med 2023-12-09 på grund av kommande vägarbete. Resenärer hänvisas till hållplats Kumla skola. Detta gäller i båda riktningar och beräknas pågå till och med 2026.",
"translations": [
{
"text": "Buss linje 819, 823 och 824 stannar inte vid Södergården från och med 2023-12-09 på grund av kommande vägarbete. Resenärer hänvisas till hållplats Kumla skola. Detta gäller i båda riktningar och beräknas pågå till och med 2026."
}
]
},
"isActive": true
},
{
"id": "sl-service-alerts.pb:14050001800799847",
"activePeriods": [
{
"start": {
"epoch": 1743746928,
"iso": "2025-04-04T06:08:48.000Z"
},
"end": {
"epoch": 1817157543,
"iso": "2027-08-01T21:59:03.000Z"
}
}
],
"informedEntities": [
{
"stopId": "9022050009805001",
"stop": {
"stopId": "9022050009805001",
"name": "Himlabacken",
"latitude": 59.376235,
"longitude": 18.048877,
"locationType": 0,
"parentStation": "9805",
"platformCode": "1"
}
},
{
"stopId": "9022050009805001",
"stop": {
"stopId": "9022050009805001",
"name": "Himlabacken",
"latitude": 59.376235,
"longitude": 18.048877,
"locationType": 0,
"parentStation": "9805",
"platformCode": "1"
}
}
],
"cause": "CONSTRUCTION",
"effect": "UNKNOWN_EFFECT",
"headerText": {
"text": "Hållplats Himlabacken flyttad",
"translations": [
{
"text": "Hållplats Himlabacken flyttad"
}
]
},
"descriptionText": {
"text": "Hållplats Himlabacken är flyttad 90 meter Ulriksdal i färdriktningen för buss linje 503 mot (Ulriksdals begravnpl-) Ulriksdals st-Ö Bergshamra och 503 mot Ö Bergshamra-Ulriksdals stn-(Ulriksdals begravnpl) från och med 2025-04-01 pga vägarbete.\nDetta planeras pågå till och med 2027-08-01.",
"translations": [
{
"text": "Hållplats Himlabacken är flyttad 90 meter Ulriksdal i färdriktningen för buss linje 503 mot (Ulriksdals begravnpl-) Ulriksdals st-Ö Bergshamra och 503 mot Ö Bergshamra-Ulriksdals stn-(Ulriksdals begravnpl) från och med 2025-04-01 pga vägarbete.\nDetta planeras pågå till och med 2027-08-01."
}
]
},
"isActive": true
}
],
"meta": {
"count": 2,
"total": 177,
"limit": 2,
"offset": 0,
"feedTimestamp": "2026-04-27T11:22:38.000Z",
"loadedAt": "2026-08-07T12:01:42.748Z"
}
} Errors
{ "error": "request_failed", … } An enum filter got an unknown value, `active` was not boolean-ish, or `at` parsed as neither epoch seconds nor ISO 8601.