---
title: "Search energy installations in German registry (MaStR)"
method: POST
path: "/api/energy-market/installations"
tags: ["Energy Market Data"]
---

# Search energy installations in German registry (MaStR)

`POST /api/energy-market/installations`

## Request

- Base URL: `https://api.cernion.de`
- URL: `https://api.cernion.de/api/energy-market/installations`
- Auth: none declared

Search Marktstammdatenregister (MaStR) for energy installations.

**'installationType' is required.**

**Parameter Details:**
- **installationType**: Installation type - "solar" (PV), "wind", "storage" (batteries), "biomass", "hydro", "combustion" (CHP, gas turbines), or "all" (aggregated across all supported types)
- **location**: Unique municipality name, five-digit PLZ, or "PLZ Ort". Searches all known PLZ for a municipality. Explicit postleitzahl takes precedence. Ambiguous names and "Ort, Landkreis" require postleitzahl (HTTP 400).
- **operationalStatus**: Operational status filter - Default: "35" (only active/in operation). Values: "31" (planned), "35" (in operation), "37" (temporarily decommissioned), "38" (permanently decommissioned), "all" (all statuses), or comma-separated list (e.g., "35,37")
- **limit**: Max results (optional)
- **minCapacityKW**: Minimum installed capacity in kW (e.g., 5 for small installations, 100 for commercial)
- **maxCapacityKW**: Maximum installed capacity in kW
- **commissioningYear**: Filter by year of grid connection (1900-2100)
- **gridOperatorId**: MaStR Netzbetreiber-ID (SNB/GNB...), comma-separated (deprecated)
- **gridOperatorMastrId**: MaStR Netzbetreiber-ID (SNB/GNB...), preferred
- **gridOperatorName**: Full or partial operator name resolved via marketPartners; must identify one operator. Unresolved/ambiguous names return HTTP 400; explicit IDs take precedence.
- **gridOperatorBdewCode**: BDEW code (resolved to MaStR Netzbetreiber)
- **includeNapData**: Include NAP (Netzanschlusspunkt) data per installation (default: `true`). Uses a single `$in` query — no N+1; typically < 50 ms overhead for 1,000 results. ~48 % of older installations have no MeLo on record — `napData` is `undefined` for those. Set to `false` to skip enrichment for faster responses on large result sets.

**NAP data fields (when present):**
| Field | Description |
|---|---|
| `napMastrNummer` | NAP identifier (SAN...) |
| `messlokation` | MeLo-ID (DE000...) for billing and metering systems |
| `spannungsebene` | Voltage level code from MaStR |
| `spannungsebeneLabel` | Human-readable: Niederspannung (LV) / Mittelspannung (MV) / Hochspannung (HV) / Höchstspannung (EHV) |
| `nettoengpassleistung` | Net transfer capacity at NAP in kW |
| `netzMastrNummer` | Grid MaStR-ID (SNE...) |
| `netzbetreiberMastrNummer` | Grid operator MaStR-ID (SNB...) |

**New fields on all installation objects:** `latitude`, `longitude` (GPS coordinates), `netzbetreiberpruefungStatus` (grid operator verification status)

| `netzbetreiberpruefungStatus` code | Meaning |
|---|---|
| `2954` | Geprüft ✅ — confirmed by grid operator |
| `2955` | In Prüfung ⏳ — review in progress |
| `3075` | Nicht vorgesehen — no verification applicable |
| `null` | Not available for this record (older data) |

**Wind turbines:** additionally `typenbezeichnung` (turbine model, e.g. "E-115"), `hersteller` (manufacturer, e.g. "Enercon")
**Storage systems:** additionally `batterietechnologie`, `acDcKoppelung`, `wechselrichterleistung`, `einsatzort`

**Use Cases:**
- Portfolio analysis and benchmarking
- Site selection for new installations
- Market research and competitor analysis
- Grid planning (DSO/TSO)
- Redispatch 2.0 eligible installations
- Billing/metering system setup (MeLo lookup via napData)

**MaStR Database:** Official registry of all power plants, solar systems, wind turbines, and storage facilities in Germany maintained by Bundesnetzagentur.

## Query parameters

- `token` string

## Request body

- object
  - `installationType` 'solar' | 'wind' | 'storage' | 'biomass' | 'hydro' | 'combustion' | 'all', required: Type of energy installation
  - `postleitzahl` string: Exact five-digit German postal code; overrides location. Keep leading zeros.
  - `operationalStatus` string: 31 planned, 35 active, 37 temporarily closed, 38 permanently closed; comma-separated or all.
  - `location` string: Unique municipality name, five-digit PLZ, or PLZ + place. Searches all municipality postal codes. District/region or ambiguous text requires explicit postleitzahl (400).
  - `limit` union: Maximum total number of results across types and resolved postal codes. Omit or use `"all"` for all results; internal MCP pagination is automatic. Set a numeric limit to bound response size.
    - integer
    - 'all'
  - `offset` integer: Number of records to skip per installation type and postal code. For stable client pagination, use one type and an explicit postleitzahl. Example: offset=1000, limit=1000.
  - `minCapacityKW` number: Minimum capacity in kW
  - `maxCapacityKW` number: Maximum capacity in kW
  - `commissioningYear` integer: Year of grid connection
  - `gridOperatorId` string: MaStR Netzbetreiber-ID (SNB/GNB...), comma-separated
  - `gridOperatorMastrId` string: MaStR Netzbetreiber-ID (SNB/GNB...), preferred
  - `gridOperatorName` string: Full or partial operator name; must resolve uniquely (otherwise 400). Prefer explicit gridOperatorMastrId or gridOperatorBdewCode, which override the name.
  - `gridOperatorBdewCode` string: BDEW code (resolved to MaStR Netzbetreiber)
  - `netzbetreiberPruefungStatus` string: Filter by grid operator verification status code(s), comma-separated. Values: **2954**=Geprüft ✅, **2955**=In Prüfung ⏳, **3075**=Nicht vorgesehen. Example: `"2955"` or `"2954,2955"`.
  - `includeNapData` boolean: Include NAP data per installation (MeLo-ID, voltage level, grid operator MaStR-IDs). Default: true. Set to false to skip enrichment for faster responses on large result sets.
  - `format` 'json' | 'csv' | 'xlsx' | 'xls': Output format. "csv" and "xls"/"xlsx" trigger a file download.
  - `token` string: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.

## Response `200`

Installation data retrieved

## Other responses

- `400`: Operator or location could not be resolved uniquely, or MaStR rejected an operator-name search. Pass an explicit gridOperatorMastrId/gridOperatorBdewCode or five-digit postleitzahl.
- `502`: MaStR backend failed to execute the installations search.

---

[API](https://skmtc.dev/cernion/apis/cernion-energy-tools-api.md) · [All operations](https://skmtc.dev/cernion/apis/cernion-energy-tools-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cernion/apis/cernion-energy-tools-api/revisions/cdb94473b538?raw)
