Zum Inhalt springen
OhmnifyAPI-Referenz

Ohmnify API

REST-Zugang zu Anlagen-, Markt- und Portfoliodaten. Alle Fehler folgen RFC 9457. Listen paginieren per Keyset mit opakem Cursor; das kanonische Signal ist der Link-Header.

Erster Aufruf

1. Schlüssel anlegen

Schlüssel entstehen in der Anwendung unter Einstellungen, API-Schlüssel. Beim Anlegen wird ausgewählt, welche Berechtigungen der Schlüssel bekommt; mehr als das Ausgewählte kann er nicht. Der Schlüssel selbst ist genau einmal sichtbar, nämlich direkt nach dem Anlegen.

Zwei Voraussetzungen, die man besser vorher kennt: Der API-Zugang ist ein gebuchtes Modul, und anlegen dürfen nur Admins oder Inhaber einer Organisation. Wer die Rechte nicht hat, sieht auf der Seite genau das und fragt am schnellsten den Admin.

2. Aufruf

Der Schlüssel geht als Authorization: Bearer mit, gleichwertig als X-API-Key.

curl -H "Authorization: Bearer ohmn_…" \
  "https://app.ohmnify.io/api/v1/units?limit=5"

3. Nachsehen, was der Schlüssel darf

GET /v1/me nennt Berechtigungen, gebuchte Module und die geltenden Grenzen. GET /v1/units/fields geht ins Einzelne: je Feld, ob es lesbar ist, wonach sich filtern lässt, welches Modul es verlangt und ob dieser Schlüssel es gerade bekommt. Damit lässt sich vorab klären, was eine Anbindung liefern kann, statt es an einer 403 zu merken.

Anlagen

GET /v1/units

Anlagen auflisten

Scope: units:readModul: analysisKostenklasse: standard

Liefert Einheiten aus dem Marktstammdatenregister. Erfordert neben dem Scope das Modul „analysis"; ohne dieses Modul antwortet der Endpoint mit 403 MISSING_MODULE und verweist auf /v1/aggregations. Listen sind eventually consistent: bei parallelen Änderungen sind Dubletten und Lücken möglich. Einen konsistenten Vollabzug gibt es in v1 nicht; wer einen stabilen Stand braucht, ruft außerhalb des täglichen Importfensters ab.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
limitAbfrage

Objekte pro Seite. Default 100, Maximum 250. Die Pagination endet bei 10000 Zeilen je Abfrage.

Beispiel: 100
cursorAbfrage

Opaker Cursor aus der vorherigen Antwort. An Sortierung und Filter gebunden, nicht interpretierbar und nicht über Abfragen hinweg wiederverwendbar.

Beispiel: v1.eyJmIjoxfQ.abc
sortAbfrage

Sortierung als feld:richtung, mehrere kommagetrennt.

Beispiel: bruttoleistungKw:desc
formatAbfrage

Ausgabeformat. Gleichwertig zu Accept: application/geo+json.

Beispiel: json
savedFilterIdAbfrage

Einen gespeicherten Filter der eigenen Organisation anwenden; Kennungen aus GET /v1/saved-filters. Er ersetzt die Filterkriterien vollständig: ein zusätzlicher Filterparameter wird mit 400 abgelehnt. Steuerparameter (limit, cursor, sort, fields, include, updatedSince, syncToken) sind erlaubt, ein Delta-Abruf auf eine gespeicherte Auswahl also möglich. Ein fremder Filter ergibt 404, ein Karten-Filter ebenfalls: die API kennt nur Analyse-Filter. Der Cursor bindet an die aufgelösten Kriterien und bricht, wenn der Filter mitten in der Paginierung geändert wird.

Beispiel: cm7x1a2b3c4d5e6f7g8h9i0j
fieldsAbfrage

Feldauswahl, kommagetrennt. mastrNummer und links kommen immer mit. Ein unbekanntes Feld führt zu 400. Die Auswahl wirkt auf die bereits nach Modulen gefilterte Antwort und schaltet kein gesperrtes Feld frei.

Beispiel: mastrNummer,bruttoleistungKw,bundesland
includeAbfrage

Zusatzblöcke der Antwort, kommagetrennt. Ohne Angabe bleibt es bei der Basisform. Blöcke: standort (Landkreis, Gemeinde) · betreiber (Firmenname, MaStR-Nummer) · termine (Stilllegung, Registrierung, Verzugsmaße) · eeg (Förderende und die berechneten Vergütungswerte, verlangt das Modul eeg_verguetung; ohne das Modul antwortet die Route mit 403 statt mit Nullwerten) · netz (Netzbetreiber, Spannungsebene, Bilanzierungsgebiet, Regelzone) · register (Nettonennleistung, Kennungen, Einspeisungsart) · genehmigung · technik (die Angaben des jeweiligen Energieträgers; Felder fremder Energieträger sind null). Steht zusätzlich fields, bestimmt fields den Umfang allein.

Beispiel: technik,betreiber
expandAbfrage

Verknüpfte Objekte mitliefern, kommagetrennt. Maximaltiefe 1; die Relation lädt ihrerseits nichts nach.

Beispiel: marktakteur
updatedSinceAbfrage

Delta-Lesen: nur Einheiten, die seit diesem Zeitpunkt geändert wurden. RFC-3339-Zeitstempel mit Uhrzeit, kein Kalendertag. Verfügbar ab 2026-08-11T00:00:00.000Z; ein früherer Anker wird mit 410 abgelehnt. At-least-once: ein Datensatz kann mehrfach kommen, verloren geht keiner.

Beispiel: 2026-08-11T06:00:00Z
syncTokenAbfrage

Der vom Server ausgestellte Delta-Anker aus meta.sync.token einer vorherigen Antwort. Der vorgesehene Weg für wiederkehrende Abrufe; updatedSince ist der einfachere Einstieg. Opak: nicht interpretieren, nicht selbst bauen. Der Token steht nur auf einem Stand, den der Suchindex bereits führt. Ungültig, abgelaufen oder zu anderen Filtern gehörend: 410, dann mit einem Vollabruf neu beginnen. Zusammen mit updatedSince geschickt, gewinnt der Token.

Beispiel: v1.eyJmIjoxfQ.abc
einheitTypAbfrage

Energieträger, mehrere kommagetrennt.

Beispiel: wind,solar
betriebsStatusAbfrage

Betriebsstatus im Register, mehrere kommagetrennt.

Beispiel: In Betrieb
sucheAbfrage

Freitextsuche über Registerfelder und die eigenen Feldwerte der Organisation.

Beispiel: Windpark Nord
mastrNummernAbfrage

Genau diese MaStR-Nummern zurückgeben, höchstens 500 je Abfrage. Damit lassen sich die Treffer eines alert.triggered-Events auflösen, das je Treffer nur die Nummer trägt.

Beispiel: SEE900000000001,SEE900000000002
betreiberMastrNummerAbfrage

MaStR-Nummern von Anlagenbetreibern, mehrere kommagetrennt. Führt von einem Treffer aus /v1/search zu den Anlagen dieses Betreibers. Vergleicht exakt auf die Nummer; der Filter betreiber vergleicht den Namen.

Beispiel: ABR914356223498
betreiberAbfrage

Name des Anlagenbetreibers, mehrere kommagetrennt.

Beispiel: Stadtwerke Musterstadt
bundeslandAbfrage

Bundesland des Standorts, mehrere kommagetrennt.

Beispiel: Bayern
plzAbfrage

Postleitzahl oder Präfix davon.

Beispiel: 97
landkreisAbfrage

Landkreis des Standorts.

Beispiel: Main-Spessart
gemeindeAbfrage

Gemeinde des Standorts.

Beispiel: Waizenbach
hatKoordinatenAbfrage

Nur Anlagen mit bzw. ohne Koordinaten. Anlagen unter 30 kW tragen aus Datenschutzgründen keine.

Beispiel: true
leistungMinKwAbfrage

Mindest-Bruttoleistung.

Beispiel: 100
leistungMaxKwAbfrage

Maximale Bruttoleistung.

Beispiel: 10000
inbetriebnahmeVonAbfrage

Inbetriebnahme ab diesem Kalendertag.

Beispiel: 2024-01-01
inbetriebnahmeBisAbfrage

Inbetriebnahme bis zu diesem Kalendertag.

Beispiel: 2024-12-31
geplanteInbetriebnahmeVonAbfrage

Geplante Inbetriebnahme ab diesem Kalendertag.

Beispiel: 2026-01-01
geplanteInbetriebnahmeBisAbfrage

Geplante Inbetriebnahme bis zu diesem Kalendertag.

Beispiel: 2027-12-31
registrierungVonAbfrage

Erstregistrierung im Register ab diesem Kalendertag.

Beispiel: 2023-01-01
registrierungBisAbfrage

Erstregistrierung bis zu diesem Kalendertag.

Beispiel: 2023-12-31
stilllegungVonAbfrage

Stilllegung ab diesem Kalendertag.

Beispiel: 2020-01-01
stilllegungBisAbfrage

Stilllegung bis zu diesem Kalendertag.

Beispiel: 2024-12-31
ibnVerspaetungMinTageAbfrage

Mindestverspätung der Inbetriebnahme gegenüber dem geplanten Termin.

Beispiel: 90
ibnVerschiebungMinTageAbfrage

Mindestverschiebung des geplanten Inbetriebnahmetermins.

Beispiel: 30
ibnVerschiebungMaxTageAbfrage

Maximale Verschiebung des geplanten Inbetriebnahmetermins.

Beispiel: 365
signalsAbfrage

Signal-IDs, mehrere kommagetrennt. Nicht freigeschaltete Signale werden abgelehnt, nicht stillschweigend ignoriert.

Beispiel: post_eeg
buergerenergieAbfrage

Nur Bürgerenergiegesellschaften bzw. nur andere.

Beispiel: true
einspeisungsartAbfrage

Art der Einspeisung, mehrere kommagetrennt.

Beispiel: Volleinspeisung
netzbetreiberpruefungAbfrage

Status der Netzbetreiberprüfung, mehrere kommagetrennt.

Beispiel: Geprüft
nepGelistetAbfrage

Nur im Netzentwicklungsplan gelistete Anlagen bzw. nur nicht gelistete.

Beispiel: true
hatGenehmigungAbfrage

Nur Anlagen mit bzw. ohne hinterlegte Genehmigung.

Beispiel: true
netzbetreiberAbfrage

Verteilnetzbetreiber, mehrere kommagetrennt.

Beispiel: Bayernwerk Netz GmbH
spannungsebeneAbfrage

Spannungsebene des Netzanschlusses, mehrere kommagetrennt.

Beispiel: Mittelspannung
bilanzierungsgebietAbfrage

Bilanzierungsgebiet, mehrere kommagetrennt.

Beispiel: DE-BY-001
regelzoneAbfrage

Regelzone, mehrere kommagetrennt.

Beispiel: TenneT
solarLageAbfrage

Lage der Solaranlage (Dach, Freifläche, Balkon), mehrere kommagetrennt.

Beispiel: Freifläche
solarNutzungsbereichAbfrage

Nutzungsbereich der Solaranlage (Haushalt, Gewerbe), mehrere kommagetrennt.

Beispiel: Gewerbe
solarSpeicherVorhandenAbfrage

Speicher am gleichen Ort vorhanden: ja, nein oder ka (keine Angabe).

Beispiel: ja
windSeelageAbfrage

Windanlage an Land oder auf See, mehrere kommagetrennt.

Beispiel: Windkraft an Land
windHerstellerAbfrage

Hersteller der Windenergieanlage, mehrere kommagetrennt.

Beispiel: Enercon
windTypenbezeichnungAbfrage

Typenbezeichnung der Windenergieanlage, mehrere kommagetrennt.

Beispiel: E-138 EP3
windparkAbfrage

Name des Windparks, mehrere kommagetrennt.

Beispiel: Windpark Nord
speichertechnologieAbfrage

Speichertechnologie, mehrere kommagetrennt.

Beispiel: Lithium-Batterie
speicherAcDcKopplungAbfrage

AC- oder DC-Kopplung des Speichers, mehrere kommagetrennt.

Beispiel: AC
pumpspeichertechnologieAbfrage

Technologie des Pumpspeichers, mehrere kommagetrennt.

Beispiel: Speicherwasserkraftwerk
speicherNotstromaggregatAbfrage

Nur Notstromaggregate bzw. nur andere Speicher.

Beispiel: false
speicherkapazitaetMinKwhAbfrage

Mindestwert der nutzbaren Speicherkapazität.

Beispiel: 500
speicherkapazitaetMaxKwhAbfrage

Höchstwert der nutzbaren Speicherkapazität.

Beispiel: 100000
hauptbrennstoffAbfrage

Hauptbrennstoff der Verbrennungsanlage, mehrere kommagetrennt.

Beispiel: Erdgas
verbrennungTechnologieAbfrage

Technologie der Verbrennungsanlage, mehrere kommagetrennt.

Beispiel: Gasturbine
grenzkraftwerkAbfrage

Nur Grenzkraftwerke bzw. nur andere.

Beispiel: false
mitKwkAbfrage

Nur Anlagen mit bzw. ohne Kraft-Wärme-Kopplung.

Beispiel: true
hatKwkMastrNummerAbfrage

Nur Anlagen mit bzw. ohne KWK-MaStR-Nummer.

Beispiel: true
hatKwkZuschlagsnummerAbfrage

Nur Anlagen mit bzw. ohne KWK-Zuschlagsnummer.

Beispiel: true
biomasseartAbfrage

Art der eingesetzten Biomasse, mehrere kommagetrennt.

Beispiel: Biogas
biomasseTechnologieAbfrage

Technologie der Biomasseanlage, mehrere kommagetrennt.

Beispiel: Verbrennungsmotor
mitFlexipraemieAbfrage

Nur Anlagen mit bzw. ohne Flexibilitätsprämie.

Beispiel: true
leistungserhoehungAbfrage

Nur Anlagen mit bzw. ohne gemeldete Leistungserhöhung.

Beispiel: true
wasserkraftartAbfrage

Art der Wasserkraftanlage, mehrere kommagetrennt.

Beispiel: Laufwasseranlage
zuflussartAbfrage

Art des Zuflusses, mehrere kommagetrennt.

Beispiel: Natürlicher Zufluss
minderungStromerzeugungAbfrage

Nur Anlagen mit bzw. ohne gemeldete Minderung der Stromerzeugung.

Beispiel: false
geothermieTechnologieAbfrage

Technologie der Geothermieanlage, mehrere kommagetrennt.

Beispiel: Hydrothermale Geothermie
kernkraftTechnologieAbfrage

Technologie des Kernkraftwerks, mehrere kommagetrennt.

Beispiel: Druckwasserreaktor
hatEegMastrNummerAbfrage

Nur Anlagen mit bzw. ohne EEG-MaStR-Nummer.

Beispiel: true
hatEegZuschlagsnummerAbfrage

Nur Anlagen mit bzw. ohne Zuschlagsnummer aus einer Ausschreibung.

Beispiel: true
gebotsterminAbfrage

IDs von BNetzA-Gebotsterminen, mehrere kommagetrennt.

Beispiel: SOLAR_2024_1
eegPhasenwechselVonAbfrage

Wechsel der EEG-Vergütungsphase ab diesem Kalendertag.

Beispiel: 2026-01-01
eegPhasenwechselBisAbfrage

Wechsel der EEG-Vergütungsphase bis zu diesem Kalendertag.

Beispiel: 2026-12-31
eegFoerderendeVonAbfrage

Ende der EEG-Förderung ab diesem Kalendertag.

Beispiel: 2026-01-01
eegFoerderendeBisAbfrage

Ende der EEG-Förderung bis zu diesem Kalendertag.

Beispiel: 2030-12-31
eegEinspeiseverguetungMinCtKwhAbfrage

Mindestwert der EEG-Einspeisevergütung. Abgeleiteter Wert, siehe eegAbleitbarkeit.

Beispiel: 5
eegEinspeiseverguetungMaxCtKwhAbfrage

Höchstwert der EEG-Einspeisevergütung.

Beispiel: 12
eegAnzulegenderWertMinCtKwhAbfrage

Mindestwert des anzulegenden Werts nach EEG.

Beispiel: 4
eegAnzulegenderWertMaxCtKwhAbfrage

Höchstwert des anzulegenden Werts nach EEG.

Beispiel: 10
eegReferenzertragVerhaeltnisMinAbfrage

Mindestverhältnis zum Referenzertrag nach FGW. Dimensionslos.

Beispiel: 0.7
eegReferenzertragVerhaeltnisMaxAbfrage

Höchstverhältnis zum Referenzertrag nach FGW. Dimensionslos.

Beispiel: 1.3
eegAbleitbarkeitAbfrage

Herkunft der EEG-Werte: exakt, geschaetzt oder nicht_ableitbar.

Beispiel: exakt

Antworten

HTTP 200 Seite von Einheiten.

