Changelog¶
All notable changes to the Urban Analytica Solar Lake Enterprise API are documented here.
0.6.4¶
Added 2026 to installation counts¶
Annual installation counts based on the Marktstammdatenregister from 2026 were added to the postcode and municipality data:
count_installations_2026_mastr
0.6.3¶
Added option for address validation to batch coordinate lookup¶
- Added optional address validation to
POST /buildings-coordinates. - Address details can now be supplied for each coordinate using the optional fields
street,house_number,postcode, andlocality. - Supplied address fields are normalized and compared with the address of the building resolved from the coordinates.
- Validation results include field-level matches for street, house number, postcode, and locality, as well as an overall assessment:
exact,probable,different, orinsufficient. - Address validation is fully compatible with
options.select; address fields used internally for validation are only returned when explicitly selected. - Existing requests without address information remain unchanged. The address does not influence the coordinate-based building matching.
v0.6.2¶
Data Model Updates¶
Buildings
Added new building-level and neighborhood-level attributes:
heritage_protection→ indicates whether a building is subject to heritage protectiongrid_share_heating_oil→ share of buildings using heating oil as their main heating source in the surrounding 100 × 100 meter grid cellgrid_share_heating_gas→ share of buildings using gas as their main heating sourcegrid_share_heating_renewable→ share of buildings using renewable heating systems such as heat pumpsgrid_share_heating_district→ share of buildings using district heatinggrid_share_heating_others→ share of buildings using other heating sourcesgrid_share_heating_unknown→ share of buildings with an unknown main heating sourcegrid_population→ population in the surrounding 100 × 100 meter grid cell
H3, postcode, and municipality aggregates
Added the following regional aggregate fields:
count_heritage_buildings→ number of buildings subject to heritage protectionshare_heating_oilshare_heating_gasshare_heating_renewableshare_heating_districtshare_heating_othersshare_heating_unknownpopulation
The heating fields represent the share of buildings by main heating source within the respective H3 cell, postcode area, or municipality.
Geometry Updates¶
- Fixed Polygon and MultiPolygon geometries containing holes
- Further simplified postcode and municipality geometries for faster map rendering
Filtering¶
All newly added fields are supported in Mongo-like filters where applicable.
Impact¶
- Building targeting can now incorporate heritage protection, local heating structure, and population context.
- Regional analysis can compare heating technologies and population across H3 cells, postcodes, and municipalities.
- The new fields can be combined with existing building, solar potential, ownership, and building-age filters.
- Corrected and simplified geometries improve spatial accuracy and map-rendering performance.
v0.6.1¶
Fixes¶
- Fixed filter validation behavior for
POST /query/buildingsandPOST /bbox/buildings - Added support for filtering building queries by neighborhood/grid share fields such as
grid_share_pre_1990s - Improved consistency and robustness of request validation for Mongo-like filters
Impact¶
- Building extraction and viewport queries now support additional neighborhood-based filtering options
- Filter validation behaves consistently regardless of filter ordering
v0.6.0¶
Major Infrastructure Upgrade¶
The Solar Lake Enterprise API has moved to a new production infrastructure and upgraded to the latest application stack.
The new setup improves:
- interruption-free database updates
- API stability during data refreshes
- automated testing and validation of API behavior
- long-term maintainability and deployment reliability
New API and Documentation URLs¶
The API base URL has changed:
- Old:
https://ua-api-solar-lake-enterprise.azurewebsites.net - New:
https://api.sle.urbananalytica.de
The documentation is now available at:
https://docs.sle.urbananalytica.de
Clients should update their configured API base URL to the new domain. Endpoints and authentication via subscription_key remain unchanged.
Data Model Updates¶
Building
- Added
building_area, the area of the building footprint in square meters. - Fixed
roof_areavalues. Some roof area values were slightly incorrect before this release. - Added
municipality, which contains the official name of the municipality (Gemeinde).
Postcode and municipality aggregates
Added Marktstammdatenregister PV installation counts by system size:
count_pv_lt_4kwp_mastr→ number of residential PV installations with less than 4 kWp capacitycount_pv_4_15kwp_mastr→ number of residential PV installations with 4-15 kWp capacitycount_pv_gt_15kwp_mastr→ number of residential PV installations with more than 15 kWp capacity
Others¶
- Minor improvements of the OpenAPI documentation
Impact¶
- Clients get a more robust API with smoother data updates and stronger test coverage.
- Building records now expose both building footprint area and roof area.
- Regional aggregate analysis can distinguish small, medium, and larger residential PV installations based on Marktstammdatenregister data.
v0.5.3¶
Overview¶
Coordinate-based building lookup behavior updated
The coordinate lookup endpoints now use a containment-first strategy with a limited nearest-building fallback.
Affected endpoints:
GET /building-coordinatesPOST /buildings-coordinates
Updated matching logic¶
Previously, coordinate lookups returned a building only when the input point was inside a building footprint.
The new behavior is:
- First, try an exact footprint match.
- If no footprint contains the point, search for buildings within 2 meters.
- Return a fallback match only when exactly one building is within 2 meters.
- Otherwise, return no match.
This avoids ambiguous nearest-building assignments when multiple nearby buildings are possible matches.
Response update¶
POST /buildings-coordinates now includes a new match_type field on each returned item:
insidenearest_within_2m
The GET /building-coordinates response model is unchanged and does not include match_type.
Impact¶
- Coordinate lookups are more forgiving for points that fall just outside a building footprint.
- Ambiguous near-building cases remain unresolved by design.
- Batch clients can now distinguish exact matches from fallback matches explicitly.
v0.5.2¶
Overview¶
POST /buildings-coordinates response structure updated
The batch endpoint for resolving buildings by coordinates has been redesigned for improved usability and robustness.
New response format¶
Each item now includes the original input coordinate:
{
"input_point": { "lon": 6.8592, "lat": 51.176 },
"building": {
"building_id": "01c02e568d94065d29c7fd9e",
"building_height": 9,
"pv": false
}
}
Previously, items contained only building objects without a reference to the input coordinate.
Improved handling of invalid / out-of-scope coordinates¶
- Requests no longer fail when coordinates lie outside the supported bounding box of Germany
- Such points are now returned in
missing_points - The endpoint now guarantees a full result set for all inputs
Example:
{
"requested": 2,
"returned": 1,
"missing_points": [
{ "lon": 17.1202, "lat": 51.481 }
]
}
Rationale¶
- Enables deterministic client-side merging of results
- Improves robustness of batch workflows
- Eliminates unexpected
500 Internal Server Errorresponses
v0.5.1¶
New Features¶
Marktstammdatenregister aggregates
Postcode and municipality aggregates were extended with photovoltaic installation metrics derived from the Marktstammdatenregister.
The following new fields are available:
count_pv_mastr→ estimated number of residential photovoltaic installationssum_kwp_mastr→ total installed photovoltaic capacity in kWpcount_batteries_mastr→ number of photovoltaic installations with battery storage
Installation year breakdown
Annual installation counts were added to enable time-based analysis of PV deployment:
count_installations_pre_2000_mastrcount_installations_2000_mastr...count_installations_2025_mastr
These fields provide a detailed view of installation dynamics over time and allow users to distinguish between mature and recently growing markets.
Scope¶
The new Marktstammdatenregister fields are available for:
- Postcodes
- Municipalities
H3 aggregates are unchanged and do not include Marktstammdatenregister-based metrics.
Notes¶
- All new fields are non-null and greater or equal to zero.
- The
_mastrsuffix indicates that the values are derived from the Marktstammdatenregister and are distinct from imagery-based or model-based metrics such ascount_pv. - The new fields are fully supported in filtering and projection for bounding box and batch endpoints.
v0.5.0¶
Data Model Improvements¶
Several building and aggregate data models were updated to improve naming consistency and better reflect the underlying sales opportunity analysis.
Building model updates
- Replaced legacy
sales_opportunitywith two fields: sales_opportunity_score→ continuous score representing the expected sales potentialdeal_size_class→ categorical classification of potential deal sizes (super,good,other)- Replaced the boolean
terraced_housewith the categorical fieldbuilding_type(values:multi-family house,terraced house,apartment buildingunclassified) - Added
roof_type - Standardized
img_dateas a date field
Aggregate model updates
- Standardized naming of sales opportunity fields across all aggregate levels (H3, postcodes, municipalities)
- Renamed fields for consistency:
score_sales_opportunity→sales_opportunity_scorecount_super_sales_opportunity→count_super_deal_sizecount_good_sales_opportunity→count_good_deal_sizecount_other_sales_opportunity→count_other_deal_size- Removed outdated field
count_excellent_sales_opportunity
Updated Sales Opportunity Score¶
The computation of the sales opportunity score was revised to better reflect real sales potential.
The new score:
- is based on an economic model of expected values
- the expected value consists of two components: sales probability and sales volume
- integrates improved building-level characteristics
- incorporates neighborhood context
- provides a more consistent ranking of areas and buildings for sales targeting
The score is available on:
- Buildings (
sales_opportunity_score) - Aggregates (H3 cells, postcodes, municipalities)
Viewport / H3 improvements¶
The POST /bbox/h3s endpoint now supports optionally returning empty H3 cells within the requested bounding box.
Clients can control this behavior via the new request option:
include_empty_cells = "no"(default) – only cells with data are returnedinclude_empty_cells = "ids"– IDs of empty cells are returnedinclude_empty_cells = "geometries"– full geometries of empty cells are returned
Empty cells are returned separately from normal items and do not contain any aggregated metrics.
This allows map clients to optionally render a complete H3 grid (for example with faint outlines or background shading) while still distinguishing between cells with data and cells without residential buildings.
Additional response fields may appear when this option is used:
empty_h3_ids– list of H3 cell IDs without dataempty_items– list of empty cells including geometryempty_cells_suppressed– indicates that empty cells were not returned due to pagination (skiporlimit)
This feature is particularly useful for map visualization, where empty cells can help users better interpret areas without residential buildings.
Fixes¶
- Added missing regions in Brandenburg.
- Fixed behavior of
limitoption for the POST-endpointbbox/h3s.
Others¶
- Increased automated test coverage and added performance benchmarks.
- Added automated daily health and performance checks.
Impact¶
- Improved consistency of data models across API entities
- Clearer separation between sales opportunity scoring and deal size classification
- More meaningful ranking of buildings and regions for campaign targeting
- Further option for styling H3 viewports
v0.4.1¶
Improvements¶
- Simplified geometries of postcode areas and municipalities
v0.4.0¶
Data Update & PV Classification Expansion¶
Expanded PV Classification Coverage¶
- Photovoltaic (PV) detection and classification is now available for all federal states, instead of being limited to a single state.
- Building-level PV indicators are now consistently available across the full dataset.
New Field: solar_thermal¶
- Added a new building-level field:
solar_thermal→ indicates whether a building has 1–3 small solar thermal collectors installed.
- This allows differentiation between:
- Buildings with photovoltaic systems (PV)
- Buildings with small solar thermal installations
- Buildings without solar systems
Updated Sales Opportunity Classification¶
Building Level¶
- The sales opportunity classification remains:
supergoodother
- Classification logic has been updated to reflect improved PV detection and expanded geographic coverage.
Aggregate Level (H3, Postcodes, Municipalities)¶
- Aggregates now:
- Count buildings by updated sales opportunity categories.
- Include an additional count of excellent sales opportunities, incorporating neighborhood-level characteristics.
- The regional sales opportunity score has been recalculated based on the updated building classifications and extended contextual factors.
New Field: return_on_investment¶
- Added expected return on investment (%) to the building data
Impact¶
- More complete and consistent PV classification nationwide.
- Improved differentiation between PV and solar thermal installations.
- More robust and regionally aware sales opportunity scoring.
Fix¶
- Renamed
share_pre1990toshare_pre_1990sin aggregate data models.
v0.3.4¶
Improvements¶
- Improve selection mechanism of postcodes and municipalities for the GET and POST endpoints
bbox/postcodesandbbox/municipalities
Fix¶
- Allow missing image dates in building models
v0.3.3¶
Improvements¶
- Improved performance and stability of building batch lookups
- Simplified batch lookup endpoints (
/buildings,/postcodes,/municipalities,/h3s,/buildings-coordinates)- These endpoints now behave as strict exact-ID lookups and no longer support pagination options (
skip,limit), resulting in clearer and more predictable behavior.
- These endpoints now behave as strict exact-ID lookups and no longer support pagination options (
- Improved OpenAPI examples
- Updated example IDs and coordinates in Swagger UI to use realistic, working values for easier testing and faster onboarding.
Fixes¶
- Fixed incorrect "missing ID" reporting in H3 batch endpoint
- Stricter validation for building IDs
- Invalid 24-character ObjectIds now return a
422 Unprocessable Entityerror instead of silently failing.
- Invalid 24-character ObjectIds now return a
v0.3.2¶
Improvements¶
- Improve auto-resolution option for
bbox/h3
v0.3.1¶
Improvements¶
- Refined OpenAPI documentation and schema definitions
- Improved validation behavior for filters and request bodies
- Improved error messaging for invalid filters and region selectors
Documentation¶
- Extended MkDocs documentation
- Added dedicated pages for:
- Buildings
- Aggregates
- Bounding Boxes
- Queries
- Swagger / OpenAPI reference
- Troubleshooting
v0.3.0¶
Major Milestones¶
Bulk extraction endpoint¶
- Added
POST /query/buildings - Region selector (exactly one required)
- Mongo-like filtering
- Field projection via
options.select - Cursor-based pagination via
options.after_building_id
This enables scalable campaign exports and large regional data extraction workflows.
Extended bounding box support¶
- Added bounding box endpoints for:
/bbox/postcodes/bbox/municipalities
These complement existing building and H3 viewport endpoints and allow fully aggregated map-based workflows across all geographic levels.
Additional improvements¶
- Improved filtering validation and consistency
- Standardized projection handling across POST endpoints
- Performance optimizations for bounding box queries
v0.2.0¶
POST variants for all core endpoints¶
Version 0.2 introduced POST variants for all endpoints originally released in v0.1.
This enabled:
- Field projection (
options.select) - Pagination (
skip,limit) - Structured request bodies
- More scalable and flexible querying
v0.1.0¶
Initial release¶
Initial public release of the Solar Lake Enterprise API including:
- Building lookup endpoints
- H3 aggregate lookup
- Postcode aggregate lookup
- Municipality aggregate lookup
- Simple GET bounding box endpoints
- OpenAPI documentation via Swagger UI
For detailed endpoint documentation, see the respective sections under Endpoints.