# Søg i bygninger

`GET /v1/bbr/bygninger/soeg` · BBR

Alle stående bygninger i en kommune eller et postnummer, filtreret på anvendelse, opførelsesår, varme, materialer, asbest, areal og olietank.

Bygningssøgningen svarer på spørgsmål om bygningsbestanden frem for om én ejendom: hvilke huse fra før 1960 i en kommune opvarmes stadig med olie, hvor står der tage af fibercement, hvilke bygninger har en olietank i brug på grunden. Svaret kommer fra et nationalt bygningsindeks over BBR, med adresse, BFE-nummer og WGS84-punkt på hver bygning, så resultatet kan gå direkte videre til [Hent en ejendom](https://grundfast.dk/docs/api/bbr-ejendom).

`kommunekode` eller `postnr` skal angives. Alle filtre kombineres med OG; et filter med flere koder (fx `varme=2,7`) matcher enhver af dem. `anvendelse` tager både BBR-koder og grupper (`bolig`, `enfamiliehus`, `raekkehus`, `etagebolig`, `landbrug`, `industri`, `energi`, `handel_kontor`, `institution`, `sommerhus`, `fritid`, `udhus_garage`).

`antal` er altid det præcise antal bygninger, der matcher. Alle planer får antallet og første side (op til 100 bygninger som JSON). Flere sider og `format=csv` eller `format=geojson` kræver Starter eller højere; uden den svarer de med `402`.

Med `group_by` svarer søgningen med en fordeling i stedet for en side bygninger: det præcise antal pr. gruppe for samme filter, i ét kald. `aarti` grupperer på opførelsesårti (`1960` = 1960–1969), `tag` på tagdækningsmateriale, `anvendelse` på BBR-anvendelse og `kommune` på kommunekode. Svaret har `type: "bygningsgruppering"`, `antal` (summen) og `grupper` med `noegle`, `tekst`, `antal` og `andel`. Det er åbent for alle planer og kun JSON. `group_by=kommune` og `group_by=anvendelse` kan bruges for hele landet uden `kommunekode` og `postnr`, når det eneste andet filter er `anvendelse`.

**Godkendelse:** `Authorization: Bearer gf_live_…` (eller `gf_test_…`) · kræver Starter-planen til side 2 og frem samt CSV/GeoJSON

**Afregning:** Ét kald pr. påbegyndte 1.000 rækker i `per_side` (standard 100 = ét kald). Med `group_by` altid ét kald.

## Parametre

| Navn | Placering | Type | Påkrævet | Beskrivelse |
| --- | --- | --- | --- | --- |
| `kommunekode` | query | string | nej | Kommunekoden, fx `0740`. Denne eller `postnr` er påkrævet. |
| `postnr` | query | string | nej | Postnummeret, fx `8600`. Denne eller `kommunekode` er påkrævet. |
| `anvendelse` | query | string | nej | Kommasepareret liste af BBR-anvendelseskoder og/eller grupper. |
| `opfoert_fra` | query | integer | nej | Opført i dette år eller senere. |
| `opfoert_til` | query | integer | nej | Opført i dette år eller tidligere. |
| `varme` | query | string | nej | Koder for varmeinstallation (BBR felt 056), fx `2,7`. |
| `opvarmning` | query | string | nej | Koder for opvarmningsmiddel (felt 057), fx `3` for flydende brændsel. |
| `tag` | query | string | nej | Koder for tagdækning (felt 033), fx `3` for fibercement herunder asbest. |
| `ydervaeg` | query | string | nej | Koder for ydervæggens materiale (felt 032). |
| `asbest` | query | string | nej | `ja`: BBR registrerer asbestholdigt materiale (felt 036, kode 1-4). `nej`: registreret uden asbest (kode 5). |
| `areal_min` | query | integer | nej | Mindste samlede bygningsareal i m². |
| `areal_max` | query | integer | nej | Største samlede bygningsareal i m². |
| `boligareal_min` | query | integer | nej | Mindste boligareal i m². |
| `boligareal_max` | query | integer | nej | Største boligareal i m². |
| `olietank` | query | string | nej | `ja`: der er registreret en olietank i brug (ikke sløjfet) på grunden. `nej`: der er ikke. |
| `side` | query | integer | nej | Sidenummer. Side 2 og frem kræver Starter eller højere. |
| `per_side` | query | integer | nej | Bygninger pr. side: højst 1.000 som JSON og 10.000 som CSV eller GeoJSON. |
| `format` | query | string | nej | `json`, `csv` eller `geojson` (FeatureCollection af punkter). |
| `group_by` | query | string | nej | Svar med antal pr. gruppe i stedet for bygninger: `aarti` (opførelsesårti), `tag` (tagdækning), `anvendelse` eller `kommune`. Kun JSON; `side` og `per_side` ignoreres. |

## Eksempel

```bash
curl "https://api.grundfast.dk/v1/bbr/bygninger/soeg?kommunekode=0740&anvendelse=institution&tag=3&per_side=1&group_by=aarti" \
  -H "Authorization: Bearer $GRUNDFAST_API_KEY"
```

## Svar (200)

```json
{
  "type": "bygningssoegning",
  "antal": 180,
  "side": 1,
  "per_side": 1,
  "sider": 180,
  "begraenset": false,
  "bygninger": [
    {
      "id": "69eaf49f-6930-47e9-8b65-d1b91ce38d5a",
      "bfe_nummer": 4040359,
      "adgangsadresse_id": "0a3f5095-4239-32b8-e044-0003ba298018",
      "adresse": "A.Andersens Vej 24B, 8600 Silkeborg",
      "kommunekode": "0740",
      "postnr": "8600",
      "koordinat": { "lon": 9.585017, "lat": 56.191006 },
      "anvendelse": { "kode": "429", "tekst": "Anden bygning til undervisning og forskning" },
      "opfoerelsesaar": 1968,
      "om_tilbygningsaar": null,
      "samlet_areal": 180,
      "boligareal": 179,
      "erhvervsareal": 180,
      "antal_etager": 1,
      "varmeinstallation": { "kode": "1", "tekst": "Fjernvarme/blokvarme" },
      "opvarmningsmiddel": null,
      "supplerende_varme": { "kode": "1", "tekst": "Varmepumpe" },
      "tagdaekning": { "kode": "3", "tekst": "Fibercement herunder asbest" },
      "ydervaeg": { "kode": "1", "tekst": "Mursten" },
      "asbest": null,
      "olietank": false
    }
  ],
  "meta": {
    "kilde": "BBR + DAR (Datafordeler) via Grundfast — bygningsindeks",
    "grundfast_version": "0.1.0"
  }
}
```

## Vigtige felter

| Felt | Type | Betydning |
| --- | --- | --- |
| `antal` | integer | Det præcise antal bygninger, der matcher. |
| `grupper[]` | { noegle, tekst, antal, andel }[] | Kun med `group_by`. `noegle` er årtiets første år (`"1960"`), BBR-koden (`"3"`) eller kommunekoden (`"0751"`); `null` er bygninger uden registreret værdi. For `aarti` tæller BBR’s pladsholderår 1000 også som ukendt. `andel` er gruppens andel af `antal` (0–1). `aarti` står i årti-rækkefølge med ukendt sidst, de øvrige efter antal. |
| `begraenset` | boolean | `true`, når planen begrænsede svaret til første side. `antal` er stadig præcist. |
| `bygninger[].olietank` | boolean | Der er registreret en olietank i brug på bygningens grund eller på bygningen selv. Siger intet om, hvad bygningen opvarmes med. |
| `bygninger[].asbest` | { kode, tekst } \| null | BBR-feltet om asbestholdigt materiale. `null` betyder, at feltet ikke er udfyldt, ikke at bygningen er fri for asbest. |

## Fejl

| Status | Betydning |
| --- | --- |
| 400 | Hverken `kommunekode` eller `postnr` er angivet (undtagen landsdækkende `group_by=kommune` eller `anvendelse`), `group_by` er kombineret med `format=csv`/`geojson`, eller et filter er ugyldigt. |
| 401 | Nøglen mangler eller er ugyldig. |
| 402 | Side 2 og frem eller CSV/GeoJSON kræver Starter eller højere. |
| 429 | Burst-grænsen eller månedskvoten er nået. Se `Retry-After`. |
| 503 | Bygningsindekset er ikke indlæst i dette miljø. |

> Et tomt BBR-felt er ukendt, ikke nej: en bygning uden registreret asbest eller varmeinstallation matcher ikke et filter på feltet.
