Diese Seite beschreibt die neue REST API unter /api/v2.
Die Authentifizierung erfolgt über einen Bearer-Token im HTTP-Header.
Pro Kunde sind maximal 2 Requests in jedem gleitenden Zeitraum von einer Sekunde erlaubt.
Base URL: https://heizreport.net/api/v2Auth: Authorization: Bearer TOKENFormat: JSONRate Limit: 2 Requests / Sekunde / Kunde
Verbinden Sie Ihre eigene Software mit Heizreport: eigene Projekte anlegen,
Projektdaten vorbelegen und ändern, Räume lesen und erfassen, Förderanträge lesen, Berechnungsergebnisse abrufen sowie
PDFs erzeugen und vorhandene Bilder auflisten.
Für geschützte Aufrufe benötigen Sie Ihren API-Token aus dem Pro-Bereich.
Projektanlage, Berechnungen und PDFs setzen die jeweils passenden Lizenzrechte voraus.
U-Werte schreiben, Heizkörper erfassen und Bilder hochladen sind noch nicht öffentlich verfügbar.
Laden Sie unter Downloads die Postman-Collection oder
die Anleitungen für Ihre Entwicklungswerkzeuge herunter.
Die produktive API erreichen Sie ausschließlich unter
https://heizreport.net/api/v2. Zum Ausprobieren ein eigenes Testprojekt
verwenden und zwischen einzelnen Tests mindestens eine Sekunde warten.
Schnellstart und Beispiele
Einfache Übersicht
Die bisherige ausführliche Anleitung mit Zugriffsregeln, Endpunkten,
Projektfeldern und Beispielen.
Zugriffsschutz
Ein Token pro Kunde mit allen freigegebenen API-Rechten für eigene Projekte.
Fest maximal 2 Zugriffe in jedem gleitenden Zeitraum von einer Sekunde,
gemeinsam über alle geschützten Endpunkte. Das Limit gilt auch nach Tokenwechsel
und kann nicht individuell erhöht werden.
Bei Überschreitung: HTTP 429 und Retry-After: 1.
Bitte eine Sekunde warten und den Aufruf anschließend erneut versuchen.
Fachlich abgelehnte authentifizierte Aufrufe zählen ebenfalls.
Neue Tokens werden nur bei Erstellung oder Erneuerung angezeigt. Bestehende Tokens
bleiben gültig; gespeicherte Tokens können nicht erneut angezeigt werden.
JSON-Bodies: maximal 64 KiB und Content-Type: application/json.
Unbekannte Felder, falsche Typen und ungültige Werte liefern 422.
projectData und projektData dürfen nicht gemeinsam übermittelt werden.
Fremde oder nicht vorhandene Projekte liefern 404.
Projektanlage benötigt eine aktive Jahres- oder Bildungslizenz. Berechnungen und PDFs
prüfen die Projekt- und Lizenzrechte wie in Pro. Die Datenerfassung bleibt auch bei
abgelaufener Lizenz für entsperrte Kunden verfügbar.
Schnellstart
Jeder geschützte Request braucht den Bearer-Token im Header.
Ändert das Projektpasswort. Das Passwort muss zwischen 12 und 256 Zeichen lang sein.
Auth erforderlich.
{
"newPassword": "einSehrLangesPasswort123"
}
GET/reports/{projektKey}/pdf?type=heizreport
Erzeugt einen PDF-Link. type kann heizreport oder check sein.
Auth erforderlich.
curl -X GET "https://heizreport.net/api/v2/reports/abcdefghi/pdf?type=check" \
-H "Authorization: Bearer DEIN_API_TOKEN"
GET/reports/{projektKey}/pictures
Gibt alle verknüpften Bilder mit Typ und Raumbezeichnung zurück.
Auth erforderlich.
GET/reports/{projektKey}/results
Liefert die Ergebnisdaten. Optional können vorlaufT und spreizung übergeben werden.
Auth erforderlich.
GET /api/v2/reports/abcdefghi/results?vorlaufT=55&spreizung=10
GET/reports
Listet alle eigenen Projekte, Leads, API-Projekte und Archiv-Einträge des Tokens auf.
Auth erforderlich.
Förderanträge lesen ab v2.5.0
Eigene Förderanträge lassen sich ausschließlich lesend mit ihren Kernfeldern abrufen:
BzA-ID, BnD-ID, Bearbeitungsstatus, zuständiger Energieberater und Bearbeitungszeitpunkte.
Methode
Endpunkt
Funktion
GET
/funding/applications
Alle eigenen Anträge, einschließlich Standalone-, archivierter und stornierter Anträge
GET
/funding/applications/{applicationId}
Einzelnen eigenen Antrag lesen
GET
/reports/{projectKey}/funding/applications
Direkt einem eigenen Projekt zugeordnete eigene Anträge lesen
Listen liefern applications[], total, page und limit;
Einzelantworten enthalten application. Die Hülle enthält außerdem status: 200 und action.
Paginierung: ?page=1&limit=50, maximal 100 Anträge pro Seite, maximaler Seitenwert 1000000.
Sortierung nach Antrags-ID absteigend; Seiten hinter dem Ende sind leer. Bei parallelen Änderungen können sich Seiten verschieben.
Unbekannte oder ungültige Listenparameter liefern 422.
Der Token gilt nur für eigene Anträge. Fremde und fehlende Anträge liefern beide 404.
Der Projektabruf prüft zusätzlich den Projektbesitz; eigene Projekte ohne Anträge liefern eine leere Liste.
Projektvarianten werden nicht automatisch zusammengefasst. Das Lesen ist für entsperrte Kunden auch bei abgelaufener Jahreslizenz verfügbar.
Das gemeinsame Limit von zwei Zugriffen pro Sekunde bleibt bestehen.
Kernfeld
Bedeutung
applicationId
Eindeutige Antrags-ID als Zeichenkette. Für Einzelabruf exakt übernehmen.
applicationType
Projektgebundener Antrag oder Antrag ohne Projektbezug.
projectId
ID des zugeordneten eigenen Projekts. null ohne verfügbares eigenes Projekt.
projectKey
Key des zugeordneten eigenen Projekts. null bei Standalone-Anträgen oder nicht mehr verfügbarem eigenen Projekt. Keine Portalzugangsschlüssel.
bzaId
Bestätigung zum Antrag (BzA). Zeichenkette einschließlich führender Nullen; null solange nicht vorhanden.
bndId
Bestätigung nach Durchführung (BnD). Zeichenkette einschließlich führender Nullen; null solange nicht vorhanden.
Deutsche Statusbezeichnung für die Anzeige. Automatisierung verwendet status.
statusStep
Schritt aus der bestehenden Bearbeitungslogik. Keine Prozentangabe; Schritte können übersprungen werden.
nextAction
Deutscher Hinweis zum nächsten Schritt bzw. Abschluss.
advisor.id
ID des zugeordneten Energieberaters als Zeichenkette, sonst null.
advisor.name
Vollständiger Name, ersatzweise hinterlegter Beratername. null wenn nicht vorhanden.
advisor.title
Hinterlegte Berufsbezeichnung, sonst null.
advisor.assigned
Ob eine Beraterzuordnung hinterlegt ist.
orderedAt
Beauftragung des Förderantrags. ISO 8601 in UTC (+00:00). Nicht hinterlegt bzw. historische 0/1-Flags ergeben null.
bzaCreatedAt
Hinterlegter Zeitpunkt der BzA-Erstellung. ISO 8601 in UTC (+00:00). Nicht hinterlegt bzw. historische 0/1-Flags ergeben null.
approvalReceivedAt
Hinterlegter Zeitpunkt des Zusageschreibens; keine Bestätigung eines direkten Behördenabrufs. ISO 8601 in UTC (+00:00). Nicht hinterlegt bzw. historische 0/1-Flags ergeben null.
approvalDeadlineAt
Hinterlegte Frist aus dem Zusageschreiben. ISO 8601 in UTC (+00:00). Nicht hinterlegt bzw. historische 0/1-Flags ergeben null.
bndStartedAt
Start der BnD-Bearbeitung. ISO 8601 in UTC (+00:00). Nicht hinterlegt bzw. historische 0/1-Flags ergeben null.
bndCreatedAt
Hinterlegter Zeitpunkt der BnD-Erstellung. ISO 8601 in UTC (+00:00). Nicht hinterlegt bzw. historische 0/1-Flags ergeben null.
payoutConfirmedAt
Hinterlegter Zeitpunkt der Auszahlungsbestätigung; kein direkter Abruf beim Fördergeber. ISO 8601 in UTC (+00:00). Nicht hinterlegt bzw. historische 0/1-Flags ergeben null.
IDs des Antrags und Beraters sowie BzA/BnD sind Zeichenketten. projectId ist eine Zahl oder null.
Fehlende Werte sind null; Zeitpunkte verwenden ISO 8601 in UTC. Historische 0/1-Flags ergeben kein Datum.
proofs_waiting, proofs_review und proofs_corrections unterscheiden fehlende Nachweise, Prüfung und Korrektur.
done bedeutet BnD fertig; completed bedeutet Auszahlung abgeschlossen.
Verwenden Sie status zur Automatisierung. statusStep ist keine Prozentangabe.
Ein vollständiges Antwortbeispiel und alle Statuswerte stehen in der API-Referenz sowie den aktualisierten
OpenAPI-, Postman- und KI-Anleitungsdownloads.
Diese Endpunkte enthalten keine zusätzlichen Kunden-, Nachweis- oder Dokumentdaten und bieten keine Schreiboperationen.
Projektdetails und Räume ab v2.4.0
Die API kann jetzt Projektdetails und Raumbasisdaten lesen sowie Räume anlegen und ändern.
Alle Aufrufe benötigen den Kundentoken und zählen zum gemeinsamen Limit von zwei Zugriffen
pro Sekunde. Die Datenerfassung bleibt für entsperrte Kunden auch bei abgelaufener Jahreslizenz möglich.
Methode
Endpunkt
Funktion
GET
/reports/{projectKey}
Freigegebene Projektdaten und Kopfwerte lesen
GET
/reports/{projectKey}/rooms
Räume des eigenen Projekts auflisten
GET
/reports/{projectKey}/rooms/{roomId}
Einzelnen Raum lesen
POST
/reports/{projectKey}/rooms
Raum anlegen; HTTP 201
PATCH
/reports/{projectKey}/rooms/{roomId}
Nur übermittelte Raumbasisdaten ändern
Raum anlegen
POST mit Content-Type: application/json. Der Raumname ist Pflicht.
Den neuen Schlüssel aus room.id übernehmen und für spätere Aufrufe verwenden.
{
"roomData": {
"raumBezeichnung": "Wohnzimmer",
"raumEtage": 1,
"raumFlaeche": 25.5,
"raumHoehe": 2.5,
"raumTemperatur": 20,
"raumNotiz": "Erfasst über die Kunden-API"
}
}
raumEtage wird als ID gesendet und in Antworten als Zeichenkette ausgegeben. Standard bei Anlage ist 1 (Erdgeschoss).
raumEtage
raumEtageBezeichnung
raumEtageKuerzel
0
Keller
KG
1
Erdgeschoss
EG
2
1. Obergeschoss
1. OG
3
2. Obergeschoss
2. OG
4
3. Obergeschoss
3. OG
5
4. Obergeschoss
4. OG
6
5. Obergeschoss
5. OG
7
Dachgeschoss
DG
Jeder Raum enthält in roomData zusätzlich raumEtageBezeichnung und raumEtageKuerzel: bei Einzelabruf, in Raumlisten und nach Anlage oder Änderung. Diese beiden Felder werden aus der ID abgeleitet und dürfen nicht als Eingaben gesendet werden. Bei fehlender oder unbekannter gespeicherter ID sind beide leer.
raumTemperatur wird in °C gesendet und als JSON-Zahl zurückgegeben. Für 20 °C bitte 20 senden. Erlaubt sind 7 und die ganzen Temperaturen 16–26; andere Werte liefern 422. Die Umrechnung in interne Datenbank-IDs übernimmt die API. Bei fehlender oder unbekannter gespeicherter ID enthält die Antwort null.
Zahlen können als JSON-Zahl oder numerische Zeichenkette gesendet werden. Fläche/Höhe
unterstützen auch Dezimalkomma; maximal 32 Zeichen. Geschoss und Temperatur sind ganzzahlig.
Unbekannte Felder, boolesche Zahlenwerte, Arrays und Objekte als Feldwerte liefern 422.
Raum ändern und Antworten lesen
PATCH verwendet ebenfalls die Hülle roomData. Nicht übermittelte Felder bleiben erhalten:
Einzelantworten enthalten room, die Liste enthält rooms[].
Jeder Eintrag hat id, projectKey und roomData.
Feldwerte in roomData werden als Zeichenketten zurückgegeben; raumTemperatur ist eine JSON-Zahl in °C (oder null bei unbekanntem gespeichertem Wert).
raumBaujahr ist zusätzlich lesbar und wird bei Anlage aus dem Projekt übernommen;
spätere Projektänderungen führen es nicht automatisch nach.
Eine Raum-ID muss zum angegebenen eigenen Projekt gehören. Ein Raum eines anderen Projekts
liefert 404, auch wenn beide Projekte demselben Kunden gehören.
Raum-ID, Projektzuordnung, Baujahr, U-Werte und Heizflächen können hier nicht geschrieben werden.
Raum-Anlage und Projektaktivität werden gemeinsam gespeichert. Bei Anlage wird der Projektstatus
auf „in Bearbeitung“ (2) gesetzt; abgeschlossene/archivierte Projekte (4/5) behalten ihren Status.
PATCH aktualisiert die Aktivität und behält den Projektstatus bei.
Raumbasisdaten allein reichen noch nicht für eine vollständige Heizlastberechnung.
Bauteile und U-Werte werden nicht automatisch ergänzt. Nach einem Verbindungsabbruch
vor Wiederholung einer Anlage zuerst die Raumliste prüfen, damit kein doppelter Raum entsteht.
Ergebnisdaten und Fußbodenheizung
Der Ergebnisendpunkt nutzt die aktuelle Berechnungsstruktur. Fußbodenheizkreise stehen unter
results.floorHeatingBalance.groups[].rooms[].
Bestehende Kundenintegrationen können weiterhin unverändert
projekt.abgleichFBH[].raeume[].durchfluss verwenden. Beide Strukturen werden aus
denselben Berechnungswerten erzeugt; durchfluss entspricht dem Einstellwert in
l/min.
GET /api/v2/reports/abcdefghi/results
Authorization: Bearer DEIN_API_TOKEN
Accept: application/json
Vorlauftemperatur und Spreizung können gemeinsam vorgegeben werden. Die Werte beeinflussen
Heizkörper- und Hydraulikberechnung; die FBH-Gruppen werden weiterhin für 10, 7 und 5 K ausgegeben.
GET /api/v2/reports/abcdefghi/results?flowTemperature=55&spread=10
Die bisherigen Parameternamen vorlaufT und spreizung werden ebenfalls unterstützt.
Erlaubte Projektfelder
Diese Felder können aktuell über projektData gesetzt oder aktualisiert werden.
Alternativ wird projectData unterstützt; beide Namen dürfen nicht gemeinsam angegeben werden:
projektName
projektPostleitzahl
projektArtHeizung
projektAlterHeizung
projektBewohner
projektJahresverbrauch
projektBaujahr
projektTrinkwasser
projektWaermeerzeugerSolarStatus
projektWaermeerzeugerSolarArt
projektKollektorflaecheSolar
projektWaermeerzeugerHolzStatus
projektJahresverbrauchHolz
projektWaermeerzeugerHolzArt
email
anrede
vorname
name
strasse
hausnummer
plz
ort
telefon
bemerkungen
Webhook bei der ersten PDF-Erstellung
Ist im Pro-Bereich unter Integrationen → API eine Webhook-Adresse hinterlegt,
sendet Heizreport genau einmal pro Projekt einen JSON-POST. Auslöser ist die erste
erfolgreiche PDF-Erstellung – sowohl über den PDF-Endpunkt der API als auch über
die zentrale Dokumenterstellung im Kundenportal. Fehlgeschlagene PDF-Erstellungen lösen keinen
Webhook aus.
Als erfolgreiche Zustellung gilt jede Antwort mit HTTP-Status 2xx. Die PDF bleibt
auch dann verfügbar, wenn das Webhook-Ziel nicht erreichbar ist oder einen Fehlerstatus liefert.
Das Ziel muss öffentlich erreichbar sein; Weiterleitungen und private beziehungsweise reservierte
IP-Adressen werden nicht zugelassen.
event behält mit webhookheizreport beziehungsweise
webhookcheck das bisher vorgesehene Format bei; eventType bezeichnet
das neue stabile Ereignis. eventId ist die eindeutige Zustell-ID.
authenticate enthält unverändert den in den API-Einstellungen hinterlegten Wert.
Bei temporären Download-Dokumenten ist
document.id gleich 0 und document.temporary gleich
true.
{
"status": 401,
"error": "Bearer-Token fehlt oder ist ungültig",
"details": {
"type": "authentication"
}
}
Swagger-Referenz
Hier stehen die derzeit verfügbaren öffentlichen v2-Endpunkte mit Eingabefeldern,
Beispielen und Antwortmodellen. Die ausführliche Anleitung finden Sie unter „Einfache Übersicht“.
Geplante Bauteil-, Heizkörper- und Upload-Funktionen werden erst mit ihrer Veröffentlichung ergänzt.
Diese Referenz führt keine API-Aufrufe aus und benötigt keinen Token.
Für manuelle Tests bitte die Postman-Collection
mit einem eigenen Testprojekt verwenden. Auch der GET-Aufruf für PDFs erzeugt ein Dokument.
Für andere KI-Assistenten stehen die OpenAI-Anleitung und
die Claude-Anleitung bereit. Beide erläutern die aktuelle API
einschließlich Zugriffsschutz und noch nicht verfügbarer Funktionen.
Die OpenAPI-Datei beschreibt die Schnittstelle maschinenlesbar;
sie kann in passende Entwicklungswerkzeuge importiert werden.
Interaktive Referenz wird geladen …
Dateien für Ihre Integration
Downloads
Alle Dateien beschreiben die aktuell verfügbaren Funktionen der öffentlichen API v2.5.0, einschließlich der lesenden Förderantrags-Endpunkte.
Die Beispiele enthalten keine Zugangsdaten.
Postman-Collection
Vorbereitete Anfragen, Beispieldaten und manuelle Sicherheitstests.
Nach dem Import den eigenen Token und ein Testprojekt konfigurieren.