Danmarks Adresseregister (DAR)

# Adressevalidering, før ordren gemmes

Tjek adressen, kunden har tastet, mod DAR i det øjeblik formularen sendes. Svaret er en kategori, der afgør, hvad formularen gør: godkend, spørg “mente du …?” eller afvis — og den korrekte adresse med sit DAR-id.

[Kom i gang gratis](https://grundfast.dk/dashboard?mode=register) [Se dokumentationen](https://grundfast.dk/docs/api/datavask)

Kaldene

- [GET /v1/datavask/adgangsadresser](https://grundfast.dk/docs/api/datavask)
- [GET /v1/adresser](https://grundfast.dk/docs/api/adresser)

GET /v1/demo/datavask/adgangsadresser

klar

Kategori B — spørg kunden

Mente du

Nørrebrogade 30, 2200 København N?

- husnr. rettet

lighed 0,939 — tæt på, men ikke sikkert nok til at gemme uden at spørge.

Samme svar i jeres backend — med jeres egen nøgle.

[Hent det som JSON — gratis nøgle](https://grundfast.dk/dashboard?mode=register)

Felterne sendes som én linje til samme vask som `/v1/datavask/adgangsadresser`. Hvad formularen gør ved A, B og C, er jeres regel — her: godkend A, spørg ved B og C, afvis ved `antal: 0`.

Hvad du får

## Tre spørgsmål besvaret i ét kald

Findes adressen? Hvad hedder den rigtigt? Og hvor sikre kan I være? En validering, der kun svarer ja eller nej, giver jer ikke noget at spørge kunden om.

1. ### Den rigtige stavemåde
betegnelse er adressen, som DAR har den: “aaboulevarden” bliver Åboulevarden, en manglende by kommer med, og husnummeret er DAR’s.
2. ### En kategori at handle på
A, B eller C — og `antal: 0` for intet match. Fire udfald, fire ting formularen kan gøre.
3. ### Et id i stedet for en tekst
Gem `adgangsadresse_id`. Så kan adressen slås op igen, sammenlignes uden stavefejl og følges, hvis vejen skifter navn.
4. ### Kommune og ejendom med
Kommunekode, koordinat og BFE-nummer i samme svar — til [kortet](https://grundfast.dk/geokodning-api), til fragtzonen eller til [bygningen bag adressen](https://grundfast.dk/bbr-api).

GET /v1/datavask/adgangsadresser?betegnelse=Nørrebrogade+300,+2200+København+N json

```
{
  "kategori": "B",
  "antal": 10,
  "resultater": [
    {
      "betegnelse": "Nørrebrogade 30, 2200 København N",
      "adgangsadresse_id": "0a3f507a-d063-32b8-e044-0003ba298018",
      "bfe_nummer": 6017781,
      "vejnavn": "Nørrebrogade",
      "husnr": "30",
      "postnr": "2200",
      "postnrnavn": "København N",
      "kommunekode": "0101",
      "koordinat": { "lon": 12.5589614, "lat": 55.6886772 },
      "lighed": 0.939
    },
    {
      "betegnelse": "Nørrebrogade 31, 2200 København N",
      "lighed": 0.882,
      "…": "…"
    }
  ]
}
```

Fire udfald

## Fra kategori til næste skridt i formularen

API’et siger, hvor godt teksten passer. Hvad formularen gør ved det, er jeres regel — her er den, de fleste ender med.

| Svar | Betyder | Formularen |
| --- | --- | --- |
| kategori A | Teksten ligner én adresse i DAR klart mere end alle andre. | Godkend. Gem adgangsadresse_id og DAR’s stavemåde i stedet for kundens. |
| kategori B | Sandsynligt match — men det kan være naboens nummer. | Spørg: “Mente du Nørrebrogade 30?” Gem først, når kunden har sagt ja. |
| kategori C, antal > 0 | Der er kandidater, men ingen skiller sig ud. | Vis de tre bedste, og lad kunden vælge eller rette. |
| antal: 0 | Intet i DAR ligner teksten nok til at være et forslag. | Afvis feltet og bed om en ny adresse. |

server.js javascript

```
// POST /api/valider-adresse — kaldes, når kunden trykker "Gå til betaling".
app.post('/api/valider-adresse', async (req, res) => {
  const { vej, postnr, by } = req.body;
  const url = new URL('https://api.grundfast.dk/v1/datavask/adgangsadresser');
  url.searchParams.set('betegnelse', `${vej}, ${postnr} ${by}`);

  const r = await fetch(url, {
    headers: { Authorization: `Bearer ${process.env.GRUNDFAST_API_KEY}` },
  });
  if (!r.ok) return res.json({ status: 'ukendt' }); // lad ordren gå videre, tjek senere
  const { kategori, antal, resultater } = await r.json();

  if (antal === 0) return res.json({ status: 'afvist' });
  const bedst = resultater[0];
  if (kategori === 'A') {
    return res.json({ status: 'ok', id: bedst.adgangsadresse_id, adresse: bedst.betegnelse });
  }
  // B og C: spørg kunden — "Mente du …?"
  res.json({ status: 'spoerg', forslag: resultater.slice(0, 3).map((k) => k.betegnelse) });
});
```

Kald API’et fra jeres backend, så nøglen aldrig ligger i browseren — og svar frontend med et udfald, ikke med rå kandidater.

Et B er ikke et ja. “Nørrebrogade 300” findes ikke, og den bedste kandidat, Nørrebrogade 30, har lighed 0,939 — tæt nok til at se rigtig ud, og forkert nok til at sende pakken til en anden dør.

Svarer API’et ikke, så lad ordren gå videre og tjek adressen bagefter. En validering bør aldrig være grunden til, at et køb fejler.

Præcist tjek

## Etage, dør og gemte adresser

Datavasken vurderer en tekst. Når adressen allerede ligger i felter, kan I spørge DAR direkte — og få et ja eller et tomt svar.

Felter og id bash

```
# Findes 2. th. i Vesterbrogade 10, 1620? Tomt svar = nej.
curl -H "Authorization: Bearer gf_live_…" \
  "https://api.grundfast.dk/v1/adresser?vejnavn=Vesterbrogade&husnr=10&postnr=1620&etage=2&doer=th"

# Er en gemt adresse stadig gældende? 404 = DAR har ingen gældende adresse med det id.
curl -H "Authorization: Bearer gf_live_…" \
  "https://api.grundfast.dk/v1/adresse/0a3f507a-d063-32b8-e044-0003ba298018"
```

- Etage og dør `/v1/adresser` filtrerer på vej, husnummer, postnummer, etage og dør. Findes lejligheden ikke, er listen tom.
- Gemte adresser `/v1/adresse/:uuid` giver adressen, som den er registreret i dag, og 404, hvis DAR ikke har en gældende adresse med det id.
- Store mængder Ligger adresserne allerede i et system, er det en liste — [datavask](https://grundfast.dk/datavask-api) tager dem i batch eller som en uploadet fil.

GET `/v1/datavask/adgangsadresser`

Fritekst → kandidater, kategori og lighed.

<https://grundfast.dk/docs/api/datavask>

GET `/v1/adresser`

Vej, husnummer, postnummer, etage og dør → enhedsadresser.

<https://grundfast.dk/docs/api/adresser>

GET `/v1/adresse/:uuid`

Ét DAR-id → adressen, som den er registreret nu.

<https://grundfast.dk/docs/api/adresse>

Hvem bruger det

## Adresser, der skal være rigtige første gang

En forkert adresse koster en returpakke, et forkert tilbud eller en police på den forkerte bygning.

- [Forsikringsselskaber, insurtech, taksatorer Forsikring og risiko Kend bygningen bag policen, før I tegner den](https://grundfast.dk/loesninger/forsikring)
- [Produktteams bag bolig-, forsikrings- og mæglerapps Proptech og boligplatforme Fang adressen rigtigt, og vis hele ejendommen i jeres produkt](https://grundfast.dk/loesninger/proptech)

Spørgsmål

## Ofte stillede spørgsmål

### Hvad er forskellen på adressevalidering og datavask?

Det er samme opslag i DAR, brugt to steder. Validering sker i øjeblikket, adressen tastes — én adresse, en kunde, der kan svare på “mente du …?”. Datavask er en liste, der allerede ligger i et CRM eller en import, hvor rækkerne vaskes i bulk og skrives tilbage uden nogen at spørge.

### Har vi brug for validering, når feltet har autocomplete?

Ja. Autocomplete forhindrer de fleste fejl, men ikke alle: browserens autoudfyld, en indsat adresse, en kunde, der skriver forbi forslagene, eller en ordre fra et andet system når aldrig forslagslisten. Valideringen er tjekket bagved, der fanger dem, før ordren gemmes.

### Kan I validere etage og dør?

Ja, med felterne hver for sig: `/v1/adresser?vejnavn=&husnr=&postnr=&etage=&doer=` svarer med enhedsadressen, hvis den findes i DAR, og med en tom liste, hvis den ikke gør. Datavasken arbejder på adgangsadressen — vej, husnummer og postnummer — og siger ikke noget om etage og dør.

### Hvad med adresser, vi allerede har gemt?

Slå det gemte DAR-id op med `/v1/adresse/:uuid`. Svaret er adressen, som den er registreret nu — også hvis vejen har skiftet navn — og 404, hvis DAR ikke længere har en gældende adresse med det id.

### Hvor lang tid tager et tjek?

Målt 6. oktober 2026 på serveren svarede datavasken på 469 ms i median, og 95 % af kaldene på under 1,44 s. Netværket til jer kommer oveni. Kald den, når formularen sendes — ikke ved hvert tastetryk; dér er autocomplete det rigtige.

### Hvad koster det at validere en adresse?

Ét tjek er ét kald. Free-planen har 5.000 kald om måneden, Starter 100.000, og kald ud over planen koster 1 kr. pr. 1.000 på de betalte planer. En `gf_test_`-nøgle giver 25.000 testkald om måneden, der aldrig faktureres.

Se også

- [Adressefelt i checkout Forslag, mens kunden skriver](https://grundfast.dk/adressefelt-i-checkout)
- [Datavask af kundelister Adresser, der allerede ligger i et system](https://grundfast.dk/datavask-api)
- [Adresse-autocomplete Forhindrer fejlen, før den tastes](https://grundfast.dk/adresse-autocomplete-api)
- [Geokodning-API Fra adressetekst til koordinat](https://grundfast.dk/geokodning-api)
- [Adgangsadresse vs. adresse Hvornår etage og dør skal med](https://grundfast.dk/begreber/adgangsadresse)

Adressevalidering

## Valider den første adresse i dag

Opret en gratis nøgle, og byg tjekket på en testnøgle, der aldrig faktureres.

[Kom i gang gratis](https://grundfast.dk/dashboard?mode=register) [Se dokumentationen](https://grundfast.dk/docs/api/datavask)

Gratis op til 5.000 kald/md · intet kreditkort · data fra Klimadatastyrelsen/Datafordeler, CC BY 4.0
