# Virksomhedsændringer (CVR)

`GET /v1/overvaagning/cvr/haendelser` · Overvågning

Oprettede, ændrede og ophørte virksomheder fra den ugentlige CVR-opdatering, for en liste CVR-numre eller en kommune.

Feedet er det samme, som `cvr.*`-webhooks leveres fra. Hver uge sammenlignes hele CVR med den kopi, Grundfast serverer, og det der flyttede sig på et felt vi udstiller (navn, status, ophørsdato, virksomhedsform, adresse, kommune og hovedbranche), skrives som en ændring i stigende `sekvens`-orden. Ændringer gemmes i 35 dage.

`cvr.ophoert` er overgangen fra aktiv til ophørt (status ophørt eller tvangsopløst, eller en ophørsdato der dukker op) — så en overvågning af en portefølje ikke kræver at slå alle firmaerne op hver nat. Angiv mindst én af `cvr_nummer` og `kommunekode`; en kommune matcher også virksomheder, der er flyttet ud af den.

Kopien genindlæses ugentligt, så en ændring dukker op op til ca. en uge efter, CVR registrerede den. `meta.feed` siger hvornår seneste opdatering lykkedes, og `forsinket` er `true` hvis den er udeblevet.

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

**Afregning:** Ikke målt.

## Parametre

| Navn | Placering | Type | Påkrævet | Beskrivelse |
| --- | --- | --- | --- | --- |
| `cvr_nummer` | query | string | nej | Op til 100 CVR-numre (8 cifre), kommaseparerede. |
| `kommunekode` | query | string | nej | Op til 10 kommunekoder, kommaseparerede. Tre cifre udfyldes med 0 foran. |
| `haendelse` | query | string | nej | Kun én slags ændring. |
| `efter` | query | integer | nej | Returnér kun ændringer med `sekvens` større end dette tal. |
| `antal` | query | integer | nej | Ændringer pr. side, 1-100. |

## Eksempel

```bash
curl "https://api.grundfast.dk/v1/overvaagning/cvr/haendelser?cvr_nummer=12345678&kommunekode=0101" \
  -H "Authorization: Bearer $GRUNDFAST_API_KEY"
```

## Svar (200)

```json
{
  "antal": 1,
  "haendelser": [
    {
      "sekvens": 9120,
      "haendelse": "cvr.ophoert",
      "cvr_nummer": 12345678,
      "navn": "Eksempel ApS",
      "kommunekode": "0101",
      "status": "ophørt",
      "aendrede_felter": ["status", "ophoersdato"],
      "foer": {
        "navn": "Eksempel ApS",
        "status": "aktiv",
        "ophoersdato": null,
        "virksomhedsform": "Anpartsselskab",
        "adresse": "Kalvebod Brygge 59, 1560 København V",
        "kommunekode": "0101",
        "kommune": "København",
        "branche": { "kode": "620100", "tekst": "Computerprogrammering" }
      },
      "efter": {
        "navn": "Eksempel ApS",
        "status": "ophørt",
        "ophoersdato": "2026-09-30",
        "virksomhedsform": "Anpartsselskab",
        "adresse": "Kalvebod Brygge 59, 1560 København V",
        "kommunekode": "0101",
        "kommune": "København",
        "branche": { "kode": "620100", "tekst": "Computerprogrammering" }
      },
      "cvr_udtraek": "CVR_20261003",
      "registreret": "2026-10-04T03:12:40.118Z"
    }
  ],
  "naeste_efter": 9120,
  "flere": false,
  "meta": {
    "kilde": "Det Centrale Virksomhedsregister (CVR) — ugentligt totaludtræk, via Grundfast",
    "grundfast_version": "1.0.0",
    "feed": {
      "daekket_fra": "2026-09-06T03:10:11.402Z",
      "senest_opdateret": "2026-10-04T03:14:02.551Z",
      "seneste_udtraek": "CVR_20261003",
      "opdateringsinterval_dage": 7,
      "opbevaring_dage": 35,
      "forsinket": false
    }
  }
}
```

## Vigtige felter

| Felt | Type | Betydning |
| --- | --- | --- |
| `haendelser[].sekvens` | integer | Globalt, stigende løbenummer. Brug det som markør og til at fjerne dubletter. |
| `haendelser[].aendrede_felter` | string[] | Hvilke af `navn`, `status`, `ophoersdato`, `virksomhedsform`, `adresse`, `kommunekode`, `kommune` og `branche` der ændrede sig. Tom for `cvr.oprettet`. |
| `haendelser[].foer` | object \| null | Virksomheden før ændringen; `null` for `cvr.oprettet`. |
| `haendelser[].efter` | object | Virksomheden efter ændringen. |
| `naeste_efter` | integer | Send som `efter` i næste kald, så du hverken springer over eller gentager. |
| `meta.feed.senest_opdateret` | string \| null | Seneste vellykkede ugentlige CVR-opdatering. Et tomt svar betyder kun "ingen ændringer" frem til dette tidspunkt. |

## Fejl

| Status | Betydning |
| --- | --- |
| 400 | Intet område angivet, et ugyldigt CVR-nummer eller en ugyldig kommunekode, eller for mange værdier. |
| 401 | Hverken en gyldig nøgle eller en session. |
| 402 | Planen er under Pro. |
| 403 | Nøglen er en admin-nøgle, eller kontoen er suspenderet. |
| 429 | Burst-grænsen pr. minut er nået. |
