Energy label preview
Submit a building envelope, ventilation, lighting, hot-water, and heating-system model. Receive a BE26 energy label and compliance summary before a final certificate exists.
Send a building model and get BE18/BE26 primary energy, energy label, compliance, monthly demand, and overheating results. Resolve Danish addresses when you need building facts or existing energy-label summaries for a workflow.
The API is for products that need calculation-grade energy numbers, not just a static registry lookup.
Submit a building envelope, ventilation, lighting, hot-water, and heating-system model. Receive a BE26 energy label and compliance summary before a final certificate exists.
Run equivalent inputs with standard: "BE18" and
standard: "BE26" to compare old and new regulatory
assumptions in an internal tool.
Resolve a typed Danish address into stable building identifiers, then use those identifiers to prefill area, construction year, usage, floors, wall material, roof material, and heat supply.
Fetch slim energy-label summaries for a building to compare a new design calculation with existing classification, heated area, emissions, savings, and improvement proposals.
Replace the placeholder host with your assigned API host. Keep the key server-side; do not ship it in browser code or mobile apps.
export BE26_BASE_URL="https://api.example.com"
read -rsp "BE26 API key: " BE26_API_KEY
echo
curl -sS "$BE26_BASE_URL/v1/be26/calculate" \
-H "Authorization: Bearer $BE26_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"standard": "BE26",
"format": "json",
"input": {
"Building": {
"Ae": 180,
"Ae4": 180,
"Dwellings": 1,
"ThHeat": 21,
"ThSetp": 23,
"ThNV": 24,
"ThCool": 25,
"Tu": -12,
"DimRoomTemp": 20,
"HeatCap": 55,
"UsageHoursPerWeek": 50,
"StartTime": 8,
"EndTime": 17,
"BuildType": "Atype",
"BasicHeatSupply": "SupEl",
"CalcCondition": "Actual",
"OpaqueConstr": [
{ "Area": 180, "U": 0.09, "B": 1 },
{ "Area": 156, "U": 0.08, "B": 1 },
{ "Area": 117.9, "U": 0.16, "B": 1 }
],
"TranspConstr": [
{
"Area": 20,
"U": 1,
"B": 1,
"Orient": "S",
"Slope": 90,
"G": 0.62,
"FF": 0.75
}
],
"Ventilation": [
{
"Area": 180,
"Fo": 1,
"Qvm": 0.32,
"Nvgv": 0.88,
"Tin": 18,
"Sel": 0.9
}
],
"Usage": {
"Area": 180,
"Load": { "Qp": 1.5, "Qe": 2.5, "QeNight": 1 }
},
"Lighting": {
"Area": 180,
"Load": {
"PInst": 5,
"EtaDim": 0.2,
"Fo": 1,
"RequiredLux": 300,
"DaylightFactor": 2
}
},
"HeatDistrib": { "InletTemp": 45, "ReturnTemp": 30 },
"HotWater": { "Consumption": 250, "Temp": 55, "SupplyTemp": 60 }
},
"HeatingSystems": {
"HeatPumps": [
{
"AFrac": 1,
"VpType": "VpComb",
"RoomHeating": {
"NomEff": 5.2,
"NomCOP": 4.2,
"RelCOP50": 1,
"TempCold": 2,
"TempWarm": 30,
"TypeCold": "VpU",
"TypeWarm": "VpV"
},
"DHW": {
"NomEff": 4.8,
"NomCOP": 2.55,
"RelCOP50": 1,
"TempCold": 7,
"TempWarm": 50,
"TypeCold": "VpU",
"TypeWarm": "VpV"
}
}
]
}
}
}'
A successful calculation returns object: "be26.calculation",
request_id, normalized input metadata, and a
summary containing annual primary energy, label,
compliance, heating, cooling, hot-water, electricity, and reference
area fields.
These examples show the type of output to expect. Exact values depend on your input model and the building selected.
POST /v1/be26/calculateA2015, 33.12 kWh/m2/year, compliant.GET /v1/buildings/resolveVesterbrogade 1, 1620 Kobenhavn VGET /v1/buildings/{id}/contextGET /v1/buildings/{id}/energy-labels
The beta API surface is intentionally small. Use
/v1/openapi.json on your assigned base URL as the source
of truth for schemas.
Basic service health.
OpenAPI contract for the current public API surface.
Compact route summary for agents and developer tools.
Calculate BE18 or BE26 from JSON input or raw BEXML.
Resolve a Danish address query into candidate building identifiers.
Fetch curated public building context for a resolved identifier.
Fetch slim energy-label summaries for a resolved building.
curl -sS "$BE26_BASE_URL/v1/buildings/resolve?query=Vesterbrogade%201%2C%201620%20Kobenhavn%20V&limit=5" \
-H "Authorization: Bearer $BE26_API_KEY"
Errors use application/problem+json. Preserve
request_id when reporting failed or surprising responses.
{
"type": "https://docs.be26.dk/errors/validation-failed",
"title": "Validation failed",
"status": 400,
"detail": "Request body failed validation.",
"code": "validation_failed",
"request_id": "req_...",
"retryable": false,
"errors": [
{
"field": "input.Building.Ae",
"message": "must be greater than zero"
}
]
}
Responses can include X-RateLimit-Limit,
X-RateLimit-Remaining, X-RateLimit-Reset,
and Retry-After. Retry only when an error response says
retryable: true.