Migrate from DAWA in one line

Same paths, same response shape. Just change the base URL and add your X-Api-Key — the rest of your code is unchanged.

Before — DAWA
curl "https://dawa.aws.dk/autocomplete?q=rådhuspladsen"
After — Danadresse
curl "https://api.danadresse.dk/autocomplete?q=rådhuspladsen" \
     -H "X-Api-Key: dawa_live_…"
Before — DAWA
fetch("https://dawa.aws.dk/autocomplete?q=rådhuspladsen")
After — Danadresse
fetch("https://api.danadresse.dk/autocomplete?q=rådhuspladsen", {
  headers: { "X-Api-Key": "dawa_live_…" }
})
Before — DAWA
requests.get("https://dawa.aws.dk/autocomplete",
             params={"q": "rådhuspladsen"})
After — Danadresse
requests.get("https://api.danadresse.dk/autocomplete",
             params={"q": "rådhuspladsen"},
             headers={"X-Api-Key": "dawa_live_…"})
Before — DAWA
$ctx = stream_context_create();
file_get_contents("https://dawa.aws.dk/autocomplete?q=rådhuspladsen", false, $ctx);
After — Danadresse
$ctx = stream_context_create(["http" => [
  "header" => "X-Api-Key: dawa_live_…"
]]);
file_get_contents("https://api.danadresse.dk/autocomplete?q=rådhuspladsen", false, $ctx);
Before — DAWA
http.Get("https://dawa.aws.dk/autocomplete?q=rådhuspladsen")
After — Danadresse
req, _ := http.NewRequest("GET",
  "https://api.danadresse.dk/autocomplete?q=rådhuspladsen", nil)
req.Header.Set("X-Api-Key", "dawa_live_…")
http.DefaultClient.Do(req)
Before — DAWA
await http.GetStringAsync(
  "https://dawa.aws.dk/autocomplete?q=rådhuspladsen");
After — Danadresse
http.DefaultRequestHeaders.Add("X-Api-Key", "dawa_live_…");
await http.GetStringAsync(
  "https://api.danadresse.dk/autocomplete?q=rådhuspladsen");
Get a free key →

One REST API for all of Denmark's address stack.

2.4M access addresses · 1.4M full addresses · 113,000 street segments · 99 municipalities · 1,089 postcodes · 2,097 parishes — all available via one endpoint per task. JSON, drop-in DAWA format, free up to 2,000 calls/month.

What you get access to

🔎 Autocomplete

Typo-tolerant search-as-you-type. Meilisearch-powered. P99 < 50 ms. Works with Danish characters (æ, ø, å) and abbreviations.

✅ Validation

Address cleansing · category A/B/C scoring like DAWA. Returns the top match even with typos. Both GET and POST.

🎯 Lookup

Look up by UUID, postcode, municipality code, street code. Pagination (side, per_side) like DAWA.

🌍 Geocoding

Forward (address → coordinate) and reverse (GPS → address). WGS84 and ETRS89/UTM32N (EPSG:25832).

🏢 BBR enrichment

35 fields per building · 12 fields per unit · 120+ usage codes. Add ?include=bbr to any address call.

🗺 DAGI areas

Parish, police district, court district, region, constituency, national part. ?include=dagi — all 10 areas in one call.

Data catalogue — what we have right now

DatasetCountEndpointStatus
Access addresses2 416 787/adgangsadresser✓ Live
Full addresses1 465 200/adresser✓ Live
Street segments113 796/vejstykker✓ Live
Postcodes1 089/postnumre✓ Live
Municipalities99/kommuner✓ Live
Parishes2 097/sogne✓ Live
Police districts12/politikredse✓ Live
Court districts24/retskredse✓ Live
Regions5/regioner✓ Live
Cadastre / parcels~2,4 M/jordstykker✓ Live
BBR — buildings~2,1 M/api/v1/enrich/.../bbr◑ Q3 2026
Replication / eventsEvent-stream/replikering/*✓ Live

30-second quickstart

# 1. Get a free key (30s, no card): https://danadresse.dk/dashboard/signup

# 2. Call the API with your key — 2,000 calls/month free
curl 'https://api.danadresse.dk/autocomplete?q=R%C3%A5dhuspladsen' \
     -H 'X-Api-Key: dawa_live_…'

Drop-in DAWA-compatible

If you already have a DAWA integration: change dawa.aws.dk to api.danadresse.dk, add an X-Api-Key header. The rest of your code stays put — we mirror DAWA's paths, query parameters, JSON shape and UUIDs 1:1.

👉 Read the migration guide · Why DAWA is shutting down

Auth options

MethodExampleUsed for
X-Api-Key headerX-Api-Key: dawa_live_…Standard. Recommended.
?api_key= query?api_key=dawa_live_…JSONP, legacy clients, browser tests.
Bearer JWTAuthorization: Bearer ey…Dashboard sessions (internal use).
Test keyX-Api-Key: dawa_test_…Sandbox: realistic data, never billed, per-IP limit. For demos & trying out.

Technical guarantees

📐 Stable JSON format

We never add breaking changes in v1. New fields are additive — old clients aren't affected.

⏱ ETag + If-None-Match

Idempotent endpoints send an ETag. Send it back → 304 + 0 bytes. Save bandwidth.

📦 Gzip compression

All JSON compressed. Save ~70% bandwidth vs uncompressed DAWA.

🔁 Idempotent writes

POSTs accept an Idempotency-Key. Safe against retries after timeouts.

Next steps

🔑 Get a free key

2,000 calls/month · no credit card · 30 seconds.

📚 Read API docs

Swagger UI · Authorize button · try-it-out on live data.

💻 Code examples

9 languages — cURL, JS, Python, Go, PHP, Ruby, C#, Java, Rust.

🔌 Plug-and-play

WooCommerce, Shopify, Salesforce, HubSpot + 11 others.

One API. All of Denmark's addresses. Done.

Start free →