Hent BBR-data om bygning og bolig

Slå opførelsesår, areal, etager, anvendelse og opvarmning op for en adresse, og hent boligenhederne med værelser, køkken og bad.

4 min Niveau: Øvet ✓ Kode testet

Bygnings- og Boligregistret (BBR) beskriver hver bygning og hver bolig i Danmark: hvornår den er bygget, hvor stor den er, hvad den bruges til, og hvordan den varmes op. Det bruges til boligvurdering, forsikringstilbud, energirådgivning og udlejning.

To endpoints dækker det: /bbr for bygningen og /enhed for boligerne eller erhvervsenhederne i den. Begge ligger under /api/v1/enrich/ og kræver en almindelig live-nøgle.

Hvilket id skal du bruge?

EndpointTagerReturnerer
GET /api/v1/enrich/adresser/{id}/bbradgangsadresse-id eller adresse-idHovedbygningen på adressen
GET /api/v1/enrich/adresser/{id}/enhedadgangsadresse-idAlle enheder i opgangen
GET /api/v1/enrich/adresser/{id}/enhedadresse-id (med etage/dør)Kun den ene enhed

/bbr giver det samme svar for et adresse-id med etage og dør som for adgangsadressen, fordi bygningen hører til indgangen. Ukendte id'er giver 404 med koden not_found. Datavask og autocomplete returnerer begge id'er direkte (se Adresse eller adgangsadresse).

Bygningen

Shell#bbr-curl
curl -s "https://api.danadresse.dk/api/v1/enrich/adresser/0a3f507f-0959-32b8-e044-0003ba298018/bbr" \
  -H "X-Api-Key: $DANADRESSE_API_KEY"
JSON#bbr-svar
{
  "adresseid": "0a3f507f-0959-32b8-e044-0003ba298018",
  "bygning": {
    "id": "23e6f5c3-af8c-4700-bb1a-b23bb2107e04",
    "bygningsnr": "1",
    "opfoerelsesaar": 1968,
    "ombygningsaar": 1992,
    "samletBygningsareal": 5652,
    "samletBoligAreal": null,
    "samletErhvervsareal": 5652,
    "bebyggetAreal": 2826,
    "antalEtager": 2,
    "antalBoliger": null,
    "anvendelseKode": "321",
    "anvendelseNavn": "Bygning til kontor",
    "ydervaegKode": "1",
    "tagKode": "2",
    "varmeKode": "1",
    "opvarmningsmiddelKode": null,
    "stormraadetOversvoemmelse": null,
    "stormflodRegistreret": false
  },
  "data_source": "BBR (Bygnings- og Boligregistret)",
  "license": "CC BY 4.0 Klimadatastyrelsen"
}
FeltIndhold
opfoerelsesaar, ombygningsaarByggeår og år for seneste større ombygning
samletBygningsareal, samletBoligAreal, samletErhvervsarealEtageareal i m²
bebyggetArealBygningens fodaftryk på grunden i m²
antalEtager, antalBoligerEtager og boliger i bygningen
anvendelseKode, anvendelseNavnHvad bygningen bruges til, som kode og tekst
ydervaegKode, tagKodeMaterialer, som BBR-koder
varmeKode, opvarmningsmiddelKode, energiforsyningKodeVarmeinstallation og brændsel, som BBR-koder
vandforsyningKode, afloebKode, fredningKodeVand, kloak og fredning, som BBR-koder
stormflodRegistrerettrue, hvis bygningen har en registreret skadesag hos Stormrådet

Kun anvendelsen har en tekst. De øvrige felter er rå koder fra BBR's kodelister, så du skal selv oversætte dem til tekst i din app.

Enhederne

Shell#enhed-curl
curl -s "https://api.danadresse.dk/api/v1/enrich/adresser/0a3f507c-0624-32b8-e044-0003ba298018/enhed" \
  -H "X-Api-Key: $DANADRESSE_API_KEY"
