Cadastre API

# The land under any Danish property, as data

One call on a BFE number returns the property’s parcels from Matriklen, the Danish cadastre: parcel number (matrikelnummer), cadastral district (ejerlav), area and boundary in WGS84. Draw them on your own map, or use them for area and screening.

The main call

- [GET /v1/matrikel/ejendom/:bfe](https://grundfast.dk/docs/api/matrikel-ejendom)

[Get started free](https://grundfast.dk/dashboard?mode=register) [Read the API reference](https://grundfast.dk/docs/api)

[Læs denne side på dansk](https://grundfast.dk/matrikel-api)

Request

## One call per property

The answer on the right is complete — the keyless [/v1/demo/matrikel](https://api.grundfast.dk/v1/demo/matrikel) returns exactly this property, a house on a single 460 m² parcel in Silkeborg.

```
import { GrundfastClient } from '@grundfast/sdk';

const gf = new GrundfastClient({ apiKey: process.env.GRUNDFAST_API_KEY! });
const property = await gf.matrikel(5651067);

// Each parcel is a GeoJSON geometry in WGS84 — put them straight on a map:
const features = property.jordstykker.map((j) => ({
  type: 'Feature',
  geometry: j.geometri,
  properties: { matrikelnummer: j.matrikelnummer, ejerlav: j.ejerlav.navn },
}));
```

GET /v1/matrikel/ejendom/5651067 json

```
{
  "bfe_nummer": 5651067,
  "type": "samlet_fast_ejendom",
  "jordstykker": [
    {
      "id": "1928359",
      "matrikelnummer": "138o",
      "ejerlav": { "kode": 2006552, "navn": "Silkeborg Markjorder" },
      "areal_m2": 460,
      "kommunekode": "0740",
      "geometri": {
        "type": "Polygon",
        "coordinates": [[
          [9.5326405, 56.1579596],
          [9.532631, 56.1579199],
          [9.5326084, 56.1578249],
          [9.5330829, 56.1577643],
          [9.5331362, 56.1578905],
          [9.5326405, 56.1579596]
        ]],
        "epsg25832_ring": [
          [533083.822, 6223788.017],
          [533083.267, 6223783.588],
          [533081.942, 6223773.004],
          [533111.469, 6223766.491],
          [533114.672, 6223780.561],
          [533083.822, 6223788.017]
        ]
      }
    }
  ],
  "dagi": {
    "kommune": { "kode": "0740", "navn": "Silkeborg" },
    "region": { "kode": "1082", "navn": "Region Midtjylland" }
  },
  "meta": {
    "kilde": "Datafordeler Matriklen via Grundfast",
    "grundfast_version": "0.1.0"
  }
}
```

What you get

## The cadastre, assembled per property

Datafordeler serves the cadastre as separate entities in UTM 32N. A lookup here gathers them per property and hands them over ready to use.

- ### Every parcel on the property
A property can consist of many parcels — a farm, a castle, a block. You get all of them in one answer, each with its number and area.
- ### Cadastral district by code and name
A parcel number is only unique within its ejerlav, so the district comes with both its code and its readable name.
- ### Boundaries ready for a map
Each parcel as a WGS84 Polygon — or a MultiPolygon with every piece — and the same ring in EPSG:25832 for work in metres.
- ### The BFE bridge
The BFE number ties the land to the buildings in BBR, the valuation and the addresses: one key across every register.

Response

## Fields in the answer

Field names are the cadastre’s own Danish terms, glossed here. Coordinates are `[lon, lat]`, as GeoJSON orders them.

| Field | Type | Description |
| --- | --- | --- |
| bfe_nummer | number | The property’s BFE number — the key on to BBR, the valuation and the addresses. |
| type | string | "samlet_fast_ejendom" — the property as the cadastre registers it (literally “combined real property”). |
| jordstykker[] | Jordstykke[] | Every parcel (jordstykke) the property consists of. One property can have many. |
| jordstykker[].matrikelnummer | string | The parcel number, e.g. "138o". Unique only together with its ejerlav. |
| jordstykker[].ejerlav | { kode, navn } | The cadastral district the parcel is numbered within, by code and name. |
| jordstykker[].areal_m2 | number \| null | The parcel’s registered area in m². |
| jordstykker[].geometri | Polygon \| MultiPolygon | The boundary in WGS84. A parcel in several pieces arrives as a MultiPolygon with every piece; the same ring in EPSG:25832 sits beside it. |
| dagi | { kommune, region } | Municipality and region. |

Endpoints

## Parcels by property, by point, over time

Same key, same billing. Parameters and fields are in the [API reference](https://grundfast.dk/docs/api); from a coordinate, see [reverse geocoding](https://grundfast.dk/en/reverse-geocoding-api).

**GET/v1/matrikel/ejendom/:bfe**

A property’s parcels Every parcel with number, cadastral district, area and boundary.

**GET/v1/jordstykker/reverse?lon=&lat=**

The parcel at a point The parcel covering a WGS84 coordinate, with the BFE of its property.

**GET/v1/ejerlav**

Cadastral districts Every ejerlav with its code and name, with lookup and autocomplete.

**POST/v1/matrikel/ejendom:batch**

Many properties per callPro and up Parcels for a list of BFE numbers, one call per distinct BFE.

**GET/v1/matrikel/ejendom/:bfe/historik**

How the parcels changedScale and up Every version on record; or ?asOf=YYYY-MM-DD for the parcels as registered on a date.

FAQ

## Questions about the cadastre

### What is the difference between a BFE number, a parcel and a matrikelnummer?

A parcel (jordstykke) is a piece of land. It is named by its matrikelnummer plus its ejerlav (cadastral district), because the same number is reused in many districts. A property (samlet fast ejendom) consists of one or more parcels and has one BFE number — the ID every Danish property register shares.

### Can I build a cadastral map with it?

Yes. Each parcel comes as a WGS84 polygon, so you draw the boundaries straight into MapLibre, Leaflet or OpenLayers, in your own style. Grundfast does not serve finished map images of the cadastre; aerial imagery tiles to put underneath are available at `/v1/orto/tile/:z/:x/:y`.

### How do I get from an address to the parcel?

Address search (`/v1/adresse/search`) returns the BFE number on every hit, and `/v1/matrikel/ejendom/:bfe` returns the parcels. With only a coordinate, `/v1/jordstykker/reverse` finds the parcel covering the point.

### Are the boundaries survey-grade?

They are the cadastre’s registered boundaries, reprojected from EPSG:25832 to WGS84 — and the original ring is delivered alongside. They are right for maps, screening and area calculations; a legal boundary survey is still a matter for a licensed surveyor.

### Can I see how the cadastre looked in the past?

Yes, from the Scale plan: `?asOf=`YYYY-MM-DD returns the parcels as registered on that date, with the geometry from the same time where it can be found; /historik returns the full sequence of versions.

See also

- [BBR API](https://grundfast.dk/en/bbr-api)
- [Property data API](https://grundfast.dk/en/property-data-api)
- [Reverse geocoding API](https://grundfast.dk/en/reverse-geocoding-api)
- [Pricing](https://grundfast.dk/en/pricing)

## Put Danish parcels on your map

Create a free key and make your first call in a minute. Build against a `gf_test_` key that is never billed, and upgrade when the traffic is real.

[Get started free](https://grundfast.dk/dashboard?mode=register) [Read the API reference](https://grundfast.dk/docs/api)

Free up to 5,000 calls a month · no card · test keys never billed · data from Klimadatastyrelsen / Datafordeler, CC BY 4.0
