Get property data into your product.
This API turns a Danish address or coordinate pair into building facts, climate conditions, property context, imagery, documents, and reports.
What data is available?
One API for the questions people ask about a Danish property. Coverage depends on the address and the selected route.
Start with GET /v1/buildings/{identifier} for an aggregated response. Use GET /v1/data-catalog to read the machine-readable list of domains and supported routes.
Get access
Every product request is authenticated with a scoped API key.
Use a test key
Ask for a dkbd_test_... key for staging. Your key determines which areas you can read, such as building:read, property:read, or climate:read.
Authorization: Bearer dkbd_test_...Make your first request
Start in staging, then switch one value when you are ready for production.
export DKBD_BASE_URL="https://dk-building-api-xkmmrc742a-ew.a.run.app"
export DKBD_API_KEY="dkbd_test_..."
curl -sS "$DKBD_BASE_URL/v1/buildings/resolve?query=Henriksvej+7,+2400+K%C3%B8benhavn+NV" \
-H "Authorization: Bearer $DKBD_API_KEY"
For production, use https://dk-building-api-aoc37aohja-ew.a.run.app and a dkbd_live_... key. The response gives you an address_id; use that stable ID for subsequent property requests.
Choose what to fetch
Start from the workflow you are building, then follow the route family.
GET /v1/buildings/resolvebuilding:readGET /v1/buildings/{identifier}building:readGET /v1/properties/contextproperty:readGET /v1/climate/riskclimate:readGET /v1/buildings/{id}/energy-labelsenergy_label:readLocation routes accept an address, an address_id, or both lat and lng. If text is ambiguous, the API returns candidates instead of guessing.
See the response shapes
These snippets are intentionally abbreviated. The full field list is below each response, and the downloadable OpenAPI contract is the source of truth.
{
"object": "building.resolve",
"results": [{
"address_id": "0a3f509e-a0ff-32b8-e044-0003ba298018",
"display_address": "Henriksvej 7, 2400 København NV",
"coordinates": { "latitude": 55.7186, "longitude": 12.5326 }
}]
}{
"object": "building.context",
"facts": {
"construction_year": 1919,
"total_dwelling_area_m2": 132,
"heating_installation": "Fjernvarme"
},
"sources": [{ "source": "bbr" }]
}Full context fields Envelope: schema_version, object, request_id, id, id_type. Building: bbr_id, bfe_number, municipality_code, status. Facts: construction_year, renovation_year, usage_code, usage, total_building_area_m2, total_dwelling_area_m2, total_commercial_area_m2, built_area_m2, basement_area_m2, number_of_floors, outer_wall_material, roof_material, heating_installation, heating_fuel, supplementary_heating. Property also includes area, unit-count, water-supply, and sewerage fields.
{
"object": "building.energy_labels",
"labels": [{
"energy_classification": "C",
"valid_from": "2025-01-20",
"energy_need_kwh_per_m2": 105.8897
}],
"count": 1
}Full energy-label fields Each label can include energy_label_id, validity dates, current and original classification, heated area, energy need, CO₂ emissions, calculation basis, usage type, new-build and mixed-use flags, address, BBR identifiers, label and calculation software, proposal result, projected savings, and improvement_proposal_count.
Use it through MCP
The same property data is available as tools for MCP-compatible AI clients.
Production MCP endpoint
Connect to https://dk-building-api-aoc37aohja-ew.a.run.app/mcp with the same live API key and scopes as REST. The server uses Streamable HTTP and exposes 19 tools, including data discovery, building context, energy labels, climate, property context, documents, and reports.
Authorization: Bearer dkbd_live_...{
"mcpServers": {
"danish-building-data": {
"url": "https://dk-building-api-aoc37aohja-ew.a.run.app/mcp",
"headers": { "Authorization": "Bearer dkbd_live_..." }
}
}
}The key is bound to the MCP session when the client initializes. Keep the Mcp-Session-Id private and let your MCP client manage it.
Handle long-running jobs
Documents and building reports are asynchronous.
POST /v1/document-jobsGET /v1/document-jobs/{job_id}completed or failedKnow what to do when it fails
Keep the request ID; it is how support finds a request in the logs.
Machine-readable reference
OpenAPI 3.1
Fetch /v1/openapi.json from your chosen host to validate requests or generate a client. Production is currently available at https://dk-building-api-aoc37aohja-ew.a.run.app; the custom gateway hostname will be added when its normalized routes are promoted.