dbDanish Building Data Public API · v1 alpha

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 you needAn API key and a base URL. Production is live; use the test environment below to develop safely. Request a key from your Plans contact — keys are never published in this site.
00

What data is available?

One API for the questions people ask about a Danish property. Coverage depends on the address and the selected route.

BuildingBuilding type, age, size, construction details, and registered building facts.
PropertyProperty context, boundaries, land use, planning information, and nearby property data.
EnergyEnergy labels, heating systems, technical installations, and heating availability.
ClimateWeather, groundwater, rainfall and coastal flood risk, and combined climate risk.
EnvironmentEnvironmental constraints, soil contamination, noise, and other local conditions.
Nature and waterNatural areas, soil conditions, water features, and related environmental context.
NeighbourhoodSchools, childcare, shops, sports, health, and other local services.
TransportPublic transport, roads, railways, and electric-vehicle charging nearby.
InfrastructureUtilities and infrastructure such as water, district heating, electricity, and power networks.
Images and mapsAerial, street-level, map, terrain, and property imagery when available.
DocumentsPublic property documents, permits, historical records, and construction material.
ReportsGenerated building and climate reports, including downloadable report files.

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.

01

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_...
02

Make your first request

Start in staging, then switch one value when you are ready for production.

Terminal
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.

03

Choose what to fetch

Start from the workflow you are building, then follow the route family.

When you needCallScope
Find an addressGET /v1/buildings/resolvebuilding:read
Aggregate building dataGET /v1/buildings/{identifier}building:read
Property contextGET /v1/properties/contextproperty:read
Climate conditionsGET /v1/climate/riskclimate:read
Energy labelsGET /v1/buildings/{id}/energy-labelsenergy_label:read

Location routes accept an address, an address_id, or both lat and lng. If text is ambiguous, the API returns candidates instead of guessing.

04

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.

Resolve an address · GET /v1/buildings/resolve
{
  "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 }
  }]
}
Building context · GET /v1/buildings/{id}/context
{
  "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.

Energy labels · GET /v1/buildings/{id}/energy-labels
{
  "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.

05

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_...
MCP client configuration
{
  "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.

06

Handle long-running jobs

Documents and building reports are asynchronous.

1 · StartPOST /v1/document-jobs
2 · PollGET /v1/document-jobs/{job_id}
3 · Finishcompleted or failed
07

Know what to do when it fails

Keep the request ID; it is how support finds a request in the logs.

401 / 403Check the key and required scope.
409Choose one of the returned address candidates.
429Wait for the returned retry window.
X-Request-IDInclude it in every support report.

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.