# Din første forespørgsel

Opret en gratis konto, hent en nøgle og slå en ejendom op. Det tager under to minutter.

## Prøv uden nøgle

Demo-endpoints under `/v1/demo/*` svarer uden nøgle for et fast emne — rigtige data, fx ejendommen BFE 5651067 — i samme form som de rigtige endpoints. De er begrænset pr. IP-adresse og egner sig til at se svarformen, ikke til produktion.

```bash
curl https://api.grundfast.dk/v1/demo/ejendom
```

Tilsvarende findes blandt andet `/v1/demo/matrikel`, `/v1/demo/adresse`, `/v1/demo/dhm`, `/v1/demo/byggelinjer`, `/v1/demo/vurdering` og `/v1/demo/cvr`.

## Fire trin

1. **Opret en konto og en testnøgle** — Opret en gratis konto i [dashboardet](https://grundfast.dk/dashboard?mode=register) og lav en nøgle under Nøgler. Vælg en `gf_test_`-nøgle til udvikling: den rammer de rigtige registre, men faktureres aldrig. Nøglen vises kun én gang, så gem den med det samme.

2. **Hent en ejendom** — Kald `GET /v1/bbr/ejendom/:bfe` med nøglen i `Authorization`-headeren. Eksemplerne herunder bruger BFE 5651067.

3. **Læs svaret** — Svaret er én ejendom med alle bygninger, jordstykker og adresser. Et forkortet svar og de vigtigste felter står nedenfor.

4. **Byg videre** — Læs om [fejl og statuskoder](https://grundfast.dk/docs/fejl) og [rate limits](https://grundfast.dk/docs/rate-limits), før du går i produktion, og skift til en `gf_live_`-nøgle.

## Kaldet

**cURL**

```bash
curl https://api.grundfast.dk/v1/bbr/ejendom/5651067 \
  -H "Authorization: Bearer gf_test_..."
```

**JavaScript**

```js
const res = await fetch('https://api.grundfast.dk/v1/bbr/ejendom/5651067', {
  headers: { Authorization: `Bearer ${process.env.GRUNDFAST_API_KEY}` },
});
if (!res.ok) {
  const { error } = await res.json();
  throw new Error(`${res.status}: ${error}`);
}
const ejendom = await res.json();
console.log(ejendom.antal_bygninger, 'bygninger');
```

**TypeScript-SDK**

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

// gf_test_ under udvikling, gf_live_ i produktion. Hold nøglen på serveren.
const gf = new GrundfastClient({ apiKey: 'gf_test_...' });

const ejendom = await gf.ejendom(5651067);
const hoved = ejendom.bygninger[ejendom.hovedbygning_index ?? 0];
console.log(hoved?.anvendelse?.tekst, hoved?.opfoerelsesaar);
```

**Python**

```py
import os
import requests

res = requests.get(
    "https://api.grundfast.dk/v1/bbr/ejendom/5651067",
    headers={"Authorization": f"Bearer {os.environ['GRUNDFAST_API_KEY']}"},
    timeout=30,
)
res.raise_for_status()
ejendom = res.json()
print(ejendom["antal_bygninger"], "bygninger")
```

> Uden en gyldig nøgle svarer API’et `401` med `{ "error": "invalid API key" }`. Send nøglen i headeren; kun hvor en header ikke kan sættes, kan den sendes som `?token=` (se [Godkendelse](https://grundfast.dk/docs/godkendelse#token-parameter)).

## Svaret

Sådan ser svaret for BFE 5651067 ud — et parcelhus i Silkeborg. Ejendommen har tre bygninger; her vises kun hovedbygningen, `bygninger[2]`, som `hovedbygning_index` peger på.

**Svar · 200 · forkortet**

```json
{
  "type": "ejendom",
  "bfe_nummer": 5651067,
  "kommunekode": "0740",
  "jordstykke": {
    "matrikelnummer": "138o",
    "ejerlav_kode": 2006552,
    "ejerlav_navn": "Silkeborg Markjorder"
  },
  "antal_bygninger": 3,
  "hovedbygning_index": 2,
  "bygninger": [
    {
      "bygningsnummer": 1,
      "anvendelse": { "kode": "120", "tekst": "Fritliggende enfamiliehus" },
      "opfoerelsesaar": 1958,
      "areal": { "bebygget_m2": 116, "samlet_boligareal_m2": 95 },
      "materialer": {
        "ydervaeg": { "kode": "1", "tekst": "Mursten" },
        "tag": { "kode": "5", "tekst": "Tegl" }
      },
      "varme": { "installation": { "kode": "1", "tekst": "Fjernvarme/blokvarme" } },
      "geometri": {
        "type": "Point",
        "coordinates": [9.532961, 56.1578452],
        "epsg25832": [533103.83, 6223775.44]
      }
    }
  ],
  "meta": { "kilde": "Datafordeler BBR via Grundfast", "grundfast_version": "0.1.0" }
}
```

1. **Nøglen og kommunen.** Ejendommens BFE-nummer, og kommunekoden som firecifret streng — `"0740"` er Silkeborg.
2. **Det primære jordstykke.** Matrikelnummer og ejerlav. Alle jordstykker på ejendommen står i `jordstykker[]`.
3. **Læs hovedbygningen, ikke den første.** `hovedbygning_index` er indekset i `bygninger` for den største bygning. Læs årstal og areal herfra — `bygninger[0]` kan være en tom registrering.
4. **Koder kommer oversat.** Hvert kodefelt er `{ kode, tekst }`: gem koden, vis teksten. `null` betyder, at registret ikke har en værdi.
5. **Årstal og arealer.** `om_tilbygningsaar` er året for seneste væsentlige om- eller tilbygning, og arealerne er i m². Ikke vist her: `fredning`, hvor `null` betyder ukendt, og boligerne i `enheder[]`.
6. **Koordinater i to systemer.** WGS84 i `coordinates` og EPSG:25832 i `epsg25832` — se [Koordinatsystemer](https://grundfast.dk/docs/koordinater).

Et fuldt eksempelsvar og alle felter står på [referencesiden for endpointet](https://grundfast.dk/docs/api/bbr-ejendom). Hvordan `null`, kodefelter og koordinater skal læses, står i [Svar, null og friskhed](https://grundfast.dk/docs/svar-og-headers).

## Næste skridt

- [Godkendelse og nøgler](https://grundfast.dk/docs/godkendelse) — Forskellen på live og test, og hvordan du tilbagekalder en nøgle.
- [API-reference](https://grundfast.dk/docs/api) — Alle endpoints: matrikel, vurdering, adresser, DHM, byggelinjer og resten.
- [TypeScript-SDK](https://grundfast.dk/docs/sdk) — Typede svar, indbygget retry og afbrydelse med AbortSignal.
- [MCP-server](https://grundfast.dk/docs/mcp) — Lad en AI-agent slå ejendomme op med den samme nøgle.