JSON#enhed-svar
{
  "adresseid": "0a3f507c-0624-32b8-e044-0003ba298018",
  "antal_enheder": 6,
  "enheder": [
    {
      "id": "760562d0-4ea6-4c94-94d7-506d12c4d0de",
      "etage": "st",
      "doer": "1",
      "anvendelseKode": "322",
      "boligtype": { "kode": "E", "navn": "Andet" },
      "samletAreal": 83,
      "arealBeboelse": null,
      "arealErhverv": 83,
      "antalVaerelser": 2,
      "antalToiletter": 1,
      "antalBadevaerelser": null,
      "toilet": { "kode": "T", "navn": "Vandskyllende toilet i enheden" },
      "bad": { "kode": "D", "navn": "Hverken badeværelse eller adgang til badeværelse" },
      "koekken": { "kode": "H", "navn": "Ingen fast kogeinstallation" },
      "udlejningKode": null,
      "bygningId": "70f6f506-2c5b-408f-8e9c-32353f2e0be9"
    }
  ]
}

Enhederne er sorteret efter etage (kælder, stue, 1., 2. …) og dør. boligtype, toilet, bad og koekken har både kode og tekst. bygningId peger på den bygning, enheden ligger i.

I Python: fra adresse-id til bygning og bolig

Python#bbr-python
import os
import requests

API = "https://api.danadresse.dk"
s = requests.Session()
s.headers["X-Api-Key"] = os.environ["DANADRESSE_API_KEY"]

adresse_id = "0a3f50a4-0c39-32b8-e044-0003ba298018"   # Strandvejen 100, 1., 2900 Hellerup

r = s.get(f"{API}/api/v1/enrich/adresser/{adresse_id}/bbr", timeout=15)
if r.status_code == 503:
    raise SystemExit(f"Registret er midlertidigt utilgængeligt, prøv igen om {r.headers.get('Retry-After')} s")
r.raise_for_status()
byg = r.json()["bygning"]
if byg.get("_status"):
    print("Ingen BBR-bygning knyttet til adressen endnu")
else:
    print(byg["anvendelseNavn"], byg["opfoerelsesaar"], byg["samletBygningsareal"], "m²")

enheder = s.get(f"{API}/api/v1/enrich/adresser/{adresse_id}/enhed", timeout=15).json()
for e in enheder["enheder"]:
    print(e["etage"], e["doer"], e["samletAreal"], "m²,", e["antalVaerelser"], "værelser")

Når data mangler

  • _status: needs_bbr_etl i bygning betyder, at der ikke er knyttet en BBR-bygning til adressen i vores kopi af registret. Alle felter er så null.
  • _status: needs_bbr_enhed_etl på /enhed betyder, at der ikke er fundet enheder. enheder er en tom liste. Det kan også være korrekt: et skur eller en transformerstation har ingen boliger.
  • Enkelte felter er null. BBR er ikke komplet. Ældre bygninger mangler ofte ombygningsår eller areal. Vis "ukendt" i stedet for 0.
  • _truncated: true på /enhed betyder, at adressen har flere end 1000 enheder, og kun de første 1000 er med.

Flere bygninger på samme adresse

En adresse kan have flere bygninger: et hus med garage og udhus, eller et erhvervsområde med flere haller. /bbr returnerer hovedbygningen: en bygning med en egentlig anvendelse før garager, carporte og udhuse (anvendelseskode 900 og op), bygninger med data før tomme rækker, og derefter den største. Skal du se alle bygninger, så brug bygninger i GET /api/v1/enrich/adresser/{id}/ejendom (se Matrikel, jordstykke og BFE). Den liste har id, nummer, opførelsesår, areal, etager og anvendelse for hver bygning, med hovedbygningen først. Skal du bruge bygningen for en bestemt bolig, så tag den, som enheden i /enhed peger på via bygningId.

Nøgler og fejl

  • Testnøgler får 403 med koden sandbox_scope, og browsernøgler får 403 med browser_key_scope. Kald endpointet fra din server.
  • /bbr og /enhed læser fra vores egen kopi af BBR. /ejendom og /installations henter data fra Datafordeleren, når de kaldes, og kan svare 503 med koden upstream_unavailable og en Retry-After-header under Datafordelerens servicevinduer.
  • Data fra BBR er under CC BY 4.0. Vis kildeangivelsen "Indeholder data fra Klimadatastyrelsen (CC BY 4.0)", når du viser data til brugere.

Næste skridt

Relaterede guides

Markdown-kilde Fejl i guiden? Skriv til os API-reference (Swagger)

Prøv det med en gratis nøgle

2 000 kald/måned på gratisplanen. Intet kreditkort.

Opret konto →