# Følg ændringer live

`GET /v1/aendringer/stream` · Overvågning

De samme adresse- og bygningsændringer som ændringsfeedet, skubbet ud som Server-Sent Events for op til 100 adresser og ejendomme.

Strømmen sender hver ændring i dit udsnit, så snart Grundfast har registreret den — samme ændringer og samme form som [ændringsfeedet](https://grundfast.dk/docs/api/aendringer), uden at du skal polle. Følg op til 100 adgangsadresse-id’er og BFE-numre tilsammen, og/eller kommuner og postnumre. Et BFE-nummer følger både bygningsændringer på ejendommen og adresseændringer på de adresser, adresseindekset placerer på den.

Hændelserne: `klar` når forbindelsen er åben, `aendring` for hver ændring, en `: ping`-kommentar hvert 20. sekund, så ingen proxy lukker en stille forbindelse, og `rotation` før serveren lukker forbindelsen efter cirka 55 minutter eller ved en udrulning. Hver hændelses `id` er en cursor. `EventSource` genforbinder selv og sender det sidste id som `Last-Event-ID`, og strømmen fortsætter lige efter det — ingen ændring springes over eller sendes to gange.

Uden `Last-Event-ID` og `cursor` starter strømmen *nu*: du hører, hvad der sker fra du forbinder. Vil du have det, du gik glip af, mens du var væk, så gem sidste `id` og send det igen — eller hent det med [ændringsfeedet](https://grundfast.dk/docs/api/aendringer). Ændringerne lander i samme takt som i feedet: adresser fra DARs daglige udtræk, bygninger når en ny udgave af bygningsindekset er indlæst.

En konto kan have 5 strømme åbne ad gangen. Strømmen tager nøglen i `Authorization`-headeren — ikke som `?token=`, for en nøgle i en URL ender i logs og historik. `EventSource` i en browser kan ikke sende headeren, så forbind fra en server eller med [SDK’et](https://grundfast.dk/docs/sdk).

**Godkendelse:** API-nøgle eller dashboard-session · kræver Pro-planen

**Afregning:** Ikke målt.

## Parametre

| Navn | Placering | Type | Påkrævet | Beskrivelse |
| --- | --- | --- | --- | --- |
| `adgangsadresse_id` | query | string | nej | Adgangsadresse-id’er (UUID), kommaseparerede. |
| `bfe` | query | string | nej | BFE-numre, kommaseparerede. Højst 100 id’er og BFE-numre tilsammen. |
| `kommunekode` | query | string | nej | Op til 10 kommunekoder, kommaseparerede. |
| `postnr` | query | string | nej | Op til 50 postnumre, kommaseparerede. |
| `type` | query | string | nej | `adresse`, `bygning` eller begge, kommaseparerede. Standard er begge. |
| `siden` | query | string | nej | Start ved første ændring registreret fra dette tidspunkt (ISO 8601), når hverken `Last-Event-ID` eller `cursor` er givet. |
| `cursor` | query | string | nej | Start lige efter denne cursor — et `id` fra en tidligere hændelse. `Last-Event-ID`-headeren vinder over den. |

## Eksempel

```bash
curl -N "https://api.grundfast.dk/v1/aendringer/stream?adgangsadresse_id=0a3f507a-b2e6-32b8-e044-0003ba298018" \
  -H "Authorization: Bearer $GRUNDFAST_API_KEY"
```

## Svar (200)

```json
event: klar
id: eyJhIjo0ODIwOSwiYiI6MTIwMzN9
retry: 5000
data: {"cursor":"eyJhIjo0ODIwOSwiYiI6MTIwMzN9","ping_sekunder":20,"rotation_sekunder":3300,"filter":{"adgangsadresse_id":[],"bfe":[5651067],"kommunekode":[],"postnr":[],"type":[]}}

: ping 2026-10-12T09:44:51.397Z

event: aendring
id: eyJhIjo0ODIwOSwiYiI6MTIwMzR9
data: {"type":"bygning","id":"bygning:12034","haendelse":"bygning.aendret","registreret":"2026-10-12T09:44:37.200Z","kommunekode":"0740","postnr":"8600","bfe_nummer":5651067,"aendrede_felter":["samlet_areal"],"foer":{…},"efter":{…},"kilde":"2026-10-12T03:00:00.000Z"}

event: rotation
id: eyJhIjo0ODIwOSwiYiI6MTIwMzR9
data: {"cursor":"eyJhIjo0ODIwOSwiYiI6MTIwMzR9","grund":"rotation"}
```

## Vigtige felter

| Felt | Type | Betydning |
| --- | --- | --- |
| `event: klar` | event | Én gang ved forbindelse. `id` er startcursoren; `data` gentager filteret og `ping_sekunder` / `rotation_sekunder`. |
| `event: aendring` | event | Én pr. ændring. `data` er ændringen præcis som i `aendringer[]` fra [ændringsfeedet](https://grundfast.dk/docs/api/aendringer); `id` er cursoren lige efter den. |
| `event: rotation` | event | Serveren lukker forbindelsen (efter ca. 55 min. eller ved genstart). Genforbind med `Last-Event-ID` = dens `id`. |
| `: ping` | kommentar | Hvert 20. sekund. Ignoreres af `EventSource`. |
| `event: fejl` | event | En intern fejl midt i strømmen; serveren lukker forbindelsen bagefter. `data` er `{ error }`, `id` er cursoren. Genforbind med `Last-Event-ID` = dens `id` — intet går tabt. |

## Fejl

| Status | Betydning |
| --- | --- |
| 400 | Intet filter, mere end 100 id’er og BFE-numre, en ugyldig værdi, eller en cursor / `Last-Event-ID`, API’et ikke har udstedt. |
| 401 | Hverken en gyldig nøgle eller en session. |
| 402 | Planen er under Pro. |
| 403 | Nøglen har ikke overvågning som scope, er en offentlig nøgle eller en admin-nøgle, eller kontoen er suspenderet. |
| 429 | Kontoen har allerede 5 strømme åbne, serveren har ikke plads til flere strømme lige nu, eller burst-grænsen er nået. Se `Retry-After`. |
