# Vask adresser i n8n med HTTP Request-noden

> Opsæt HTTP Request-noden i n8n med Header Auth, batching og genforsøg, map felterne fra datavask, og importer et færdigt workflow.
>
> https://danadresse.dk/guides/n8n · verified 2026-11-02
n8n har ikke brug for en særlig node til Danadresse. **HTTP Request**-noden kalder API'et, og JSON-svaret kommer ud som felter, du kan bruge i de næste noder. Den korte opskrift står på [/integrationer/n8n](/integrationer/n8n). Denne guide tilføjer feltmapping, batching mod minutgrænsen, fejlhåndtering og et workflow, du kan importere.

## 1. Gem nøglen som credential

Gå til **Credentials → Add credential → Header Auth**. Sæt *Name* til `X-Api-Key` og *Value* til din nøgle, og kald credentialen `Danadresse`. Så står nøglen krypteret i n8n og ikke i klar tekst i workflowet.

## 2. Opsæt HTTP Request-noden

| Indstilling | Værdi |
|---|---|
| Method | `GET` |
| URL | `https://api.danadresse.dk/datavask/adgangsadresser` |
| Authentication | Generic Credential Type → Header Auth → `Danadresse` |
| Send Query Parameters | Til, Name `betegnelse`, Value `{{ $json.adresse }}` |
| Options → Batching | Items per Batch `1`, Batch Interval `1000` ms |
| Options → Response | *Include Response Headers and Status* til |

Batching gør, at n8n sender ét kald i sekundet i stedet for alle på én gang. Uden det kan en lang liste ramme minutgrænsen på få sekunder. På gratisplanen er grænsen 360 kald i minuttet, så sæt intervallet efter din plan.

Med *Include Response Headers and Status* ligger svaret under `body`, og du får `statusCode` og `headers` med.

`/datavask/adgangsadresser` matcher opgangen (vej, husnummer, postnummer). Skal du ramme en bestemt lejlighed, så brug `/datavask/adresser`: den læser etage og dør direkte fra `betegnelse` (`Strandvejen 100, 2. tv, 2900 Hellerup`), og `adresse` har så også `etage`, `dør` og `adgangsadresseid`. Separate query-parametre (`vejnavn`, `husnr`, `etage`, `dør`, `postnr`) virker også.

## 3. Map felterne

n8n-udtryk er JavaScript, og lister tælles fra 0. `?.` gør, at udtrykket giver tomt i stedet for en fejl, når der ikke er nogen kandidat.

| Du skal bruge | Udtryk |
|---|---|
| Kategori | `{{ $json.body.kategori }}` |
| Adgangsadressens id | `{{ $json.body.resultater[0]?.adresse.id }}` |
| Vej og husnummer | `{{ $json.body.resultater[0]?.adresse.vejnavn }} {{ $json.body.resultater[0]?.adresse.husnr }}` |
| Postnummer og by | `{{ $json.body.resultater[0]?.adresse.postnr }} {{ $json.body.resultater[0]?.adresse.postnrnavn }}` |
| HTTP-status | `{{ $json.statusCode }}` |

Brug en **IF**- eller **Switch**-node på kategorien. A er et præcist match. B er ét sikkert match med små stavefejl: gå videre, og gem den officielle tekst fra `adresse`. C (flere kandidater eller større afvigelser) sendes til manuel kontrol og godkendes aldrig automatisk.

Vaskesvaret har ikke kommune eller koordinater. Skal du bruge dem, så tilføj en HTTP Request-node mere med URL'en `https://api.danadresse.dk/adgangsadresser/{{ $json.body.resultater[0].adresse.id }}` og samme credential. Læs `kommune.kode`, `kommune.navn` og `adgangspunkt.koordinater[0]` / `[1]` (længde, bredde) fra dens svar. Det er ét kald mere pr. række.

## 4. Fejl og 429

Åbn nodens **Settings**:

- **Retry On Fail**: til, *Max Tries* `3`, *Wait Between Tries* `5000` ms (det højeste, n8n tillader). Ved minutgrænsen (`rate_limit_per_minute`) sender API'et `Retry-After` med antal sekunder, til minutvinduet starter forfra (1-60), så et genforsøg efter 5 sekunder kan komme for tidligt. Med batching som ovenfor sker det sjældent.
- **On Error**: *Continue (using error output)*. Så får noden en ekstra udgang til rækker, der stadig fejler efter genforsøgene. Kobl den til en node, der logger adressen og fejlen.

Genforsøg hjælper ikke, hvis koden er `quota_exceeded`. Det betyder, at gratisplanens månedskvote og dens buffer på 20 % er brugt. Svaret har ingen `Retry-After`, og kvoten nulstilles den 1. i næste måned. Fejlsvar på DAWA-stierne har feltet `code`, så du kan skelne i fejlgrenen. Ved `quota_exceeded` forklarer `title` det i klar tekst, og `details` har `resets_at` og `upgrade_url`. Afviste kald tæller ikke.

Vil du hellere styre det helt selv, så slå *Never Error* til under *Options → Response*. Så kommer alle svar ud af den normale udgang, og du kan sende `statusCode` 429 med `body.code` = `rate_limit_per_minute` til en **Wait**-node, der venter `{{ $json.headers['retry-after'] }}` sekunder, og tilbage.

## 5. Importér et færdigt workflow

Kopiér JSON'en, og indsæt den på et tomt canvas i n8n med Ctrl+V eller Cmd+V. Vælg derefter din `Danadresse`-credential i HTTP Request-noden, og kør workflowet.

```json id=n8n-workflow run=syntax
{
  "name": "Danadresse datavask",
  "nodes": [
    {
      "parameters": {},
      "name": "Start",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [0, 0]
    },
    {
      "parameters": {
        "jsCode": "return [\n  { json: { adresse: 'Strandvejen 100, 2900 Hellerup' } },\n  { json: { adresse: 'Rådhuspladsen 1, 1550 København V' } }\n];"
      },
      "name": "Testadresser",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [220, 0]
    },
    {
      "parameters": {
        "url": "https://api.danadresse.dk/datavask/adgangsadresser",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [{ "name": "betegnelse", "value": "={{ $json.adresse }}" }]
        },
        "options": {
          "batching": { "batch": { "batchSize": 1, "batchInterval": 1000 } },
          "response": { "response": { "fullResponse": true } }
        }
      },
      "name": "Datavask",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [440, 0],
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 5000,
      "onError": "continueErrorOutput"
    }
  ],
  "connections": {
    "Start": { "main": [[{ "node": "Testadresser", "type": "main", "index": 0 }]] },
    "Testadresser": { "main": [[{ "node": "Datavask", "type": "main", "index": 0 }]] }
  }
}
```

## Test kaldet

Samme kald som noden, fra en terminal:

```bash id=test-call run=live expect="kategori"
curl -s "https://api.danadresse.dk/datavask/adgangsadresser?betegnelse=Strandvejen%20100%2C%202900%20Hellerup" \
  -H "X-Api-Key: $DANADRESSE_API_KEY"
```

## Næste skridt

- [Make](/guides/make) og [Zapier](/guides/zapier)
- [Grænser, kvoter og 429](/guides/graenser-og-429)
- Kort opskrift: [/integrationer/n8n](/integrationer/n8n)
