# Find the municipality, region, parish and police district of an address

> Look up the administrative areas of an address, from municipality and region to parish, police district, court district and nomination district.
>
> https://danadresse.dk/en/guides/kommune-sogn-politikreds · verified 2026-11-02
Many systems need more than the address itself. A municipality wants to route cases by parish, an insurer wants the police district, an election site has to show the nomination district and polling area. All these areas come from the Danish Administrative Geographic Division (DAGI) and are already on the access address.

So you normally do not need an extra call. If you have the access-address id, you have the areas.

## The areas on the access address

```bash id=dagi-curl run=live expect="politikreds"
curl -s "https://api.danadresse.dk/adgangsadresser/0a3f507a-ec01-32b8-e044-0003ba298018" \
  -H "X-Api-Key: $DANADRESSE_API_KEY"
```

Among other things the response contains these fields (shortened):

```json id=dagi-svar run=no
{
  "id": "0a3f507a-ec01-32b8-e044-0003ba298018",
  "adressebetegnelse": "Rådhuspladsen 1, 1550 København V",
  "kommune": { "kode": "0101", "navn": "København" },
  "region": { "kode": "1084", "navn": "Region Hovedstaden" },
  "sogn": { "kode": "7002", "navn": "Helligånds" },
  "politikreds": { "kode": "1470", "navn": "Københavns Politi" },
  "retskreds": { "kode": "1101", "navn": "Københavns Byret" },
  "opstillingskreds": { "kode": "0003", "navn": "Indre By" },
  "afstemningsområde": { "nummer": "63", "navn": "3. Midt" },
  "storkreds": { "nummer": "1", "navn": "København" },
  "valglandsdel": { "bogstav": "A", "navn": "Hovedstaden" },
  "landsdel": { "nuts3": "DK011", "navn": "Byen København" }
}
```

| Field | Area | Key |
|---|---|---|
| `kommune` | Municipality | `kode`, 4 digits with a leading zero |
| `region` | Region | `kode` (1081-1085) |
| `sogn` | Parish (Church of Denmark) | `kode` |
| `politikreds` | Police district | `kode` |
| `retskreds` | Court district (district court) | `kode` |
| `opstillingskreds` | Nomination district for general elections | `kode` |
| `afstemningsområde` | Polling area | `nummer`, unique within the municipality |
| `storkreds`, `valglandsdel` | Electoral areas above the nomination district | `nummer`, `bogstav` |
| `landsdel` | Province (EU NUTS 3) | `nuts3` |

Each block also has an `href` to the area's own resource, e.g. `/sogne/7002`.

If you have an address id (with floor and door), the same fields are under `adgangsadresse` in the response from `GET /adresser/{id}`. The areas belong to the building, so every flat on a staircase has the same ones.

## In Python

```python id=dagi-python run=live expect="Københavns Politi"
import os
import requests

r = requests.get(
    "https://api.danadresse.dk/adgangsadresser/0a3f507a-ec01-32b8-e044-0003ba298018",
    headers={"X-Api-Key": os.environ["DANADRESSE_API_KEY"]},
    timeout=10,
)
r.raise_for_status()
a = r.json()

def navn(blok):
    return f'{blok["navn"]} ({blok.get("kode") or blok.get("nummer")})' if blok else "-"

print(a["adressebetegnelse"])
for felt in ("kommune", "region", "sogn", "politikreds", "retskreds",
             "opstillingskreds", "afstemningsområde"):
    print(f"  {felt:18} {navn(a.get(felt))}")
```

A block can be `null` if the register has no area for that particular address. Write your code so it copes with that.

## One combined lookup with /api/v1/enrich/…/dagi

`GET /api/v1/enrich/adresser/{id}/dagi` gathers the same areas in one compact structure under `boundaries` and adds the coordinates. It takes an access-address id or an address id with floor and door. The areas are the same for every address in the building.

```bash id=dagi-enrich run=syntax
curl -s "https://api.danadresse.dk/api/v1/enrich/adresser/0a3f507c-0624-32b8-e044-0003ba298018/dagi" \
  -H "X-Api-Key: $DANADRESSE_API_KEY"
```

```json id=dagi-enrich-svar run=no
{
  "id": "0a3f507c-0624-32b8-e044-0003ba298018",
  "boundaries": {
    "region": { "kode": "1084", "navn": "Region Hovedstaden" },
    "kommune": { "kode": "0157", "navn": "Gentofte" },
    "postnummer": { "nr": "2900", "navn": "Hellerup" },
    "sogn": { "kode": "7117", "navn": "Hellerup" },
    "retskreds": { "kode": "1104", "navn": "Retten i Lyngby" },
    "politikreds": { "kode": "1468", "navn": "Nordsjællands Politi" },
    "opstillingskreds": { "kode": "0013", "navn": "Gentofte" },
    "afstemningsomraade": { "kode": "7", "navn": "Hellerup" }
  },
  "coordinates": { "lat": 55.7326, "lon": 12.5757, "srid": 4326 }
}
```

If an area is missing, `kode` and `navn` are `null` and the block has `"_status": "needs_dagi_etl"`. Storkreds, valglandsdel and landsdel are only in the normal access-address response.

Endpoints under `/api/v1/enrich/` need a normal live key. A test key gets `403` with the code `sandbox_scope`, and a browser key gets `403` with `browser_key_scope`. So use `/adgangsadresser/{id}` if your code runs in the browser.

## The other direction: every address in an area

The filters work the other way round too. `/adgangsadresser` takes `kommunekode`, `regionskode`, `sognekode`, `politikredskode`, `retskredskode` and `opstillingskredskode`. Separate several values with `|`:

```bash id=dagi-filter run=live expect="betegnelse"
curl -s "https://api.danadresse.dk/adgangsadresser?politikredskode=1470&struktur=mini&per_side=3" \
  -H "X-Api-Key: $DANADRESSE_API_KEY"
```

The lists of the areas themselves come from `/sogne`, `/politikredse`, `/retskredse`, `/opstillingskredse`, `/regioner` and `/kommuner`. See [Postcodes and municipalities for dropdowns](/en/guides/postnumre-og-kommuner).

## Edge cases

- **Municipality code with a zero.** The code is a four-digit string: `0101`, not `101`. The API always returns four digits, and filters also accept `kommunekode=101`. Store the code as text so the zero does not disappear in your own data.
- **A parish is not a postcode.** A postcode can span several municipalities and parishes, so you cannot look up the parish from the postcode. Always go through the address.
- **Boundaries move.** Polling areas and parishes change now and then. If you store the areas on a case, store the date too, or look them up again when you need them.

## Next steps

- [Address or access address: the data model](/en/guides/adresse-vs-adgangsadresse)
- [Postcodes and municipalities for dropdowns](/en/guides/postnumre-og-kommuner)
- Overview of the areas: [DAGI](/dagi)
