DAWA-nedlukningen

# DAWA er lukket — sådan får du adresserne tilbage på 5 minutter

DAWA lukkede **1. oktober 2026 kl. 10**, og kald til `api.dataforsyningen.dk` og `dawa.aws.dk` giver ikke længere adresser. Den hurtigste vej tilbage: opret en gratis nøgle, peg din base-URL på Grundfast og pak svaret ét niveau ud. For en server-side integration er det fem minutter.

1. 1 Opret en gratis nøgle 5.000 kald/md uden kort. Nøglen starter med `gf_live_`.
2. 2 Skift base-URL og send nøglen `https://api.grundfast.dk/v1` og `Authorization: Bearer …`
3. 3 Pak svaret ét niveau ud Listen ligger i fx `resultater`. Koordinater er WGS84.

[Kom i gang gratis](https://grundfast.dk/dashboard?mode=register) Se endpoint-tabellen

## Sådan ser det ud, når DAWA er væk

Siden lukningen svarer alle DAWA-stier på både `api.dataforsyningen.dk` og `dawa.aws.dk` med `410 Gone` og en kort JSON-fejl i stedet for listen eller adressen. Kode, der ikke tjekker statuskoden, fejler først der, hvor den læser svaret:

Svaret fra DAWA i dag (hentet 2. oktober 2026)

```
$ curl -i "https://api.dataforsyningen.dk/autocomplete?q=rådhus"

HTTP/2 410
content-type: application/json; charset=UTF-8
cache-control: max-age=86400

{
  "status": 410,
  "error": "Gone",
  "message": "The requested resource is no longer available and will not be available again."
}
```

- JavaScript / TypeScript (fetch) TypeError: forslag.map is not a function
- JavaScript (axios) AxiosError: Request failed with status code 410
- Python (requests) requests.exceptions.HTTPError: 410 Client Error: Gone for url: https://api.dataforsyningen.dk/…
- C# (HttpClient) HttpRequestException: Response status code does not indicate success: 410 (Gone).
- PHP file_get_contents(…): Failed to open stream: HTTP request failed! HTTP/1.1 410 Gone
- Et adressefelt i en formular Foreslår ingenting — ofte uden en synlig fejl, fordi widgetten sluger den.

## Rettelsen

Har koden ét sted, den kalder adresse-API’et fra, er transporten to linjer: den nye base-URL og din nøgle som bearer.

adresse-api.ts 2 linjer ændret +2 −2

```
 // adresse-api.ts — det ene sted, koden taler med adresse-API'et Fjernet:  const BASE = 'https://api.dataforsyningen.dk'; Tilføjet:  const BASE = 'https://api.grundfast.dk/v1';   export async function adresseApi<T>(path: string): Promise<T> { Fjernet:    const res = await fetch(BASE + path); Tilføjet:    const res = await fetch(BASE + path, { headers: { Authorization: `Bearer ${process.env.GRUNDFAST_API_KEY}` } });   if (!res.ok) throw new Error(`Adresse-API svarede ${res.status}`);   return res.json() as Promise<T>; }
```

Stien og `q` er de samme. Svaret er Grundfasts eget, så der, hvor du læser det, pakker du ét niveau ud:

adressefelt.ts 2 linjer ændret +2 −2

```
 // Forslag til et adressefelt — samme sti, samme q Fjernet:  const forslag = await adresseApi<DawaForslag[]>(`/autocomplete?q=${encodeURIComponent(q)}`); Fjernet:  return forslag.map((f) => f.tekst); Tilføjet:  const { resultater } = await adresseApi<Svar>(`/autocomplete?q=${encodeURIComponent(q)}`); Tilføjet:  return resultater.map((f) => f.tekst);
```

Kaldte du DAWA direkte fra browseren?

Så er det mere end en linje: DAWA var nøglefri, men en nøgle hører ikke hjemme i browseren. Læg et lille proxy-endpoint i din backend — [guiden til adressefeltet](https://grundfast.dk/adressefelt-i-checkout) har det færdigt.

Brugte du dawa-autocomplete2?

`/v1/autocomplete` svarer med `tekst` og `vaerdi`, ikke widgettens egen kontrakt. Feltet skal derfor tegne forslagene selv — samme guide viser hvordan.

## Prøv det mod den rigtige DAR — nu

Et opslag direkte mod produktion, uden nøgle. Det er det samme indeks, din integration rammer efter skiftet.

GET /v1/demo/adresse-search

Nøglefri demo over det samme DAR-indeks som `/v1/adresse/search`, begrænset til seks hits. Med en nøgle søger du hele registret.

Fra din backend

```
curl "https://api.grundfast.dk/v1/adresse/search?q=R%C3%A5dhuspladsen%201%2C%20K%C3%B8benhavn" \
  -H "Authorization: Bearer $GRUNDFAST_API_KEY"
```

results[0] — som din kode får det

```
…
```

## DAWA-endpoint → Grundfast-endpoint

**Samme sti** betyder samme sti og parametre under `/v1` — din URL-bygning overlever base-URL-skiftet. Svarets form står i noten under hver række, og det, vi ikke dækker, står nederst.

- Autocomplete Samme sti - `/autocomplete?q=&type=` - `/v1/autocomplete?q=&type=`
Samme q og type. type=adresse går trinvis fra vej over husnummer til enhed: adgangsadresser, så længe teksten passer på flere, derefter enhederne med etage og dør — hvert hit bærer sin egen type, og adgangsadresseid går direkte til enhederne på en valgt adresse. Svaret er { type, antal, resultater: [{ type, tekst, vaerdi }] } — ikke dawa-autocomplete2-widgettens forslagstekst/caretpos/data.
- Adressesøgning Samme sti - `/adgangsadresser/autocomplete?q=`
 - `/adresser/autocomplete?q=` - `/v1/adgangsadresser/autocomplete?q=`
 - `/v1/adresser/autocomplete?q=`
Samme form som /v1/autocomplete: { type, antal, resultater }. /adresser/autocomplete giver enheder med etage og dør og tager adgangsadresseid for at liste enhederne på én adresse. Vil du have bfe_nummer og koordinat i hvert hit, så brug /v1/adresse/search.
- Adgangsadresser Samme sti - `/adgangsadresser?postnr=&cirkel=&polygon=&srid=` - `/v1/adgangsadresser?postnr=&cirkel=&polygon=&srid=`
Filtrér på q, postnr, kommunekode, vejnavn og husnr, eller rumligt med cirkel=x,y,radius (højst 10.000 m) og polygon (højst 1.000 hjørner, kasse op til 0,3° × 0,5°). srid 4326 eller 25832 gælder både ind og ud, og format=geojson giver en FeatureCollection. Mindst ét forankrende filter er påkrævet. Svaret er { antal, side, per_side, srid, adgangsadresser } med koordinater i det valgte srid, sidevis med per_side og side.
- Adresser (etage og dør) Samme sti - `/adresser?postnr=&cirkel=&polygon=&srid=` - `/v1/adresser?postnr=&cirkel=&polygon=&srid=`
Enhedsadresser med etage og dør — samme filtre som adgangsadresserne plus adgangsadresseid, etage og doer. Hver enhed har sin egen adresse_id og adgangsadressens adgangsadresse_id; listen er sorteret vej, husnummer, etage, dør.
- Adresse på id Ny sti - `/adgangsadresser/{id}`
 - `/adresser/{id}` - `/v1/adresse/{uuid}`
Samme DAR-UUID som nøgle — både adgangsadresse- og adresse-UUID (med etage og dør).
- Reverse geocoding Samme sti - `/adgangsadresser/reverse?x=&y=&srid=` - `/v1/adgangsadresser/reverse?x=&y=&srid=`
x/y/srid som i DAWA (4326 eller 25832), alternativt lon/lat; med srid får hver adresse også koordinater i det system, og format=geojson giver en FeatureCollection. Svaret er { punkt, antal, adresser } sorteret efter afstand, med radius (standard 200 m) og per_side.
- Datavask Samme sti - `/datavask/adgangsadresser?betegnelse=` - `/v1/datavask/adgangsadresser?betegnelse=`
Samme kategori A/B/C. Kandidaterne i resultater er flade adressehits med en lighed-score i stedet for DAWA’s adresse/aktueladresse/vaskeresultat. Mange på én gang: POST …:batch (Pro og op).
- Postnumre Samme sti - `/postnumre`
 - `/postnumre/{nr}`
 - `/postnumre/autocomplete?q=` - `/v1/postnumre`
 - `/v1/postnumre/{nr}`
 - `/v1/postnumre/autocomplete?q=`
Listen kommer som { antal, total, postnumre } med nr og navn; bbox, visueltcenter og kommuner følger ikke med. stormodtagere=true virker som i DAWA.
- Vejnavne Samme sti - `/vejnavne`
 - `/vejnavne/autocomplete?q=` - `/v1/vejnavne`
 - `/v1/vejnavne/autocomplete?q=`
Navnene som rene strenge i { vejnavne }, filtrérbart på kommunekode, pagineret med per_side og side.
- Ejerlav Samme sti - `/ejerlav`
 - `/ejerlav/{kode}`
 - `/ejerlav/autocomplete?q=` - `/v1/ejerlav`
 - `/v1/ejerlav/{kode}`
 - `/v1/ejerlav/autocomplete?q=`
Liste, opslag på kode og autocomplete.
- Jordstykker Samme sti - `/jordstykker?ejerlavkode=&matrikelnr=`
 - `/jordstykker/reverse?x=&y=` - `/v1/jordstykker?ejerlavkode=&matrikelnr=`
 - `/v1/jordstykker/reverse?x=&y=`
Samme parametre. Svaret har BFE-nummeret med, så adressen er ét kald fra BBR og Matriklen.
- Kommuner, regioner m.fl. Ny sti - `/kommuner/{kode}`
 - `/regioner`
 - `/sogne`
 - `/retskredse`
 - `/politikredse` - `/v1/dagi/kommune/{kode}`
 - `/v1/dagi/{tema}`
Ét tema pr. sti, i ental: kommune, region, sogn, retskreds, politikreds, opstillingskreds. /v1/dagi/reverse giver alle inddelinger på ét punkt.
- Adresser på en ejendom Nyt — - `/v1/adgangsadresser/bfe/{bfe}`
Alle adgangsadresser på et BFE-nummer, også som format=geojson og med srid. Fandtes ikke i DAWA.
- Replikering og øvrige flader Ingen drop-in - `/replikering/*`
 - `/vejstykker`
 - `/navngivneveje`
 - `/bebyggelser` Ingen ækvivalent Ingen ækvivalent hos os. Skal du holde en lokal kopi af hele adresseregistret, er Datafordelers filudtræk af DAR den officielle vej.

## Oversæt din DAWA-kode

Indsæt modulet, der kaldte `api.dataforsyningen.dk` eller `dawa.aws.dk`. Hvert kald slås op i tabellen ovenfor og oversættes til vores sti. Hvor svaret nu bærer et BFE-nummer, står det ved kaldet — det er broen fra adressen til ejendommen, som DAWA aldrig havde. Kald uden en drop-in markeres, de gættes ikke. Oversættelsen kører i din browser.

Køres i din browser — koden sendes ingen steder.

5 DAWA-kald fundet 1 med BFE-nummer i svaret 1 uden drop-in

oversat til Grundfast 4 linjer ændret +4 −4

```
 // adresser.js — sådan så det ud før 1. oktober Fjernet:  const DAWA = 'https://api.dataforsyningen.dk'; Tilføjet:  const DAWA = 'https://api.grundfast.dk/v1';   export async function forslag(q) { Fjernet:    const res = await fetch(`https://api.dataforsyningen.dk/adgangsadresser/autocomplete?q=${encodeURIComponent(q)}`); Tilføjet:    const res = await fetch(`https://api.grundfast.dk/v1/adgangsadresser/autocomplete?q=${encodeURIComponent(q)}`);   return res.json(); }   Fjernet:  export const adresse = (id) => fetch(`${DAWA}/adgangsadresser/${id}`).then((r) => r.json()); Tilføjet:  export const adresse = (id) => fetch(`${DAWA}/adresse/${id}`).then((r) => r.json()); export const postnummer = (nr) => fetch(DAWA + '/postnumre/' + nr).then((r) => r.json()); Fjernet:  export const kommune = (kode) => fetch(DAWA + '/kommuner/' + kode).then((r) => r.json()); Tilføjet:  export const kommune = (kode) => fetch(DAWA + '/dagi/kommune/' + kode).then((r) => r.json());   // Natlig synkronisering export const haendelser = () => fetch(DAWA + '/replikering/haendelser?entitet=adgangsadresse');
```

1. Base-URL linje 2 `api.dataforsyningen.dk` bliver `api.grundfast.dk/v1` Base-URL’en peger nu på Grundfast; stierne, der bygges oven på den, står hver for sig herunder.
2. Samme sti linje 5 `/adgangsadresser/autocomplete?q=${encodeURIComponent(q)}` bliver `/v1/adgangsadresser/autocomplete?q=${encodeURIComponent(q)}` Samme form som /v1/autocomplete: { type, antal, resultater }. /adresser/autocomplete giver enheder med etage og dør og tager adgangsadresseid for at liste enhederne på én adresse. Vil du have bfe_nummer og koordinat i hvert hit, så brug /v1/adresse/search. Nyt: svaret bærer `bfe_nummer` — næste kald er`/v1/bbr/ejendom/{bfe}` for hele ejendommen.
3. Ny sti linje 9 `/adgangsadresser/${id}` bliver `/v1/adresse/${id}` Samme DAR-UUID som nøgle — både adgangsadresse- og adresse-UUID (med etage og dør).
4. Samme sti linje 10 `/postnumre/` bliver `/v1/postnumre/` Listen kommer som { antal, total, postnumre } med nr og navn; bbox, visueltcenter og kommuner følger ikke med. stormodtagere=true virker som i DAWA.
5. Ny sti linje 11 `/kommuner/` bliver `/v1/dagi/kommune/` Ét tema pr. sti, i ental: kommune, region, sogn, retskreds, politikreds, opstillingskreds. /v1/dagi/reverse giver alle inddelinger på ét punkt.
6. Ingen drop-in linje 14 `/replikering/haendelser?entitet=adgangsadresse` Ingen ækvivalent hos os. Skal du holde en lokal kopi af hele adresseregistret, er Datafordelers filudtræk af DAR den officielle vej.

Stierne er rettet; nøglen kan værktøjet ikke sætte ind for dig. Send `Authorization: Bearer <din nøgle>` med hvert kald — fra din backend, ikke fra browseren.

## Ofte stillede spørgsmål

### Hvorfor virker DAWA ikke længere?

Klimadatastyrelsen lukkede DAWA (Danmarks Adressers Web API) 1. oktober 2026 kl. 10 som led i overgangen til Datafordeleren. Kald til dawa.aws.dk og DAWA-stierne på api.dataforsyningen.dk svarer ikke længere med adressedata, og det er derfor, din integration fejler — ikke en fejl i din kode.

### Er det virkelig kun base-URL’en, der skal skiftes?

Transporten er to linjer: base-URL’en og en Authorization-header med din nøgle. De fleste DAWA-stier findes med samme navn og parametre under /v1 — se tabellen. Svaret er derimod Grundfasts eget: listen ligger ét niveau nede (fx resultater eller postnumre), og koordinater er altid WGS84. Det er typisk en linje eller to pr. sted, du læser svaret.

### Hvad koster det?

Gratisplanen dækker 5.000 kald om måneden og stopper ved loftet i stedet for at fakturere. En `gf_test_`-nøgle giver rigtige svar til udvikling og test og faktureres aldrig. Har du mere trafik end gratisplanen, vælger du en betalt plan på prissiden.

### Kan jeg kalde det direkte fra browseren, som jeg gjorde med DAWA?

Nej. DAWA var nøglefri, men en nøgle i browseren kan læses af enhver besøgende. Læg et lille proxy-endpoint i din backend, der sætter Authorization-headeren — guiden til adressefeltet viser det færdigt, med debounce og caching.

### Hvor kommer adresserne fra?

Fra Danmarks Adresseregister (DAR) via Datafordeleren — den samme kilde, DAWA byggede på. Grundfast holder et indeks over hele registret, oversætter og samler svaret og kobler hver adresse til sit BFE-nummer, så du også kan slå ejendommen op.

## Få adresserne tilbage nu

Opret en gratis nøgle, peg base-URL’en på `api.grundfast.dk/v1`, og send nøglen som bearer.

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

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

Se også

- [DAWA er lukket Datoen, hvad der lukkede, og kilderne](https://grundfast.dk/dawa-lukker-2026)
- [DAWA-alternativ Felt for felt, og hvad du får oveni](https://grundfast.dk/dawa-alternativ)
- [Adressefelt med backend-proxy Når DAWA blev kaldt fra browseren](https://grundfast.dk/adressefelt-i-checkout)
- [Datavask Afløseren for /datavask/adgangsadresser](https://grundfast.dk/datavask-api)
