Spring til indhold

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.

Live på npm — installér med 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.

app.tstypescript
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.

app.tstypescript
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.

app.tstypescript
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.

app.tstypescript
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.

app.tstypescript
// 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.

app.tstypescript
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).

app.tstypescript
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.

app.tstypescript
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

DHM (#4) & Stednavne (#5)

Terræn/overflade-kote i et punkt, og navngivne steder nær et punkt.

app.tstypescript
const kote = await gf.dhm(10.32, 56.16);               // DhmPunkt (terraen_m / overflade_m)
const steder = await gf.stednavne(10.32, 56.16, 1000); // StednavnePunkt (radius i meter)

Adresse / DAR — Register #6

DAWA-erstatningen: UUID-opslag, fritekst-autocomplete, batch, reverse geocoding, adgangsadresser pr. BFE og adressevask.

app.tstypescript
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.

app.tstypescript
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.

app.tstypescript
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.

app.tstypescript
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.