På denne side
TypeScript-SDK-reference
@grundfast/sdk er en fuldt typet klient mod hele API-fladen: svaret er typecheckede objekter, ikke any. Herunder er hver public metode grupperet pr. register med et typet eksempel.
npm i @grundfast/sdk (ESM + CJS, nul runtime-dependencies). Hver metode herunder svarer 1:1 til et REST-endpoint, så foretrækker du et rå HTTP-kald, virker det uændret.Klient & fejl
Uden apiKey virker kun demo-endpoints. Sæt en nøgle for de rigtige registre. Ethvert non-2xx-svar kaster GrundfastError med HTTP-statussen.
import { GrundfastClient, GrundfastError } from '@grundfast/sdk'; // gf_test_… i CI/staging (sandbox, faktureres aldrig), gf_live_… i produktion. const gf = new GrundfastClient({ apiKey: 'gf_live_…' }); // Valgfrit: baseUrl (default https://api.grundfast.dk) og en injiceret fetch. try { const ejendom = await gf.ejendom(999999999); } catch (err) { if (err instanceof GrundfastError) { console.error(err.status, err.message); // fx 404 "property not found" } }
Demo & offentligt (uden nøgle)
Uden nøgle: offline-fixtures med samme datakontrakt som de rigtige endpoints, plus de offentlige discovery- og statistik-aggregater.
const gf = new GrundfastClient(); await gf.demoEjendom(); // EjendomRollup await gf.demoEjendomGeoJson(); // BbrFeatureCollection await gf.demoMatrikel(); // MatrikelEjendom await gf.demoJordstykke(); // JordstykkeResult await gf.demoDagi(); // DagiOmraade await gf.demoDhm(); // DhmPunkt await gf.demoStednavne(); // StednavnePunkt await gf.demoAdresse(); // AdresseResponse await gf.demoAdresseSearch(); // AdresseSearchResponse await gf.demoCvr(); // CvrResponse await gf.demoGeodanmarkBygninger(); // GeodanmarkBygninger await gf.dagiTemaer(); // DagiIndex (offentligt discovery-index) await gf.statsKommuner(); // KommuneStats (offentligt — per-kommune dækning) await gf.kodeliste('varmeinstallation'); // KodelisteResponse
BBR — Register #1
Hele ejendommen på et BFE (grund + bygninger + enheder), som GeoJSON, og i batch/stream.
const ejendom = await gf.ejendom(5651067); // EjendomRollup const geojson = await gf.ejendomGeoJson(5651067); // BbrFeatureCollection const bygning = await gf.bygning(5651067); // EjendomRollup (samme join) // Op til 50 BFE i ét kald — partial-failure pr. BFE: const { results, errors } = await gf.ejendomBatch([5651067, 12345678]); // Auto-paginér en vilkårligt stor BFE-liste i 50-chunks: for await (const item of gf.ejendomStream(mineBfeer)) { console.log(item.bfe, item.ejendom.antal_bygninger, item.stale); }
Matriklen — Register #2
Jordstykker + ejerlav for et BFE, enkelt og i batch.
const matrikel = await gf.matrikel(5651067); // MatrikelEjendom const batch = await gf.matrikelBatch([5651067, 12345678]); // MatrikelBatchResponse
Historik & point-in-time
De danske registre er bitemporale. Giv ejendom/matrikel/adresse et asOf (ISO-dato eller Date) for posten, som den var registreret dén dag (bypasser cache), eller hent hele versionstidslinjen med *Historik-metoderne — nyeste først, hver version med registrering/virkning-stempler.
// Point-in-time: posten som registreret på en dato. const ejendomDa = await gf.ejendom(5651067, '2020-01-01'); // EjendomRollup const matrikelDa = await gf.matrikel(5651067, new Date('2020-01-01')); // MatrikelEjendom const adresseDa = await gf.adresse('0a3f50a0-…', '2020-01-01'); // AdresseResponse // Versionstidslinjer (nyeste først): const bbrHist = await gf.ejendomHistorik(5651067); // BbrHistorikResponse (pr. bygning) const matHist = await gf.matrikelHistorik(5651067); // MatrikelHistorikResponse (pr. jordstykke) const adrHist = await gf.adresseHistorik('0a3f50a0-…'); // AdresseHistorikResponse
GeoDanmark bygningsfootprints
De rigtige bygningsomrids (WGS84-polygoner) pr. bygning, dér hvor BBR kun har et punkt. CC BY 4.0 — vis attribution, hvor du tegner dem.
const fp = await gf.geodanmarkBygninger(5651067); // GeodanmarkBygninger fp.buildings.forEach((b) => console.log(b.bbr_uuid, b.rings)); console.log(fp.attribution); // "@geodanmark" — CC BY 4.0-kreditering
Adresse→BFE-bro (jordstykker)
Fra et koordinat eller en matrikelbetegnelse til jordstykket + dets BFE i ét kald (DAWA-drop-in).
const parcel = await gf.jordstykkeReverse(10.32, 56.16); // JordstykkeResult (+ bfe_nummer) const byKey = await gf.jordstykke(60851, '4a'); // JordstykkeResult (ejerlavskode + matrikelnr)
DAGI — Register #3
Administrativ geografi: discovery-index, liste pr. tema, opslag og batch.
const temaer = await gf.dagiTemaer(); // DagiIndex (uden nøgle) const liste = await gf.dagiList('kommune'); // DagiList const omraade = await gf.dagi('kommune', 851); // DagiOmraade const batch = await gf.dagiBatch('kommune', [851, 101]); // DagiBatchResponse
Adresse / DAR — Register #6
DAWA-erstatningen: UUID-opslag, fritekst-autocomplete, batch, reverse geocoding, adgangsadresser pr. BFE og adressevask.
const adr = await gf.adresse('0a3f50a0-…'); // AdresseResponse (UUID-opslag) const hits = await gf.adresseSearch('rådhusplads', 8); // AdresseSearchResponse const abatch = await gf.adresseBatch(['uuid-1', 'uuid-2']); // AdresseBatchResponse const rev = await gf.adgangsadresseReverse(10.32, 56.16, { radius: 200, perSide: 1 }); // AdgangsadresseReverse const byBfe = await gf.adgangsadresserByBfe(5651067); // AdgangsadresserByBfe const vask = await gf.datavask('rådhuspladsen 1 kbh'); // DatavaskResultat (A/B/C-bånd)
DAWA reference-lister
Ejerlav, postnumre, vejnavne og den samlede autocomplete — drop-in for DAWAs opslagslister.
const ejerlav = await gf.ejerlav(100, 1); // EjerlavList (per_side, side) const etEjerlav = await gf.ejerlavByKode(60851); // EjerlavOpslag const ejerlavAuto = await gf.ejerlavAutocomplete('vejle'); // EjerlavList const post = await gf.postnumre(); // PostnummerList const etPost = await gf.postnummer('8000'); // PostnummerRef & { meta } const postAuto = await gf.postnummerAutocomplete('80'); // PostnummerList const veje = await gf.vejnavne(100, 1); // VejnavnList const vejAuto = await gf.vejnavnAutocomplete('rådhus'); // VejnavnList const auto = await gf.autocomplete('rådhus', 'vejnavn'); // AutocompleteResponse
CVR — Register #8
Virksomhed på CVR-nummer. Kun selve virksomhedsposten — aldrig den adgangsbegrænsede CVRPerson-entitet.
const virksomhed = await gf.cvr('37527968'); // CvrResponse
Bulk-eksport
Async job over en afgrænset id-liste (bbr/matrikel/adresse) → en downloadbar CSV/NDJSON/GeoJSON-fil.
const job = await gf.createExport({ register: 'bbr', format: 'csv', bfe: [5651067, 12345678] }); const status = await gf.getExport(job.id); // ExportJob — poll til status === 'completed' const jobs = await gf.listExports(); // ExportJob[] const file = await gf.downloadExport(job.id); // string (CSV/NDJSON/GeoJSON)
Se alle endpoints i API-dokumentationen, prøv dem i den interaktive reference, eller læs om webhooks.