1. Start with building data
Send your own model, or build one from area, envelope, windows, ventilation, hot water, heating system, PV, and battery data.
Send building data, or start from an existing EPC. We calculate annual primary energy consumption under BE26, return the energy label, and say whether the building complies. That result can then be used to evaluate envelope and heating measures against an energy renovation objective.
Start from the best data you have. The API calculates the current BE26 baseline; renovation guidance can then evaluate what changes improve that result.
Send your own model, or build one from area, envelope, windows, ventilation, hot water, heating system, PV, and battery data.
Use an existing energy performance certificate as the source model when you have one. The example below starts from a real EPC and recalculates it as BE26.
Call POST /v1/be26/calculate. The response gives you
annual primary energy in kWh/m2/year, the BE26
energy label, and a compliance result.
Compare envelope and heating-system measures, estimate savings and cost, and choose the actions that fit the renovation target.
The calculation tells you where the building is now. Renovation guidance uses that same model to tell you what to change next.
Compare measures by annual primary energy, expected energy saving, estimated investment, payback, or practical fit for the building.
Evaluate actions such as loft insulation, facade insulation, floor insulation, window replacement, door replacement, and envelope bundles where available.
Evaluate heat-source changes such as oil or gas boiler replacement, heat pumps, district heating, controls, and distribution upgrades.
Compare energy savings, estimated investment, payback, category, exclusions, and envelope bundles where available before selecting a renovation path.
Most products start with the summary fields. Renovation workflows use the full model and monthly/system totals to compare scenarios.
The headline consumption number, normalized as
kWh/m2/year. This is the value most user interfaces
should show first.
The calculated label for the submitted model. In the example, an
existing EPC with source label C is recalculated as
BE26 and returns label B.
A boolean answer for whether the submitted model complies under
the selected standard. The example result is
compliant: false.
Every calculation response includes a support ID. Store it when a result needs investigation or a customer asks why a number changed.
Start with the fixture if you do not have your own building data yet. It is a real EPC-derived model with a small BE26 scenario added.
export BE26_BASE_URL="https://api.example.com"
export BE26_EXAMPLE_URL="https://be26-docs.pages.dev/examples/be26-epc-example.json"
read -rsp "BE26 API key: " BE26_API_KEY
echo
curl -sS "$BE26_EXAMPLE_URL" -o be26-epc-example.json
curl -sS "$BE26_BASE_URL/v1/be26/calculate" \
-H "Authorization: Bearer $BE26_API_KEY" \
-H "Content-Type: application/json" \
--data @be26-epc-example.json
The fixture starts from EPC 311806905 for
Henriksvej 7, 2400 København NV. The source label is
C, valid from 2025-01-20 to
2035-01-20, with 195 m2 heated area and
district heating. For the example calculation, we add a PV
scenario, a 5 kWh battery, and room ventilation assumptions, then
calculate the model as BE26.
For this fixture, BE26 returns 75.42 kWh/m2/year,
energy label B, and compliant: false. The
full response also includes monthly demand and system totals.
Most integrations use one calculation call and, when they do not already have building data, one or more lookup calls.
POST /v1/be26/calculateB, 75.42 kWh/m2/year, not compliant.GET /v1/buildings/resolveHenriksvej 7, 2400 København NV0101, street code 2820, postal code, and coordinates.GET /v1/buildings/{id}/context120, 132 m2 dwelling area, one dwelling, district heating.GET /v1/buildings/{id}/energy-labels6023018.311806905: class C, 195 m2 heated area, 105.89 kWh/m2/year.
Use /v1/openapi.json on your base URL as the source of
truth for request and response 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=Henriksvej%207%2C%202400%20K%C3%B8benhavn%20NV&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.