Soljo Data API
The solar and energy profile of any Swiss building in one call: roof, building facts, measured shading, yield, cost, subsidies, local electricity price and payback. Every value comes with its official source, so your app or agent can cite it.
What one call returns
- Roof faces from Sonnendach (BFE): area, tilt, orientation, suitability, irradiation.
- Building facts from the federal building register (GWR): construction period, floors, footprint, heating and hot-water energy source, EGID and EGRID.
- Measured shading from the swisstopo LiDAR surface model (0.5 m): neighbouring buildings, trees and roof objects, yearly and winter loss.
- System and yield: modules that fit the shade-free roof area, kWp, annual production (PVGIS irradiance with horizon).
- Economics: turnkey cost (BFE price study), federal and cantonal subsidies, electricity price of the municipality (ElCom), feed-in tariff, self-consumption, annual savings, payback and the 25-year net result, optionally with battery, heat pump and electric car.
It is the same calculation as the Soljo report, kept current by automated checks of the official sources. Soljo sells no systems and passes on no leads.
Quick start
- Request a free key below. It arrives by e-mail.
- Send a Swiss street address:
curl -X POST https://cwghnqlpeeocjsjfhgyk.supabase.co/functions/v1/building-profile \
-H "x-api-key: sjd_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"address": "Bundesplatz 3, 3011 Bern", "household_size": 4, "battery": true}'
Response (shortened):
{
"type": "soljo_building_profile",
"location": { "label": "Bundesplatz 3, 3011 Bern", "egid": 2242547, "canton": "BE", ... },
"building": { "constructionPeriod": {...}, "floors": ..., "heating": { "energySource": "...", "heatPump": false }, ... },
"roof": { "faces": [{ "areaM2": 245.3, "tiltDeg": 20, "azimuthDeg": 264, "suitability": "medium" }], "sourceIds": ["roof"] },
"shading": { "lossPct": 24.9, "winterLossPct": ..., "sourceIds": ["shading"] },
"system": { "kwp": 33.8, "annualProductionKwh": ..., "productionSource": "measured", "sourceIds": [...] },
"economics":{ "investment": ..., "federalSubsidy": ..., "electricityPricePerKwh": ..., "paybackYears": ..., "netResult25Years": ..., "sourceIds": [...] },
"sources": [{ "id": "roof", "title": "Sonnendach.ch, Bundesamt für Energie (BFE)", "url": "https://www.sonnendach.ch" }, ...]
}
Typical response time: 2 to 5 seconds. Full schema and a complete example: OpenAPI 3.1.
Parameters
| Field | Type | Description |
|---|---|---|
address | string, required | Swiss street address with house number and postcode |
household_size | integer 1–10 | People in the household (default 3) |
annual_consumption_kwh | number | Known consumption; overrides household_size |
battery, heat_pump, ev | boolean | Include a battery, heat pump or electric car |
For AI agents (MCP)
The tool building_energy_profile is part of the Soljo MCP server (registry name ch.soljo/solar). Pass your key as api_key; without one a small shared free allowance applies.
{
"mcpServers": {
"soljo": { "type": "http", "url": "https://cwghnqlpeeocjsjfhgyk.supabase.co/functions/v1/mcp" }
}
}
Plans
| Plan | Price | Volume | |
|---|---|---|---|
| Free | CHF 0 | 100 profiles / month | Self-serve key by e-mail |
| Pro | CHF 99 / month | 2,000 profiles / month | Coming soon |
| Portfolio | from CHF 0.50 / address | CSV upload, 50 addresses free | Coming soon |
Prices excl. VAT. Quota headers on every response: X-Quota-Limit, X-Quota-Remaining, X-Plan. Without a key: 5 profiles per day.
Coverage and accuracy
- Switzerland, all addresses with a Sonnendach roof. Germany and further countries are planned.
- Estimates for planning, not offers and not official extracts. Check the roof on site before ordering a system.
- Methods: Methodik. Open data per municipality: Daten.
Terms in brief
- You may show the results in your products if you name the sources returned with them (e.g. "Source: Soljo Data, Sonnendach BFE, swisstopo").
- No resale of the raw data as a dataset. No guarantee of availability on the free plan.
- Soljo stores per call only the key, the time and the status, not the address.