Beispielantwort
{
  "data": [
    {
      "mastrNummer": "SEE900000000001",
      "einheitTyp": "wind",
      "name": "Windpark Waizenbach",
      "betriebsStatus": "In Betrieb",
      "bruttoleistungKw": 4200,
      "inbetriebnahmedatum": "2024-06-01",
      "geplantesInbetriebnahmedatum": null,
      "bundesland": "Bayern",
      "plz": "97295",
      "ort": "Waizenbach",
      "latitude": 50.0891,
      "longitude": 9.8123,
      "signals": [
        "post_eeg"
      ]
    }
  ],
  "meta": {
    "page": {
      "count": 1,
      "hasMore": false,
      "cursor": null,
      "total": 1,
      "truncated": false
    }
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 410, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/units/fields

Feldkatalog der Anlagen-Ressource

Scope: units:readKostenklasse: cheap

Welche Felder es gibt, wonach sich filtern lässt, welches Modul ein Feld verlangt und was dieser Schlüssel gerade bekommt. Anders als openapi.json, das für alle Schlüssel gleich ist, hängt diese Antwort an den Modulen dieser Organisation. Gesperrte Felder verschwinden nicht, sondern stehen mit verfuegbar: false und dem fehlenden Modul dabei; der Katalog selbst verlangt deshalb kein Modul. Drei Felder sind filterbar, aber nicht lesbar (Freitextsuche, Nummernliste, Koordinaten-Präsenz); ihr Grund steht in hinweis.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
nurVerfuegbareAbfrage

Nur Felder liefern, die dieser Schlüssel bekommt.

Beispiel: false

Antworten

HTTP 200 Der Feldkatalog, nach Namen sortiert.

Beispielantwort
{
  "data": [
    {
      "name": "bruttoleistungKw",
      "typ": "number",
      "beschreibung": "Bruttoleistung der Einheit.",
      "einheit": "kW",
      "werte": null,
      "lesbar": true,
      "filterbar": true,
      "filter": [
        "leistungMaxKw",
        "leistungMinKw"
      ],
      "block": null,
      "modul": null,
      "verfuegbar": true,
      "personenbezug": "none",
      "hinweis": null
    }
  ],
  "meta": {
    "count": 1,
    "module": [
      "analysis",
      "base"
    ],
    "gesperrt": 0
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

POST /v1/units/search

Anlagen mit Filtern im Body suchen

Scope: units:readModul: analysisKostenklasse: standard

Gleichwertiger Zwilling zu GET /v1/units: dieselben Filter, dieselbe Antwort, derselbe Cursor. Für Abfragen, deren Filtermenge als Query-String die URL-Längengrenze überschreitet. Verändert nichts und braucht keinen Idempotency-Key.

Rumpf

Felder des Anfrage-Rumpfs
FeldTypBeschreibung
limitinteger

Objekte pro Seite. Default 100, Maximum 250.

cursorstring

Opaker Cursor aus der vorherigen Antwort. Gilt auch für Cursor aus GET /v1/units.

sortstring

Sortierung als feld:richtung.

formatstring

Ausgabeformat.

Werte: json geojson
einheitTypobject

Energieträger, mehrere kommagetrennt.

betriebsStatusobject

Betriebsstatus im Register, mehrere kommagetrennt.

suchestring

Freitextsuche über Registerfelder und die eigenen Feldwerte der Organisation.

mastrNummernobject

Genau diese MaStR-Nummern zurückgeben, höchstens 500 je Abfrage. Damit lassen sich die Treffer eines alert.triggered-Events auflösen, das je Treffer nur die Nummer trägt.

betreiberMastrNummerobject

MaStR-Nummern von Anlagenbetreibern, mehrere kommagetrennt. Führt von einem Treffer aus /v1/search zu den Anlagen dieses Betreibers. Vergleicht exakt auf die Nummer; der Filter betreiber vergleicht den Namen.

betreiberobject

Name des Anlagenbetreibers, mehrere kommagetrennt.

Erlaubt Rückschlüsse auf Standort oder Person.
bundeslandobject

Bundesland des Standorts, mehrere kommagetrennt.

plzstring

Postleitzahl oder Präfix davon.

Erlaubt Rückschlüsse auf Standort oder Person.
landkreisstring

Landkreis des Standorts.

Erlaubt Rückschlüsse auf Standort oder Person.
gemeindestring

Gemeinde des Standorts.

Erlaubt Rückschlüsse auf Standort oder Person.
hatKoordinatenboolean

Nur Anlagen mit bzw. ohne Koordinaten. Anlagen unter 30 kW tragen aus Datenschutzgründen keine.

leistungMinKwnumber
kW

Mindest-Bruttoleistung.

leistungMaxKwnumber
kW

Maximale Bruttoleistung.

inbetriebnahmeVonstring

Inbetriebnahme ab diesem Kalendertag.

inbetriebnahmeBisstring

Inbetriebnahme bis zu diesem Kalendertag.

geplanteInbetriebnahmeVonstring

Geplante Inbetriebnahme ab diesem Kalendertag.

geplanteInbetriebnahmeBisstring

Geplante Inbetriebnahme bis zu diesem Kalendertag.

registrierungVonstring

Erstregistrierung im Register ab diesem Kalendertag.

registrierungBisstring

Erstregistrierung bis zu diesem Kalendertag.

stilllegungVonstring

Stilllegung ab diesem Kalendertag.

stilllegungBisstring

Stilllegung bis zu diesem Kalendertag.

ibnVerspaetungMinTagenumber
Tage

Mindestverspätung der Inbetriebnahme gegenüber dem geplanten Termin.

ibnVerschiebungMinTagenumber
Tage

Mindestverschiebung des geplanten Inbetriebnahmetermins.

ibnVerschiebungMaxTagenumber
Tage

Maximale Verschiebung des geplanten Inbetriebnahmetermins.

signalsobject

Signal-IDs, mehrere kommagetrennt. Nicht freigeschaltete Signale werden abgelehnt, nicht stillschweigend ignoriert.

buergerenergieboolean

Nur Bürgerenergiegesellschaften bzw. nur andere.

einspeisungsartobject

Art der Einspeisung, mehrere kommagetrennt.

netzbetreiberpruefungobject

Status der Netzbetreiberprüfung, mehrere kommagetrennt.

nepGelistetboolean

Nur im Netzentwicklungsplan gelistete Anlagen bzw. nur nicht gelistete.

hatGenehmigungboolean

Nur Anlagen mit bzw. ohne hinterlegte Genehmigung.

netzbetreiberobject

Verteilnetzbetreiber, mehrere kommagetrennt.

spannungsebeneobject

Spannungsebene des Netzanschlusses, mehrere kommagetrennt.

bilanzierungsgebietobject

Bilanzierungsgebiet, mehrere kommagetrennt.

regelzoneobject

Regelzone, mehrere kommagetrennt.

solarLageobject

Lage der Solaranlage (Dach, Freifläche, Balkon), mehrere kommagetrennt.

solarNutzungsbereichobject

Nutzungsbereich der Solaranlage (Haushalt, Gewerbe), mehrere kommagetrennt.

solarSpeicherVorhandenobject

Speicher am gleichen Ort vorhanden: ja, nein oder ka (keine Angabe).

windSeelageobject

Windanlage an Land oder auf See, mehrere kommagetrennt.

windHerstellerobject

Hersteller der Windenergieanlage, mehrere kommagetrennt.

windTypenbezeichnungobject

Typenbezeichnung der Windenergieanlage, mehrere kommagetrennt.

windparkobject

Name des Windparks, mehrere kommagetrennt.

speichertechnologieobject

Speichertechnologie, mehrere kommagetrennt.

speicherAcDcKopplungobject

AC- oder DC-Kopplung des Speichers, mehrere kommagetrennt.

pumpspeichertechnologieobject

Technologie des Pumpspeichers, mehrere kommagetrennt.

speicherNotstromaggregatboolean

Nur Notstromaggregate bzw. nur andere Speicher.

speicherkapazitaetMinKwhnumber
kWh

Mindestwert der nutzbaren Speicherkapazität.

speicherkapazitaetMaxKwhnumber
kWh

Höchstwert der nutzbaren Speicherkapazität.

hauptbrennstoffobject

Hauptbrennstoff der Verbrennungsanlage, mehrere kommagetrennt.

verbrennungTechnologieobject

Technologie der Verbrennungsanlage, mehrere kommagetrennt.

grenzkraftwerkboolean

Nur Grenzkraftwerke bzw. nur andere.

mitKwkboolean

Nur Anlagen mit bzw. ohne Kraft-Wärme-Kopplung.

hatKwkMastrNummerboolean

Nur Anlagen mit bzw. ohne KWK-MaStR-Nummer.

hatKwkZuschlagsnummerboolean

Nur Anlagen mit bzw. ohne KWK-Zuschlagsnummer.

biomasseartobject

Art der eingesetzten Biomasse, mehrere kommagetrennt.

biomasseTechnologieobject

Technologie der Biomasseanlage, mehrere kommagetrennt.

mitFlexipraemieboolean

Nur Anlagen mit bzw. ohne Flexibilitätsprämie.

leistungserhoehungboolean

Nur Anlagen mit bzw. ohne gemeldete Leistungserhöhung.

wasserkraftartobject

Art der Wasserkraftanlage, mehrere kommagetrennt.

zuflussartobject

Art des Zuflusses, mehrere kommagetrennt.

minderungStromerzeugungboolean

Nur Anlagen mit bzw. ohne gemeldete Minderung der Stromerzeugung.

geothermieTechnologieobject

Technologie der Geothermieanlage, mehrere kommagetrennt.

kernkraftTechnologieobject

Technologie des Kernkraftwerks, mehrere kommagetrennt.

hatEegMastrNummerboolean

Nur Anlagen mit bzw. ohne EEG-MaStR-Nummer.

hatEegZuschlagsnummerboolean

Nur Anlagen mit bzw. ohne Zuschlagsnummer aus einer Ausschreibung.

gebotsterminobject

IDs von BNetzA-Gebotsterminen, mehrere kommagetrennt.

eegPhasenwechselVonstring

Wechsel der EEG-Vergütungsphase ab diesem Kalendertag.

eegPhasenwechselBisstring

Wechsel der EEG-Vergütungsphase bis zu diesem Kalendertag.

eegFoerderendeVonstring

Ende der EEG-Förderung ab diesem Kalendertag.

eegFoerderendeBisstring

Ende der EEG-Förderung bis zu diesem Kalendertag.

eegEinspeiseverguetungMinCtKwhnumber
ct/kWh

Mindestwert der EEG-Einspeisevergütung. Abgeleiteter Wert, siehe eegAbleitbarkeit.

eegEinspeiseverguetungMaxCtKwhnumber
ct/kWh

Höchstwert der EEG-Einspeisevergütung.

eegAnzulegenderWertMinCtKwhnumber
ct/kWh

Mindestwert des anzulegenden Werts nach EEG.

eegAnzulegenderWertMaxCtKwhnumber
ct/kWh

Höchstwert des anzulegenden Werts nach EEG.

eegReferenzertragVerhaeltnisMinnumber

Mindestverhältnis zum Referenzertrag nach FGW. Dimensionslos.

eegReferenzertragVerhaeltnisMaxnumber

Höchstverhältnis zum Referenzertrag nach FGW. Dimensionslos.

eegAbleitbarkeitobject

Herkunft der EEG-Werte: exakt, geschaetzt oder nicht_ableitbar.

Beispiel-Rumpf
{
  "einheitTyp": [
    "wind",
    "solar"
  ],
  "bundesland": [
    "Bayern"
  ],
  "leistungMinKw": 100,
  "sort": "bruttoleistungKw:desc",
  "limit": 100
}

Antworten

HTTP 200 Seite von Einheiten, identisch zu GET /v1/units.

Beispielantwort
{
  "data": [],
  "meta": {
    "page": {
      "count": 0,
      "hasMore": false,
      "cursor": null,
      "total": 0,
      "truncated": false
    }
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 410, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/units/{id}

Eine Anlage abrufen

Scope: units:readModul: analysisKostenklasse: standard

Detaildaten einer Einheit über ihre MaStR-Nummer, mit mehr Feldern als die Liste. Anschriftsfelder sind nicht enthalten; sie sind personenbeziehbar, sobald der Betreiber eine natürliche Person ist.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

MaStR-Nummer der Einheit. Beginnt mit SEE.

Beispiel: SEE900000000001

Antworten

HTTP 200 Die Einheit.

Beispielantwort
{
  "data": {
    "mastrNummer": "SEE900000000001",
    "einheitTyp": "wind",
    "name": "Windpark Waizenbach",
    "betriebsStatus": "In Betrieb",
    "bruttoleistungKw": 4200,
    "nettonennleistungKw": 4100,
    "inbetriebnahmedatum": "2024-06-01",
    "bundesland": "Bayern",
    "ort": "Waizenbach",
    "betreiber": "Windpark Waizenbach GmbH & Co. KG"
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/units/{id}/custom-fields

Eigene Werte zu einer Anlage

Scope: custom_fields:readModul: workspaceKostenklasse: standard

Was die Organisation über diese Anlage in ihren eigenen Feldern festgehalten hat. Ausschließlich Werte der eigenen Organisation, auch wenn andere Organisationen dieselbe Anlage führen.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

MaStR-Nummer der Einheit. Beginnt mit SEE.

Beispiel: SEE900000000001

Antworten

HTTP 200 Die eigenen Werte zu dieser Anlage.

Beispielantwort
{
  "data": [
    {
      "defId": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "text": "jährlich",
      "zahl": null,
      "datum": null,
      "datumsgenauigkeit": "DAY",
      "reihenfolge": 0,
      "schreiber": "eigen",
      "geaendertAm": "2026-07-02T16:41:00.000Z"
    }
  ],
  "meta": {
    "count": 1,
    "complete": true
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

PUT /v1/units/{id}/custom-fields

Eigene Werte zu einer Anlage setzen

Scope: custom_fields:writeModul: workspaceKostenklasse: mutation

Ersetzend je Feld, nicht je Anlage. Was zu einem genannten Feld nicht mitgeschickt wird, ist danach leer; Felder, die im Aufruf nicht vorkommen, bleiben unberührt. Ein leerer Wert löscht: text: null setzt das Feld auf leer. REQUEST-Felder werden abgelehnt; Felder mit vonGegenseiteBefuellt: true werden über /v1/connections/{id}/shared-fields beantwortet, wo Verbindung, Freigabe-Umfang und Anlage geprüft werden. Ohne handelnden Nutzer: die Werte tragen keinen Bearbeiter, der verwendete Schlüssel steht im Audit-Log.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

MaStR-Nummer der Einheit. Beginnt mit SEE.

Beispiel: SEE900000000001
dryRunAbfrage

Probelauf. Durchläuft Authentifizierung, Scopes, Modul-Gates, alle Validatoren und die Idempotenz-Prüfung vollständig und ändert nichts. Die Antwort hat dieselbe Form wie im Ernstfall und trägt meta.dryRun: true im Rumpf. Verbraucht keinen Idempotenz-Schlüssel, derselbe Schlüssel schreibt anschließend im Ernstfall. Zulässig sind nur true und false, jeder andere Wert wird abgelehnt.

Beispiel: true
Idempotency-Keyheader

Macht einen Schreibaufruf wiederholbar. Derselbe Schlüssel mit derselben Anfrage liefert die gespeicherte Antwort des ersten Aufrufs, erkennbar am Antwort-Header Idempotency-Replayed: true, und schreibt kein zweites Mal. Derselbe Schlüssel mit anderem Inhalt ergibt 409. Der Schlüssel gilt je Organisation und 24 Stunden lang; nach einem Fehlschlag ist er wieder frei.

Beispiel: crm-sync-2026-08-14-batch-3

Rumpf

Felder des Anfrage-Rumpfs
FeldTypBeschreibung
values Pflichtarray

Höchstens 50 Felder je Aufruf.

Erlaubt Rückschlüsse auf Standort oder Person.
Beispiel-Rumpf
{
  "values": [
    {
      "defId": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "text": "jährlich"
    },
    {
      "defId": "cm7x1a2b3c4d5e6f7g8h9i0k",
      "text": null
    }
  ]
}

Antworten

HTTP 200 Alle Felder verarbeitet. WriteAntwort

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "externalId": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "status": "updated"
    },
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0k",
      "externalId": "cm7x1a2b3c4d5e6f7g8h9i0k",
      "status": "unchanged"
    }
  ],
  "meta": {
    "total": 2,
    "created": 0,
    "updated": 1,
    "unchanged": 1,
    "failed": 0,
    "dryRun": false
  }
}

HTTP 207 Mindestens ein Feld ist gescheitert; die übrigen sind geschrieben. WriteAntwort

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "externalId": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "status": "updated"
    },
    {
      "id": null,
      "externalId": "cm7x1a2b3c4d5e6f7g8h9i0x",
      "status": "failed",
      "error": {
        "code": "NOT_FOUND",
        "message": "No such custom field for this organization."
      }
    }
  ],
  "meta": {
    "total": 2,
    "created": 0,
    "updated": 1,
    "unchanged": 0,
    "failed": 1,
    "dryRun": false
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 409, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Regionale Auswertungen

GET /v1/region/zeitreihe

Zubau, Abbau und Pipeline über die Zeit

Scope: region:readKostenklasse: expensive

Zubau, Abbau und Pipeline einer Region in einer Antwort. Die drei Reihen hängen an verschiedenen Datumsfeldern: Zubau am Inbetriebnahmedatum, Abbau am Stilllegungsdatum, Pipeline am geplanten Inbetriebnahmedatum; meta.datumsfelder nennt sie in der Antwort. Ein Wert für Januar bedeutet je Reihe also etwas anderes. Kein Cursor, die Menge hängt am Zeitraum: wer weniger Punkte will, verengt von und bis oder wählt periode=jahr.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
ebeneAbfrage

Auf welcher Ebene die Region zu lesen ist. Nur zusammen mit region; ohne beides läuft die Abfrage bundesweit. Eine ebene ohne region wird mit 400 abgelehnt.

Beispiel: bundesland
regionAbfrage

Die Region selbst, passend zu ebene. Nur zusammen mit ebene, weil derselbe Name auf mehreren Ebenen vorkommt: „München" ist Gemeinde und Landkreis. Bei ebene=plz ein Präfix, wie überall sonst in dieser API: 8 liefert Bayern, 83 dessen Süden. Bundesland, Landkreis und Gemeinde werden exakt verglichen.

Beispiel: Bayern
energietraegerAbfrage

Auf diese Energieträger einschränken, kommagetrennt. Ohne Angabe alle.

Beispiel: wind,solar
periodeAbfrage

Auflösung der Zeitreihe. Bei quartal trägt die Periode die Form 2025-Q2, sonst 2025-06 bzw. 2025.

Beispiel: monat
vonAbfrage

Untere Grenze als Kalendertag. Wirkt je Reihe auf ihr eigenes Datumsfeld.

Beispiel: 2024-01-01
bisAbfrage

Obere Grenze als Kalendertag.

Beispiel: 2026-12-31

Antworten

HTTP 200 Ein Punkt je Periode und Energieträger, nach Periode sortiert.

Beispielantwort
{
  "data": [
    {
      "periode": "2025-06",
      "energietraeger": "solar",
      "zubauAnzahl": 14391,
      "zubauMw": 369.92,
      "abbauAnzahl": 12,
      "abbauMw": 0.43,
      "pipelineAnzahl": 88,
      "pipelineMw": 41.2
    }
  ],
  "meta": {
    "count": 1,
    "periode": "monat",
    "ebene": "bundesland",
    "region": "Bayern",
    "datumsfelder": {
      "zubau": "inbetriebnahmedatum",
      "abbau": "stilllegungsdatum",
      "pipeline": "geplantesInbetriebnahmedatum"
    }
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 429, 500, 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/region/altersstruktur

Altersstruktur des Bestands nach Kohorten

Scope: region:readKostenklasse: expensive

Welcher Teil des Bestands sich dem Ende der Förderung nähert und wie viel Leistung daran hängt. Die Kohortengrenzen liegen bei 20 und 25 Jahren, den Schwellen für Förderende und Repowering. Nur Anlagen in Betrieb. Sortiert nach Alter, leere Kohorten fehlen. meta.kohorten führt alle Klassen mit ihren Grenzen als Zahlen.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
ebeneAbfrage

Auf welcher Ebene die Region zu lesen ist. Nur zusammen mit region; ohne beides läuft die Abfrage bundesweit. Eine ebene ohne region wird mit 400 abgelehnt.

Beispiel: bundesland
regionAbfrage

Die Region selbst, passend zu ebene. Nur zusammen mit ebene, weil derselbe Name auf mehreren Ebenen vorkommt: „München" ist Gemeinde und Landkreis. Bei ebene=plz ein Präfix, wie überall sonst in dieser API: 8 liefert Bayern, 83 dessen Süden. Bundesland, Landkreis und Gemeinde werden exakt verglichen.

Beispiel: Bayern
energietraegerAbfrage

Auf diese Energieträger einschränken, kommagetrennt. Ohne Angabe alle.

Beispiel: wind,solar

Antworten

HTTP 200 Eine Zeile je Kohorte und Energieträger, von jung nach alt.

Beispielantwort
{
  "data": [
    {
      "kohorte": "20-25 Jahre",
      "energietraeger": "wind",
      "anzahl": 4812,
      "mw": 6231.5
    }
  ],
  "meta": {
    "count": 1,
    "ebene": null,
    "region": null,
    "kohorten": [
      {
        "name": "20-25 Jahre",
        "vonJahre": 20,
        "bisJahre": 25
      }
    ],
    "stichtag": "Alter gerechnet gegen den Zeitpunkt der Abfrage, nicht gegen ein Kalenderjahr."
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 429, 500, 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/region/momentaufnahme

Kennzahlen ohne Zeitreihe

Scope: region:readKostenklasse: expensive

Zubau und Abbau der letzten 90 Tage, der Nettowert daraus, die Pipeline mit ihrer Terminqualität und der Anteil der Windanlagen über zwanzig Jahren. Ein Objekt, keine Liste. windUeber20Jahre zählt rollierend zwanzig Jahre auf dem Inbetriebnahmedatum der Anlage und ist nicht das EEG-Förderende: das in include=eeg an /v1/units rechnet kalenderjahr-genau auf dem Inbetriebnahmedatum der EEG-Anlage; für einen Teil des Bestands fällt es in ein anderes Jahr. Anteile sind null statt 0, wenn der Nenner leer ist.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
ebeneAbfrage

Auf welcher Ebene die Region zu lesen ist. Nur zusammen mit region; ohne beides läuft die Abfrage bundesweit. Eine ebene ohne region wird mit 400 abgelehnt.

Beispiel: bundesland
regionAbfrage

Die Region selbst, passend zu ebene. Nur zusammen mit ebene, weil derselbe Name auf mehreren Ebenen vorkommt: „München" ist Gemeinde und Landkreis. Bei ebene=plz ein Präfix, wie überall sonst in dieser API: 8 liefert Bayern, 83 dessen Süden. Bundesland, Landkreis und Gemeinde werden exakt verglichen.

Beispiel: Bayern
energietraegerAbfrage

Auf diese Energieträger einschränken, kommagetrennt. Ohne Angabe alle.

Beispiel: wind,solar

Antworten

HTTP 200 Die Kennzahlen der gewählten Region.

Beispielantwort
{
  "data": {
    "zubau90Tage": {
      "anzahl": 41233,
      "mw": 1204.55
    },
    "abbau90Tage": {
      "anzahl": 512,
      "mw": 88.1
    },
    "netto90TageMw": 1116.45,
    "pipeline": {
      "anzahl": 18422,
      "mw": 24110.3,
      "mitDatumAnzahl": 9877,
      "mitDatumAnteil": 53.6
    },
    "windUeber20Jahre": {
      "anzahl": 12044,
      "gesamt": 30112,
      "anteil": 40
    }
  },
  "meta": {
    "ebene": null,
    "region": null,
    "fenster": "90 Tage bis zum Zeitpunkt der Abfrage"
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 429, 500, 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Aggregationen

GET /v1/aggregations

Anlagen gruppiert auszählen

Scope: units:readKostenklasse: expensive

Aggregat-Zahlen über den Anlagenbestand, gruppiert nach einer Dimension. Ohne das Modul „analysis" nutzbar und damit die Ressource für Organisationen ohne dieses Modul. Signal-Entitlements gelten auch hier.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
groupByAbfrage

Gruppierungsdimension.

Beispiel: bundesland
einheitTypAbfrage

Energieträger, mehrere kommagetrennt.

Beispiel: wind,solar
betriebsStatusAbfrage

Betriebsstatus im Register, mehrere kommagetrennt.

Beispiel: In Betrieb
sucheAbfrage

Freitextsuche über Registerfelder und die eigenen Feldwerte der Organisation.

Beispiel: Windpark Nord
mastrNummernAbfrage

Genau diese MaStR-Nummern zurückgeben, höchstens 500 je Abfrage. Damit lassen sich die Treffer eines alert.triggered-Events auflösen, das je Treffer nur die Nummer trägt.

Beispiel: SEE900000000001,SEE900000000002
betreiberMastrNummerAbfrage

MaStR-Nummern von Anlagenbetreibern, mehrere kommagetrennt. Führt von einem Treffer aus /v1/search zu den Anlagen dieses Betreibers. Vergleicht exakt auf die Nummer; der Filter betreiber vergleicht den Namen.

Beispiel: ABR914356223498
betreiberAbfrage

Name des Anlagenbetreibers, mehrere kommagetrennt.

Beispiel: Stadtwerke Musterstadt
bundeslandAbfrage

Bundesland des Standorts, mehrere kommagetrennt.

Beispiel: Bayern
plzAbfrage

Postleitzahl oder Präfix davon.

Beispiel: 97
landkreisAbfrage

Landkreis des Standorts.

Beispiel: Main-Spessart
gemeindeAbfrage

Gemeinde des Standorts.

Beispiel: Waizenbach
hatKoordinatenAbfrage

Nur Anlagen mit bzw. ohne Koordinaten. Anlagen unter 30 kW tragen aus Datenschutzgründen keine.

Beispiel: true
leistungMinKwAbfrage

Mindest-Bruttoleistung.

Beispiel: 100
leistungMaxKwAbfrage

Maximale Bruttoleistung.

Beispiel: 10000
inbetriebnahmeVonAbfrage

Inbetriebnahme ab diesem Kalendertag.

Beispiel: 2024-01-01
inbetriebnahmeBisAbfrage

Inbetriebnahme bis zu diesem Kalendertag.

Beispiel: 2024-12-31
geplanteInbetriebnahmeVonAbfrage

Geplante Inbetriebnahme ab diesem Kalendertag.

Beispiel: 2026-01-01
geplanteInbetriebnahmeBisAbfrage

Geplante Inbetriebnahme bis zu diesem Kalendertag.

Beispiel: 2027-12-31
registrierungVonAbfrage

Erstregistrierung im Register ab diesem Kalendertag.

Beispiel: 2023-01-01
registrierungBisAbfrage

Erstregistrierung bis zu diesem Kalendertag.

Beispiel: 2023-12-31
stilllegungVonAbfrage

Stilllegung ab diesem Kalendertag.

Beispiel: 2020-01-01
stilllegungBisAbfrage

Stilllegung bis zu diesem Kalendertag.

Beispiel: 2024-12-31
ibnVerspaetungMinTageAbfrage

Mindestverspätung der Inbetriebnahme gegenüber dem geplanten Termin.

Beispiel: 90
ibnVerschiebungMinTageAbfrage

Mindestverschiebung des geplanten Inbetriebnahmetermins.

Beispiel: 30
ibnVerschiebungMaxTageAbfrage

Maximale Verschiebung des geplanten Inbetriebnahmetermins.

Beispiel: 365
signalsAbfrage

Signal-IDs, mehrere kommagetrennt. Nicht freigeschaltete Signale werden abgelehnt, nicht stillschweigend ignoriert.

Beispiel: post_eeg
buergerenergieAbfrage

Nur Bürgerenergiegesellschaften bzw. nur andere.

Beispiel: true
einspeisungsartAbfrage

Art der Einspeisung, mehrere kommagetrennt.

Beispiel: Volleinspeisung
netzbetreiberpruefungAbfrage

Status der Netzbetreiberprüfung, mehrere kommagetrennt.

Beispiel: Geprüft
nepGelistetAbfrage

Nur im Netzentwicklungsplan gelistete Anlagen bzw. nur nicht gelistete.

Beispiel: true
hatGenehmigungAbfrage

Nur Anlagen mit bzw. ohne hinterlegte Genehmigung.

Beispiel: true
netzbetreiberAbfrage

Verteilnetzbetreiber, mehrere kommagetrennt.

Beispiel: Bayernwerk Netz GmbH
spannungsebeneAbfrage

Spannungsebene des Netzanschlusses, mehrere kommagetrennt.

Beispiel: Mittelspannung
bilanzierungsgebietAbfrage

Bilanzierungsgebiet, mehrere kommagetrennt.

Beispiel: DE-BY-001
regelzoneAbfrage

Regelzone, mehrere kommagetrennt.

Beispiel: TenneT
solarLageAbfrage

Lage der Solaranlage (Dach, Freifläche, Balkon), mehrere kommagetrennt.

Beispiel: Freifläche
solarNutzungsbereichAbfrage

Nutzungsbereich der Solaranlage (Haushalt, Gewerbe), mehrere kommagetrennt.

Beispiel: Gewerbe
solarSpeicherVorhandenAbfrage

Speicher am gleichen Ort vorhanden: ja, nein oder ka (keine Angabe).

Beispiel: ja
windSeelageAbfrage

Windanlage an Land oder auf See, mehrere kommagetrennt.

Beispiel: Windkraft an Land
windHerstellerAbfrage

Hersteller der Windenergieanlage, mehrere kommagetrennt.

Beispiel: Enercon
windTypenbezeichnungAbfrage

Typenbezeichnung der Windenergieanlage, mehrere kommagetrennt.

Beispiel: E-138 EP3
windparkAbfrage

Name des Windparks, mehrere kommagetrennt.

Beispiel: Windpark Nord
speichertechnologieAbfrage

Speichertechnologie, mehrere kommagetrennt.

Beispiel: Lithium-Batterie
speicherAcDcKopplungAbfrage

AC- oder DC-Kopplung des Speichers, mehrere kommagetrennt.

Beispiel: AC
pumpspeichertechnologieAbfrage

Technologie des Pumpspeichers, mehrere kommagetrennt.

Beispiel: Speicherwasserkraftwerk
speicherNotstromaggregatAbfrage

Nur Notstromaggregate bzw. nur andere Speicher.

Beispiel: false
speicherkapazitaetMinKwhAbfrage

Mindestwert der nutzbaren Speicherkapazität.

Beispiel: 500
speicherkapazitaetMaxKwhAbfrage

Höchstwert der nutzbaren Speicherkapazität.

Beispiel: 100000
hauptbrennstoffAbfrage

Hauptbrennstoff der Verbrennungsanlage, mehrere kommagetrennt.

Beispiel: Erdgas
verbrennungTechnologieAbfrage

Technologie der Verbrennungsanlage, mehrere kommagetrennt.

Beispiel: Gasturbine
grenzkraftwerkAbfrage

Nur Grenzkraftwerke bzw. nur andere.

Beispiel: false
mitKwkAbfrage

Nur Anlagen mit bzw. ohne Kraft-Wärme-Kopplung.

Beispiel: true
hatKwkMastrNummerAbfrage

Nur Anlagen mit bzw. ohne KWK-MaStR-Nummer.

Beispiel: true
hatKwkZuschlagsnummerAbfrage

Nur Anlagen mit bzw. ohne KWK-Zuschlagsnummer.

Beispiel: true
biomasseartAbfrage

Art der eingesetzten Biomasse, mehrere kommagetrennt.

Beispiel: Biogas
biomasseTechnologieAbfrage

Technologie der Biomasseanlage, mehrere kommagetrennt.

Beispiel: Verbrennungsmotor
mitFlexipraemieAbfrage

Nur Anlagen mit bzw. ohne Flexibilitätsprämie.

Beispiel: true
leistungserhoehungAbfrage

Nur Anlagen mit bzw. ohne gemeldete Leistungserhöhung.

Beispiel: true
wasserkraftartAbfrage

Art der Wasserkraftanlage, mehrere kommagetrennt.

Beispiel: Laufwasseranlage
zuflussartAbfrage

Art des Zuflusses, mehrere kommagetrennt.

Beispiel: Natürlicher Zufluss
minderungStromerzeugungAbfrage

Nur Anlagen mit bzw. ohne gemeldete Minderung der Stromerzeugung.

Beispiel: false
geothermieTechnologieAbfrage

Technologie der Geothermieanlage, mehrere kommagetrennt.

Beispiel: Hydrothermale Geothermie
kernkraftTechnologieAbfrage

Technologie des Kernkraftwerks, mehrere kommagetrennt.

Beispiel: Druckwasserreaktor
hatEegMastrNummerAbfrage

Nur Anlagen mit bzw. ohne EEG-MaStR-Nummer.

Beispiel: true
hatEegZuschlagsnummerAbfrage

Nur Anlagen mit bzw. ohne Zuschlagsnummer aus einer Ausschreibung.

Beispiel: true
gebotsterminAbfrage

IDs von BNetzA-Gebotsterminen, mehrere kommagetrennt.

Beispiel: SOLAR_2024_1
eegPhasenwechselVonAbfrage

Wechsel der EEG-Vergütungsphase ab diesem Kalendertag.

Beispiel: 2026-01-01
eegPhasenwechselBisAbfrage

Wechsel der EEG-Vergütungsphase bis zu diesem Kalendertag.

Beispiel: 2026-12-31
eegFoerderendeVonAbfrage

Ende der EEG-Förderung ab diesem Kalendertag.

Beispiel: 2026-01-01
eegFoerderendeBisAbfrage

Ende der EEG-Förderung bis zu diesem Kalendertag.

Beispiel: 2030-12-31
eegEinspeiseverguetungMinCtKwhAbfrage

Mindestwert der EEG-Einspeisevergütung. Abgeleiteter Wert, siehe eegAbleitbarkeit.

Beispiel: 5
eegEinspeiseverguetungMaxCtKwhAbfrage

Höchstwert der EEG-Einspeisevergütung.

Beispiel: 12
eegAnzulegenderWertMinCtKwhAbfrage

Mindestwert des anzulegenden Werts nach EEG.

Beispiel: 4
eegAnzulegenderWertMaxCtKwhAbfrage

Höchstwert des anzulegenden Werts nach EEG.

Beispiel: 10
eegReferenzertragVerhaeltnisMinAbfrage

Mindestverhältnis zum Referenzertrag nach FGW. Dimensionslos.

Beispiel: 0.7
eegReferenzertragVerhaeltnisMaxAbfrage

Höchstverhältnis zum Referenzertrag nach FGW. Dimensionslos.

Beispiel: 1.3
eegAbleitbarkeitAbfrage

Herkunft der EEG-Werte: exakt, geschaetzt oder nicht_ableitbar.

Beispiel: exakt

Antworten

HTTP 200 Gruppen mit Anzahl und Leistung.

Beispielantwort
{
  "data": {
    "groupBy": "bundesland",
    "groups": [
      {
        "key": "Bayern",
        "count": 1204,
        "bruttoleistungKw": 998321.4,
        "durchschnittsleistungKw": 829.2
      }
    ],
    "totals": {
      "count": 1204,
      "bruttoleistungKw": 998321.4
    }
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Referenzdaten

GET /v1/reference

Verzeichnis der zulässigen Filterwerte

Scope: reference:readKostenklasse: standard

Welche Filter eine Wertehilfe haben und ob sie vollständig abrufbar oder nur durchsuchbar ist. Die Unterscheidung steht in kind: static kommt aus einer festen Liste, enumerable ist vollständig aufzählbar, searchable hat zu viele Ausprägungen und verlangt q.

Antworten

HTTP 200 Verfügbare Wertemengen.

Beispielantwort
{
  "data": [
    {
      "name": "bundesland",
      "filter": "bundesland",
      "kind": "enumerable",
      "description": "Bundesländer inklusive Ausschließlicher Wirtschaftszone.",
      "requiresQuery": false
    },
    {
      "name": "windHersteller",
      "filter": "windHersteller",
      "kind": "searchable",
      "description": "Windanlagen-Hersteller, normalisiert und zusammengefasst.",
      "requiresQuery": true
    }
  ]
}

Mögliche Fehler mit HTTP-Status 401, 403, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/reference/{set}

Zulässige Werte eines Filters

Scope: reference:readKostenklasse: standard

Die Werte, die ein Filter auf /v1/units annimmt. Bei Hersteller und Typenbezeichnung sind die Werte normalisiert und zusammengefasst; ein Rohwert aus einem MaStR-Export trifft nicht und liefert null Treffer. Bei searchable ist q Pflicht.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
set PflichtPfad

Name der Wertemenge aus /v1/reference.

Beispiel: windHersteller
qAbfrage

Suchbegriff. Pflicht bei durchsuchbaren Mengen, sonst optional.

Beispiel: enercon
limitAbfrage

Höchstzahl der Treffer einer Referenz-Suche. Vorschläge sind Autocomplete-Material, keine Datenabzüge.

Beispiel: 25
einheitTypAbfrage

Werte auf einen Energieträger eingrenzen.

Beispiel: wind

Antworten

HTTP 200 Zulässige Werte mit Häufigkeit im Bestand.

Beispielantwort
{
  "data": [
    {
      "value": "Enercon",
      "count": 12043
    },
    {
      "value": "Vestas",
      "count": 8221
    }
  ]
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 429, 500, 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Datenbestände

GET /v1/datasets

Datenstand je Bestand

Scope: reference:readKostenklasse: standard

Stand, Umfang, Quelle und Aktualisierungsrhythmus je Datenbestand. Der Stand wird aus dem Bestand selbst ermittelt. quellenvermerk ist der Satz, den die Lizenz verlangt, samt Stand und Änderungshinweis; lizenzen nennt die Bestandteile einzeln, weil ein Bestand aus mehreren Quellen unter verschiedenen Lizenzen stammen kann. granularity sagt, wie genau der Stand ist: manche Bestände tragen einen Kalendertag, andere nur ein Berichtsjahr. asOf: null heißt „unbekannt", nicht „leer".

Antworten

HTTP 200 Ein Eintrag je Datenbestand.

Beispielantwort
{
  "data": [
    {
      "name": "mastr",
      "label": "Marktstammdatenregister",
      "source": "Bundesnetzagentur",
      "updateCycle": "täglich",
      "granularity": "day",
      "asOf": "2026-08-09",
      "rows": 9363542,
      "rowsExact": false,
      "endpoints": [
        "/v1/units",
        "/v1/units/{id}",
        "/v1/aggregations"
      ],
      "lizenzen": [
        {
          "bezeichnung": "dl-de/by-2-0",
          "url": "https://www.govdata.de/dl-de/by-2-0",
          "bereitsteller": "Bundesnetzagentur, Marktstammdatenregister",
          "giltFuer": null,
          "shareAlike": false
        }
      ],
      "veraendert": true,
      "aenderungsvermerk": "Koordinaten ergänzt, Hersteller- und Typenbezeichnungen normalisiert, das Erst-Registrierungsdatum korrigiert sowie berechnete Werte ergänzt.",
      "lizenzHinweis": null,
      "quellenvermerk": "Bundesnetzagentur, Marktstammdatenregister, dl-de/by-2-0, https://www.govdata.de/dl-de/by-2-0, Stand 2026-08-09, verändert durch Ohmnify: Koordinaten ergänzt, Hersteller- und Typenbezeichnungen normalisiert, das Erst-Registrierungsdatum korrigiert sowie berechnete Werte ergänzt."
    },
    {
      "name": "industrieemissionen",
      "label": "Industrieanlagen und Freisetzungen (PRTR)",
      "source": "Umweltbundesamt (E-PRTR)",
      "updateCycle": "jährlich",
      "granularity": "year",
      "asOf": "2024",
      "rows": 5257,
      "rowsExact": true,
      "endpoints": [],
      "lizenzen": [],
      "veraendert": false,
      "aenderungsvermerk": null,
      "lizenzHinweis": "Nicht über die API ausgeliefert. Die Bedingungen des Umweltbundesamts sind für eine Weitergabe nicht bewertet.",
      "quellenvermerk": null
    }
  ]
}

Mögliche Fehler mit HTTP-Status 401, 403, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Portfolio

GET /v1/portfolio

Anlagen im Portfolio der Organisation

Scope: portfolio:readModul: portfolioKostenklasse: standard

Welche Anlagen zur Organisation gehören und als was; relationType trägt die Rolle. Ein Portfolio je Organisation in v1, deshalb steht keine Portfolio-Kennung in Pfad oder Rumpf. includeDeleted=true liefert auch entfernte Einträge (entferntAm gesetzt), die ein Abgleich braucht, um ein Entfernen zu erkennen.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
limitAbfrage

Objekte pro Seite. Default 100, Maximum 250. Die Pagination endet bei 10000 Zeilen je Abfrage.

Beispiel: 100
cursorAbfrage

Opaker Cursor aus der vorherigen Antwort. An Sortierung und Filter gebunden, nicht interpretierbar und nicht über Abfragen hinweg wiederverwendbar.

Beispiel: v1.eyJmIjoxfQ.abc
relationTypeAbfrage

Auf diese Rollen einschränken, kommagetrennt.

Beispiel: OPERATOR,OWNER
includeDeletedAbfrage

Entfernte Einträge mitliefern, erkennbar an entferntAm. Ein Abgleich mit einem Fremdsystem braucht sie, um ein Entfernen zu erkennen.

Beispiel: true

Antworten

HTTP 200 Einträge, neueste zuerst.

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "mastrNummer": "SEE959924114037",
      "relationType": "OPERATOR",
      "externalRefs": {
        "hubspot": "12345"
      },
      "angelegtAm": "2026-03-14T09:12:00.000Z",
      "geaendertAm": "2026-07-02T16:41:00.000Z",
      "entferntAm": null
    }
  ],
  "meta": {
    "count": 1,
    "hasMore": false,
    "cursor": null
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

POST /v1/portfolio

Anlagen ins Portfolio schreiben, anlegen oder aktualisieren

Scope: portfolio:writeModul: portfolioKostenklasse: mutation

Legt an oder aktualisiert, je Eintrag. Der Schlüssel ist die MaStR-Nummer, nicht externalRefs: eine Anlage liegt höchstens einmal im Portfolio, auch wenn das Fremdsystem seine Kennung ändert. Ein zuvor entfernter Eintrag wird wieder aufgenommen. Teilerfolg: die Antwort trägt results[] je Zeile mit created, updated, unchanged oder failed; eine ungültige Zeile verhindert die anderen nicht. Der Sammelstatus ist 200, bei mindestens einem Fehlschlag 207, kein 4xx für das ganze Paket.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
dryRunAbfrage

Probelauf. Durchläuft Authentifizierung, Scopes, Modul-Gates, alle Validatoren und die Idempotenz-Prüfung vollständig und ändert nichts. Die Antwort hat dieselbe Form wie im Ernstfall und trägt meta.dryRun: true im Rumpf. Verbraucht keinen Idempotenz-Schlüssel, derselbe Schlüssel schreibt anschließend im Ernstfall. Zulässig sind nur true und false, jeder andere Wert wird abgelehnt.

Beispiel: true
Idempotency-Keyheader

Macht einen Schreibaufruf wiederholbar. Derselbe Schlüssel mit derselben Anfrage liefert die gespeicherte Antwort des ersten Aufrufs, erkennbar am Antwort-Header Idempotency-Replayed: true, und schreibt kein zweites Mal. Derselbe Schlüssel mit anderem Inhalt ergibt 409. Der Schlüssel gilt je Organisation und 24 Stunden lang; nach einem Fehlschlag ist er wieder frei.

Beispiel: crm-sync-2026-08-14-batch-3

Rumpf

Felder des Anfrage-Rumpfs
FeldTypBeschreibung
entries Pflichtarray

Höchstens 500 Einträge je Aufruf.

Beispiel-Rumpf
{
  "entries": [
    {
      "mastrNummer": "SEE959924114037",
      "relationType": "OPERATOR",
      "externalRefs": {
        "hubspot": "12345"
      }
    },
    {
      "mastrNummer": "SEE900000000001",
      "relationType": "SERVICE_CONTRACT"
    }
  ]
}

Antworten

HTTP 200 Alle Zeilen verarbeitet. WriteAntwort

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "externalId": "12345",
      "status": "created"
    },
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0k",
      "externalId": null,
      "status": "unchanged"
    }
  ],
  "meta": {
    "total": 2,
    "created": 1,
    "updated": 0,
    "unchanged": 1,
    "failed": 0,
    "dryRun": false
  }
}

HTTP 207 Mindestens eine Zeile ist gescheitert; die übrigen sind geschrieben. WriteAntwort

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "externalId": "12345",
      "status": "created"
    },
    {
      "id": null,
      "externalId": "99",
      "status": "failed",
      "error": {
        "code": "UNPROCESSABLE",
        "message": "relationType is required and must be one of: OPERATOR, OWNER, …"
      }
    }
  ],
  "meta": {
    "total": 2,
    "created": 1,
    "updated": 0,
    "unchanged": 0,
    "failed": 1,
    "dryRun": false
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 409, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

DELETE /v1/portfolio

Anlagen aus dem Portfolio entfernen

Scope: portfolio:writeModul: portfolioKostenklasse: mutation

Weich: der Eintrag bekommt entferntAm und bleibt über includeDeleted=true sichtbar, sodass ein Abgleich das Entfernen erkennt. Eine nicht vorhandene Anlage ist kein Fehler, sondern unchanged; der Aufruf ist damit wiederholbar.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
dryRunAbfrage

Probelauf. Durchläuft Authentifizierung, Scopes, Modul-Gates, alle Validatoren und die Idempotenz-Prüfung vollständig und ändert nichts. Die Antwort hat dieselbe Form wie im Ernstfall und trägt meta.dryRun: true im Rumpf. Verbraucht keinen Idempotenz-Schlüssel, derselbe Schlüssel schreibt anschließend im Ernstfall. Zulässig sind nur true und false, jeder andere Wert wird abgelehnt.

Beispiel: true
Idempotency-Keyheader

Macht einen Schreibaufruf wiederholbar. Derselbe Schlüssel mit derselben Anfrage liefert die gespeicherte Antwort des ersten Aufrufs, erkennbar am Antwort-Header Idempotency-Replayed: true, und schreibt kein zweites Mal. Derselbe Schlüssel mit anderem Inhalt ergibt 409. Der Schlüssel gilt je Organisation und 24 Stunden lang; nach einem Fehlschlag ist er wieder frei.

Beispiel: crm-sync-2026-08-14-batch-3

Rumpf

Felder des Anfrage-Rumpfs
FeldTypBeschreibung
mastrNummern Pflichtarray

Höchstens 500 MaStR-Nummern je Aufruf.

Beispiel-Rumpf
{
  "mastrNummern": [
    "SEE959924114037"
  ]
}

Antworten

HTTP 200 Alle Zeilen verarbeitet. WriteAntwort

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "externalId": "SEE959924114037",
      "status": "updated"
    }
  ],
  "meta": {
    "total": 1,
    "created": 0,
    "updated": 1,
    "unchanged": 0,
    "failed": 0,
    "dryRun": false
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 409, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Eigene Felder

GET /v1/custom-fields

Eigene Felder der Organisation (nur lesen)

Scope: custom_fields:readModul: workspaceKostenklasse: standard

Das Schema der eigenen Felder: Kennung, Typ, Auswahlwerte. Nötig, bevor Werte geschrieben werden, denn Kennung und Typ bestimmen worauf und in welcher Form. Nur lesen, angelegt werden Felder in der Oberfläche. Felder mit vonGegenseiteBefuellt: true lassen sich über die Werte-Ressource nicht setzen; sie werden über die Verbindung beantwortet. Datei- und Kontaktfelder erscheinen hier nicht.

Antworten

HTTP 200 Alle Felddefinitionen der Organisation, nach Namen sortiert.

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "name": "Wartungsintervall",
      "typ": "DROPDOWN",
      "mehrfachwerte": false,
      "auswahlwerte": [
        "jährlich",
        "halbjährlich"
      ],
      "vonGegenseiteBefuellt": false,
      "mitGegenseiteGeteilt": true,
      "angelegtAm": "2026-03-14T09:12:00.000Z",
      "geaendertAm": "2026-07-02T16:41:00.000Z"
    }
  ],
  "meta": {
    "count": 1,
    "complete": true
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Kontakte

GET /v1/contacts

Kontaktverzeichnis der Organisation

Scope: contacts:readModul: workspaceKostenklasse: standard

Die eigenen Kontakte der Organisation: Ansprechpartner bei Betreibern, Dienstleistern und Behörden. Unterbau für den Feldtyp CONTACT und Anker für den Abgleich mit einem CRM. Die einzige Ressource dieser API mit direkt personenbeziehbaren Feldern. Diese Daten gehören der Organisation selbst; bei Register- und MaStR-Daten verlassen benannte Personen die API nicht. Nur lesen, Anlegen und Ändern laufen über die Oberfläche. Welche Mitarbeiter hinter einem Funktions-Kontakt stehen, gibt die Antwort nicht aus.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
limitAbfrage

Objekte pro Seite. Default 100, Maximum 250. Die Pagination endet bei 10000 Zeilen je Abfrage.

Beispiel: 100
cursorAbfrage

Opaker Cursor aus der vorherigen Antwort. An Sortierung und Filter gebunden, nicht interpretierbar und nicht über Abfragen hinweg wiederverwendbar.

Beispiel: v1.eyJmIjoxfQ.abc
kindAbfrage

Auf Einzelpersonen (PERSON) oder Rollen/Abteilungen (FUNCTION) einschränken.

Beispiel: PERSON
sucheAbfrage

Freitext über Name und Firma.

Beispiel: Enercon

Antworten

HTTP 200 Kontakte, nach Namen sortiert.

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "art": "PERSON",
      "name": "Anna Beispiel",
      "vorname": "Anna",
      "nachname": "Beispiel",
      "anrede": "FRAU",
      "titel": null,
      "email": "anna.beispiel@example.org",
      "telefon": "+49 30 1234567",
      "firma": "Beispiel Energie GmbH",
      "position": "Technische Leitung",
      "herkunft": "MANUAL",
      "status": "CONFIRMED",
      "angelegtAm": "2026-03-14T09:12:00.000Z",
      "geaendertAm": "2026-07-02T16:41:00.000Z"
    }
  ],
  "meta": {
    "count": 1,
    "hasMore": false,
    "cursor": null
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Gespeicherte Filter

GET /v1/saved-filters

Gespeicherte Filter der Organisation

Scope: saved_filters:readKostenklasse: standard

Die Kennungen, die ?savedFilterId= auf /v1/units erwartet. Ohne die Filterkriterien selbst, die Auswahl lässt sich ausführen, aber nicht auslesen. Nur Filter aus der Analyse, Karten-Filter erscheinen hier nicht.

Antworten

HTTP 200 Gespeicherte Filter, nach Name sortiert.

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "name": "Enercon älter 19 Jahre",
      "angelegtAm": "2026-03-14T09:12:00.000Z",
      "geaendertAm": "2026-07-02T16:41:00.000Z"
    }
  ],
  "meta": {
    "count": 1
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Verbindungen

GET /v1/connections

Verbindungen der Organisation

Scope: connections:readModul: connectionKostenklasse: standard

Eine Verbindung ist eine symmetrische Kante zwischen zwei Organisationen. Es gibt keinen Eigentümer; rolle sagt nur, wer eingeladen hat. Dieselbe Kante sieht von beiden Seiten unterschiedlich aus. Einladungen an eine E-Mail-Adresse erscheinen hier nicht, sie gehören noch keiner Organisation und werden in der Oberfläche angenommen. Ohne status sind beendete Verbindungen (REVOKED) ausgeblendet.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
limitAbfrage

Objekte pro Seite. Default 100, Maximum 250. Die Pagination endet bei 10000 Zeilen je Abfrage.

Beispiel: 100
cursorAbfrage

Opaker Cursor aus der vorherigen Antwort. An Sortierung und Filter gebunden, nicht interpretierbar und nicht über Abfragen hinweg wiederverwendbar.

Beispiel: v1.eyJmIjoxfQ.abc
statusAbfrage

Auf einen Status einschränken.

Beispiel: ACCEPTED

Antworten

HTTP 200 Verbindungen, neueste zuerst.

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "status": "ACCEPTED",
      "rolle": "initiator",
      "gegenseite": {
        "name": "Stadtwerke Beispiel GmbH"
      },
      "anlagenAnzahl": 3,
      "angelegtAm": "2026-03-14T09:12:00.000Z",
      "beantwortetAm": "2026-03-15T08:03:00.000Z",
      "geaendertAm": "2026-03-15T08:03:00.000Z"
    }
  ],
  "meta": {
    "count": 1,
    "hasMore": false,
    "cursor": null
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/connections/{id}

Eine Verbindung

Scope: connections:readModul: connectionKostenklasse: standard

Führt die Zählungen, die die Liste je Zeile nicht mitliefert, und ist der Einstieg in die beiden Unter-Ressourcen. Eine fremde Kennung ergibt 404, nicht 403.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung der Verbindung. Aus /v1/connections.

Beispiel: cm7x1a2b3c4d5e6f7g8h9i0j

Antworten

HTTP 200 Die Verbindung.

Beispielantwort
{
  "data": {
    "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
    "status": "ACCEPTED",
    "rolle": "eingeladen",
    "gegenseite": {
      "name": "Stadtwerke Beispiel GmbH"
    },
    "anlagenAnzahl": 3,
    "aktivierteFelder": 4,
    "angelegtAm": "2026-03-14T09:12:00.000Z",
    "beantwortetAm": "2026-03-15T08:03:00.000Z",
    "geaendertAm": "2026-03-15T08:03:00.000Z"
  },
  "meta": {}
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/connections/{id}/assets

Anlagen einer Verbindung

Scope: connections:readModul: connectionKostenklasse: standard

Der Umfang der Kante und damit die Grenze für alles Weitere: eine Freigabe gilt nur für eine Anlage, die hier steht. Beide Seiten sehen dieselbe Menge. beziehung ist die Rolle des Einladenden zur Anlage im Moment der Einladung und zieht späteren Änderungen an seinem Portfolio nicht nach.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung der Verbindung. Aus /v1/connections.

Beispiel: cm7x1a2b3c4d5e6f7g8h9i0j
limitAbfrage

Objekte pro Seite. Default 100, Maximum 250. Die Pagination endet bei 10000 Zeilen je Abfrage.

Beispiel: 100
cursorAbfrage

Opaker Cursor aus der vorherigen Antwort. An Sortierung und Filter gebunden, nicht interpretierbar und nicht über Abfragen hinweg wiederverwendbar.

Beispiel: v1.eyJmIjoxfQ.abc

Antworten

HTTP 200 Anlagen der Verbindung, nach MaStR-Nummer sortiert. Ist die Verbindung beendet (DECLINED, REVOKED), steht meta.aktiv auf false und die Liste ist leer.

Beispielantwort
{
  "data": [
    {
      "mastrNummer": "SEE959924114037",
      "beziehung": "OPERATOR",
      "hinzugefuegtAm": "2026-03-14T09:12:00.000Z",
      "geaendertAm": "2026-03-14T09:12:00.000Z"
    }
  ],
  "meta": {
    "count": 1,
    "aktiv": true,
    "hasMore": false,
    "cursor": null
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/connections/{id}/shared-fields

Über eine Verbindung sichtbare Felder

Scope: connections:readModul: connectionKostenklasse: standard

Beide Richtungen an einer Ressource. SHARE heißt „der Partner stellt diese Angabe zur Verfügung", REQUEST heißt „der Partner bittet um diese Angabe". besitzer sagt, wem das Feld gehört, und damit auch, wer den Wert geschrieben hat: bei SHARE der Besitzer, bei REQUEST die jeweils andere Seite. herkunft sagt, ob die Freigabe für diese Verbindung einzeln gesetzt wurde (explizit) oder aus einer stehenden Freigabe an der Anlage stammt (broadcast); bei beidem gilt explizit. Sichtbar ist nur, was vier Bedingungen gleichzeitig erfüllt: Verbindung angenommen, Feld freigegeben, Feld auf dieser Verbindung aktiv, Anlage im Umfang. Fällt eine weg, verschwindet die Zeile auch rückwirkend. Ohne Cursor, die Menge ist durch den Umfang der Verbindung begrenzt; ?anlage= grenzt weiter ein.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung der Verbindung. Aus /v1/connections.

Beispiel: cm7x1a2b3c4d5e6f7g8h9i0j
anlageAbfrage

Auf eine Anlage einschränken (MaStR-Nummer).

Beispiel: SEE959924114037
richtungAbfrage

REQUEST sind die offenen Bitten an uns, SHARE die Angaben der Gegenseite.

Beispiel: REQUEST

Antworten

HTTP 200 Sichtbare Felder dieser Verbindung.

Beispielantwort
{
  "data": [
    {
      "anlage": "SEE959924114037",
      "richtung": "REQUEST",
      "herkunft": "explizit",
      "def": {
        "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
        "name": "Zählpunktbezeichnung",
        "fieldType": "TEXT",
        "allowMultiple": false,
        "options": null
      },
      "besitzer": "gegenseite",
      "werte": [
        {
          "text": "DE0001234567890000000000000123456",
          "zahl": null,
          "datum": null,
          "datumsgenauigkeit": null,
          "geaendertAm": "2026-07-02T16:41:00.000Z"
        }
      ]
    }
  ],
  "meta": {
    "count": 1,
    "hasMore": false,
    "cursor": null
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

POST /v1/connections/{id}/shared-fields

Erfragte Felder beantworten

Scope: connections:writeModul: connectionKostenklasse: mutation

Der einzige Schreibvorgang dieser API in den Bestand einer anderen Organisation. Eine Organisation bittet über die Verbindung um eine Angabe, die andere liefert sie hier. Nur REQUEST-Felder, ein SHARE-Feld ergibt 403. Der Wert wird der schreibenden Organisation zugeordnet; ein zweiter Partner am selben Feld überschreibt ihn nicht. Eine leere Antwort zieht die Auskunft zurück (alle Wert-Felder null). Teilerfolg wie bei den übrigen Schreibvorgängen: data[] je Zeile, 207 sobald eine scheitert. Datei- und Kontaktfelder lassen sich hier nicht beantworten.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung der Verbindung. Aus /v1/connections.

Beispiel: cm7x1a2b3c4d5e6f7g8h9i0j
dryRunAbfrage

Probelauf. Durchläuft Authentifizierung, Scopes, Modul-Gates, alle Validatoren und die Idempotenz-Prüfung vollständig und ändert nichts. Die Antwort hat dieselbe Form wie im Ernstfall und trägt meta.dryRun: true im Rumpf. Verbraucht keinen Idempotenz-Schlüssel, derselbe Schlüssel schreibt anschließend im Ernstfall. Zulässig sind nur true und false, jeder andere Wert wird abgelehnt.

Beispiel: true
Idempotency-Keyheader

Macht einen Schreibaufruf wiederholbar. Derselbe Schlüssel mit derselben Anfrage liefert die gespeicherte Antwort des ersten Aufrufs, erkennbar am Antwort-Header Idempotency-Replayed: true, und schreibt kein zweites Mal. Derselbe Schlüssel mit anderem Inhalt ergibt 409. Der Schlüssel gilt je Organisation und 24 Stunden lang; nach einem Fehlschlag ist er wieder frei.

Beispiel: crm-sync-2026-08-14-batch-3

Rumpf

Felder des Anfrage-Rumpfs
FeldTypBeschreibung
antworten Pflichtarray

Höchstens 50 Antworten je Aufruf.

Erlaubt Rückschlüsse auf Standort oder Person.
Beispiel-Rumpf
{
  "antworten": [
    {
      "anlage": "SEE959924114037",
      "defId": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "text": "DE0001234567890000000000000123456"
    }
  ]
}

Antworten

HTTP 200 Alle Antworten übernommen. WriteAntwort

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "externalId": "SEE959924114037:cm7x1a2b3c4d5e6f7g8h9i0j",
      "status": "created"
    }
  ],
  "meta": {
    "total": 1,
    "created": 1,
    "updated": 0,
    "unchanged": 0,
    "failed": 0,
    "dryRun": false
  }
}

HTTP 207 Mindestens eine Antwort ist gescheitert; die übrigen sind geschrieben. WriteAntwort

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "externalId": "SEE959924114037:cm7x1a2b3c4d5e6f7g8h9i0j",
      "status": "updated"
    },
    {
      "id": null,
      "externalId": "SEE900000000001:cm0000000000000000000000",
      "status": "failed",
      "error": {
        "code": "INSUFFICIENT_SCOPE",
        "message": "This field is not open for you to fill on this connection."
      }
    }
  ],
  "meta": {
    "total": 2,
    "created": 0,
    "updated": 1,
    "unchanged": 0,
    "failed": 1,
    "dryRun": false
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 409, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Kanal

GET /v1/threads

Verläufe des Kanals

Scope: channel:readModul: connectionKostenklasse: standard

Die Nachrichtenverläufe auf den angenommenen Verbindungen der Organisation. Standardmäßig org-weit, anders als in der Oberfläche, wo ein Nutzer nur sieht, woran er beteiligt ist oder was ihm eine Routing-Regel zuweist. Ein Schlüssel vertritt die Organisation und bekommt deshalb alle Verläufe. Zwei Wege, das zu verengen: zustellung nennt je Zeile das zuständige Postfach, und actingUserId schaltet auf die Sicht dieses Nutzers.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
limitAbfrage

Objekte pro Seite. Default 100, Maximum 250. Die Pagination endet bei 10000 Zeilen je Abfrage.

Beispiel: 100
cursorAbfrage

Opaker Cursor aus der vorherigen Antwort. An Sortierung und Filter gebunden, nicht interpretierbar und nicht über Abfragen hinweg wiederverwendbar.

Beispiel: v1.eyJmIjoxfQ.abc
connectionIdAbfrage

Nur Verläufe dieser Verbindung.

Beispiel: cm7x1a2b3c4d5e6f7g8h9i0j
categoryAbfrage

Nur Verläufe dieser Routing-Kategorie.

Beispiel: Technik
anlageAbfrage

Nur Verläufe mit Bezug auf diese Anlage (MaStR-Nummer).

Beispiel: SEE959924114037
actingUserIdAbfrage

Als dieser Nutzer handeln. Beim Lesen liefert die Antwort genau das, was dieser Nutzer in der Oberfläche sieht. Genau ein Nutzer, keine Liste. Muss zur eigenen Organisation gehören.

Beispiel: cm4444444444444444444444

Antworten

HTTP 200 Verläufe, nach letzter Aktivität sortiert.

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "connectionId": "cm0000000000000000000000",
      "betreff": "Zugang zum Umspannwerk",
      "kategorie": "Technik",
      "anlagen": [
        "SEE959924114037"
      ],
      "zustellung": {
        "postfach": {
          "id": "cm1111111111111111111111",
          "name": "Technik-Team"
        },
        "allgemein": false
      },
      "nachrichtenAnzahl": 3,
      "letzteAktivitaetAm": "2026-08-14T10:22:00.000Z",
      "angelegtAm": "2026-08-12T09:00:00.000Z",
      "geaendertAm": "2026-08-14T10:22:00.000Z"
    }
  ],
  "meta": {
    "count": 1,
    "hasMore": false,
    "cursor": null
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

POST /v1/threads

Verlauf anlegen

Scope: channel:writeModul: connectionKostenklasse: mutation

Legt einen Verlauf mit seiner ersten Nachricht an. Absender ist standardmäßig die Integration; die Nachricht erscheint in beiden Oberflächen als „<Organisation> · via API". actingUserId ordnet sie stattdessen einer Person zu, genau einer. Nicht zu verwechseln mit addressUserIds, das bestimmt, wen die Nachricht erreichen soll. assets muss Teilmenge der Anlagen der Verbindung sein, andernfalls 400. ?dryRun=true prüft und legt nichts an; ein angelegter Verlauf ist bei der Gegenseite sofort sichtbar und lässt sich nicht zurücknehmen.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
dryRunAbfrage

Probelauf. Durchläuft Authentifizierung, Scopes, Modul-Gates, alle Validatoren und die Idempotenz-Prüfung vollständig und ändert nichts. Die Antwort hat dieselbe Form wie im Ernstfall und trägt meta.dryRun: true im Rumpf. Verbraucht keinen Idempotenz-Schlüssel, derselbe Schlüssel schreibt anschließend im Ernstfall. Zulässig sind nur true und false, jeder andere Wert wird abgelehnt.

Beispiel: true
Idempotency-Keyheader

Macht einen Schreibaufruf wiederholbar. Derselbe Schlüssel mit derselben Anfrage liefert die gespeicherte Antwort des ersten Aufrufs, erkennbar am Antwort-Header Idempotency-Replayed: true, und schreibt kein zweites Mal. Derselbe Schlüssel mit anderem Inhalt ergibt 409. Der Schlüssel gilt je Organisation und 24 Stunden lang; nach einem Fehlschlag ist er wieder frei.

Beispiel: crm-sync-2026-08-14-batch-3

Rumpf

Felder des Anfrage-Rumpfs
FeldTypBeschreibung
connectionId Pflichtstring

Die Verbindung. Muss angenommen sein.

body Pflichtstring

Text der ersten Nachricht, höchstens 5000 Zeichen.

Erlaubt Rückschlüsse auf Standort oder Person.
subjectstring oder null

Betreff, höchstens 200 Zeichen.

Erlaubt Rückschlüsse auf Standort oder Person.
categorystring oder null

Routing-Kategorie. Bestimmt, in welchem Postfach der Verlauf landet.

assetsarray

MaStR-Nummern, höchstens 50. Muss Teilmenge der Anlagen der Verbindung sein.

addressUserIdsarray

Gezielt angeschriebene Personen, höchstens 10. Sie werden Beteiligte und sehen den Verlauf unabhängig vom Routing. Müssen zu einer der beiden Organisationen gehören. Nicht zu verwechseln mit actingUserId, das den Absender bestimmt.

Erlaubt Rückschlüsse auf Standort oder Person.
actingUserIdstring oder null

Als diese Person schreiben, genau eine. Ohne Angabe erscheint die Nachricht als „<Organisation> · via API".

Erlaubt Rückschlüsse auf Standort oder Person.
Beispiel-Rumpf
{
  "connectionId": "cm0000000000000000000000",
  "subject": "Zugang zum Umspannwerk",
  "category": "Technik",
  "assets": [
    "SEE959924114037"
  ],
  "body": "Wir brauchen für Donnerstag eine Zufahrtsgenehmigung."
}

Antworten

HTTP 200 Verlauf angelegt. id ist der Verlauf, externalId die erste Nachricht. WriteAntwort

Beispielantwort
{
  "data": [
    {
      "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "externalId": "cm2222222222222222222222",
      "status": "created"
    }
  ],
  "meta": {
    "total": 1,
    "created": 1,
    "updated": 0,
    "unchanged": 0,
    "failed": 0,
    "dryRun": false
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 409, 422, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/threads/{id}

Ein Verlauf

Scope: channel:readModul: connectionKostenklasse: standard

Der Verlauf ohne seine Nachrichten; die stehen unter /messages und haben einen eigenen Cursor.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung des Verlaufs. Aus /v1/threads.

Beispiel: cm7x1a2b3c4d5e6f7g8h9i0j

Antworten

HTTP 200 Der Verlauf.

Beispielantwort
{
  "data": {
    "id": "cm7x1a2b3c4d5e6f7g8h9i0j",
    "connectionId": "cm0000000000000000000000",
    "betreff": "Zugang zum Umspannwerk",
    "kategorie": "Technik",
    "anlagen": [
      "SEE959924114037"
    ],
    "gegenseite": {
      "name": "Stadtwerke Beispiel GmbH"
    },
    "nachrichtenAnzahl": 3,
    "angelegtAm": "2026-08-12T09:00:00.000Z",
    "letzteAktivitaetAm": "2026-08-14T10:22:00.000Z",
    "geaendertAm": "2026-08-14T10:22:00.000Z"
  },
  "meta": {}
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/threads/{id}/messages

Nachrichten eines Verlaufs

Scope: channel:readModul: connectionKostenklasse: standard

Aufsteigend nach Zeit. Wer nur das Neue will, merkt sich den Cursor der letzten Seite. Gelöschte Nachrichten bleiben als Zeile stehen, mit geloescht: true und ohne Text. absender.viaApi sagt, ob die Nachricht auf der eigenen Seite über die API entstanden ist.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung des Verlaufs. Aus /v1/threads.

Beispiel: cm7x1a2b3c4d5e6f7g8h9i0j
limitAbfrage

Objekte pro Seite. Default 100, Maximum 250. Die Pagination endet bei 10000 Zeilen je Abfrage.

Beispiel: 100
cursorAbfrage

Opaker Cursor aus der vorherigen Antwort. An Sortierung und Filter gebunden, nicht interpretierbar und nicht über Abfragen hinweg wiederverwendbar.

Beispiel: v1.eyJmIjoxfQ.abc

Antworten

HTTP 200 Nachrichten, älteste zuerst.

Beispielantwort
{
  "data": [
    {
      "id": "cm2222222222222222222222",
      "text": "Wir brauchen für Donnerstag eine Zufahrtsgenehmigung.",
      "geloescht": false,
      "bearbeitet": false,
      "absender": {
        "organisation": "Stadtwerke Beispiel GmbH",
        "eigeneSeite": false,
        "person": "Anna Beispiel",
        "viaApi": false
      },
      "anhaenge": [],
      "geschriebenAm": "2026-08-12T09:00:00.000Z"
    }
  ],
  "meta": {
    "count": 1,
    "hasMore": false,
    "cursor": null
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

POST /v1/threads/{id}/messages

Nachricht schreiben

Scope: channel:writeModul: connectionKostenklasse: mutation

Hängt eine Nachricht an einen bestehenden Verlauf. Absender-Regeln wie beim Anlegen: standardmäßig die Integration, actingUserId ordnet einer Person zu. ?dryRun=true läuft durch dieselben Prüfungen und schreibt nicht.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung des Verlaufs. Aus /v1/threads.

Beispiel: cm7x1a2b3c4d5e6f7g8h9i0j
dryRunAbfrage

Probelauf. Durchläuft Authentifizierung, Scopes, Modul-Gates, alle Validatoren und die Idempotenz-Prüfung vollständig und ändert nichts. Die Antwort hat dieselbe Form wie im Ernstfall und trägt meta.dryRun: true im Rumpf. Verbraucht keinen Idempotenz-Schlüssel, derselbe Schlüssel schreibt anschließend im Ernstfall. Zulässig sind nur true und false, jeder andere Wert wird abgelehnt.

Beispiel: true
Idempotency-Keyheader

Macht einen Schreibaufruf wiederholbar. Derselbe Schlüssel mit derselben Anfrage liefert die gespeicherte Antwort des ersten Aufrufs, erkennbar am Antwort-Header Idempotency-Replayed: true, und schreibt kein zweites Mal. Derselbe Schlüssel mit anderem Inhalt ergibt 409. Der Schlüssel gilt je Organisation und 24 Stunden lang; nach einem Fehlschlag ist er wieder frei.

Beispiel: crm-sync-2026-08-14-batch-3

Rumpf

Felder des Anfrage-Rumpfs
FeldTypBeschreibung
body Pflichtstring

Text, höchstens 5000 Zeichen.

Erlaubt Rückschlüsse auf Standort oder Person.
actingUserIdstring oder null

Als diese Person schreiben, genau eine. Ohne Angabe erscheint die Nachricht als „<Organisation> · via API".

Erlaubt Rückschlüsse auf Standort oder Person.
Beispiel-Rumpf
{
  "body": "Genehmigung liegt bereit, Abholung am Tor 2."
}

Antworten

HTTP 200 Nachricht geschrieben. WriteAntwort

Beispielantwort
{
  "data": [
    {
      "id": "cm3333333333333333333333",
      "externalId": null,
      "status": "created"
    }
  ],
  "meta": {
    "total": 1,
    "created": 1,
    "updated": 0,
    "unchanged": 0,
    "failed": 0,
    "dryRun": false
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 409, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Ereignisse

GET /v1/events

Ausgelöste Events nachlesen

Scope: events:readKostenklasse: standard

Der Wiederherstellungspfad für Webhooks: fällt ein Endpoint aus, bleiben die Events hier abholbar. Die Nutzlast ist dieselbe wie bei der Zustellung, inklusive der Kappung von matches[] bei 100 Einträgen: ist truncated wahr, nennt matchCount die volle Zahl, und die Treffer lassen sich über die Anlagen-Ressource auflösen. Aufsteigend nach Zeit. eventId ist stabil und erlaubt, mehrfach zugestellte Vorgänge zu erkennen. Aufbewahrt wird 30 Tage.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
limitAbfrage

Objekte pro Seite. Default 100, Maximum 250. Die Pagination endet bei 10000 Zeilen je Abfrage.

Beispiel: 100
sinceAbfrage

Anker für die erste Seite: nur Events nach diesem Zeitpunkt. RFC-3339-Zeitstempel. Für Folgeseiten cursor benutzen und nicht den occurredAt der letzten Zeile, denn mehrere Events können dieselbe Millisekunde tragen.

Beispiel: 2026-08-11T06:00:00Z
cursorAbfrage

Opaker Cursor aus der vorherigen Antwort. An Sortierung und Filter gebunden, nicht interpretierbar und nicht über Abfragen hinweg wiederverwendbar.

Beispiel: v1.eyJmIjoxfQ.abc
typeAbfrage

Auf einen Event-Typ eingrenzen.

Beispiel: alert.triggered

Antworten

HTTP 200 Events dieser Organisation, älteste zuerst.

Beispielantwort
{
  "data": [
    {
      "eventId": "7f1c2c1e-2c1a-4a6b-9e2f-1b3d5a7c9e11",
      "type": "alert.triggered",
      "occurredAt": "2026-08-11T03:12:44.000Z",
      "data": {
        "schemaVersion": 1,
        "alert": {
          "id": "alr_123",
          "name": "Repowering Bayern",
          "template": "SIGNAL_CHANGE"
        },
        "matchCount": 112,
        "matches": [
          {
            "mastrNummer": "SEE900000000001"
          }
        ],
        "truncated": true,
        "resultsUrl": "https://app.ohmnify.io/notification/ntf_123",
        "links": {
          "self": "https://app.ohmnify.io/notification/ntf_123",
          "map": "https://app.ohmnify.io/map?alertNotification=ntf_123"
        }
      }
    }
  ],
  "meta": {
    "count": 1,
    "hasMore": false,
    "cursor": null,
    "retentionDays": 30
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 422, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Webhooks

GET /v1/webhooks/endpoints

Zustellziele auflisten

Scope: webhooks:readKostenklasse: standard

Die Webhook-Endpoints dieser Organisation. Angelegt und geändert werden sie über diese Ressource; jede Änderung steht im Audit-Log. eventTypes ist immer ausgeschrieben: ein Endpoint ohne eigene Auswahl führt alle bekannten Typen.

Antworten

HTTP 200 Endpoints dieser Organisation.

Beispielantwort
{
  "data": [
    {
      "id": "ep_2aB3cD4eF5gH6iJ7kL8mN9oP",
      "url": "https://erp.example.com/hooks/ohmnify",
      "description": "ERP-Anbindung",
      "eventTypes": [
        "alert.triggered"
      ],
      "disabled": false,
      "createdAt": "2026-08-11T09:00:00.000Z",
      "updatedAt": "2026-08-11T09:00:00.000Z"
    }
  ],
  "meta": {
    "count": 1,
    "knownEventTypes": [
      "alert.triggered"
    ]
  }
}

Mögliche Fehler mit HTTP-Status 401, 403, 429, 500, 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

POST /v1/webhooks/endpoints

Zustellziel anlegen

Scope: webhooks:manageKostenklasse: mutation

Legt ein Zustellziel an. Nur https. Das Signaturgeheimnis steht einmalig in dieser Antwort; danach ist es nur noch über GET /v1/webhooks/endpoints/{id}/secret erreichbar und taucht in keiner Liste auf. Ohne eventTypes werden alle bekannten Typen abonniert.

Rumpf

Felder des Anfrage-Rumpfs
FeldTypBeschreibung
url Pflichtstring

Zieladresse. Muss https sein.

descriptionstring

Freitext, um mehrere Endpoints auseinanderzuhalten.

eventTypesarray

Abonnierte Typen. Ohne Angabe alle bekannten.

secretstring

Eigenes Signaturgeheimnis im Format whsec_<base64>, für Kunden mit eigenem Geheimnisspeicher. Ohne Angabe wird eines erzeugt.

Beispiel-Rumpf
{
  "url": "https://erp.example.com/hooks/ohmnify",
  "description": "ERP-Anbindung",
  "eventTypes": [
    "alert.triggered"
  ]
}

Antworten

HTTP 201 Der angelegte Endpoint samt Signaturgeheimnis.

Beispielantwort
{
  "data": {
    "id": "ep_2aB3cD4eF5gH6iJ7kL8mN9oP",
    "url": "https://erp.example.com/hooks/ohmnify",
    "description": "ERP-Anbindung",
    "eventTypes": [
      "alert.triggered"
    ],
    "disabled": false,
    "createdAt": "2026-08-11T09:00:00.000Z",
    "updatedAt": "2026-08-11T09:00:00.000Z",
    "secret": "whsec_C2FtcGxlIHNlY3JldCBmb3IgZG9jdW1lbnRhdGlvbg=="
  },
  "meta": {
    "secretShownOnce": true
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 409, 422, 429, 500, 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/webhooks/endpoints/{id}

Zustellziel lesen

Scope: webhooks:readKostenklasse: standard

Ein einzelner Endpoint. Ohne Signaturgeheimnis, das steht hinter einer eigenen Ressource.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung des Endpoints, wie beim Anlegen zurückgegeben.

Beispiel: ep_2aB3cD4eF5gH6iJ7kL8mN9oP

Antworten

HTTP 200 Der Endpoint.

Beispielantwort
{
  "data": {
    "id": "ep_2aB3cD4eF5gH6iJ7kL8mN9oP",
    "url": "https://erp.example.com/hooks/ohmnify",
    "description": "ERP-Anbindung",
    "eventTypes": [
      "alert.triggered"
    ],
    "disabled": false,
    "createdAt": "2026-08-11T09:00:00.000Z",
    "updatedAt": "2026-08-11T09:00:00.000Z"
  },
  "meta": {}
}

Mögliche Fehler mit HTTP-Status 401, 403, 404, 429, 500, 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

PATCH /v1/webhooks/endpoints/{id}

Zustellziel ändern

Scope: webhooks:manageKostenklasse: mutation

Ändert einzelne Felder. Weggelassene Felder bleiben unangetastet: wer nur die Beschreibung setzt, behält seine Typ-Auswahl. disabled: true hält die Zustellung an; Endpoint und Geheimnis bleiben erhalten.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung des Endpoints, wie beim Anlegen zurückgegeben.

Beispiel: ep_2aB3cD4eF5gH6iJ7kL8mN9oP

Rumpf

Felder des Anfrage-Rumpfs
FeldTypBeschreibung
urlstring

Neue Zieladresse. Muss https sein.

descriptionstring

Neuer Freitext.

eventTypesarray

Neue Typ-Auswahl. Ersetzt die bisherige vollständig.

disabledboolean

Zustellung anhalten oder fortsetzen.

Beispiel-Rumpf
{
  "disabled": true
}

Antworten

HTTP 200 Der geänderte Endpoint.

Beispielantwort
{
  "data": {
    "id": "ep_2aB3cD4eF5gH6iJ7kL8mN9oP",
    "url": "https://erp.example.com/hooks/ohmnify",
    "description": "ERP-Anbindung",
    "eventTypes": [
      "alert.triggered"
    ],
    "disabled": true,
    "createdAt": "2026-08-11T09:00:00.000Z",
    "updatedAt": "2026-08-11T11:30:00.000Z"
  },
  "meta": {}
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 422, 429, 500, 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

DELETE /v1/webhooks/endpoints/{id}

Zustellziel entfernen

Scope: webhooks:manageKostenklasse: mutation

Entfernt den Endpoint endgültig. Zum vorübergehenden Anhalten stattdessen disabled: true setzen, das erhält das Signaturgeheimnis. Events entstehen weiter und bleiben über GET /v1/events abrufbar.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung des Endpoints, wie beim Anlegen zurückgegeben.

Beispiel: ep_2aB3cD4eF5gH6iJ7kL8mN9oP

Antworten

HTTP 200 Entfernt.

Beispielantwort
{
  "data": null,
  "meta": {
    "deleted": "ep_2aB3cD4eF5gH6iJ7kL8mN9oP"
  }
}

Mögliche Fehler mit HTTP-Status 401, 403, 404, 429, 500, 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/webhooks/endpoints/{id}/secret

Signaturgeheimnis lesen

Scope: webhooks:manageKostenklasse: standard

Das Geheimnis, mit dem eingehende Zustellungen geprüft werden. Verlangt webhooks:manage und nicht webhooks:read: mit dem Geheimnis lassen sich Zustellungen nicht nur prüfen, sondern auch fälschen.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung des Endpoints, wie beim Anlegen zurückgegeben.

Beispiel: ep_2aB3cD4eF5gH6iJ7kL8mN9oP

Antworten

HTTP 200 Das Signaturgeheimnis.

Beispielantwort
{
  "data": {
    "endpointId": "ep_2aB3cD4eF5gH6iJ7kL8mN9oP",
    "secret": "whsec_C2FtcGxlIHNlY3JldCBmb3IgZG9jdW1lbnRhdGlvbg=="
  },
  "meta": {}
}

Mögliche Fehler mit HTTP-Status 401, 403, 404, 429, 500, 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

POST /v1/webhooks/endpoints/{id}/secret

Signaturgeheimnis wechseln

Scope: webhooks:manageKostenklasse: mutation

Setzt ein neues Geheimnis. Ohne Vorgabe wird eines erzeugt. Der alte Schlüssel bleibt previousSecretValidForSeconds lang gültig; Zustellungen, die währenddessen unterwegs sind, bleiben damit prüfbar.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung des Endpoints, wie beim Anlegen zurückgegeben.

Beispiel: ep_2aB3cD4eF5gH6iJ7kL8mN9oP

Rumpf

Felder des Anfrage-Rumpfs
FeldTypBeschreibung
secretstring

Eigenes Geheimnis im Format whsec_<base64>. Ohne Angabe wird eines erzeugt.

Beispiel-Rumpf
{}

Antworten

HTTP 200 Das neue Signaturgeheimnis.

Beispielantwort
{
  "data": {
    "endpointId": "ep_2aB3cD4eF5gH6iJ7kL8mN9oP",
    "secret": "whsec_TmV3IHNlY3JldCBmb3IgZG9jdW1lbnRhdGlvbiB1c2U="
  },
  "meta": {
    "previousSecretValidForSeconds": 86400
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 429, 500, 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

POST /v1/webhooks/portal

Zugang zum Zustellprotokoll

Scope: webhooks:readKostenklasse: standard

Erzeugt einen kurzlebigen Link auf das Zustellprotokoll: welche Nachricht wann an welchen Endpoint ging, mit welcher Antwort, und der Knopf zum erneuten Senden. Der Link öffnet ohne weitere Anmeldung und ist damit selbst ein Geheimnis; deshalb POST statt GET, damit er nicht in Browser-Verläufen und Proxy-Logs stehenbleibt. Über den Zugang lassen sich keine Endpoints ändern und keine Geheimnisse anzeigen, beides läuft über /v1/webhooks/endpoints. Der Umfang richtet sich nach dem Scope: mit webhooks:manage erlaubt der Link auch das erneute Senden, mit nur webhooks:read ausschließlich das Lesen.

Antworten

HTTP 200 Ein Link auf das Zustellprotokoll.

Beispielantwort
{
  "data": {
    "url": "https://app.svix.com/login#key=eyJhbGciOiJI...",
    "expiresAt": "2026-08-11T12:00:00.000Z"
  },
  "meta": {
    "capabilities": [
      "view_delivery_log",
      "replay_message"
    ],
    "grantedBy": "webhooks:manage"
  }
}

Mögliche Fehler mit HTTP-Status 401, 403, 429, 500, 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Audit-Log

GET /v1/audit-log

Was die Schlüssel dieser Organisation getan haben

Scope: audit:readKostenklasse: standard

Wer wann was gelesen oder geschrieben hat, als Ressource für den Kunden selbst. Auch Lesezugriffe stehen drin, nicht nur Schreibvorgänge. Nicht enthalten sind errorFingerprint und errorStack; für die Nachverfolgung eines Vorfalls dienen Statuscode und requestId. Der Abfrage-String erscheint nur bei 4xx und 5xx und um Schlüsselmaterial bereinigt; bei erfolgreichen Aufrufen steht abfrageHash, an dem sich gleiche Abfragen erkennen lassen. Die Aufbewahrungsdauer steht in meta.aufbewahrungTage. Nicht zugesagt sind SIEM-Streaming, Echtzeit-Push und unbegrenzte Historie.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
limitAbfrage

Objekte pro Seite. Default 100, Maximum 250. Die Pagination endet bei 10000 Zeilen je Abfrage.

Beispiel: 100
cursorAbfrage

Opaker Cursor aus der vorherigen Antwort. An Sortierung und Filter gebunden, nicht interpretierbar und nicht über Abfragen hinweg wiederverwendbar.

Beispiel: v1.eyJmIjoxfQ.abc
vonAbfrage

Untere Grenze: Kalendertag (2026-08-01) oder RFC-3339-Zeitstempel.

Beispiel: 2026-08-01
bisAbfrage

Obere Grenze, gleiche Formen wie von.

Beispiel: 2026-08-14T23:59:59Z
statusAbfrage

Auf einen HTTP-Statuscode einschränken. Der schnellste Weg zu „was ist fehlgeschlagen".

Beispiel: 403
methodAbfrage

Auf eine HTTP-Methode einschränken, etwa alle Schreibvorgänge.

Beispiel: POST
keyPrefixAbfrage

Auf einen einzelnen Schlüssel einschränken, über sein Anzeigepräfix. Das Geheimnis selbst kommt hier nie vor.

Beispiel: ohmn_a1b2

Antworten

HTTP 200 Einträge, neueste zuerst.

Beispielantwort
{
  "data": [
    {
      "id": "9f1c2e40-5a6b-4c8d-9e0f-1a2b3c4d5e6f",
      "zeitpunkt": "2026-08-14T09:12:00.000Z",
      "methode": "GET",
      "pfad": "/v1/units",
      "status": 200,
      "dauerMs": 143,
      "zeilen": 100,
      "requestId": "req_01J8ZK3QW4",
      "schluesselId": "cm7x1a2b3c4d5e6f7g8h9i0j",
      "schluesselPraefix": "ohmn_a1b2",
      "abfrage": null,
      "abfrageHash": "e3b0c44298fc1c14"
    }
  ],
  "meta": {
    "count": 1,
    "hasMore": false,
    "cursor": null,
    "aufbewahrungTage": 90
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Selbstauskunft

GET /v1/me

Selbstauskunft über Key und Organisation

ohne ScopeKostenklasse: standard

Was der Schlüssel darf und was die Organisation gebucht hat: Scopes, Module, Signal- und Alert-Entitlements, geltende Grenzen, Rate-Limit- und Kontingent-Stand. Schlüssel-Scopes und Org-Entitlements stehen getrennt, damit erkennbar ist, ob eine fehlende Berechtigung am Schlüssel oder an der Buchung liegt. Verlangt keinen Scope.

Antworten

HTTP 200 Berechtigungen und Grenzen des Aufrufers.

Beispielantwort
{
  "data": {
    "key": {
      "prefix": "ohmn_1_oTBOb",
      "scopes": [
        "units:read",
        "reference:read"
      ],
      "unbekannteScopes": []
    },
    "organization": {
      "id": "org_123",
      "modules": [
        "analysis",
        "api",
        "signals"
      ],
      "trialEndsAt": null
    },
    "entitlements": {
      "signals": [
        "post_eeg"
      ],
      "alertTemplates": [
        {
          "key": "NEW_UNIT",
          "name": "Neue Anlage",
          "exclusive": false
        }
      ]
    },
    "limits": {
      "displayRows": 1000,
      "exportRows": null,
      "maxAlerts": 25,
      "advancedFilters": true,
      "maxPageSize": 250,
      "maxRowsPerQuery": 10000
    },
    "rateLimit": {
      "window": "1 m",
      "perCostClass": {
        "standard": 60,
        "mutation": 30,
        "expensive": 12
      }
    },
    "quota": {
      "used": 1204,
      "limit": 500000,
      "remaining": 498796,
      "state": "ok",
      "periodStart": "2026-08-01",
      "periodEnd": "2026-09-01"
    },
    "links": {
      "openapi": "https://app.ohmnify.io/api/v1/openapi.json",
      "usage": "https://app.ohmnify.io/api/v1/usage"
    }
  }
}

Mögliche Fehler mit HTTP-Status 401, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Verbrauch

GET /v1/usage

Eigenen Verbrauch und die geltenden Limits abrufen

ohne ScopeKostenklasse: standard

Selbstauskunft über Monatskontingent und Rate-Limits. Bewusst ohne Scope-Anforderung.

Antworten

HTTP 200 Aktueller Verbrauch.

Beispielantwort
{
  "data": {
    "period": {
      "start": "2026-08-01",
      "end": "2026-09-01"
    },
    "requests": {
      "used": 1204,
      "limit": 10000,
      "remaining": 8796,
      "state": "ok"
    },
    "rateLimit": {
      "window": "1 m",
      "perCostClass": {
        "standard": 60,
        "mutation": 30,
        "expensive": 12
      }
    }
  }
}

Mögliche Fehler mit HTTP-Status 401, 403, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Betriebszustand

GET /v1/health

Zustand der API

ohne ScopeKostenklasse: standard

Betriebszustand, unauthentifiziert abrufbar und damit auch dann, wenn die Anmeldung selbst betroffen ist. Je Abhängigkeit nur ok oder degraded. Bei eingeschränktem Betrieb ist der Statuscode 503, ein Monitoring muss den Rumpf also nicht auswerten. Das Ergebnis gilt einige Sekunden für alle Aufrufer.

Antworten

HTTP 200 Regelbetrieb.

Beispielantwort
{
  "data": {
    "status": "ok",
    "checkedAt": "2026-08-10T12:00:00.000Z",
    "dependencies": {
      "database": "ok",
      "search": "ok"
    }
  }
}

Mögliche Fehler mit HTTP-Status 503. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Ausschreibungen

GET /v1/ausschreibungen

Gebotstermine der BNetzA-Ausschreibungen

Scope: ausschreibungen:readModul: ausschreibungenKostenklasse: standard

Ein Kalender mit Ergebnissen: je Termin die ausgeschriebene Menge, die bezuschlagte Menge und die Preisspanne. Angekündigte Termine sind enthalten und tragen dann nur technologie, datum und status, solange die Zuschlagsliste fehlt. Ohne Cursor, der Bestand passt vollständig in eine Antwort; meta.complete bestätigt das.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
technologieAbfrage

Auf Technologien eingrenzen, mehrere kommagetrennt.

Beispiel: WIND,SOLAR_FREIFLAECHE
statusAbfrage

Auf einen Bearbeitungsstand eingrenzen, mehrere kommagetrennt. PENDING sind angekündigte Termine ohne Ergebnis.

Beispiel: PENDING
vonAbfrage

Termine ab diesem Kalendertag.

Beispiel: 2026-01-01
bisAbfrage

Termine bis zu diesem Kalendertag.

Beispiel: 2026-12-31

Antworten

HTTP 200 Gebotstermine, neuester zuerst.

Beispielantwort
{
  "data": [
    {
      "id": 822,
      "technologie": "WIND",
      "datum": "2023-11-01",
      "status": "IMPORTED",
      "bezeichnung": "Wind an Land 01.11.2023",
      "zuschlaege": 163,
      "volumenBeworbenKw": 2437000,
      "volumenBezuschlagtKw": 1920000,
      "volumenAusgeschriebenKw": 1611000,
      "gebotNiedrigstesCtKwh": 6.15,
      "gebotHoechstesCtKwh": 7.35,
      "zuschlagswertDurchschnittCtKwh": 7.31
    }
  ],
  "meta": {
    "count": 1,
    "complete": true
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

GET /v1/ausschreibungen/{id}/zuschlaege

Zuschläge eines Gebotstermins

Scope: ausschreibungen:readModul: ausschreibungenKostenklasse: standard

Die Zuschläge eines Termins, zusammen mit dessen Preisspanne. mastrNummern ist das Bindeglied zum Anlagenbestand; ein erheblicher Teil der Zuschläge trägt keine, weil die Anlage bei Veröffentlichung noch nicht im Register stand. Bei frischen Solar-Freiflächen ist das die Regel, bei Wind die Ausnahme: diese Zuschläge zeigen Projekte vor ihrer Registrierung. geoGenauigkeit sagt, auf welcher Ebene die Koordinate ermittelt wurde.

Parameter

Parameter dieses Endpunkts
NameOrtBeschreibung
id PflichtPfad

Kennung des Gebotstermins aus /v1/ausschreibungen.

Beispiel: 822
limitAbfrage

Objekte pro Seite. Default 100, Maximum 250. Die Pagination endet bei 10000 Zeilen je Abfrage.

Beispiel: 100
cursorAbfrage

Opaker Cursor aus der vorherigen Antwort. An Sortierung und Filter gebunden, nicht interpretierbar und nicht über Abfragen hinweg wiederverwendbar.

Beispiel: v1.eyJmIjoxfQ.abc
bundeslandAbfrage

Auf Bundesländer eingrenzen, mehrere kommagetrennt.

Beispiel: Nordrhein-Westfalen

Antworten

HTTP 200 Zuschläge dieses Termins.

Beispielantwort
{
  "data": [
    {
      "id": 34478,
      "zuschlagsnummer": "WIN23-4/163",
      "gebotsmengeKw": 60000,
      "bundesland": "Nordrhein-Westfalen",
      "landkreis": "Coesfeld",
      "plz": "59348",
      "gemeinde": "Lüdinghausen",
      "gemarkung": "Lüdinghausen-Kirchspiel",
      "flurstueck": "Flur 55: 21",
      "mastrNummern": [
        "SEE952388877333"
      ],
      "foerderNummern": [
        "EEG925709236850"
      ],
      "latitude": 51.7712,
      "longitude": 7.4453,
      "geoGenauigkeit": "gemarkung"
    }
  ],
  "meta": {
    "count": 1,
    "hasMore": false,
    "cursor": null
  }
}

Mögliche Fehler mit HTTP-Status 400, 401, 403, 404, 429, 500. Alle Fehler folgen RFC 9457, siehe Fehlerform.

Objekte

Die Formen, auf die sich die Antworten oben beziehen.

Aggregation

Gruppierte Auszählung des Anlagenbestands.

Felder von Aggregation
FeldTypBeschreibung
groupBy Pflichtstring

Die Dimension, nach der gruppiert wurde.

groups Pflichtarray

Eine Zeile je Ausprägung der Dimension.

totals Pflichtobject

Summen über alle Gruppen.

Alterskohorte

Bestand einer Alterskohorte für einen Energieträger.

Felder von Alterskohorte
FeldTypBeschreibung
kohorte Pflichtstring

Name der Kohorte; die Grenzen stehen in meta.kohorten.

energietraeger Pflichtstring

Energieträger, kanonisch kleingeschrieben.

anzahlinteger

Anlagen in Betrieb in dieser Kohorte.

mwnumber
MW

Deren Bruttoleistung.

AnfrageAntwort

Die Antwort auf genau eine Bitte: ein Feld an einer Anlage. Alle Wert-Träger null zieht die Antwort zurück.

Felder von AnfrageAntwort
FeldTypBeschreibung
anlage Pflichtstring

MaStR-Nummer der Anlage. Muss im Umfang der Verbindung liegen.

defId Pflichtstring

Kennung des erfragten Feldes, aus /v1/connections/{id}/shared-fields.

textstring oder null

Wert bei TEXT, LONG_TEXT, DROPDOWN, URL.

zahlnumber oder null

Wert bei NUMBER. Einheitenlos: die Bedeutung steht in der Feld-Definition der Gegenseite.

datumstring oder null

Wert bei DATE, als Kalendertag (YYYY-MM-DD).

datumsgenauigkeitstring

Genauigkeit des Datums. Ohne Angabe DAY.

AuditEintrag

Ein API-Aufruf dieser Organisation. Lesezugriffe stehen ebenso drin wie Schreibvorgänge.

Felder von AuditEintrag
FeldTypBeschreibung
id Pflichtstring

Kennung des Eintrags.

zeitpunkt Pflichtstring

Wann der Aufruf beantwortet wurde.

methode Pflichtstring

HTTP-Methode.

pfad Pflichtstring

Pfad ohne Abfrage-String.

status Pflichtinteger

HTTP-Statuscode der Antwort.

dauerMsinteger
ms

Verarbeitungsdauer.

zeileninteger oder null

Wie viele Zeilen die Antwort trug; null bei Aufrufen ohne Liste.

requestIdstring

Der Anker für einen Supportfall. Auch im Antwort-Header X-Request-Id.

schluesselIdstring oder null

Welcher Schlüssel; null, wenn der Aufruf vor der Auflösung scheiterte.

schluesselPraefixstring oder null

Anzeigepräfix des Schlüssels. Das Geheimnis selbst steht nirgends im Log.

abfragestring oder null

Der Abfrage-String, nur bei 4xx und 5xx gespeichert und um Schlüsselmaterial bereinigt. Bei Erfolg null, dort steht nur abfrageHash.

abfrageHashstring oder null

Hash des Abfrage-Strings. Erlaubt, gleiche Abfragen zu erkennen, ohne die Filterwerte aufzubewahren.

CustomFieldDef

Ein eigenes Feld der Organisation. Definitionen sind über die API nur lesbar.

Felder von CustomFieldDef
FeldTypBeschreibung
id Pflichtstring

Kennung, unter der Werte geschrieben werden.

name Pflichtstring

Anzeigename, wie ihn die Organisation vergeben hat.

typ Pflichtstring

Bestimmt, welches Wertfeld belegt wird. Datei- und Kontaktfelder erscheinen hier nicht.

mehrfachwerteboolean

Ob mehrere Werte zulässig sind.

auswahlwertearray

Zulässige Werte bei DROPDOWN; sonst leer, nie null.

vonGegenseiteBefuelltboolean

Ein REQUEST-Feld: die Gegenseite einer Verbindung füllt es. Über die Werte-Ressource nicht setzbar.

mitGegenseiteGeteiltboolean

Der Wert wird mit verbundenen Organisationen geteilt.

angelegtAmstring

Anlagezeitpunkt.

geaendertAmstring

Letzte Änderung an der Definition.

CustomFieldEingabe

Ein zu setzender Wert. Genau ein Slot passend zum Feldtyp; alle leer bedeutet „Feld leeren".

Felder von CustomFieldEingabe
FeldTypBeschreibung
defId Pflichtstring

Das Feld, aus GET /v1/custom-fields. Ein fremdes Feld ergibt NOT_FOUND in der Zeile.

textstring oder null

Bei TEXT, LONG_TEXT, DROPDOWN und URL. null leert das Feld.

zahlnumber oder null

Bei NUMBER. null leert das Feld.

datumstring oder null

Bei DATE, als Kalendertag. null leert das Feld.

datumsgenauigkeitstring

Ob Tag oder Monat gemeint ist. Standard DAY.

CustomFieldWert

Ein Wert der Organisation zu einer Anlage. Je nach Feldtyp ist genau einer der drei Slots belegt.

Felder von CustomFieldWert
FeldTypBeschreibung
defId Pflichtstring

Zu welchem Feld der Wert gehört.

textstring oder null

Bei TEXT, LONG_TEXT, DROPDOWN und URL.

zahlnumber oder null

Bei NUMBER.

datumstring oder null

Bei DATE, als Kalendertag ohne Uhrzeit: der Wert ist ein Datum, keine Zeitangabe.

datumsgenauigkeitstring

Ob der Tag oder nur der Monat gemeint war. Bei MONTH trägt datum konventionell den Monatsersten.

schreiberstring

Wer den Wert geschrieben hat. eigen ist eine eigene Eintragung, gegenseite die Antwort eines Verbindungspartners auf ein Feld, um das diese Organisation gebeten hat.

reihenfolgeinteger

Position bei Feldern mit Mehrfachwerten.

geaendertAmstring

Letzte Änderung an diesem Wert.

Gebotstermin

Ein Gebotstermin. Angekündigte Termine tragen nur Technologie, Datum und Status.

Felder von Gebotstermin
FeldTypBeschreibung
id Pflichtinteger

Kennung des Termins.

technologie Pflichtstring

Ausgeschriebene Technologie.

datum Pflichtstring oder null

Gebotstermin als Kalendertag.

statusstring oder null

Bearbeitungsstand. PENDING heißt angekündigt, aber ohne veröffentlichte Zuschlagsliste.

bezeichnungstring oder null

Bezeichnung der Ausschreibungsrunde.

zuschlaegeinteger oder null

Anzahl der Zuschläge dieses Termins.

volumenBeworbenKwnumber oder null
kW

Beworbene Gebotsmenge.

volumenBezuschlagtKwnumber oder null
kW

Bezuschlagte Menge.

volumenAusgeschriebenKwnumber oder null
kW

Tatsächlich ausgeschriebene Menge nach Anpassung.

gebotNiedrigstesCtKwhnumber oder null
ct/kWh

Niedrigstes bezuschlagtes Gebot.

gebotHoechstesCtKwhnumber oder null
ct/kWh

Höchstes bezuschlagtes Gebot.

zuschlagswertDurchschnittCtKwhnumber oder null
ct/kWh

Mengengewichteter Durchschnitt der Zuschlagswerte.

GeteiltesFeld

Ein Feld, das über diese Verbindung für eine Anlage sichtbar ist.

Felder von GeteiltesFeld
FeldTypBeschreibung
anlage Pflichtstring

MaStR-Nummer der Anlage.

richtung Pflichtstring

SHARE: die Gegenseite stellt die Angabe zur Verfügung. REQUEST: sie bittet darum. Nur REQUEST ist beschreibbar.

herkunft Pflichtstring

Ob die Freigabe für diese Verbindung einzeln gesetzt wurde (explizit) oder aus einer stehenden Freigabe an der Anlage stammt (broadcast). Bei beidem gilt explizit.

besitzerstring

Wem die Feld-Definition gehört. gegenseite: der Partner teilt die Angabe oder fragt danach. eigen: die eigene Organisation teilt oder fragt, und bei richtung: REQUEST steht in werte die Antwort des Partners.

def Pflichtobject

Die Feld-Definition der Gegenseite.

werte Pflichtarray

Bei SHARE die Werte der Gegenseite, bei REQUEST die eigene Antwort. Leer heißt bei REQUEST „noch unbeantwortet".

Katalogfeld

Ein Feld der Anlagen-Ressource, mit seiner Verfügbarkeit für diesen Schlüssel.

Felder von Katalogfeld
FeldTypBeschreibung
name Pflichtstring

Feldname, wie er in der Antwort erscheint.

typ Pflichtstring

JSON-Typ ohne den null-Anteil.

beschreibungstring

Dieselbe Beschreibung wie in der Spezifikation.

einheitstring oder null

Physikalische Einheit, sofern das Feld eine trägt.

wertearray oder null

Geschlossene Werteliste, sofern es eine gibt.

lesbar Pflichtboolean

Erscheint das Feld in der Antwort?

filterbar Pflichtboolean

Lässt sich danach filtern?

sortierbar Pflichtboolean

Lässt sich mit ?sort= danach sortieren? Nur eine kleine Auswahl an Feldern kann das; alles andere ergibt 400.

filterarray

Die Parameternamen, unter denen gefiltert wird. Ein Zahlenfeld trägt hier meist ein Paar aus Min und Max.

blockstring oder null

Der include-Block, aus dem das Feld stammt. null heißt Basisantwort.

modulstring oder null

Modul, das dieses Feld verlangt. null heißt frei.

verfuegbar Pflichtboolean

Bekommt dieser Schlüssel das Feld gerade? Der einzige Wert, der sich zwischen zwei Schlüsseln unterscheidet.

personenbezugstring

Datenschutz-Klassifizierung. direct kommt hier nicht vor, solche Felder verlassen die API nicht.

hinweisstring oder null

Warum ein Feld filterbar, aber nicht lesbar ist. Nur bei den begründeten Ausnahmen gesetzt.

Kontakt

Ein Ansprechpartner aus dem Verzeichnis der Organisation.

Felder von Kontakt
FeldTypBeschreibung
id Pflichtstring

Kennung, auch als Ziel eines Custom-Field-Werts vom Typ CONTACT.

art Pflichtstring

PERSON ist eine Einzelperson, FUNCTION eine Rolle oder Abteilung.

name Pflichtstring

Anzeigename. Pflichtfeld im Bestand.

vornamestring oder null

Vorname, sofern getrennt erfasst.

nachnamestring oder null

Nachname, sofern getrennt erfasst.

anredestring oder null

Anrede für formale Korrespondenz; nur bei PERSON.

titelstring oder null

Akademischer Titel, getrennt von der Position.

emailstring oder null

E-Mail-Adresse.

telefonstring oder null

Telefonnummer.

firmastring oder null

Arbeitgeber der Person, nicht die besitzende Organisation.

positionstring oder null

Funktion beim Arbeitgeber.

herkunftstring

Woher der Kontakt stammt.

statusstring

SUGGESTED ist vorgeschlagen und noch nicht bestätigt.

angelegtAmstring

Anlagezeitpunkt.

geaendertAmstring

Letzte Änderung. Anker für den Delta-Abruf.

Nachricht

Eine Nachricht. Gelöschte bleiben als Zeile stehen, mit geloescht: true und ohne Text.

Felder von Nachricht
FeldTypBeschreibung
id Pflichtstring

Kennung der Nachricht.

textstring oder null

Der Text. null bei einer gelöschten Nachricht.

geloescht Pflichtboolean

Die Nachricht wurde gelöscht. Die Zeile bleibt, text ist null.

bearbeitetboolean

Wurde der Text nachträglich geändert?

absender Pflichtobject

Wer geschrieben hat.

anhaengearray

Anhänge als Metadaten. Herunterladen lassen sie sich über die API nicht, deshalb ohne Link.

geschriebenAmstring

Zeitpunkt.

NachrichtEingabe

Eine Antwort in einem bestehenden Verlauf.

Felder von NachrichtEingabe
FeldTypBeschreibung
body Pflichtstring

Text, höchstens 5000 Zeichen.

actingUserIdstring oder null

Als diese Person schreiben, genau eine. Ohne Angabe erscheint die Nachricht als „<Organisation> · via API".

PageMeta

Paginierung. Kanonisch ist der Link-Header, dies ist die Spiegelung für JSON.

Felder von PageMeta
FeldTypBeschreibung
count Pflichtinteger

Anzahl der Objekte auf DIESER Seite, nicht der Gesamtmenge.

hasMore Pflichtboolean

Ob eine Folgeseite existiert.

cursor Pflichtstring oder null

Opaker Cursor für die Folgeseite. Nicht interpretieren.

totalinteger

Gesamtzahl der Treffer über alle Seiten. Steht in jeder Antwort.

truncatedboolean

Die Ergebnismenge endet an der Zeilendecke von 10000, obwohl es mehr Treffer gibt. Die Menge ist dann unvollständig, auch wenn hasMore false ist: Filter verengen oder exportieren.

PortfolioEingabe

Ein zu schreibender Portfolio-Eintrag.

Felder von PortfolioEingabe
FeldTypBeschreibung
mastrNummer Pflichtstring

Die Anlage. Zugleich der Schlüssel, auf den angelegt oder aktualisiert wird.

relationType Pflichtstring

Rolle der Organisation zu dieser Anlage. Pflichtangabe, es gibt keinen Standardwert.

externalRefsobject

Eigene Kennungen, { system: id }. Werte müssen Zeichenketten sein; Zahlen werden abgelehnt.

PortfolioEintrag

Eine Anlage im Portfolio der Organisation, mit ihrer Rolle.

Felder von PortfolioEintrag
FeldTypBeschreibung
id Pflichtstring

Kennung des Eintrags.

mastrNummer Pflichtstring

Die Anlage. Führt über /v1/units/{id} zu ihren Daten.

relationType Pflichtstring

Die Rolle der Organisation zu dieser Anlage. Pflichtangabe beim Schreiben.

externalRefsobject

Fremdkennungen des Aufrufers, { system: id }. Immer ein Objekt, nie null; ohne Kennungen leer.

angelegtAmstring

Anlagezeitpunkt.

geaendertAmstring

Letzte Änderung. Anker für den Delta-Abruf.

entferntAmstring oder null

Gesetzt, wenn der Eintrag entfernt wurde. Solche Zeilen erscheinen nur bei includeDeleted=true und zeigen einem Abgleich, dass der Eintrag entfernt wurde.

Problem

RFC 9457 Problem Details. Einziges Fehler-Shape der API.

Felder von Problem
FeldTypBeschreibung
type Pflichtstring

Stabile Dokumentations-URL zu diesem Fehlercode.

title Pflichtstring

Kurze, unveränderliche Beschreibung des Fehlertyps.

status Pflichtinteger

HTTP-Statuscode.

code Pflichtstring

Maschinenlesbarer Fehlercode aus einer festen Liste. Auf ihn verzweigen, nicht auf den Text.

detailstring

Erklärung dieses konkreten Vorfalls.

instancestring

Request-ID, identisch mit dem X-Request-Id-Header.

retryable Pflichtboolean

Ob ein Wiederholungsversuch sinnvoll ist.

retryAfterinteger

Unix-Millisekunden, ab wann ein Retry sinnvoll ist.

errorsarray

Feldgenaue Validierungsfehler.

RegionMomentaufnahme

Momentaufnahme der gewählten Region. Ein Objekt, keine Liste.

Felder von RegionMomentaufnahme
FeldTypBeschreibung
zubau90Tageobject

In den letzten 90 Tagen in Betrieb gegangen.

abbau90Tageobject

In den letzten 90 Tagen stillgelegt.

netto90TageMwnumber
MW

Zubau minus Abbau der letzten 90 Tage, bereits ausgerechnet.

pipelineobject

Vorhaben in Planung, mit ihrer Terminqualität.

windUeber20Jahreobject

Windanlagen in Betrieb, deren Inbetriebnahme mehr als zwanzig Jahre zurückliegt, rollierend auf den Tag gerechnet. Nicht dasselbe wie das EEG-Förderende in include=eeg: das rechnet kalenderjahr-genau auf dem Inbetriebnahmedatum der EEG-Anlage; für einen Teil des Bestands fällt es in ein anderes Jahr.

SavedFilter

Ein gespeicherter Analyse-Filter. Die Kriterien selbst sind nicht enthalten.

Felder von SavedFilter
FeldTypBeschreibung
id Pflichtstring

Kennung für ?savedFilterId=.

name Pflichtstring

Name, den die Person beim Speichern vergeben hat.

angelegtAmstring

Anlagezeitpunkt.

geaendertAmstring

Letzte Änderung. Ein Cursor auf diesen Filter bricht, wenn er sich danach ändert.

SearchHit

Ein Treffer. typ entscheidet, welche der typspezifischen Felder belegt sind; links nennt die Pfade, unter denen die Kennung weiterführt.

Felder von SearchHit
FeldTypBeschreibung
typ Pflichtstring

Entitätstyp des Treffers.

id Pflichtstring

MaStR-Nummer. Stabil und in den verlinkten Ressourcen verwendbar.

namestring oder null

Bei marktakteur der Firmenname; Namen natürlicher Personen werden weder durchsucht noch ausgeliefert. Bei anlage der Anlagenname, der oft leer ist.

beschreibungstring oder null

Kurze Einordnung: bei marktakteur die Marktfunktion, bei anlage der Betreibername.

ortstring oder null

Ort.

bundeslandstring oder null

Bundesland.

latitudenumber oder null
degree

Bei marktakteur immer null; das Register führt dort eine Adresse und keine Koordinate.

longitudenumber oder null
degree

Siehe latitude.

einheitTypstring oder null

Nur bei anlage: Energieträger.

bruttoleistungKwnumber oder null
kW

Nur bei anlage. Geht auch in die Rangfolge ein: bei gleichem Namen ist die große Anlage meist die gemeinte.

anlagenAnzahlinteger

Nur bei marktakteur: wie viele Anlagen an dieser Kennung hängen. Treffer mit Anlagen stehen zuerst; ein Treffer mit 0 ist meist ein Netz- oder Messstellenbetreiber.

links Pflichtobject

Wohin diese Kennung führt. Bei anlage self auf die Anlage, bei marktakteur units auf ihre Anlagen, gefiltert über die MaStR-Nummer und nicht über den Namen.

SyncMeta

Delta-Anker für den nächsten Abruf. Erscheint erst auf der letzten Seite und deckt damit genau die Zeilen ab, die bis dahin ausgeliefert wurden.

Felder von SyncMeta
FeldTypBeschreibung
tokenstring oder null

Für den nächsten Abruf als syncToken mitgeben. null, solange weitere Seiten folgen oder solange die Pipeline noch keinen belegbaren Stand gemeldet hat.

watermarkstring oder null

Bis zu diesem Zeitpunkt ist der Suchindex nachweislich gefüllt. Nur zur Information; maßgeblich ist der Token.

Unit

Eine Einheit aus dem Marktstammdatenregister.

Felder von Unit
FeldTypBeschreibung
mastrNummer Pflichtstring

MaStR-Nummer der Einheit.

einheitTyp Pflichtstring

Energieträger der Einheit.

namestring oder null

Anzeigename der Einheit im Register.

betriebsStatusstring oder null

Betriebsstatus im Register.

bruttoleistungKwnumber oder null
kW

Bruttoleistung der Einheit.

inbetriebnahmedatumstring oder null

Datum der Inbetriebnahme. Kalendertag ohne Uhrzeit.

geplantesInbetriebnahmedatumstring oder null

Geplantes Inbetriebnahmedatum.

bundeslandstring oder null

Bundesland des Standorts.

plzstring oder null

Postleitzahl des Standorts.

ortstring oder null

Ort des Standorts.

latitudenumber oder null
degree

Breitengrad, WGS 84. Einheiten unter 30 kW tragen aus Datenschutzgründen keine Koordinaten.

longitudenumber oder null
degree

Längengrad, WGS 84.

signalsarray

Signale, die für diese Anlage zutreffen. Enthält nur Signale, für die die Organisation freigeschaltet ist.

linksobject

Rückweg in die Anwendung. Der Kartenlink fehlt, wenn die Anlage keine Koordinaten trägt.

landkreisstring oder null

Nur bei include=standort: Landkreis des Standorts.

gemeindestring oder null

Nur bei include=standort: Gemeinde des Standorts.

betreiberNamestring oder null

Nur bei include=betreiber: Firmenname des Betreibers. Bei natürlichen Personen führt das Register keinen Namen.

betreiberMastrNummerstring oder null

Nur bei include=betreiber: MaStR-Nummer des Betreibers.

stilllegungsdatumstring oder null

Nur bei include=termine: Datum der Stilllegung.

registrierungsdatumstring oder null

Nur bei include=termine: Erstregistrierung im Register.

ibnVerspaetungTagenumber oder null
day

Nur bei include=termine: Verspätung der Inbetriebnahme gegenüber dem geplanten Termin.

ibnVerschiebungTagenumber oder null
day

Nur bei include=termine: Verschiebung des geplanten Inbetriebnahmetermins.

nettonennleistungKwnumber oder null
kW

Nur bei include=register: Nettonennleistung.

eegMastrNummerstring oder null

Nur bei include=register: EEG-MaStR-Nummer.

eegZuschlagsnummerstring oder null

Nur bei include=register: Zuschlagsnummer aus einer Ausschreibung.

mitKwkboolean oder null

Nur bei include=register: Anlage mit Kraft-Wärme-Kopplung.

kwkMastrNummerstring oder null

Nur bei include=register: KWK-MaStR-Nummer.

kwkZuschlagsnummerstring oder null

Nur bei include=register: KWK-Zuschlagsnummer.

buergerenergieboolean oder null

Nur bei include=register: Bürgerenergiegesellschaft nach EEG.

einspeisungsartstring oder null

Nur bei include=register: Art der Einspeisung.

netzbetreiberpruefungstring oder null

Nur bei include=register: Status der Netzbetreiberprüfung.

nepGelistetboolean oder null

Nur bei include=register: im Netzentwicklungsplan gelistet.

zuschlaegearray

Nur bei include=ausschreibungen: Zuschläge aus BNetzA-Ausschreibungen, die dieser Anlage zugeordnet sind. Verlangt das Modul ausschreibungen. Die Zuordnung entsteht aus einem Abgleich der Zuschlagslisten und reicht über die Registerspalte eegZuschlagsnummer hinaus: hier stehen auch Zuschläge, die das Register noch nicht führt. Mehrwertig, eine Anlage kann Zuschläge aus mehreren Runden tragen.

jahresertragKwhnumber oder null
kWh

Nur bei include=ertrag: berechneter Jahresertrag einer Windenergieanlage. Verlangt das Modul yield_forecast. Bei anderen Energieträgern null.

volllaststundennumber oder null
h

Nur bei include=ertrag: berechnete Volllaststunden einer Windenergieanlage.

mittlereWindgeschwindigkeitMsnumber oder null
m/s

Nur bei include=ertrag: mittlere Windgeschwindigkeit auf Nabenhöhe.

spezifischerErtragKwhKwpnumber oder null
kWh/kWp

Nur bei include=ertrag: berechneter spezifischer Jahresertrag einer Solaranlage. Bei anderen Energieträgern null.

globalstrahlungKwhM2number oder null
kWh/m²

Nur bei include=ertrag: Globalstrahlung am Standort.

ertragQuellestring oder null

Nur bei include=ertrag: Grundlage der Berechnung, bei Wind die Leistungskurve, bei Solar die Strahlungsdatenbank.

ertragDatenjahrestring oder null

Nur bei include=ertrag: Zeitraum der zugrunde liegenden Wetterdaten.

eegFoerderendestring oder null

Nur bei include=eeg: Ende der EEG-Förderung, abgeleitet aus Inbetriebnahme plus 20 Jahre. Für fast den gesamten Bestand belegt; die gerechneten Vergütungswerte darunter sind es nicht.

eegEinspeiseverguetungCtKwhnumber oder null
ct/kWh

Nur bei include=eeg: berechnete EEG-Einspeisevergütung. Verlangt das Modul eeg_verguetung. Wie belastbar der Wert ist, sagt eegAbleitbarkeit.

eegAnzulegenderWertCtKwhnumber oder null
ct/kWh

Nur bei include=eeg: berechneter anzulegender Wert nach EEG. Verlangt das Modul eeg_verguetung.

eegReferenzertragVerhaeltnisnumber oder null

Nur bei include=eeg: Verhältnis zum Referenzertrag nach FGW. Verlangt das Modul eeg_verguetung.

eegAbleitbarkeitstring oder null

Nur bei include=eeg: Herkunft der Vergütungswerte, exakt, geschaetzt oder nicht_ableitbar. Nur dieses Feld unterscheidet gerechnete von geschätzten Werten.

eegPhasenwechselDatumstring oder null

Nur bei include=eeg: Wechsel der EEG-Vergütungsphase. Verlangt das Modul eeg_verguetung.

netzbetreiberarray

Nur bei include=netz: Verteilnetzbetreiber des Anschlusses. Mehrwertig, eine Anlage kann mehrere Anschlusspunkte haben.

spannungsebenenarray

Nur bei include=netz: Spannungsebene des Netzanschlusses.

bilanzierungsgebietearray

Nur bei include=netz: Bilanzierungsgebiet des Anschlusses.

regelzonenarray

Nur bei include=netz: Regelzone des Anschlusses.

hatGenehmigungboolean oder null

Nur bei include=genehmigung: eine Genehmigung ist hinterlegt.

genehmigungArtstring oder null

Nur bei include=genehmigung: Art der Genehmigung.

genehmigungDatumstring oder null

Nur bei include=genehmigung: Datum der Genehmigung.

solarLagestring oder null

Nur bei include=technik: Lage der Solaranlage.

solarNutzungsbereichstring oder null

Nur bei include=technik: Nutzungsbereich der Solaranlage.

solarSpeicherVorhandenstring oder null

Nur bei include=technik: Speicher am gleichen Ort vorhanden.

solarAnzahlModulenumber oder null
count

Nur bei include=technik: Anzahl der Solarmodule.

windHerstellerstring oder null

Nur bei include=technik: Hersteller der Windenergieanlage. Normalisierter Wert, s. /v1/reference.

windTypenbezeichnungstring oder null

Nur bei include=technik: Typenbezeichnung der Windenergieanlage.

windNabenhoeheMnumber oder null
m

Nur bei include=technik: Nabenhöhe.

windRotordurchmesserMnumber oder null
m

Nur bei include=technik: Rotordurchmesser.

windSeelagestring oder null

Nur bei include=technik: an Land oder auf See.

windparkstring oder null

Nur bei include=technik: Name des Windparks.

speichertechnologiestring oder null

Nur bei include=technik: Speichertechnologie.

speicherAcDcKopplungstring oder null

Nur bei include=technik: AC- oder DC-Kopplung.

pumpspeichertechnologiestring oder null

Nur bei include=technik: Technologie des Pumpspeichers.

speicherNotstromaggregatboolean oder null

Nur bei include=technik: Notstromaggregat.

nutzbareSpeicherkapazitaetKwhnumber oder null
kWh

Nur bei include=technik: nutzbare Speicherkapazität.

biomasseartstring oder null

Nur bei include=technik: Art der eingesetzten Biomasse.

biomasseTechnologiestring oder null

Nur bei include=technik: Technologie der Biomasseanlage.

hauptbrennstoffstring oder null

Nur bei include=technik: Hauptbrennstoff der Verbrennungsanlage.

verbrennungTechnologiestring oder null

Nur bei include=technik: Technologie der Verbrennungsanlage.

grenzkraftwerkboolean oder null

Nur bei include=technik: Grenzkraftwerk.

mitFlexipraemieboolean oder null

Nur bei include=technik: Biogasanlage mit Flexibilitätsprämie.

leistungserhoehungboolean oder null

Nur bei include=technik: gemeldete Leistungserhöhung.

minderungStromerzeugungboolean oder null

Nur bei include=technik: gemeldete Minderung der Stromerzeugung.

wasserkraftartstring oder null

Nur bei include=technik: Art der Wasserkraftanlage.

zuflussartstring oder null

Nur bei include=technik: Art des Zuflusses.

geothermieTechnologiestring oder null

Nur bei include=technik: Technologie der Geothermieanlage.

kernkraftTechnologiestring oder null

Nur bei include=technik: Technologie des Kernkraftwerks.

marktakteurobject oder null

Nur bei expand=marktakteur: der Anlagenbetreiber.

UnitDetail

Eine Einheit mit Detaildaten, ohne Anschriftsfelder.

Felder von UnitDetail
FeldTypBeschreibung
mastrNummer Pflichtstring

MaStR-Nummer der Einheit.

einheitTyp Pflichtstring

Energieträger der Einheit.

namestring oder null

Anzeigename der Einheit im Register.

betriebsStatusstring oder null

Betriebsstatus im Register.

bruttoleistungKwnumber oder null
kW

Bruttoleistung der Einheit.

inbetriebnahmedatumstring oder null

Datum der Inbetriebnahme. Kalendertag ohne Uhrzeit.

geplantesInbetriebnahmedatumstring oder null

Geplantes Inbetriebnahmedatum.

bundeslandstring oder null

Bundesland des Standorts.

plzstring oder null

Postleitzahl des Standorts.

ortstring oder null

Ort des Standorts.

latitudenumber oder null
degree

Breitengrad, WGS 84. Einheiten unter 30 kW tragen aus Datenschutzgründen keine Koordinaten.

longitudenumber oder null
degree

Längengrad, WGS 84.

signalsarray

Signale, die für diese Anlage zutreffen. Enthält nur Signale, für die die Organisation freigeschaltet ist.

linksobject

Rückweg in die Anwendung. Der Kartenlink fehlt, wenn die Anlage keine Koordinaten trägt.

landkreisstring oder null

Landkreis des Standorts.

gemeindestring oder null

Gemeinde des Standorts.

betreiberNamestring oder null

Nur bei include=betreiber: Firmenname des Betreibers. Bei natürlichen Personen führt das Register keinen Namen.

betreiberMastrNummerstring oder null

MaStR-Nummer des Anlagenbetreibers.

stilllegungsdatumstring oder null

Datum der Stilllegung.

registrierungsdatumstring oder null

Datum der Erstregistrierung im Register.

ibnVerspaetungTagenumber oder null
day

Nur bei include=termine: Verspätung der Inbetriebnahme gegenüber dem geplanten Termin.

ibnVerschiebungTagenumber oder null
day

Nur bei include=termine: Verschiebung des geplanten Inbetriebnahmetermins.

nettonennleistungKwnumber oder null
kW

Nettonennleistung der Einheit.

eegMastrNummerstring oder null

EEG-MaStR-Nummer, falls vorhanden.

eegZuschlagsnummerstring oder null

Nur bei include=register: Zuschlagsnummer aus einer Ausschreibung.

mitKwkboolean oder null

Nur bei include=register: Anlage mit Kraft-Wärme-Kopplung.

kwkMastrNummerstring oder null

Nur bei include=register: KWK-MaStR-Nummer.

kwkZuschlagsnummerstring oder null

Nur bei include=register: KWK-Zuschlagsnummer.

buergerenergieboolean oder null

Nur bei include=register: Bürgerenergiegesellschaft nach EEG.

einspeisungsartstring oder null

Nur bei include=register: Art der Einspeisung.

netzbetreiberpruefungstring oder null

Nur bei include=register: Status der Netzbetreiberprüfung.

nepGelistetboolean oder null

Nur bei include=register: im Netzentwicklungsplan gelistet.

zuschlaegearray

Nur bei include=ausschreibungen: Zuschläge aus BNetzA-Ausschreibungen, die dieser Anlage zugeordnet sind. Verlangt das Modul ausschreibungen. Die Zuordnung entsteht aus einem Abgleich der Zuschlagslisten und reicht über die Registerspalte eegZuschlagsnummer hinaus: hier stehen auch Zuschläge, die das Register noch nicht führt. Mehrwertig, eine Anlage kann Zuschläge aus mehreren Runden tragen.

jahresertragKwhnumber oder null
kWh

Nur bei include=ertrag: berechneter Jahresertrag einer Windenergieanlage. Verlangt das Modul yield_forecast. Bei anderen Energieträgern null.

volllaststundennumber oder null
h

Nur bei include=ertrag: berechnete Volllaststunden einer Windenergieanlage.

mittlereWindgeschwindigkeitMsnumber oder null
m/s

Nur bei include=ertrag: mittlere Windgeschwindigkeit auf Nabenhöhe.

spezifischerErtragKwhKwpnumber oder null
kWh/kWp

Nur bei include=ertrag: berechneter spezifischer Jahresertrag einer Solaranlage. Bei anderen Energieträgern null.

globalstrahlungKwhM2number oder null
kWh/m²

Nur bei include=ertrag: Globalstrahlung am Standort.

ertragQuellestring oder null

Nur bei include=ertrag: Grundlage der Berechnung, bei Wind die Leistungskurve, bei Solar die Strahlungsdatenbank.

ertragDatenjahrestring oder null

Nur bei include=ertrag: Zeitraum der zugrunde liegenden Wetterdaten.

eegFoerderendestring oder null

Nur bei include=eeg: Ende der EEG-Förderung, abgeleitet aus Inbetriebnahme plus 20 Jahre. Für fast den gesamten Bestand belegt; die gerechneten Vergütungswerte darunter sind es nicht.

eegEinspeiseverguetungCtKwhnumber oder null
ct/kWh

Nur bei include=eeg: berechnete EEG-Einspeisevergütung. Verlangt das Modul eeg_verguetung. Wie belastbar der Wert ist, sagt eegAbleitbarkeit.

eegAnzulegenderWertCtKwhnumber oder null
ct/kWh

Nur bei include=eeg: berechneter anzulegender Wert nach EEG. Verlangt das Modul eeg_verguetung.

eegReferenzertragVerhaeltnisnumber oder null

Nur bei include=eeg: Verhältnis zum Referenzertrag nach FGW. Verlangt das Modul eeg_verguetung.

eegAbleitbarkeitstring oder null

Nur bei include=eeg: Herkunft der Vergütungswerte, exakt, geschaetzt oder nicht_ableitbar. Nur dieses Feld unterscheidet gerechnete von geschätzten Werten.

eegPhasenwechselDatumstring oder null

Nur bei include=eeg: Wechsel der EEG-Vergütungsphase. Verlangt das Modul eeg_verguetung.

netzbetreiberarray

Nur bei include=netz: Verteilnetzbetreiber des Anschlusses. Mehrwertig, eine Anlage kann mehrere Anschlusspunkte haben.

spannungsebenenarray

Nur bei include=netz: Spannungsebene des Netzanschlusses.

bilanzierungsgebietearray

Nur bei include=netz: Bilanzierungsgebiet des Anschlusses.

regelzonenarray

Nur bei include=netz: Regelzone des Anschlusses.

hatGenehmigungboolean oder null

Nur bei include=genehmigung: eine Genehmigung ist hinterlegt.

genehmigungArtstring oder null

Nur bei include=genehmigung: Art der Genehmigung.

genehmigungDatumstring oder null

Nur bei include=genehmigung: Datum der Genehmigung.

solarLagestring oder null

Nur bei include=technik: Lage der Solaranlage.

solarNutzungsbereichstring oder null

Nur bei include=technik: Nutzungsbereich der Solaranlage.

solarSpeicherVorhandenstring oder null

Nur bei include=technik: Speicher am gleichen Ort vorhanden.

solarAnzahlModulenumber oder null
count

Nur bei include=technik: Anzahl der Solarmodule.

windHerstellerstring oder null

Nur bei include=technik: Hersteller der Windenergieanlage. Normalisierter Wert, s. /v1/reference.

windTypenbezeichnungstring oder null

Nur bei include=technik: Typenbezeichnung der Windenergieanlage.

windNabenhoeheMnumber oder null
m

Nur bei include=technik: Nabenhöhe.

windRotordurchmesserMnumber oder null
m

Nur bei include=technik: Rotordurchmesser.

windSeelagestring oder null

Nur bei include=technik: an Land oder auf See.

windparkstring oder null

Nur Wind: Name des Windparks.

speichertechnologiestring oder null

Nur Speicher: eingesetzte Technologie.

speicherAcDcKopplungstring oder null

Nur bei include=technik: AC- oder DC-Kopplung.

pumpspeichertechnologiestring oder null

Nur bei include=technik: Technologie des Pumpspeichers.

speicherNotstromaggregatboolean oder null

Nur bei include=technik: Notstromaggregat.

nutzbareSpeicherkapazitaetKwhnumber oder null
kWh

Nur bei include=technik: nutzbare Speicherkapazität.

biomasseartstring oder null

Nur bei include=technik: Art der eingesetzten Biomasse.

biomasseTechnologiestring oder null

Nur bei include=technik: Technologie der Biomasseanlage.

hauptbrennstoffstring oder null

Nur bei include=technik: Hauptbrennstoff der Verbrennungsanlage.

verbrennungTechnologiestring oder null

Nur bei include=technik: Technologie der Verbrennungsanlage.

grenzkraftwerkboolean oder null

Nur bei include=technik: Grenzkraftwerk.

mitFlexipraemieboolean oder null

Nur bei include=technik: Biogasanlage mit Flexibilitätsprämie.

leistungserhoehungboolean oder null

Nur bei include=technik: gemeldete Leistungserhöhung.

minderungStromerzeugungboolean oder null

Nur bei include=technik: gemeldete Minderung der Stromerzeugung.

wasserkraftartstring oder null

Nur bei include=technik: Art der Wasserkraftanlage.

zuflussartstring oder null

Nur bei include=technik: Art des Zuflusses.

geothermieTechnologiestring oder null

Nur bei include=technik: Technologie der Geothermieanlage.

kernkraftTechnologiestring oder null

Nur bei include=technik: Technologie des Kernkraftwerks.

marktakteurobject oder null

Nur bei expand=marktakteur: der Anlagenbetreiber.

betreiberstring oder null

Firmenname des Anlagenbetreibers. Namen natürlicher Personen führt das Register nach §15 MaStRV nicht.

lokationMastrNummerstring oder null

MaStR-Nummer der Lokation.

datumLetzteAktualisierungstring oder null

Zeitpunkt der letzten Aktualisierung im Register.

lagestring oder null

Nur Solar: Lage der Anlage.

hauptausrichtungstring oder null

Nur Solar: Hauptausrichtung der Module.

nebenausrichtungstring oder null

Nur Solar: Nebenausrichtung der Module.

anzahlModuleinteger oder null

Nur Solar: Anzahl der Module.

wechselrichterleistungKwnumber oder null
kW

Nur Solar: Leistung des Wechselrichters.

speicherVorhandenboolean oder null

Nur Solar: Speicher am gleichen Ort vorhanden.

herstellerstring oder null

Nur Wind: Hersteller der Anlage.

typenbezeichnungstring oder null

Nur Wind: Typenbezeichnung.

nabenhoeheMnumber oder null
m

Nur Wind: Nabenhöhe.

rotordurchmesserMnumber oder null
m

Nur Wind: Rotordurchmesser.

seelagestring oder null

Nur Wind: an Land oder auf See.

acDcKopplungstring oder null

Nur Speicher: AC- oder DC-Kopplung.

UnitSearchRequest

Filter und Steuerparameter der Anlagen-Suche.

Felder von UnitSearchRequest
FeldTypBeschreibung
limitinteger

Objekte pro Seite. Default 100, Maximum 250.

cursorstring

Opaker Cursor aus der vorherigen Antwort. Gilt auch für Cursor aus GET /v1/units.

sortstring

Sortierung als feld:richtung.

formatstring

Ausgabeformat.

einheitTypobject

Energieträger, mehrere kommagetrennt.

betriebsStatusobject

Betriebsstatus im Register, mehrere kommagetrennt.

suchestring

Freitextsuche über Registerfelder und die eigenen Feldwerte der Organisation.

mastrNummernobject

Genau diese MaStR-Nummern zurückgeben, höchstens 500 je Abfrage. Damit lassen sich die Treffer eines alert.triggered-Events auflösen, das je Treffer nur die Nummer trägt.

betreiberMastrNummerobject

MaStR-Nummern von Anlagenbetreibern, mehrere kommagetrennt. Führt von einem Treffer aus /v1/search zu den Anlagen dieses Betreibers. Vergleicht exakt auf die Nummer; der Filter betreiber vergleicht den Namen.

betreiberobject

Name des Anlagenbetreibers, mehrere kommagetrennt.

bundeslandobject

Bundesland des Standorts, mehrere kommagetrennt.

plzstring

Postleitzahl oder Präfix davon.

landkreisstring

Landkreis des Standorts.

gemeindestring

Gemeinde des Standorts.

hatKoordinatenboolean

Nur Anlagen mit bzw. ohne Koordinaten. Anlagen unter 30 kW tragen aus Datenschutzgründen keine.

leistungMinKwnumber
kW

Mindest-Bruttoleistung.

leistungMaxKwnumber
kW

Maximale Bruttoleistung.

inbetriebnahmeVonstring

Inbetriebnahme ab diesem Kalendertag.

inbetriebnahmeBisstring

Inbetriebnahme bis zu diesem Kalendertag.

geplanteInbetriebnahmeVonstring

Geplante Inbetriebnahme ab diesem Kalendertag.

geplanteInbetriebnahmeBisstring

Geplante Inbetriebnahme bis zu diesem Kalendertag.

registrierungVonstring

Erstregistrierung im Register ab diesem Kalendertag.

registrierungBisstring

Erstregistrierung bis zu diesem Kalendertag.

stilllegungVonstring

Stilllegung ab diesem Kalendertag.

stilllegungBisstring

Stilllegung bis zu diesem Kalendertag.

ibnVerspaetungMinTagenumber
Tage

Mindestverspätung der Inbetriebnahme gegenüber dem geplanten Termin.

ibnVerschiebungMinTagenumber
Tage

Mindestverschiebung des geplanten Inbetriebnahmetermins.

ibnVerschiebungMaxTagenumber
Tage

Maximale Verschiebung des geplanten Inbetriebnahmetermins.

signalsobject

Signal-IDs, mehrere kommagetrennt. Nicht freigeschaltete Signale werden abgelehnt, nicht stillschweigend ignoriert.

buergerenergieboolean

Nur Bürgerenergiegesellschaften bzw. nur andere.

einspeisungsartobject

Art der Einspeisung, mehrere kommagetrennt.

netzbetreiberpruefungobject

Status der Netzbetreiberprüfung, mehrere kommagetrennt.

nepGelistetboolean

Nur im Netzentwicklungsplan gelistete Anlagen bzw. nur nicht gelistete.

hatGenehmigungboolean

Nur Anlagen mit bzw. ohne hinterlegte Genehmigung.

netzbetreiberobject

Verteilnetzbetreiber, mehrere kommagetrennt.

spannungsebeneobject

Spannungsebene des Netzanschlusses, mehrere kommagetrennt.

bilanzierungsgebietobject

Bilanzierungsgebiet, mehrere kommagetrennt.

regelzoneobject

Regelzone, mehrere kommagetrennt.

solarLageobject

Lage der Solaranlage (Dach, Freifläche, Balkon), mehrere kommagetrennt.

solarNutzungsbereichobject

Nutzungsbereich der Solaranlage (Haushalt, Gewerbe), mehrere kommagetrennt.

solarSpeicherVorhandenobject

Speicher am gleichen Ort vorhanden: ja, nein oder ka (keine Angabe).

windSeelageobject

Windanlage an Land oder auf See, mehrere kommagetrennt.

windHerstellerobject

Hersteller der Windenergieanlage, mehrere kommagetrennt.

windTypenbezeichnungobject

Typenbezeichnung der Windenergieanlage, mehrere kommagetrennt.

windparkobject

Name des Windparks, mehrere kommagetrennt.

speichertechnologieobject

Speichertechnologie, mehrere kommagetrennt.

speicherAcDcKopplungobject

AC- oder DC-Kopplung des Speichers, mehrere kommagetrennt.

pumpspeichertechnologieobject

Technologie des Pumpspeichers, mehrere kommagetrennt.

speicherNotstromaggregatboolean

Nur Notstromaggregate bzw. nur andere Speicher.

speicherkapazitaetMinKwhnumber
kWh

Mindestwert der nutzbaren Speicherkapazität.

speicherkapazitaetMaxKwhnumber
kWh

Höchstwert der nutzbaren Speicherkapazität.

hauptbrennstoffobject

Hauptbrennstoff der Verbrennungsanlage, mehrere kommagetrennt.

verbrennungTechnologieobject

Technologie der Verbrennungsanlage, mehrere kommagetrennt.

grenzkraftwerkboolean

Nur Grenzkraftwerke bzw. nur andere.

mitKwkboolean

Nur Anlagen mit bzw. ohne Kraft-Wärme-Kopplung.

hatKwkMastrNummerboolean

Nur Anlagen mit bzw. ohne KWK-MaStR-Nummer.

hatKwkZuschlagsnummerboolean

Nur Anlagen mit bzw. ohne KWK-Zuschlagsnummer.

biomasseartobject

Art der eingesetzten Biomasse, mehrere kommagetrennt.

biomasseTechnologieobject

Technologie der Biomasseanlage, mehrere kommagetrennt.

mitFlexipraemieboolean

Nur Anlagen mit bzw. ohne Flexibilitätsprämie.

leistungserhoehungboolean

Nur Anlagen mit bzw. ohne gemeldete Leistungserhöhung.

wasserkraftartobject

Art der Wasserkraftanlage, mehrere kommagetrennt.

zuflussartobject

Art des Zuflusses, mehrere kommagetrennt.

minderungStromerzeugungboolean

Nur Anlagen mit bzw. ohne gemeldete Minderung der Stromerzeugung.

geothermieTechnologieobject

Technologie der Geothermieanlage, mehrere kommagetrennt.

kernkraftTechnologieobject

Technologie des Kernkraftwerks, mehrere kommagetrennt.

hatEegMastrNummerboolean

Nur Anlagen mit bzw. ohne EEG-MaStR-Nummer.

hatEegZuschlagsnummerboolean

Nur Anlagen mit bzw. ohne Zuschlagsnummer aus einer Ausschreibung.

gebotsterminobject

IDs von BNetzA-Gebotsterminen, mehrere kommagetrennt.

eegPhasenwechselVonstring

Wechsel der EEG-Vergütungsphase ab diesem Kalendertag.

eegPhasenwechselBisstring

Wechsel der EEG-Vergütungsphase bis zu diesem Kalendertag.

eegFoerderendeVonstring

Ende der EEG-Förderung ab diesem Kalendertag.

eegFoerderendeBisstring

Ende der EEG-Förderung bis zu diesem Kalendertag.

eegEinspeiseverguetungMinCtKwhnumber
ct/kWh

Mindestwert der EEG-Einspeisevergütung. Abgeleiteter Wert, siehe eegAbleitbarkeit.

eegEinspeiseverguetungMaxCtKwhnumber
ct/kWh

Höchstwert der EEG-Einspeisevergütung.

eegAnzulegenderWertMinCtKwhnumber
ct/kWh

Mindestwert des anzulegenden Werts nach EEG.

eegAnzulegenderWertMaxCtKwhnumber
ct/kWh

Höchstwert des anzulegenden Werts nach EEG.

eegReferenzertragVerhaeltnisMinnumber

Mindestverhältnis zum Referenzertrag nach FGW. Dimensionslos.

eegReferenzertragVerhaeltnisMaxnumber

Höchstverhältnis zum Referenzertrag nach FGW. Dimensionslos.

eegAbleitbarkeitobject

Herkunft der EEG-Werte: exakt, geschaetzt oder nicht_ableitbar.

Verbindung

Eine Org-zu-Org-Verbindung aus der Sicht des Schlüssels.

Felder von Verbindung
FeldTypBeschreibung
id Pflichtstring

Kennung der Verbindung.

status Pflichtstring

Nur ACCEPTED trägt Sichtbarkeit von Feldern.

rolle Pflichtstring

Wer eingeladen hat. Kein Besitzverhältnis: die Kante ist symmetrisch.

gegenseiteobject oder null

Die andere Organisation. null, solange eine Einladung offen ist; dann gibt es sie als Organisation noch nicht.

anlagenAnzahlinteger

Anlagen im Umfang der Verbindung.

aktivierteFelderinteger

Zahl der Felder, die auf dieser Verbindung ausdrücklich aktiviert sind. Nicht die Zahl der sichtbaren Felder: stehende Freigaben kommen hinzu, fehlende Voraussetzungen nehmen weg, und beides hängt an der einzelnen Anlage. Nur im Einzelabruf.

angelegtAmstring

Zeitpunkt der Einladung.

beantwortetAmstring oder null

Zeitpunkt der Annahme oder Ablehnung.

geaendertAmstring

Letzte Änderung. Anker für den Delta-Abruf.

VerbindungsAnlage

Eine Anlage, die diese Verbindung umfasst.

Felder von VerbindungsAnlage
FeldTypBeschreibung
mastrNummer Pflichtstring

MaStR-Nummer der Anlage.

beziehungstring oder null

Rolle des Einladenden zur Anlage im Moment der Einladung, aus seinem Portfolio übernommen. Zieht später nicht nach.

hinzugefuegtAmstring

Wann die Anlage in den Umfang kam.

geaendertAmstring

Letzte Änderung. Anker für den Delta-Abruf.

Verlauf

Ein Verlauf. Er gehört beiden Organisationen der Verbindung, es gibt keinen Eigentümer.

Felder von Verlauf
FeldTypBeschreibung
id Pflichtstring

Kennung des Verlaufs.

connectionId Pflichtstring

Die Verbindung, auf der er lebt.

betreffstring oder null

Betreff, sofern beim Anlegen gesetzt.

kategoriestring oder null

Routing-Kategorie. Steuert, an welches Postfach der Verlauf geht.

anlagenarray

MaStR-Nummern, auf die sich der Verlauf bezieht. Immer Teilmenge der Anlagen der Verbindung.

gegenseiteobject oder null

Die andere Organisation. Nur im Einzelabruf.

zustellungobject

Das Ziel-Postfach des Verlaufs, nach denselben Vorrang-Regeln wie in der Ohmnify-Anwendung.

nachrichtenAnzahlinteger

Nachrichten im Verlauf, gelöschte eingeschlossen.

letzteAktivitaetAmstring

Zeitpunkt der letzten Nachricht. Sortierachse der Liste.

angelegtAmstring

Anlagezeitpunkt.

geaendertAmstring

Letzte Änderung. Anker für den Delta-Abruf.

VerlaufEingabe

Ein neuer Verlauf mit seiner ersten Nachricht.

Felder von VerlaufEingabe
FeldTypBeschreibung
connectionId Pflichtstring

Die Verbindung. Muss angenommen sein.

body Pflichtstring

Text der ersten Nachricht, höchstens 5000 Zeichen.

subjectstring oder null

Betreff, höchstens 200 Zeichen.

categorystring oder null

Routing-Kategorie. Bestimmt, in welchem Postfach der Verlauf landet.

assetsarray

MaStR-Nummern, höchstens 50. Muss Teilmenge der Anlagen der Verbindung sein.

addressUserIdsarray

Gezielt angeschriebene Personen, höchstens 10. Sie werden Beteiligte und sehen den Verlauf unabhängig vom Routing. Müssen zu einer der beiden Organisationen gehören. Nicht zu verwechseln mit actingUserId, das den Absender bestimmt.

actingUserIdstring oder null

Als diese Person schreiben, genau eine. Ohne Angabe erscheint die Nachricht als „<Organisation> · via API".

WebhookEndpoint

Ein Zustellziel.

Felder von WebhookEndpoint
FeldTypBeschreibung
id Pflichtstring

Kennung des Endpoints.

url Pflichtstring

Zieladresse. Immer https.

descriptionstring

Freitext des Kunden. null, wenn keiner gesetzt ist.

eventTypes Pflichtarray

Abonnierte Event-Typen. Immer ausgeschrieben, nie leer.

disabled Pflichtboolean

Zustellung angehalten. Der Endpoint und sein Geheimnis bleiben erhalten.

createdAt Pflichtstring

Angelegt am.

updatedAt Pflichtstring

Zuletzt geändert am.

WebhookEndpointCreate

Ein neues Zustellziel.

Felder von WebhookEndpointCreate
FeldTypBeschreibung
url Pflichtstring

Zieladresse. Muss https sein.

descriptionstring

Freitext, um mehrere Endpoints auseinanderzuhalten.

eventTypesarray

Abonnierte Typen. Ohne Angabe alle bekannten.

secretstring

Eigenes Signaturgeheimnis im Format whsec_<base64>, für Kunden mit eigenem Geheimnisspeicher. Ohne Angabe wird eines erzeugt.

WebhookEndpointUpdate

Zu ändernde Felder. Weggelassene bleiben unangetastet.

Felder von WebhookEndpointUpdate
FeldTypBeschreibung
urlstring

Neue Zieladresse. Muss https sein.

descriptionstring

Neuer Freitext.

eventTypesarray

Neue Typ-Auswahl. Ersetzt die bisherige vollständig.

disabledboolean

Zustellung anhalten oder fortsetzen.

WebhookEndpointWithSecret

Ein Zustellziel samt Signaturgeheimnis. Nur beim Anlegen.

Felder von WebhookEndpointWithSecret
FeldTypBeschreibung
id Pflichtstring

Kennung des Endpoints.

url Pflichtstring

Zieladresse. Immer https.

descriptionstring

Freitext des Kunden. null, wenn keiner gesetzt ist.

eventTypes Pflichtarray

Abonnierte Event-Typen. Immer ausgeschrieben, nie leer.

disabled Pflichtboolean

Zustellung angehalten. Der Endpoint und sein Geheimnis bleiben erhalten.

createdAt Pflichtstring

Angelegt am.

updatedAt Pflichtstring

Zuletzt geändert am.

secretstring

Signaturgeheimnis. Steht nur in dieser einen Antwort; danach über die Secret-Ressource.

WebhookSecret

Das Signaturgeheimnis eines Endpoints.

Felder von WebhookSecret
FeldTypBeschreibung
endpointId Pflichtstring

Zu welchem Endpoint es gehört.

secret Pflichtstring

Der Schlüssel für die Signaturprüfung.

WriteAntwort

Teilerfolg: eine Zeile je Eingabe. Der Statuscode ist 200, bei mindestens einem Fehlschlag 207, nie ein 4xx für das ganze Paket. Die Nutzlast steht wie überall in dieser API unter data. Kein ETag und kein If-Match: gegen doppelte Ausführung schützt der Idempotency-Key. Setzen zwei Systeme konkurrierend verschiedene Werte, gilt „der letzte schreibt".

Felder von WriteAntwort
FeldTypBeschreibung
dataarray

Ein Ergebnis je Eingabezeile, in derselben Reihenfolge.

metaobject

Zählung nach Ausgang, plus der Probelauf-Marker.

Zeitreihenpunkt

Zubau, Abbau und Pipeline einer Periode für einen Energieträger. Die drei hängen an verschiedenen Datumsfeldern.

Felder von Zeitreihenpunkt
FeldTypBeschreibung
periode Pflichtstring

Kalenderperiode in der gewählten Auflösung.

energietraeger Pflichtstring

Energieträger, kanonisch kleingeschrieben.

zubauAnzahlinteger

In Betrieb gegangene Anlagen, gezählt am Inbetriebnahmedatum.

zubauMwnumber
MW

Deren Bruttoleistung.

abbauAnzahlinteger

Stillgelegte Anlagen, gezählt am Stilllegungsdatum.

abbauMwnumber
MW

Deren Bruttoleistung.

pipelineAnzahlinteger

Vorhaben in Planung, gezählt am geplanten Inbetriebnahmedatum. Nur Vorhaben mit geplantem Datum erscheinen in der Zeitreihe; die Gesamtzahl steht in der Momentaufnahme.

pipelineMwnumber
MW

Deren Bruttoleistung.

Zuschlag

Ein Zuschlag aus einer BNetzA-Ausschreibung.

Felder von Zuschlag
FeldTypBeschreibung
id Pflichtinteger

Kennung des Zuschlags.

zuschlagsnummerstring oder null

Zuschlagsnummer der BNetzA.

gebotsmengeKwnumber oder null
kW

Bezuschlagte Gebotsmenge.

bundeslandstring oder null

Bundesland des Vorhabens.

landkreisstring oder null

Landkreis des Vorhabens.

plzstring oder null

Postleitzahl des Vorhabens.

gemeindestring oder null

Gemeinde des Vorhabens.

gemarkungstring oder null

Gemarkung des Vorhabens, aus der öffentlichen Zuschlagsliste.

flurstueckstring oder null

Flurstück des Vorhabens, aus der öffentlichen Zuschlagsliste.

mastrNummernarray

Zugeordnete Anlagen im Register. Leer, solange die Anlage bei Veröffentlichung der Zuschlagsliste noch nicht registriert war; bei frischen Solar-Freiflächen ist das die Regel.

foerderNummernarray

Zugeordnete EEG-Förderkennungen.

latitudenumber oder null
degree

Breitengrad, WGS 84. Genauigkeit siehe geoGenauigkeit.

longitudenumber oder null
degree

Längengrad, WGS 84.

geoGenauigkeitstring oder null

Auf welcher Ebene die Koordinate ermittelt wurde. Bei gemeinde- oder plz-genauer Angabe liegt der Punkt nicht am Standort der Anlage.

Zustellung

Das Ziel-Postfach des Verlaufs, nach denselben Vorrang-Regeln wie in der Ohmnify-Anwendung.

Felder von Zustellung
FeldTypBeschreibung
postfachobject oder null

Der Funktions-Kontakt, an den geroutet wird. null bei allgemeinem Eingang.

allgemein Pflichtboolean

Sieht ihn jeder in der Organisation? Gilt ohne Kategorie, ohne passende Regel und bei einem Postfach ohne Mitglieder.

Lizenz und Quellenvermerk

Die ausgelieferten Registerdaten stehen unter offenen Lizenzen, und die verlangen einen Quellenvermerk bei jeder Weitergabe. Wir verändern die Daten, deshalb gehört ein Hinweis darauf dazu: was aus dieser API kommt, ist nicht unverändert das, was die Behörde veröffentlicht hat.

Dieselbe Angabe steht maschinenlesbar in GET /v1/datasets, dort zusätzlich mit dem Stand des jeweiligen Bestands.

Marktstammdatenregister

Lizenzangaben zu Marktstammdatenregister
LizenzBundesnetzagentur, Marktstammdatenregister, dl-de/by-2-0
ÄnderungenKoordinaten ergänzt, Hersteller- und Typenbezeichnungen normalisiert, das Erst-Registrierungsdatum korrigiert sowie berechnete Werte ergänzt (EEG-Vergütung, Ertragsprognose, Signale).
Ausgeliefert über/v1/units, /v1/units/{id}, /v1/units/search, /v1/units/fields, /v1/aggregations, /v1/search, /v1/region/zeitreihe, /v1/region/altersstruktur, /v1/region/momentaufnahme

Quellenvermerk

Bundesnetzagentur, Marktstammdatenregister, dl-de/by-2-0, https://www.govdata.de/dl-de/by-2-0, verändert durch Ohmnify: Koordinaten ergänzt, Hersteller- und Typenbezeichnungen normalisiert, das Erst-Registrierungsdatum korrigiert sowie berechnete Werte ergänzt (EEG-Vergütung, Ertragsprognose, Signale).

Zuschläge aus EEG- und KWKG-Ausschreibungen

Lizenzangaben zu Zuschläge aus EEG- und KWKG-Ausschreibungen
LizenzBundesnetzagentur, dl-de/by-2-0
ÄnderungenZuschläge werden Anlagen des Marktstammdatenregisters zugeordnet, Koordinaten ergänzt und Technologie-Bezeichnungen vereinheitlicht.
Ausgeliefert über/v1/ausschreibungen, /v1/ausschreibungen/{id}/zuschlaege, /v1/units

Quellenvermerk

Bundesnetzagentur, dl-de/by-2-0, https://www.govdata.de/dl-de/by-2-0, verändert durch Ohmnify: Zuschläge werden Anlagen des Marktstammdatenregisters zugeordnet, Koordinaten ergänzt und Technologie-Bezeichnungen vereinheitlicht.

Fehlerform

Jeder Fehler folgt RFC 9457 und trägt neben Statuscode und Titel ein Feld code aus einer festen Liste sowie retryable. Wer auf Fehler reagiert, sollte auf code verzweigen und nicht auf den Text: der Text darf sich ändern, der Code nicht.

Alle Fehlercodes mit Statuscode, Bedeutung und der Angabe, ob ein zweiter Versuch sinnvoll ist. Das Feld type jeder Fehlerantwort zeigt auf die Seite des jeweiligen Codes.