{"openapi":"3.1.0","info":{"title":"Grundfast API","version":"0.1.0","description":"REST over Datafordeler — BBR ejendom (BFE-keyed), Matriklen, DAGI, DHM, Stednavne, DAR address resolution, and CVR company lookup; translated kodelister, WGS84 geometry, and a property-keyed batch. The address surface resolves a DAR UUID to an address; CVR resolves an 8-digit CVR number to a company record (no personal CVRPerson entity; a sole proprietor’s company data is itself personal — see reklamebeskyttet)."},"servers":[{"url":"https://grundfast.dk"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key. A gf_live_… key hits real data, counts against your tier allowance and bills overage. A gf_test_… key is a sandbox: same real data, but never billed, capped at a separate monthly allowance, and flagged on every response with X-Grundfast-Environment: test."},"cookieAuth":{"type":"apiKey","in":"cookie","name":"gf_session"}},"schemas":{"EjendomBatchInput":{"type":"object","properties":{"bfe":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647}}},"required":["bfe"]},"EjendomBatchResponse":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"bfe":{"type":"number"},"ejendom":{"type":"object","properties":{"type":{"type":"string","const":"ejendom"},"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"grund_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"dagi":{"type":"object","properties":{"kommune":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},{"type":"null"}]},"region":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},{"type":"null"}]}},"required":["kommune","region"]},"jordstykke":{"type":"object","properties":{"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}]},"ejerlav_kode":{"anyOf":[{"type":"number"},{"type":"null"}]},"ejerlav_navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["matrikelnummer","ejerlav_kode","ejerlav_navn"]},"jordstykker":{"type":"array","items":{"type":"object","properties":{"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}]},"ejerlav_kode":{"anyOf":[{"type":"number"},{"type":"null"}]},"ejerlav_navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["matrikelnummer","ejerlav_kode","ejerlav_navn"]}},"antal_bygninger":{"type":"number"},"hovedbygning_index":{"anyOf":[{"type":"number"},{"type":"null"}]},"bygninger":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string","const":"bygning"},"bygningsnummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"anvendelse":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opfoerelsesaar":{"anyOf":[{"type":"number"},{"type":"null"}]},"antal_etager":{"anyOf":[{"type":"number"},{"type":"null"}]},"areal":{"type":"object","properties":{"bebygget_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_bygningsareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_boligareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_erhvervsareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["bebygget_m2","samlet_bygningsareal_m2","samlet_boligareal_m2","samlet_erhvervsareal_m2"]},"materialer":{"type":"object","properties":{"ydervaeg":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"tag":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["ydervaeg","tag"]},"varme":{"type":"object","properties":{"installation":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opvarmningsmiddel":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"supplerende":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["installation","opvarmningsmiddel","supplerende"]},"geometri":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"Point"},"coordinates":{"anyOf":[{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]},{"type":"null"}]},"epsg25832":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}},"required":["type","coordinates","epsg25832"]},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"enheder":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"anvendelse":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"areal":{"type":"object","properties":{"samlet_m2":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["samlet_m2"]},"antal_vaerelser":{"anyOf":[{"type":"number"},{"type":"null"}]},"varme":{"type":"object","properties":{"installation":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opvarmningsmiddel":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["installation","opvarmningsmiddel"]},"adresse":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"betegnelse":{"anyOf":[{"type":"string"},{"type":"null"}]},"vejnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"husnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"etage":{"anyOf":[{"type":"string"},{"type":"null"}]},"doer":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnrnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"koordinat":{"anyOf":[{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},{"type":"null"}]},"_note":{"type":"string"},"_error":{"type":"string"}},"required":["id","betegnelse"]}},"required":["id","anvendelse","areal","antal_vaerelser","varme","adresse"]}}},"required":["id","type","bygningsnummer","anvendelse","opfoerelsesaar","antal_etager","areal","materialer","varme","geometri","kommunekode","enheder"]}},"ejer":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"},"as_of":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["type","bfe_nummer","grund_id","kommunekode","dagi","jordstykke","jordstykker","antal_bygninger","hovedbygning_index","bygninger","meta"],"description":"A property (BFE): grund identity + every current building on it."},"stale":{"type":"boolean"}},"required":["bfe","ejendom","stale"]}},"errors":{"type":"array","items":{"type":"object","properties":{"bfe":{"type":"number"},"error":{"type":"string"},"status":{"type":"number"}},"required":["bfe","error","status"]}},"requested":{"type":"number"},"succeeded":{"type":"number"},"failed":{"type":"number"}},"required":["results","errors","requested","succeeded","failed"],"description":"Per-BFE results + partial failures; one billable unit per deduped BFE."},"EjendomRollup":{"type":"object","properties":{"type":{"type":"string","const":"ejendom"},"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"grund_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"dagi":{"type":"object","properties":{"kommune":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},{"type":"null"}]},"region":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},{"type":"null"}]}},"required":["kommune","region"]},"jordstykke":{"type":"object","properties":{"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}]},"ejerlav_kode":{"anyOf":[{"type":"number"},{"type":"null"}]},"ejerlav_navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["matrikelnummer","ejerlav_kode","ejerlav_navn"]},"jordstykker":{"type":"array","items":{"type":"object","properties":{"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}]},"ejerlav_kode":{"anyOf":[{"type":"number"},{"type":"null"}]},"ejerlav_navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["matrikelnummer","ejerlav_kode","ejerlav_navn"]}},"antal_bygninger":{"type":"number"},"hovedbygning_index":{"anyOf":[{"type":"number"},{"type":"null"}]},"bygninger":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string","const":"bygning"},"bygningsnummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"anvendelse":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opfoerelsesaar":{"anyOf":[{"type":"number"},{"type":"null"}]},"antal_etager":{"anyOf":[{"type":"number"},{"type":"null"}]},"areal":{"type":"object","properties":{"bebygget_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_bygningsareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_boligareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_erhvervsareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["bebygget_m2","samlet_bygningsareal_m2","samlet_boligareal_m2","samlet_erhvervsareal_m2"]},"materialer":{"type":"object","properties":{"ydervaeg":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"tag":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["ydervaeg","tag"]},"varme":{"type":"object","properties":{"installation":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opvarmningsmiddel":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"supplerende":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["installation","opvarmningsmiddel","supplerende"]},"geometri":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"Point"},"coordinates":{"anyOf":[{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]},{"type":"null"}]},"epsg25832":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}},"required":["type","coordinates","epsg25832"]},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"enheder":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"anvendelse":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"areal":{"type":"object","properties":{"samlet_m2":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["samlet_m2"]},"antal_vaerelser":{"anyOf":[{"type":"number"},{"type":"null"}]},"varme":{"type":"object","properties":{"installation":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opvarmningsmiddel":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["installation","opvarmningsmiddel"]},"adresse":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"betegnelse":{"anyOf":[{"type":"string"},{"type":"null"}]},"vejnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"husnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"etage":{"anyOf":[{"type":"string"},{"type":"null"}]},"doer":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnrnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"koordinat":{"anyOf":[{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},{"type":"null"}]},"_note":{"type":"string"},"_error":{"type":"string"}},"required":["id","betegnelse"]}},"required":["id","anvendelse","areal","antal_vaerelser","varme","adresse"]}}},"required":["id","type","bygningsnummer","anvendelse","opfoerelsesaar","antal_etager","areal","materialer","varme","geometri","kommunekode","enheder"]}},"ejer":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"},"as_of":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["type","bfe_nummer","grund_id","kommunekode","dagi","jordstykke","jordstykker","antal_bygninger","hovedbygning_index","bygninger","meta"],"description":"A property (BFE): grund identity + every current building on it."},"BbrHistorik":{"type":"object","properties":{"type":{"type":"string","const":"bbr_historik"},"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"bygninger":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"versioner":{"type":"array","items":{"type":"object","properties":{"registrering_fra":{"anyOf":[{"type":"string"},{"type":"null"}]},"registrering_til":{"anyOf":[{"type":"string"},{"type":"null"}]},"virkning_fra":{"anyOf":[{"type":"string"},{"type":"null"}]},"virkning_til":{"anyOf":[{"type":"string"},{"type":"null"}]},"bygningsnummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"anvendelse":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opfoerelsesaar":{"anyOf":[{"type":"number"},{"type":"null"}]},"antal_etager":{"anyOf":[{"type":"number"},{"type":"null"}]},"areal":{"type":"object","properties":{"bebygget_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_bygningsareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_boligareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_erhvervsareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["bebygget_m2","samlet_bygningsareal_m2","samlet_boligareal_m2","samlet_erhvervsareal_m2"]},"materialer":{"type":"object","properties":{"ydervaeg":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"tag":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["ydervaeg","tag"]},"varme":{"type":"object","properties":{"installation":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opvarmningsmiddel":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"supplerende":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["installation","opvarmningsmiddel","supplerende"]}},"required":["registrering_fra","registrering_til","virkning_fra","virkning_til","bygningsnummer","anvendelse","opfoerelsesaar","antal_etager","areal","materialer","varme"]}},"afkortet":{"type":"boolean"}},"required":["id","versioner","afkortet"]}},"afkortet":{"type":"boolean"},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"},"omfang":{"type":"string","const":"aktuelle_bygninger"}},"required":["kilde","grundfast_version","omfang"]}},"required":["type","bfe_nummer","bygninger","afkortet","meta"],"description":"Bitemporal version history: each current building's registration timeline."},"BbrFeatureCollection":{"type":"object","properties":{"type":{"type":"string","const":"FeatureCollection"},"features":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"Feature"},"geometry":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"Point"},"coordinates":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}},"required":["type","coordinates"]},{"type":"null"}]},"properties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]}}},"required":["type","geometry","properties"]}},"numberMatched":{"type":"number"},"numberReturned":{"type":"number"},"crs":{"type":"object","properties":{"type":{"type":"string","const":"name"},"properties":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"required":["type","properties"]},"bbox":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"}]}},"required":["type","features","numberMatched","numberReturned","crs"]},"KodelisteResponse":{"type":"object","properties":{"navn":{"type":"string"},"koder":{"type":"array","items":{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."}}},"required":["navn","koder"]},"MatrikelEjendom":{"type":"object","properties":{"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":{"type":"string","const":"samlet_fast_ejendom"},"jordstykker":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}]},"ejerlav":{"type":"object","properties":{"kode":{"anyOf":[{"type":"number"},{"type":"null"}]},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},"areal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"geometri":{"anyOf":[{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"Polygon"},"coordinates":{"anyOf":[{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}},{"type":"null"}]},"epsg25832_ring":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}},"required":["type","coordinates","epsg25832_ring"]},{"type":"object","properties":{"type":{"type":"string","const":"MultiPolygon"},"coordinates":{"anyOf":[{"type":"array","items":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}}},{"type":"null"}]},"epsg25832_rings":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}}},"required":["type","coordinates","epsg25832_rings"]}]},{"type":"null"}]}},"required":["id","matrikelnummer","ejerlav","areal_m2","kommunekode","geometri"]}},"dagi":{"type":"object","properties":{"kommune":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},{"type":"null"}]},"region":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},{"type":"null"}]}},"required":["kommune","region"]},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"},"as_of":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["bfe_nummer","type","jordstykker","dagi","meta"]},"MatrikelHistorik":{"type":"object","properties":{"type":{"type":"string","const":"matrikel_historik"},"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"jordstykker":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"versioner":{"type":"array","items":{"type":"object","properties":{"registrering_fra":{"anyOf":[{"type":"string"},{"type":"null"}]},"registrering_til":{"anyOf":[{"type":"string"},{"type":"null"}]},"virkning_fra":{"anyOf":[{"type":"string"},{"type":"null"}]},"virkning_til":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}]},"ejerlav":{"type":"object","properties":{"kode":{"anyOf":[{"type":"number"},{"type":"null"}]},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},"areal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["registrering_fra","registrering_til","virkning_fra","virkning_til","id","matrikelnummer","ejerlav","areal_m2","kommunekode"]}},"afkortet":{"type":"boolean"}},"required":["id","versioner","afkortet"]}},"afkortet":{"type":"boolean"},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["type","bfe_nummer","jordstykker","afkortet","meta"],"description":"Bitemporal version history for a property’s parcels (Matriklen Historik layer)."},"Jordstykke":{"type":"object","properties":{"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}]},"ejerlavskode":{"anyOf":[{"type":"number"},{"type":"null"}]},"ejerlavsnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"jordstykke":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}]},"ejerlav":{"type":"object","properties":{"kode":{"anyOf":[{"type":"number"},{"type":"null"}]},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},"areal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"geometri":{"anyOf":[{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"Polygon"},"coordinates":{"anyOf":[{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}},{"type":"null"}]},"epsg25832_ring":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}},"required":["type","coordinates","epsg25832_ring"]},{"type":"object","properties":{"type":{"type":"string","const":"MultiPolygon"},"coordinates":{"anyOf":[{"type":"array","items":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}}},{"type":"null"}]},"epsg25832_rings":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}}},"required":["type","coordinates","epsg25832_rings"]}]},{"type":"null"}]}},"required":["id","matrikelnummer","ejerlav","areal_m2","kommunekode","geometri"]},"dagi":{"type":"object","properties":{"kommune":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},{"type":"null"}]},"region":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},{"type":"null"}]}},"required":["kommune","region"]},"koordinat":{"anyOf":[{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},{"type":"null"}]},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["bfe_nummer","kommunekode","matrikelnummer","ejerlavskode","ejerlavsnavn","jordstykke","dagi","koordinat","meta"]},"GeodanmarkBygninger":{"type":"object","properties":{"bfe_nummer":{"type":"number"},"buildings":{"type":"array","items":{"type":"object","properties":{"bbr_uuid":{"type":"string"},"rings":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}}},"required":["bbr_uuid","rings"]}},"attribution":{"type":"string"},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["bfe_nummer","buildings","attribution","meta"]},"DemoProperty":{"type":"object","properties":{"punkt":{"anyOf":[{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},{"type":"null"}]},"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"adresse":{"anyOf":[{"type":"object","properties":{"betegnelse":{"type":"string"},"adgangsadresse_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnrnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"koordinat":{"anyOf":[{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},{"type":"null"}]}},"required":["betegnelse","adgangsadresse_id","postnr","postnrnavn","koordinat"]},{"type":"null"}]},"adresser":{"type":"array","items":{"type":"object","properties":{"betegnelse":{"type":"string"},"adgangsadresse_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnrnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"koordinat":{"anyOf":[{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},{"type":"null"}]}},"required":["betegnelse","adgangsadresse_id","postnr","postnrnavn","koordinat"]}},"parcel":{"anyOf":[{"type":"object","properties":{"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}]},"matrikelnumre":{"type":"array","items":{"type":"string"}},"antal_jordstykker":{"type":"number"},"ejerlavsnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"areal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"polygons":{"type":"array","items":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}}}},"required":["bfe_nummer","matrikelnummer","matrikelnumre","antal_jordstykker","ejerlavsnavn","areal_m2","kommunekode","polygons"]},{"type":"null"}]},"dagi":{"anyOf":[{"type":"object","properties":{"kommune":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},{"type":"null"}]},"region":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},{"type":"null"}]}},"required":["kommune","region"]},{"type":"null"}]},"bbr":{"anyOf":[{"type":"object","properties":{"antal_bygninger":{"type":"number"},"antal_enheder":{"type":"number"},"samlet_boligareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_erhvervsareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"hovedbygning_opfoerelsesaar":{"anyOf":[{"type":"number"},{"type":"null"}]},"hovedbygning_anvendelse":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["antal_bygninger","antal_enheder","samlet_boligareal_m2","samlet_erhvervsareal_m2","hovedbygning_opfoerelsesaar","hovedbygning_anvendelse"]},{"type":"null"}]},"terraen":{"anyOf":[{"type":"object","properties":{"terraen_m":{"anyOf":[{"type":"number"},{"type":"null"}]},"overflade_m":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["terraen_m","overflade_m"]},{"type":"null"}]},"stednavne":{"type":"array","items":{"type":"object","properties":{"navn":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"},"afstand_m":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["navn","type","afstand_m"]}},"buildings":{"type":"array","items":{"type":"object","properties":{"bbr_uuid":{"anyOf":[{"type":"string"},{"type":"null"}]},"rings":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}},"bbr":{"anyOf":[{"type":"object","properties":{"bygningsnummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"anvendelse":{"anyOf":[{"type":"string"},{"type":"null"}]},"opfoerelsesaar":{"anyOf":[{"type":"number"},{"type":"null"}]},"antal_etager":{"anyOf":[{"type":"number"},{"type":"null"}]},"bebygget_areal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_boligareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_erhvervsareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"antal_enheder":{"anyOf":[{"type":"number"},{"type":"null"}]},"ydervaeg":{"anyOf":[{"type":"string"},{"type":"null"}]},"tag":{"anyOf":[{"type":"string"},{"type":"null"}]},"varme":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["bygningsnummer","anvendelse","opfoerelsesaar","antal_etager","bebygget_areal_m2","samlet_boligareal_m2","samlet_erhvervsareal_m2","antal_enheder","ydervaeg","tag","varme"]},{"type":"null"}]}},"required":["bbr_uuid","rings","bbr"]}},"neighbours":{"type":"array","items":{"type":"object","properties":{"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"rings":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}}},"required":["bfe_nummer","rings"]}},"neighbour_buildings":{"type":"array","items":{"type":"object","properties":{"rings":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}}},"required":["rings"]}},"omraade":{"type":"object","properties":{"roads":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}},"water_polygons":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}},"water_lines":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}}},"required":["roads","water_polygons","water_lines"]},"tekniske_anlaeg":{"type":"array","items":{"type":"object","properties":{"klassifikation":{"anyOf":[{"type":"string"},{"type":"null"}]},"klassifikation_tekst":{"anyOf":[{"type":"string"},{"type":"null"}]},"art":{"type":"string","enum":["solceller","solvarme","pool","vindmoelle","tank","silo","mast","anlaeg"]},"punkt":{"anyOf":[{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]},{"type":"null"}]},"hoejde_m":{"anyOf":[{"type":"number"},{"type":"null"}]},"areal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"rotordiameter_m":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["klassifikation","klassifikation_tekst","art","punkt","hoejde_m","areal_m2","rotordiameter_m"]}},"attribution":{"anyOf":[{"type":"string"},{"type":"null"}]},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["punkt","bfe_nummer","adresse","adresser","parcel","dagi","bbr","terraen","stednavne","buildings","neighbours","neighbour_buildings","attribution","meta"]},"EjendomSitemap":{"type":"object","properties":{"ejendomme":{"type":"array","items":{"type":"object","properties":{"betegnelse":{"type":"string"},"bfe_nummer":{"type":"number"}},"required":["betegnelse","bfe_nummer"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["ejendomme","meta"]},"Energimaerke":{"type":"object","properties":{"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"label":{"type":"object","properties":{"serial":{"anyOf":[{"type":"string"},{"type":"null"}]},"klasse":{"anyOf":[{"type":"string"},{"type":"null"}]},"gyldig_til":{"anyOf":[{"type":"string"},{"type":"null"}]},"udstedt":{"anyOf":[{"type":"string"},{"type":"null"}]},"bygning_bbr_uuid":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["serial","klasse","gyldig_til","udstedt","bygning_bbr_uuid"]},"vinduer":{"type":"array","items":{"type":"object","properties":{"beskrivelse":{"anyOf":[{"type":"string"},{"type":"null"}]},"antal":{"anyOf":[{"type":"number"},{"type":"null"}]},"aar":{"anyOf":[{"type":"number"},{"type":"null"}]},"u_vaerdi":{"anyOf":[{"type":"number"},{"type":"null"}]},"rude_type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["beskrivelse","antal","aar","u_vaerdi","rude_type"]}},"forbedringsforslag":{"type":"array","items":{"type":"object","properties":{"beskrivelse":{"type":"string"},"aarlig_besparelse_kr":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["beskrivelse","aarlig_besparelse_kr"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["bfe_nummer","label","vinduer","forbedringsforslag","meta"]},"EjerlavList":{"type":"object","properties":{"antal":{"type":"number"},"total":{"type":"number"},"ejerlav":{"type":"array","items":{"type":"object","properties":{"kode":{"type":"number"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["antal","total","ejerlav","meta"]},"EjerlavOpslag":{"type":"object","properties":{"kode":{"type":"number"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["kode","navn","meta"]},"AdgangsadresseReverse":{"type":"object","properties":{"punkt":{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},"antal":{"type":"number"},"adresser":{"type":"array","items":{"type":"object","properties":{"betegnelse":{"type":"string"},"adgangsadresse_id":{"type":"string"},"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"vejnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"husnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnrnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"koordinat":{"anyOf":[{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},{"type":"null"}]},"afstand_m":{"type":"number"}},"required":["betegnelse","adgangsadresse_id","bfe_nummer","vejnavn","husnr","postnr","postnrnavn","kommunekode","koordinat","afstand_m"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["punkt","antal","adresser","meta"]},"AdgangsadresserByBfe":{"type":"object","properties":{"bfe_nummer":{"type":"number"},"antal":{"type":"number"},"truncated":{"type":"boolean"},"adresser":{"type":"array","items":{"type":"object","properties":{"betegnelse":{"type":"string"},"adgangsadresse_id":{"type":"string"},"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"vejnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"husnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnrnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"koordinat":{"anyOf":[{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},{"type":"null"}]}},"required":["betegnelse","adgangsadresse_id","bfe_nummer","vejnavn","husnr","postnr","postnrnavn","kommunekode","koordinat"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["bfe_nummer","antal","truncated","adresser","meta"]},"DatavaskResultat":{"type":"object","properties":{"kategori":{"type":"string","enum":["A","B","C"]},"antal":{"type":"number"},"resultater":{"type":"array","items":{"type":"object","properties":{"betegnelse":{"type":"string"},"adgangsadresse_id":{"type":"string"},"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"vejnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"husnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnrnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"koordinat":{"anyOf":[{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},{"type":"null"}]},"lighed":{"type":"number"}},"required":["betegnelse","adgangsadresse_id","bfe_nummer","vejnavn","husnr","postnr","postnrnavn","kommunekode","koordinat","lighed"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["kategori","antal","resultater","meta"]},"PostnummerList":{"type":"object","properties":{"antal":{"type":"number"},"total":{"type":"number"},"postnumre":{"type":"array","items":{"type":"object","properties":{"nr":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]},"stormodtager":{"type":"boolean"}},"required":["nr","navn","stormodtager"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["antal","total","postnumre","meta"]},"KommuneStats":{"type":"object","properties":{"opdateret":{"type":"string"},"kilde":{"type":"string","const":"live"},"national":{"type":"object","properties":{"adresser":{"type":"number"},"jordstykker":{"type":"number"},"kommuner":{"type":"number"}},"required":["adresser","jordstykker","kommuner"]},"kommuner":{"type":"array","items":{"type":"object","properties":{"kommunekode":{"type":"string"},"adresser":{"type":"number"},"jordstykker":{"type":"number"}},"required":["kommunekode","adresser","jordstykker"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["opdateret","kilde","national","kommuner","meta"]},"Postnummer":{"type":"object","properties":{"nr":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]},"stormodtager":{"type":"boolean"},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["nr","navn","stormodtager","meta"]},"VejnavnList":{"type":"object","properties":{"antal":{"type":"number"},"total":{"type":"number"},"vejnavne":{"type":"array","items":{"type":"string"}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["antal","total","vejnavne","meta"]},"Autocomplete":{"type":"object","properties":{"type":{"type":"string","enum":["adgangsadresse","vejnavn","postnummer"]},"antal":{"type":"number"},"resultater":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["adgangsadresse","vejnavn","postnummer"]},"tekst":{"type":"string"},"vaerdi":{"type":"string"}},"required":["type","tekst","vaerdi"]}}},"required":["type","antal","resultater"]},"DagiOmraade":{"type":"object","properties":{"tema":{"type":"string","enum":["region","kommune","sogn","retskreds","politikreds","opstillingskreds"]},"kode":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]},"regionskode":{"anyOf":[{"type":"string"},{"type":"null"}]},"geometri":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"MultiPolygon"},"coordinates":{"anyOf":[{"type":"array","items":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}}},{"type":"null"}]},"epsg25832_rings":{"type":"array","items":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}}}},"required":["type","coordinates","epsg25832_rings"]},{"type":"null"}]},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"},"geometri_status":{"type":"string","enum":["live","stale","unavailable","not_configured"]}},"required":["kilde","grundfast_version","geometri_status"]}},"required":["tema","kode","navn","regionskode","geometri","meta"],"description":"An administrative område: official code + navn + best-effort WGS84 geometry."},"DagiList":{"type":"object","properties":{"tema":{"type":"string","enum":["region","kommune","sogn","retskreds","politikreds","opstillingskreds"]},"antal":{"type":"number"},"omraader":{"type":"array","items":{"type":"object","properties":{"kode":{"type":"string"},"navn":{"type":"string"}},"required":["kode","navn"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["tema","antal","omraader","meta"]},"DagiIndex":{"type":"object","properties":{"temaer":{"type":"array","items":{"type":"object","properties":{"tema":{"type":"string","enum":["region","kommune","sogn","retskreds","politikreds","opstillingskreds"]},"antal":{"type":"number"}},"required":["tema","antal"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["temaer","meta"]},"DhmPunkt":{"type":"object","properties":{"punkt":{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},"epsg25832":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]},"terraen_m":{"anyOf":[{"type":"number"},{"type":"null"}]},"overflade_m":{"anyOf":[{"type":"number"},{"type":"null"}]},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["punkt","epsg25832","terraen_m","overflade_m","meta"]},"StednavnePunkt":{"type":"object","properties":{"punkt":{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},"radius_m":{"type":"number"},"antal":{"type":"number"},"truncated":{"type":"boolean"},"stednavne":{"type":"array","items":{"type":"object","properties":{"navn":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"},"afstand_m":{"anyOf":[{"type":"number"},{"type":"null"}]},"geometri":{"anyOf":[{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},{"type":"null"}]}},"required":["navn","type","afstand_m","geometri"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["punkt","radius_m","antal","truncated","stednavne","meta"]},"AdresseResponse":{"type":"object","properties":{"adresse":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"betegnelse":{"anyOf":[{"type":"string"},{"type":"null"}]},"vejnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"husnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"etage":{"anyOf":[{"type":"string"},{"type":"null"}]},"doer":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnrnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"koordinat":{"anyOf":[{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},{"type":"null"}]},"_note":{"type":"string"},"_error":{"type":"string"}},"required":["id","betegnelse"]},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"},"as_of":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["adresse","meta"],"description":"A DAR address resolved by UUID — structured + formatted (DAWA replacement)."},"AdresseHistorik":{"type":"object","properties":{"type":{"type":"string","const":"adresse_historik"},"id":{"type":"string"},"niveau":{"type":"string","enum":["adresse","husnummer"]},"versioner":{"type":"array","items":{"type":"object","properties":{"registrering_fra":{"anyOf":[{"type":"string"},{"type":"null"}]},"registrering_til":{"anyOf":[{"type":"string"},{"type":"null"}]},"virkning_fra":{"anyOf":[{"type":"string"},{"type":"null"}]},"virkning_til":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"string"},{"type":"null"}]},"husnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"etage":{"anyOf":[{"type":"string"},{"type":"null"}]},"doer":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["registrering_fra","registrering_til","virkning_fra","virkning_til","status","husnr","etage","doer"]}},"afkortet":{"type":"boolean"},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["type","id","niveau","versioner","afkortet","meta"],"description":"Bitemporal version history of one DAR address (Adresse or Husnummer grain)."},"AdresseSearch":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"betegnelse":{"type":"string"},"adgangsadresse_id":{"type":"string"},"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"vejnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"husnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnrnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"koordinat":{"anyOf":[{"type":"object","properties":{"lon":{"type":"number"},"lat":{"type":"number"}},"required":["lon","lat"]},{"type":"null"}]}},"required":["betegnelse","adgangsadresse_id","bfe_nummer","vejnavn","husnr","postnr","postnrnavn","kommunekode","koordinat"]}}},"required":["results"],"description":"DAR-native address autocomplete — pg_trgm-ranked adgangsadresser for a query."},"CvrResponse":{"type":"object","properties":{"virksomhed":{"type":"object","properties":{"cvr":{"type":"string"},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"string"},{"type":"null"}]},"virksomhedsform":{"anyOf":[{"type":"string"},{"type":"null"}]},"adresse":{"type":"object","properties":{"vejnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"husnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"etage":{"anyOf":[{"type":"string"},{"type":"null"}]},"doer":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnr":{"anyOf":[{"type":"string"},{"type":"null"}]},"postnrnavn":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommune_navn":{"anyOf":[{"type":"string"},{"type":"null"}]},"regionskode":{"anyOf":[{"type":"string"},{"type":"null"}]},"region_navn":{"anyOf":[{"type":"string"},{"type":"null"}]},"betegnelse":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["vejnavn","husnr","etage","doer","postnr","postnrnavn","kommunekode","kommune_navn","regionskode","region_navn","betegnelse"]},"branche":{"anyOf":[{"type":"object","properties":{"kode":{"anyOf":[{"type":"string"},{"type":"null"}]},"tekst":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","tekst"]},{"type":"null"}]},"startdato":{"anyOf":[{"type":"string"},{"type":"null"}]},"ophoersdato":{"anyOf":[{"type":"string"},{"type":"null"}]},"reklamebeskyttet":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"telefon":{"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"anyOf":[{"type":"string"},{"type":"null"}]},"hjemmeside":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["cvr","navn","status","virksomhedsform","adresse","branche","startdato","ophoersdato","reklamebeskyttet","telefon","email","hjemmeside"]},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["virksomhed","meta"],"description":"A CVR company resolved by CVR number — navn, status, beliggenhedsadresse, branche."},"CvrSearch":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"cvr_nummer":{"type":"number"},"navn":{"type":"string"},"status":{"anyOf":[{"type":"string"},{"type":"null"}]},"virksomhedsform":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommune":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["cvr_nummer","navn","status","virksomhedsform","kommune"]}},"count":{"type":"number"},"query":{"type":"string"}},"required":["results","count","query"],"description":"A page of CVR company summaries matched by name over the local index — each hit carries a cvr_nummer to fetch full detail via GET /v1/cvr/{cvr}."},"RegisterInput":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"password":{"type":"string","minLength":12,"maxLength":200},"name":{"type":"string","minLength":1,"maxLength":200}},"required":["email","password"]},"LoginInput":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"password":{"type":"string","minLength":1}},"required":["email","password"]},"PasswordResetRequestInput":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["email"]},"PasswordResetConfirmInput":{"type":"object","properties":{"token":{"type":"string","minLength":1,"maxLength":512},"password":{"type":"string","minLength":12,"maxLength":200}},"required":["token","password"]},"EmailVerifyConfirmInput":{"type":"object","properties":{"token":{"type":"string","minLength":1,"maxLength":512}},"required":["token"]},"CreateApiKeyInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"permission":{"default":"read_only","type":"string","enum":["full_access","read_only","admin"]},"mode":{"default":"live","type":"string","enum":["live","test"]},"expiresAt":{"type":"string","format":"date-time"}},"required":["name"]},"CreateCustomerInput":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"name":{"type":"string","minLength":1,"maxLength":200},"tier":{"default":"free","type":"string","enum":["free","starter","pro","scale","enterprise"]}},"required":["email"]}},"responses":{"Error":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}},"paths":{"/v1/bbr/ejendom:batch":{"post":{"summary":"Resolve up to 50 BFEs in one call (one billable unit per deduped BFE)","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjendomBatchInput"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Per-minute burst ceiling for the key's tier (requests/minute).","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current 60-second burst window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix-seconds timestamp when the burst window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Monthly included-call allowance (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Remaining included calls this month (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Reset":{"description":"Unix-seconds timestamp of the monthly quota reset.","schema":{"type":"integer"}},"X-Grundfast-Stale":{"description":"Present (\"true\") when a cached copy was served because the upstream was down.","schema":{"type":"string"}},"X-Grundfast-Cache-Age":{"description":"Seconds since the served (stale) copy was fetched from upstream.","schema":{"type":"string"}},"X-Grundfast-Environment":{"description":"\"live\" or \"test\". A \"test\" (gf_test_) key is a sandbox: never billed, capped at a separate monthly allowance, and not counted against the tier quota.","schema":{"type":"string","enum":["live","test"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjendomBatchResponse"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"description":"Property-keyed batch. Body is `{ bfe: number[] }` only (max 50, deduped). Always returns 200 with per-BFE results + partial-failure entries; only an invalid body is a 400. Consumes ONE billable unit per deduped BFE."}},"/v1/bbr/ejendom/{bfe}":{"get":{"summary":"Resolve the full BBR rollup for one BFE","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Per-minute burst ceiling for the key's tier (requests/minute).","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current 60-second burst window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix-seconds timestamp when the burst window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Monthly included-call allowance (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Remaining included calls this month (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Reset":{"description":"Unix-seconds timestamp of the monthly quota reset.","schema":{"type":"integer"}},"X-Grundfast-Stale":{"description":"Present (\"true\") when a cached copy was served because the upstream was down.","schema":{"type":"string"}},"X-Grundfast-Cache-Age":{"description":"Seconds since the served (stale) copy was fetched from upstream.","schema":{"type":"string"}},"X-Grundfast-Environment":{"description":"\"live\" or \"test\". A \"test\" (gf_test_) key is a sandbox: never billed, capped at a separate monthly allowance, and not counted against the tier quota.","schema":{"type":"string","enum":["live","test"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjendomRollup"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"bfe","in":"path","required":true,"description":"BFE (Bestemt Fast Ejendom) number — the cadastral property key.","schema":{"type":"integer","exclusiveMinimum":0}},{"name":"asOf","in":"query","required":false,"description":"Bitemporal point-in-time: resolve the record as registered/valid at this ISO-8601 date/datetime instead of now; echoed in meta.as_of. Matriklen requires the Historik WFS (503 until configured for the deployment).","schema":{"type":"string","format":"date-time"}}]}},"/v1/bbr/ejendom/{bfe}/historik":{"get":{"summary":"BBR version history for one BFE","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BbrHistorik"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"bfe","in":"path","required":true,"description":"BFE (Bestemt Fast Ejendom) number — the cadastral property key.","schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/bbr/ejendom/{bfe}/geojson":{"get":{"summary":"Resolve a BFE as a WFS-compat GeoJSON FeatureCollection","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BbrFeatureCollection"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"bfe","in":"path","required":true,"description":"BFE (Bestemt Fast Ejendom) number — the cadastral property key.","schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/bbr/bygning":{"get":{"summary":"Building(s) for a BFE (query param)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjendomRollup"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"bfe","in":"query","required":true,"schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/matrikel/ejendom/{bfe}":{"get":{"summary":"Cadastre (Matriklen) rollup for one BFE","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatrikelEjendom"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"Matriklen WFS source not configured for this deployment; /v1/demo/matrikel works offline.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"parameters":[{"name":"bfe","in":"path","required":true,"description":"BFE (Bestemt Fast Ejendom) number — the cadastral property key.","schema":{"type":"integer","exclusiveMinimum":0}},{"name":"asOf","in":"query","required":false,"description":"Bitemporal point-in-time: resolve the record as registered/valid at this ISO-8601 date/datetime instead of now; echoed in meta.as_of. Matriklen requires the Historik WFS (503 until configured for the deployment).","schema":{"type":"string","format":"date-time"}}]}},"/v1/matrikel/ejendom/{bfe}/historik":{"get":{"summary":"Cadastre version history for one BFE","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatrikelHistorik"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"bfe","in":"path","required":true,"description":"BFE (Bestemt Fast Ejendom) number — the cadastral property key.","schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/geodanmark/bygninger/{bfe}":{"get":{"summary":"GeoDanmark building footprints for one BFE","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeodanmarkBygninger"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"GeoDanmark WFS source not configured; /v1/demo/geodanmark/bygninger works offline.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"parameters":[{"name":"bfe","in":"path","required":true,"description":"BFE (Bestemt Fast Ejendom) number — the cadastral property key.","schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/energimaerke/{bfe}":{"get":{"summary":"Energy label (Energimærke) for one BFE","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Energimaerke"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"Energimærke (EMOData) source not configured for this deployment; /v1/demo/energimaerke works offline.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"parameters":[{"name":"bfe","in":"path","required":true,"description":"BFE (Bestemt Fast Ejendom) number — the cadastral property key.","schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/jordstykker/reverse":{"get":{"summary":"Cadastral parcel (incl. BFE) covering a WGS84 point — the address→BFE bridge","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Jordstykke"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"description":"No gældende jordstykke covers the point / matches the cadastral key.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"Matriklen WFS source not configured for this deployment; /v1/demo/jordstykke works offline.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"parameters":[{"name":"lon","in":"query","required":false,"description":"WGS84 longitude (decimal degrees). Required unless x/y are given.","schema":{"type":"number"}},{"name":"lat","in":"query","required":false,"description":"WGS84 latitude (decimal degrees). Required unless x/y are given.","schema":{"type":"number"}},{"name":"x","in":"query","required":false,"description":"DAWA-style easting/longitude (paired with y + srid).","schema":{"type":"number"}},{"name":"y","in":"query","required":false,"description":"DAWA-style northing/latitude (paired with x + srid).","schema":{"type":"number"}},{"name":"srid","in":"query","required":false,"description":"CRS of x/y: 4326 (WGS84 lon/lat, default) or 25832 (ETRS89/UTM32N metres).","schema":{"type":"string","enum":["4326","25832"]}}]}},"/v1/jordstykker":{"get":{"summary":"Cadastral parcel (incl. BFE) by ejerlavskode + matrikelnummer","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Jordstykke"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"description":"No gældende jordstykke covers the point / matches the cadastral key.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"Matriklen WFS source not configured for this deployment; /v1/demo/jordstykke works offline.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"parameters":[{"name":"ejerlavkode","in":"query","required":true,"description":"Ejerlavskode (the cadastral district code).","schema":{"type":"integer","exclusiveMinimum":0}},{"name":"matrikelnr","in":"query","required":true,"description":"Matrikelnummer within the ejerlav, e.g. \"4a\", \"7000bs\".","schema":{"type":"string"}}]}},"/v1/ejerlav":{"get":{"summary":"Ejerlav register (cadastral districts), paged","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjerlavList"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"per_side","in":"query","required":false,"description":"Page size.","schema":{"type":"integer"}},{"name":"side","in":"query","required":false,"description":"Page number (1-based).","schema":{"type":"integer"}}]}},"/v1/ejerlav/autocomplete":{"get":{"summary":"Ejerlav type-ahead (kode prefix or navn)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjerlavList"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"q","in":"query","required":true,"description":"Kode prefix or ejerlavsnavn substring.","schema":{"type":"string"}}]}},"/v1/ejerlav/{kode}":{"get":{"summary":"One ejerlav by kode","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjerlavOpslag"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"kode","in":"path","required":true,"description":"Ejerlavskode.","schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/postnumre":{"get":{"summary":"All Danish postnumre (nr → district navn)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostnummerList"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"stormodtagere","in":"query","required":false,"description":"Include the bundled historical stormodtager (large-recipient) codes PostNord retired in Jan 2025. Default false, matching DAWA — every corpus code is stormodtager:false.","schema":{"type":"boolean"}}]}},"/v1/postnumre/autocomplete":{"get":{"summary":"Postnummer type-ahead (nr prefix or district navn)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostnummerList"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"q","in":"query","required":true,"description":"Postnr prefix or district navn substring.","schema":{"type":"string"}},{"name":"stormodtagere","in":"query","required":false,"description":"Include the bundled historical stormodtager (large-recipient) codes PostNord retired in Jan 2025. Default false, matching DAWA — every corpus code is stormodtager:false.","schema":{"type":"boolean"}}]}},"/v1/postnumre/{nr}":{"get":{"summary":"One postnummer","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Postnummer"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"nr","in":"path","required":true,"description":"4-digit postal code.","schema":{"type":"string"}}]}},"/v1/vejnavne":{"get":{"summary":"Distinct Danish street names, paged","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VejnavnList"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"per_side","in":"query","required":false,"description":"Page size.","schema":{"type":"integer"}},{"name":"side","in":"query","required":false,"description":"Page number (1-based).","schema":{"type":"integer"}},{"name":"kommunekode","in":"query","required":false,"description":"Scope the street names to one kommune (4-digit kommunekode, e.g. 0101).","schema":{"type":"string"}}]}},"/v1/vejnavne/autocomplete":{"get":{"summary":"Vejnavn type-ahead","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VejnavnList"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"q","in":"query","required":true,"description":"Street-name prefix/substring.","schema":{"type":"string"}},{"name":"kommunekode","in":"query","required":false,"description":"Scope the street names to one kommune (4-digit kommunekode, e.g. 0101).","schema":{"type":"string"}}]}},"/v1/autocomplete":{"get":{"summary":"Unified type-ahead (vejnavn / adgangsadresse / postnummer) — the DAWA /autocomplete drop-in","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Autocomplete"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"description":"Address index not configured (only affects type=adgangsadresse).","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"parameters":[{"name":"q","in":"query","required":true,"description":"Free-text query (min 2 chars).","schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"Resource to search (default adgangsadresse). `adresse` is the DAWA alias and is served from the adgangsadresse index.","schema":{"type":"string","enum":["adresse","adgangsadresse","vejnavn","postnummer"]}},{"name":"kommunekode","in":"query","required":false,"description":"Scope the street names to one kommune (4-digit kommunekode, e.g. 0101).","schema":{"type":"string"}}]}},"/v1/dagi":{"get":{"summary":"Discovery index: available DAGI temaer + område counts","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DagiIndex"}}}}}}},"/v1/dagi/{tema}":{"get":{"summary":"List a DAGI division (code → navn)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DagiList"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"tema","in":"path","required":true,"description":"Administrative division: region, kommune, sogn, retskreds, politikreds, or opstillingskreds.","schema":{"type":"string","enum":["region","kommune","sogn","retskreds","politikreds","opstillingskreds"]}}]}},"/v1/dagi/{tema}/{kode}":{"get":{"summary":"Resolve one administrative område (navn + best-effort geometry)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Per-minute burst ceiling for the key's tier (requests/minute).","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current 60-second burst window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix-seconds timestamp when the burst window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Monthly included-call allowance (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Remaining included calls this month (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Reset":{"description":"Unix-seconds timestamp of the monthly quota reset.","schema":{"type":"integer"}},"X-Grundfast-Stale":{"description":"Present (\"true\") when a cached copy was served because the upstream was down.","schema":{"type":"string"}},"X-Grundfast-Cache-Age":{"description":"Seconds since the served (stale) copy was fetched from upstream.","schema":{"type":"string"}},"X-Grundfast-Environment":{"description":"\"live\" or \"test\". A \"test\" (gf_test_) key is a sandbox: never billed, capped at a separate monthly allowance, and not counted against the tier quota.","schema":{"type":"string","enum":["live","test"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DagiOmraade"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"tema","in":"path","required":true,"description":"Administrative division: region, kommune, sogn, retskreds, politikreds, or opstillingskreds.","schema":{"type":"string","enum":["region","kommune","sogn","retskreds","politikreds","opstillingskreds"]}},{"name":"kode","in":"path","required":true,"description":"Official DAGI code, e.g. 0751 (Aarhus kommune), 1084 (Region Hovedstaden).","schema":{"type":"string"}}]}},"/v1/dhm/punkt":{"get":{"summary":"Terrain + surface elevation at a WGS84 point","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DhmPunkt"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"DHM source not configured for this deployment; /v1/demo/dhm works offline.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"parameters":[{"name":"lon","in":"query","required":true,"description":"WGS84 longitude (decimal degrees).","schema":{"type":"number"}},{"name":"lat","in":"query","required":true,"description":"WGS84 latitude (decimal degrees).","schema":{"type":"number"}}]}},"/v1/orto/tile/{z}/{x}/{y}":{"get":{"summary":"Aerial ortofoto tile (256×256 web-mercator JPEG)","security":[{"bearerAuth":[]}],"parameters":[{"name":"z","in":"path","required":true,"description":"Zoom level (0–21), web-mercator XYZ scheme.","schema":{"type":"integer","minimum":0,"maximum":21}},{"name":"x","in":"path","required":true,"description":"Tile column, 0 ≤ x < 2^z.","schema":{"type":"integer","minimum":0}},{"name":"y","in":"path","required":true,"description":"Tile row, 0 ≤ y < 2^z (0 at the north edge).","schema":{"type":"integer","minimum":0}},{"name":"aar","in":"query","required":false,"description":"Capture year of a past årgang (see /v1/orto/aargange). Omit for the current mosaic. A year the service does not publish is a 400; a year that does not COVER this tile is a 404. Never a silent fallback to the current imagery.","schema":{"type":"integer","minimum":1900,"maximum":2200}}],"responses":{"200":{"description":"JPEG tile","content":{"image/jpeg":{"schema":{"type":"string","format":"binary"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"Ortofoto source not configured for this deployment; /v1/demo/orto/tile/... works offline.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}}}},"/v1/orto/aargange":{"get":{"summary":"Available ortofoto årgange (national series)","description":"Ortofoto årgange the upstream publishes, newest first, derived from its GetCapabilities. NOTE: coverage is REGIONAL per year — Denmark is flown in a rotation, so most points are covered by only a few of these years, and this list is what the SERVICE publishes rather than what covers any given point. A tile request for a year that does not cover the requested tile answers 404 rather than the upstream blank image.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Årgange","content":{"application/json":{"schema":{"type":"object","required":["aargange"],"properties":{"aargange":{"type":"array","items":{"type":"object","required":["aar","layer","oploesningCm","candidates"],"properties":{"aar":{"type":"integer","description":"Capture year."},"layer":{"type":"string","description":"Default upstream layer for the year. The layer actually used for a tile is chosen per point from `candidates`."},"oploesningCm":{"type":"number","description":"Ground sample distance in cm (10 or 12.5)."},"candidates":{"type":"array","description":"Every layer that could serve this year. A year is often flown as several part-country collections; which (if any) reaches a given point decides coverage.","items":{"type":"object","required":["layer","oploesningCm","national","bbox"],"properties":{"layer":{"type":"string"},"oploesningCm":{"type":"number"},"national":{"type":"boolean","description":"A geodanmark_* layer. It declares the whole country regardless of where that year was flown, so its extent is NOT a coverage claim and `bbox` is null."},"bbox":{"nullable":true,"type":"object","description":"Advertised WGS84 extent. Present (and meaningful) only for the part-country collections.","properties":{"w":{"type":"number"},"e":{"type":"number"},"s":{"type":"number"},"n":{"type":"number"}}}}}}}}}}}}}},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/v1/stednavne/punkt":{"get":{"summary":"Named places near a WGS84 point","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StednavnePunkt"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"Stednavne source not configured for this deployment; /v1/demo/stednavne works offline.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"parameters":[{"name":"lon","in":"query","required":true,"description":"WGS84 longitude (decimal degrees).","schema":{"type":"number"}},{"name":"lat","in":"query","required":true,"description":"WGS84 latitude (decimal degrees).","schema":{"type":"number"}},{"name":"radius","in":"query","required":false,"description":"Search radius in metres (default 1000, max 5000).","schema":{"type":"integer"}}]}},"/v1/adresse/search":{"get":{"summary":"DAR-native address autocomplete","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Per-minute burst ceiling for the key's tier (requests/minute).","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current 60-second burst window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix-seconds timestamp when the burst window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Monthly included-call allowance (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Remaining included calls this month (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Reset":{"description":"Unix-seconds timestamp of the monthly quota reset.","schema":{"type":"integer"}},"X-Grundfast-Stale":{"description":"Present (\"true\") when a cached copy was served because the upstream was down.","schema":{"type":"string"}},"X-Grundfast-Cache-Age":{"description":"Seconds since the served (stale) copy was fetched from upstream.","schema":{"type":"string"}},"X-Grundfast-Environment":{"description":"\"live\" or \"test\". A \"test\" (gf_test_) key is a sandbox: never billed, capped at a separate monthly allowance, and not counted against the tier quota.","schema":{"type":"string","enum":["live","test"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdresseSearch"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"description":"Address search not enabled / index not yet populated; /v1/demo/adresse-search works offline.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"description":"Fuzzy + prefix address autocomplete served from a local DAR index (the live DAR GraphQL host is point-query only). Each hit carries the adgangsadresse UUID, the covering BFE (when stamped), the structured fields and a WGS84 point — the DAWA-replacement search surface.","parameters":[{"name":"q","in":"query","required":true,"description":"Free-text query (min 2 characters).","schema":{"type":"string","minLength":2}},{"name":"per_side","in":"query","required":false,"description":"Max hits to return (default 8, clamped to 1–20).","schema":{"type":"integer","minimum":1,"maximum":20}}]}},"/v1/adresse/{uuid}":{"get":{"summary":"Resolve a DAR address by its UUID","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Per-minute burst ceiling for the key's tier (requests/minute).","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current 60-second burst window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix-seconds timestamp when the burst window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Monthly included-call allowance (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Remaining included calls this month (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Reset":{"description":"Unix-seconds timestamp of the monthly quota reset.","schema":{"type":"integer"}},"X-Grundfast-Stale":{"description":"Present (\"true\") when a cached copy was served because the upstream was down.","schema":{"type":"string"}},"X-Grundfast-Cache-Age":{"description":"Seconds since the served (stale) copy was fetched from upstream.","schema":{"type":"string"}},"X-Grundfast-Environment":{"description":"\"live\" or \"test\". A \"test\" (gf_test_) key is a sandbox: never billed, capped at a separate monthly allowance, and not counted against the tier quota.","schema":{"type":"string","enum":["live","test"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdresseResponse"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"DAR address source not configured for this deployment; /v1/demo/adresse works offline.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"description":"The DAWA-replacement address surface: resolve ONE DAR id_lokalId (UUID) to the clean, structured address (vejnavn, husnr, etage/dør, postnr/postnrnavn, WGS84 point). Resolution by UUID only — there is no address search/autocomplete.","parameters":[{"name":"uuid","in":"path","required":true,"description":"DAR id_lokalId (UUID) — e.g. a unit’s adresseIdentificerer from BBR.","schema":{"type":"string","format":"uuid"}},{"name":"asOf","in":"query","required":false,"description":"Bitemporal point-in-time: resolve the record as registered/valid at this ISO-8601 date/datetime instead of now; echoed in meta.as_of. Matriklen requires the Historik WFS (503 until configured for the deployment).","schema":{"type":"string","format":"date-time"}}]}},"/v1/adresse/{uuid}/historik":{"get":{"summary":"DAR address version history","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdresseHistorik"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"uuid","in":"path","required":true,"description":"DAR id_lokalId (UUID) — e.g. a unit’s adresseIdentificerer from BBR.","schema":{"type":"string","format":"uuid"}}]}},"/v1/adgangsadresser/reverse":{"get":{"summary":"Nearest access addresses to a WGS84 point (DAWA /adgangsadresser/reverse)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdgangsadresseReverse"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"description":"Address search not enabled / index not yet populated.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"parameters":[{"name":"lon","in":"query","required":false,"description":"WGS84 longitude (or x/y/srid).","schema":{"type":"number"}},{"name":"lat","in":"query","required":false,"description":"WGS84 latitude (or x/y/srid).","schema":{"type":"number"}},{"name":"x","in":"query","required":false,"description":"DAWA-style x (paired with y + srid).","schema":{"type":"number"}},{"name":"y","in":"query","required":false,"description":"DAWA-style y (paired with x + srid).","schema":{"type":"number"}},{"name":"srid","in":"query","required":false,"description":"CRS of x/y: 4326 (default) or 25832.","schema":{"type":"string","enum":["4326","25832"]}},{"name":"radius","in":"query","required":false,"description":"Search radius in metres (default 200, max 1000).","schema":{"type":"integer"}},{"name":"per_side","in":"query","required":false,"description":"Max hits, nearest first (default 1, max 20).","schema":{"type":"integer"}}]}},"/v1/adgangsadresser/bfe/{bfe}":{"get":{"summary":"All access addresses on a BFE (inverse of /adgangsadresser/reverse)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdgangsadresserByBfe"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"description":"Address search not enabled / index not yet populated.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"parameters":[{"name":"bfe","in":"path","required":true,"description":"BFE (Bestemt Fast Ejendom) number — the cadastral property key.","schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/datavask/adgangsadresser":{"get":{"summary":"Fuzzy-clean a dirty address string → DAR candidates + A/B/C band (DAWA /datavask/adgangsadresser)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatavaskResultat"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"description":"Address search not enabled / index not yet populated.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"parameters":[{"name":"betegnelse","in":"query","required":true,"description":"The dirty/legacy address string to wash (min 2 characters).","schema":{"type":"string","minLength":2}}]}},"/v1/cvr/search":{"get":{"summary":"Search CVR companies by name","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Per-minute burst ceiling for the key's tier (requests/minute).","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current 60-second burst window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix-seconds timestamp when the burst window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Monthly included-call allowance (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Remaining included calls this month (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Reset":{"description":"Unix-seconds timestamp of the monthly quota reset.","schema":{"type":"integer"}},"X-Grundfast-Stale":{"description":"Present (\"true\") when a cached copy was served because the upstream was down.","schema":{"type":"string"}},"X-Grundfast-Cache-Age":{"description":"Seconds since the served (stale) copy was fetched from upstream.","schema":{"type":"string"}},"X-Grundfast-Environment":{"description":"\"live\" or \"test\". A \"test\" (gf_test_) key is a sandbox: never billed, capped at a separate monthly allowance, and not counted against the tier quota.","schema":{"type":"string","enum":["live","test"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CvrSearch"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"description":"CVR name search not enabled, or the local company index has not been seeded yet; use /v1/cvr/{cvr} for by-number lookup.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"description":"Fritekst / navnesøgning: find companies whose name matches the query, ranked by trigram similarity over a LOCAL company index (the live CVR host is eq-only and cannot fuzzy-search, so search is served from a bulk-ingested corpus — like address autocomplete). Each hit is a compact summary (cvr_nummer, navn, status, virksomhedsform, kommune); fetch full detail with GET /v1/cvr/{cvr}. Gated behind CVR_SEARCH_ENABLED + a seeded index — 503 until both. Note that for personally-owned forms (e.g. Enkeltmandsvirksomhed) a match may constitute the owner’s personal data — see docs/DPIA-CVR-SOLE-PROPRIETOR.md.","parameters":[{"name":"q","in":"query","required":true,"description":"Company-name query (min 2 characters).","schema":{"type":"string","minLength":2}},{"name":"limit","in":"query","required":false,"description":"Max companies to return (default 10, clamped to 1–20).","schema":{"type":"integer","minimum":1,"maximum":20}}]}},"/v1/cvr/{cvr}":{"get":{"summary":"Resolve a CVR company by CVR number","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Per-minute burst ceiling for the key's tier (requests/minute).","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current 60-second burst window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix-seconds timestamp when the burst window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Monthly included-call allowance (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Remaining included calls this month (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Reset":{"description":"Unix-seconds timestamp of the monthly quota reset.","schema":{"type":"integer"}},"X-Grundfast-Stale":{"description":"Present (\"true\") when a cached copy was served because the upstream was down.","schema":{"type":"string"}},"X-Grundfast-Cache-Age":{"description":"Seconds since the served (stale) copy was fetched from upstream.","schema":{"type":"string"}},"X-Grundfast-Environment":{"description":"\"live\" or \"test\". A \"test\" (gf_test_) key is a sandbox: never billed, capped at a separate monthly allowance, and not counted against the tier quota.","schema":{"type":"string","enum":["live","test"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CvrResponse"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"CVR source not configured for this deployment; /v1/demo/cvr works offline.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"description":"Resolve ONE CVR number (Det Centrale Virksomhedsregister) to the clean, re-joined company record: navn, lifecycle status, beliggenhedsadresse (with translated kommune/region names), virksomhedsform and hovedbranche. This is CVR register data; note that for personally-owned forms (e.g. Enkeltmandsvirksomhed) navn/beliggenhedsadresse may constitute the owner’s personal data — see docs/DPIA-CVR-SOLE-PROPRIETOR.md. Contact fields telefon/email are gated behind a source flag and suppressed for reklamebeskyttet companies (hjemmeside is not in the CVR model, so it is always null). Lookup by CVR number; company name search is a separate surface.","parameters":[{"name":"cvr","in":"path","required":true,"description":"CVR-nummer — an 8-digit Danish company registration number.","schema":{"type":"string","pattern":"^\\d{8}$"}}]}},"/v1/kodeliste/{navn}":{"get":{"summary":"Translated code list (kode -> tekst)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KodelisteResponse"}}}},"404":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"navn","in":"path","required":true,"schema":{"type":"string","enum":["bygningsanvendelse","enhedsanvendelse","varmeinstallation","opvarmningsmiddel","supplerendevarme","ydervaeg","tagdaekning"]}}]}},"/v1/stats/kommuner":{"get":{"summary":"Per-kommune adresse/jordstykke counts for the national map (public, keyless)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KommuneStats"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/ejendom":{"get":{"summary":"Offline BBR sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjendomRollup"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/ejendom.geojson":{"get":{"summary":"Offline GeoJSON sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BbrFeatureCollection"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/matrikel":{"get":{"summary":"Offline cadastre sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatrikelEjendom"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/geodanmark/bygninger":{"get":{"summary":"Offline GeoDanmark footprint sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeodanmarkBygninger"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/property":{"get":{"summary":"Keyless property map — covering parcel + building footprints + point (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoProperty"}}}},"400":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}},"description":"Supply either a coordinate (lon+lat, or DAWA-style x/y with srid) OR a bfe. A call with neither returns 400. Every part of the payload is best-effort: an uncovered point yields parcel:null and an unconfigured GeoDanmark yields buildings:[], never a 5xx.","parameters":[{"name":"lon","in":"query","required":false,"description":"WGS84 longitude (decimal degrees). Required unless x/y are given.","schema":{"type":"number"}},{"name":"lat","in":"query","required":false,"description":"WGS84 latitude (decimal degrees). Required unless x/y are given.","schema":{"type":"number"}},{"name":"x","in":"query","required":false,"description":"DAWA-style easting/longitude (paired with y + srid).","schema":{"type":"number"}},{"name":"y","in":"query","required":false,"description":"DAWA-style northing/latitude (paired with x + srid).","schema":{"type":"number"}},{"name":"srid","in":"query","required":false,"description":"CRS of x/y: 4326 (WGS84 lon/lat, default) or 25832 (ETRS89/UTM32N metres).","schema":{"type":"string","enum":["4326","25832"]}},{"name":"bfe","in":"query","required":false,"description":"BFE number; the parcel centroid is used as the point. Required unless lon+lat / x+y are given.","schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/demo/ejendom-sitemap":{"get":{"summary":"Keyless property-sitemap feed — sample of (bfe, betegnelse)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjendomSitemap"}}}},"404":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"limit","in":"query","required":false,"description":"Number of properties to sample (default 5000; larger values are clamped to the server sample cap).","schema":{"type":"integer","minimum":1}}]}},"/v1/demo/energimaerke":{"get":{"summary":"Offline energy-label sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Energimaerke"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/jordstykke":{"get":{"summary":"Offline parcel/BFE sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Jordstykke"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/ejerlav":{"get":{"summary":"Offline ejerlav sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjerlavList"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/dagi":{"get":{"summary":"Offline DAGI område sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DagiOmraade"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/dhm":{"get":{"summary":"Offline DHM elevation sample (no token)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DhmPunkt"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/orto/tile/{z}/{x}/{y}":{"get":{"summary":"Offline ortofoto sample tile (no token)","security":[],"parameters":[{"name":"z","in":"path","required":true,"description":"Zoom level (0–21), web-mercator XYZ scheme.","schema":{"type":"integer","minimum":0,"maximum":21}},{"name":"x","in":"path","required":true,"description":"Tile column, 0 ≤ x < 2^z.","schema":{"type":"integer","minimum":0}},{"name":"y","in":"path","required":true,"description":"Tile row, 0 ≤ y < 2^z (0 at the north edge).","schema":{"type":"integer","minimum":0}},{"name":"aar","in":"query","required":false,"description":"Capture year of a past årgang (see /v1/orto/aargange). Omit for the current mosaic. A year the service does not publish is a 400; a year that does not COVER this tile is a 404. Never a silent fallback to the current imagery.","schema":{"type":"integer","minimum":1900,"maximum":2200}}],"responses":{"200":{"description":"JPEG tile","content":{"image/jpeg":{"schema":{"type":"string","format":"binary"}}}},"400":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/orto/aargange":{"get":{"summary":"Available ortofoto årgange (no key)","description":"Ortofoto årgange the upstream publishes, newest first, derived from its GetCapabilities. NOTE: coverage is REGIONAL per year — Denmark is flown in a rotation, so most points are covered by only a few of these years, and this list is what the SERVICE publishes rather than what covers any given point. A tile request for a year that does not cover the requested tile answers 404 rather than the upstream blank image.","security":[],"responses":{"200":{"description":"Årgange","content":{"application/json":{"schema":{"type":"object","required":["aargange"],"properties":{"aargange":{"type":"array","items":{"type":"object","required":["aar","layer","oploesningCm","candidates"],"properties":{"aar":{"type":"integer","description":"Capture year."},"layer":{"type":"string","description":"Default upstream layer for the year. The layer actually used for a tile is chosen per point from `candidates`."},"oploesningCm":{"type":"number","description":"Ground sample distance in cm (10 or 12.5)."},"candidates":{"type":"array","description":"Every layer that could serve this year. A year is often flown as several part-country collections; which (if any) reaches a given point decides coverage.","items":{"type":"object","required":["layer","oploesningCm","national","bbox"],"properties":{"layer":{"type":"string"},"oploesningCm":{"type":"number"},"national":{"type":"boolean","description":"A geodanmark_* layer. It declares the whole country regardless of where that year was flown, so its extent is NOT a coverage claim and `bbox` is null."},"bbox":{"nullable":true,"type":"object","description":"Advertised WGS84 extent. Present (and meaningful) only for the part-country collections.","properties":{"w":{"type":"number"},"e":{"type":"number"},"s":{"type":"number"},"n":{"type":"number"}}}}}}}}}}}}}},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/stednavne":{"get":{"summary":"Offline placenames sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StednavnePunkt"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/adresse":{"get":{"summary":"Offline DAR address sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdresseResponse"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/adresse-search":{"get":{"summary":"Offline address autocomplete sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdresseSearch"}}}},"404":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"q","in":"query","required":false,"description":"Free-text query (min 2 chars) — serves a live, capped taste of the real index. Omitted/too short, or with search off, the bundled offline sample is returned.","schema":{"type":"string"}}]}},"/v1/demo/cvr":{"get":{"summary":"Offline CVR company sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CvrResponse"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/auth/register":{"post":{"summary":"Self-serve registration (creates a free-tier customer + owner)","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterInput"}}}},"responses":{"201":{"description":"Created"},"400":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"}}}},"/v1/auth/login":{"post":{"summary":"Log in (sets the session cookie)","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginInput"}}}},"responses":{"200":{"description":"OK"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"}}}},"/v1/auth/password/forgot":{"post":{"summary":"Request a password-reset email (generic 200; 503 when email is unconfigured)","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetRequestInput"}}}},"responses":{"200":{"description":"Accepted (no account enumeration)"},"403":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/v1/auth/password/reset":{"post":{"summary":"Complete a password reset with the emailed token","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetConfirmInput"}}}},"responses":{"200":{"description":"OK"},"400":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"}}}},"/v1/auth/email/verify":{"post":{"summary":"Confirm an email address with the emailed token (503 when the flow is off)","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailVerifyConfirmInput"}}}},"responses":{"200":{"description":"OK"},"400":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/v1/auth/logout":{"post":{"summary":"Log out (revokes the session)","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/auth/me":{"get":{"summary":"Current identity (session or API key)","responses":{"200":{"description":"OK"}}}},"/v1/keys":{"post":{"summary":"Mint an API key (session-only; plaintext returned once)","description":"When the email-verification flow is enabled, minting a live (gf_live) key requires a verified email (403 otherwise). Test keys are never gated.","security":[{"cookieAuth":[]}],"responses":{"201":{"description":"Created"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"}}},"get":{"summary":"List API keys","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}},"delete":{"summary":"Revoke ALL API keys (leaked-key panic button; session-only)","description":"Revokes every key for the caller’s customer at once. A password reset does not touch keys (they are independent machine credentials), so this is the explicit lever to cut a leaked key off. Returns { revoked: n }.","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"},"401":{"$ref":"#/components/responses/Error"}}}},"/v1/keys/{keyId}":{"delete":{"summary":"Revoke an API key","security":[{"cookieAuth":[]}],"parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/me/keys":{"get":{"summary":"List own API keys","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/me/email/verify/request":{"post":{"summary":"(Re)send a verification email to the caller (503 when the flow is off)","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Accepted (no-op if already verified)"},"403":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/v1/me/usage":{"get":{"summary":"Month-to-date usage + overage estimate","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/me/usage/timeseries":{"get":{"summary":"Per-day billable-call counts for the current month","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/me/usage/endpoints":{"get":{"summary":"Top endpoint families by call count this month","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/me/usage/recent":{"get":{"summary":"Live feed of recent API calls (dashboard \"Forespørgsler\" view)","description":"Ephemeral, in-memory ring buffer of the caller’s recent metered calls, for the dashboard live view. Poll with `?after=<cursor>` to receive only calls newer than the previous response’s `cursor`. Not the billing ledger.","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/me/billing":{"get":{"summary":"Tier + Stripe linkage","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/me/checkout":{"post":{"summary":"Start a Stripe Checkout session to upgrade the caller’s own tier","description":"Session-scoped self-serve upgrade. Body is `{ tier }`; returns the Stripe Checkout URL to redirect the user to. Rate-limited (mintRateLimit).","security":[{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tier":{"type":"string"}},"required":["tier"]}}}},"responses":{"200":{"description":"OK"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/me/billing-portal":{"post":{"summary":"Open a Stripe Billing Portal session for the caller’s own subscription","description":"Session-scoped self-serve management (cancel at period end, update the payment method, view invoices). Returns the Stripe Billing Portal URL to redirect the user to. 409 when the customer has no Stripe subscription yet.","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"},"401":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/v1/me/erase":{"post":{"summary":"Erase the caller’s account (GDPR right-to-erasure)","description":"Session-scoped, OWNER-only, irreversible. Anonymizes all personal data (user + customer email/name) and deletes every credential (API keys, sessions, tokens, webhooks); Stripe subscriptions are canceled. Accounting records (usage/billing) are RETAINED under the legal-obligation exemption. Requires a typed confirmation: the body must echo the caller’s own account email. Clears the session on success.","security":[{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["confirm"],"properties":{"confirm":{"type":"string","description":"The caller’s own account email, to confirm intent."}}}}}},"responses":{"200":{"description":"Erased (or already erased — idempotent)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/matrikel/ejendom:batch":{"post":{"summary":"Resolve up to 50 BFEs’ cadastre rollups in one call","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"bfe":{"type":"array","items":{"type":"integer"}}},"required":["bfe"]}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Per-minute burst ceiling for the key's tier (requests/minute).","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current 60-second burst window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix-seconds timestamp when the burst window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Monthly included-call allowance (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Remaining included calls this month (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Reset":{"description":"Unix-seconds timestamp of the monthly quota reset.","schema":{"type":"integer"}},"X-Grundfast-Stale":{"description":"Present (\"true\") when a cached copy was served because the upstream was down.","schema":{"type":"string"}},"X-Grundfast-Cache-Age":{"description":"Seconds since the served (stale) copy was fetched from upstream.","schema":{"type":"string"}},"X-Grundfast-Environment":{"description":"\"live\" or \"test\". A \"test\" (gf_test_) key is a sandbox: never billed, capped at a separate monthly allowance, and not counted against the tier quota.","schema":{"type":"string","enum":["live","test"]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/adresse:batch":{"post":{"summary":"Resolve up to 50 DAR address UUIDs in one call","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"array","items":{"type":"string"}}},"required":["uuid"]}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Per-minute burst ceiling for the key's tier (requests/minute).","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current 60-second burst window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix-seconds timestamp when the burst window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Monthly included-call allowance (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Remaining included calls this month (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Reset":{"description":"Unix-seconds timestamp of the monthly quota reset.","schema":{"type":"integer"}},"X-Grundfast-Stale":{"description":"Present (\"true\") when a cached copy was served because the upstream was down.","schema":{"type":"string"}},"X-Grundfast-Cache-Age":{"description":"Seconds since the served (stale) copy was fetched from upstream.","schema":{"type":"string"}},"X-Grundfast-Environment":{"description":"\"live\" or \"test\". A \"test\" (gf_test_) key is a sandbox: never billed, capped at a separate monthly allowance, and not counted against the tier quota.","schema":{"type":"string","enum":["live","test"]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/dagi:batch":{"post":{"summary":"Resolve up to 50 områder within one tema in a single call","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tema":{"type":"string"},"kode":{"type":"array","items":{"type":"string"}}},"required":["tema","kode"]}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Per-minute burst ceiling for the key's tier (requests/minute).","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current 60-second burst window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix-seconds timestamp when the burst window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Monthly included-call allowance (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Remaining included calls this month (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Reset":{"description":"Unix-seconds timestamp of the monthly quota reset.","schema":{"type":"integer"}},"X-Grundfast-Stale":{"description":"Present (\"true\") when a cached copy was served because the upstream was down.","schema":{"type":"string"}},"X-Grundfast-Cache-Age":{"description":"Seconds since the served (stale) copy was fetched from upstream.","schema":{"type":"string"}},"X-Grundfast-Environment":{"description":"\"live\" or \"test\". A \"test\" (gf_test_) key is a sandbox: never billed, capped at a separate monthly allowance, and not counted against the tier quota.","schema":{"type":"string","enum":["live","test"]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/datavask/adgangsadresser:batch":{"post":{"summary":"Vask (fuzzy-clean) up to 50 dirty address strings in one call","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"betegnelser":{"type":"array","items":{"type":"string"}}},"required":["betegnelser"]}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Per-minute burst ceiling for the key's tier (requests/minute).","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current 60-second burst window.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix-seconds timestamp when the burst window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Monthly included-call allowance (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Remaining":{"description":"Remaining included calls this month (or \"unlimited\").","schema":{"type":"string"}},"X-Quota-Reset":{"description":"Unix-seconds timestamp of the monthly quota reset.","schema":{"type":"integer"}},"X-Grundfast-Stale":{"description":"Present (\"true\") when a cached copy was served because the upstream was down.","schema":{"type":"string"}},"X-Grundfast-Cache-Age":{"description":"Seconds since the served (stale) copy was fetched from upstream.","schema":{"type":"string"}},"X-Grundfast-Environment":{"description":"\"live\" or \"test\". A \"test\" (gf_test_) key is a sandbox: never billed, capped at a separate monthly allowance, and not counted against the tier quota.","schema":{"type":"string","enum":["live","test"]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/export":{"post":{"summary":"Create an async bulk-export job (CSV/NDJSON/GeoJSON over a bounded id list)","description":"Resolves the supplied ids (bfe[] for bbr/matrikel, uuid[] for adresse) cache-first and serializes to the chosen format. Metered per requested id. Poll the job, then GET …/download once status is `completed`.","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"register":{"type":"string","enum":["bbr","matrikel","adresse"]},"format":{"type":"string","enum":["csv","ndjson","geojson"]},"bfe":{"type":"array","items":{"type":"integer"}},"uuid":{"type":"array","items":{"type":"string"}}},"required":["register","format"]}}}},"responses":{"201":{"description":"Job queued"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"get":{"summary":"List the caller’s export jobs","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/export/{id}":{"get":{"summary":"Export job status","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/export/{id}/download":{"get":{"summary":"Download the generated export file (409 while still processing)","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The export file"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}}}},"/v1/me/webhooks":{"get":{"summary":"List own webhook endpoints","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}},"post":{"summary":"Register a webhook endpoint (the signing secret is returned ONCE)","security":[{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"}},"description":{"type":"string"}},"required":["url","events"]}}}},"responses":{"201":{"description":"Created"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"}}}},"/v1/me/webhooks/{id}":{"patch":{"summary":"Update a webhook endpoint (url / events / description / enabled)","security":[{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"OK"},"400":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"}}},"delete":{"summary":"Delete a webhook endpoint","security":[{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/me/webhooks/{id}/deliveries":{"get":{"summary":"Recent delivery attempts for an endpoint (audit log)","security":[{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/v1/me/webhooks/{id}/test":{"post":{"summary":"Send a one-off signed test ping; returns the live outcome","security":[{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}}}}}