API-Zugang erfordert den Business-Plan
Die REST API ist exklusiv fuer Business-Kunden verfuegbar. Sie erhalten unbegrenzten Zugriff auf alle Endpunkte, 1.000 Anfragen pro Tag und dedizierten Support. Jetzt upgraden →
REST API Dokumentation
Integrieren Sie den Nebenkostenrechner in Ihre Hausverwaltungs-Software. Berechnen Sie Betriebskostenabrechnungen, generieren Sie PDFs und validieren Sie Eingabedaten per API.
Einführung
Die Nebenkostenrechner API ermöglicht es Hausverwaltungen und Softwareanbietern, Betriebskostenabrechnungen programmatisch zu berechnen, zu validieren und als PDF zu generieren. Die API folgt REST-Prinzipien und gibt Antworten im JSON-Format zurück.
https://mein-nebenkostenrechner.de/api/v1Authentifizierung
Die meisten Endpunkte erfordern einen API-Key. Sie können diesen im Header oder als Query-Parameter senden:
curl -H "X-API-Key: nk_ihr_api_key_hier" \
https://mein-nebenkostenrechner.de/api/v1/calculatecurl "https://mein-nebenkostenrechner.de/api/v1/calculate?api_key=nk_ihr_api_key_hier"API-Keys können Sie unter /api-keys erstellen und verwalten. Jeder Key hat Berechtigungen (read, write) und ein individuelles Rate-Limit.
Endpunkte
/api/v1/calculateAPI-Key (read)Berechnet eine vollstaendige Betriebskostenabrechnung mit Aufteilung pro Mieter.
Request Body
{
"objekt": {
"adresse": "Musterstr. 12",
"plz": "10115",
"ort": "Berlin",
"gesamtflaeche": 200,
"wohneinheiten": 4,
"abrechnungszeitraumVon": "2025-01-01",
"abrechnungszeitraumBis": "2025-12-31"
},
"mieter": [
{
"id": "m1",
"name": "Max Mustermann",
"wohnung": "EG links",
"flaeche": 65,
"personen": 2,
"einzugsdatum": "2020-01-01",
"vorauszahlungMonatlich": 200
}
],
"positionen": [
{
"kostenartId": "grundsteuer",
"betrag": 800,
"verteilerschluessel": "wohnflaeche"
},
{
"kostenartId": "wasserversorgung",
"betrag": 600,
"verteilerschluessel": "personenanzahl"
}
]
}Response (200)
{
"success": true,
"ergebnis": {
"objekt": { ... },
"mieterAbrechnungen": [
{
"mieterId": "m1",
"mieterName": "Max Mustermann",
"wohnung": "EG links",
"positionen": [
{
"kostenartId": "grundsteuer",
"kostenartName": "Grundsteuer",
"gesamtbetrag": 800,
"anteil": 32.5,
"betrag": 260,
"verteilerschluessel": "wohnflaeche"
}
],
"gesamtkosten": 560,
"vorauszahlungen": 2400,
"nachzahlung": -1840,
"zeitanteil": 1
}
],
"gesamtkosten": 1400,
"warnings": []
}
}/api/v1/validateAPI-Key (read)Prüft Eingabedaten auf Vollständigkeit und Plausibilität — ohne vollständige Berechnung.
Request Body
Gleicher Body wie /calculate.
Response (200)
{
"valid": true,
"errors": [],
"warnings": [
"Heizung: 2,70 EUR/m2/Jahr liegt ueber dem ueblichen Bereich."
],
"infos": [
"1 Mieter, 3 Kostenpositionen",
"Heizkosten enthalten - HeizKV 30/70-Aufteilung wird angewendet."
]
}/api/v1/pdfAPI-Key (write)Generiert ein PDF der Betriebskostenabrechnung. Gibt die PDF-Datei als Binary zurück.
Request Body
Gleicher Body wie /calculate.
Response
Content-Type: application/pdf — Die PDF-Datei als binaere Antwort.
/api/v1/cost-typesGibt alle 17 Kostenarten nach BetrKV §2 Nr. 1-17 zurück. Öffentlich, kein API-Key erforderlich.
Response (200)
{
"count": 17,
"kostenarten": [
{
"id": "grundsteuer",
"nr": 1,
"name": "Grundsteuer",
"description": "Die Grundsteuer, die von der Gemeinde...",
"defaultVerteilerschluessel": "wohnflaeche",
"allowedVerteilerschluessel": ["wohnflaeche", "wohneinheiten"],
"isHeizkosten": false,
"typicalRange": { "min": 0.18, "max": 0.45, "unit": "EUR/m2/Jahr" }
},
...
]
}/api/v1/distribution-keysGibt alle 4 Verteilerschlüssel zurück. Öffentlich, kein API-Key erforderlich.
Response (200)
{
"count": 4,
"verteilerschluessel": [
{ "id": "wohnflaeche", "label": "Wohnflaeche (m2)", "description": "Verteilung nach Quadratmetern" },
{ "id": "personenanzahl", "label": "Personenanzahl", "description": "Verteilung nach Anzahl der Bewohner" },
{ "id": "verbrauch", "label": "Verbrauch", "description": "Verteilung nach individuellem Verbrauch" },
{ "id": "wohneinheiten", "label": "Wohneinheiten", "description": "Gleichmaessige Verteilung pro Wohnung" }
]
}Datenmodelle
Objekt
| Feld | Typ | Beschreibung |
|---|---|---|
| adresse | string | Strassenadresse |
| plz | string | Postleitzahl (5 Stellen) |
| ort | string | Ortsname |
| gesamtflaeche | number | Gesamtfläche in m2 |
| wohneinheiten | number | Anzahl Wohneinheiten |
| abrechnungszeitraumVon | string | Start ISO-Datum (YYYY-MM-DD) |
| abrechnungszeitraumBis | string | Ende ISO-Datum (YYYY-MM-DD) |
Mieter
| Feld | Typ | Beschreibung |
|---|---|---|
| id | string | Eindeutige ID |
| name | string | Name des Mieters |
| wohnung | string | Wohnungsbezeichnung (z.B. "EG links") |
| flaeche | number | Wohnfläche in m2 |
| personen | number | Anzahl Bewohner |
| einzugsdatum | string | Einzugsdatum (ISO) |
| auszugsdatum | string? | Auszugsdatum (optional) |
| vorauszahlungMonatlich | number | Monatliche Vorauszahlung in EUR |
Kostenposition
| Feld | Typ | Beschreibung |
|---|---|---|
| kostenartId | string | ID der Kostenart (z.B. "grundsteuer") |
| betrag | number | Gesamtbetrag in EUR |
| verteilerschluessel | string | wohnflaeche | personenanzahl | verbrauch | wohneinheiten |
| verbrauchswerte | object? | { mieterId: verbrauchswert } für verbrauchsbasierte Verteilung |
Kostenarten (BetrKV §2)
Alle 17 umlagefaehigen Kostenarten gemaess Betriebskostenverordnung. Verwenden Sie die id als kostenartId in den Kostenpositionen.
| Nr. | ID | Name | Standard-Schlüssel |
|---|---|---|---|
| 1 | grundsteuer | Grundsteuer | wohnflaeche |
| 2 | wasserversorgung | Wasserversorgung | verbrauch |
| 3 | entwaesserung | Entwaesserung | verbrauch |
| 4 | heizung | Heizung (Brennstoffe) | verbrauch |
| 5 | warmwasser | Warmwasser | verbrauch |
| 6 | heizung_warmwasser_verbunden | Verbundene Heizung und Warmwasser | verbrauch |
| 7 | aufzug | Aufzug | wohnflaeche |
| 8 | strassenreinigung | Strassenreinigung | wohnflaeche |
| 9 | muellbeseitigung | Muellbeseitigung | personenanzahl |
| 10 | gebaeudereinigung | Gebaeudereinigung | wohnflaeche |
| 11 | gartenpflege | Gartenpflege | wohnflaeche |
| 12 | beleuchtung | Beleuchtung | wohnflaeche |
| 13 | schornsteinreinigung | Schornsteinreinigung | wohneinheiten |
| 14 | versicherungen | Sach- und Haftpflichtversicherung | wohnflaeche |
| 15 | hauswart | Hauswart | wohnflaeche |
| 16 | antenne_kabel | Gemeinschaftsantenne / Kabelanschluss | wohneinheiten |
| 17 | waschraum | Einrichtungen für die Wäschepflege | wohneinheiten |
Verteilerschlüssel
| ID | Label | Beschreibung |
|---|---|---|
| wohnflaeche | Wohnfläche (m2) | Verteilung nach Quadratmetern |
| personenanzahl | Personenanzahl | Verteilung nach Bewohnerzahl |
| verbrauch | Verbrauch | Verteilung nach individuellem Verbrauch |
| wohneinheiten | Wohneinheiten | Gleichmaessig pro Wohnung |
Code-Beispiele
Hier finden Sie Beispiele in cURL, JavaScript und Python, um die API in Ihre Anwendung zu integrieren.
cURL
curl -X POST https://www.mein-nebenkostenrechner.de/api/v1/calculate \
-H "Content-Type: application/json" \
-H "X-API-Key: nk_IHR_API_KEY" \
-d '{
"objekt": {
"adresse": "Musterstrasse 1",
"plz": "10115",
"ort": "Berlin",
"gesamtflaeche": 200,
"wohneinheiten": 4,
"gesamtPersonen": 8,
"abrechnungszeitraumVon": "2025-01-01",
"abrechnungszeitraumBis": "2025-12-31"
},
"mieter": [{
"id": "m1", "name": "Mustermann", "flaeche": 65,
"personenanzahl": 2, "einzugsdatum": "2020-01-01",
"vorauszahlungen": 2400
}],
"positionen": [
{ "kostenartId": "grundsteuer", "betrag": 800, "verteilerschluessel": "wohnflaeche" },
{ "kostenartId": "wasserversorgung", "betrag": 1200, "verteilerschluessel": "personenanzahl" }
]
}'JavaScript (fetch)
const API_KEY = 'nk_IHR_API_KEY';
const response = await fetch('https://www.mein-nebenkostenrechner.de/api/v1/calculate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': API_KEY,
},
body: JSON.stringify({
objekt: {
adresse: 'Musterstrasse 1',
plz: '10115',
ort: 'Berlin',
gesamtflaeche: 200,
wohneinheiten: 4,
gesamtPersonen: 8,
abrechnungszeitraumVon: '2025-01-01',
abrechnungszeitraumBis: '2025-12-31',
},
mieter: [{
id: 'm1', name: 'Mustermann', flaeche: 65,
personenanzahl: 2, einzugsdatum: '2020-01-01',
vorauszahlungen: 2400,
}],
positionen: [
{ kostenartId: 'grundsteuer', betrag: 800, verteilerschluessel: 'wohnflaeche' },
{ kostenartId: 'wasserversorgung', betrag: 1200, verteilerschluessel: 'personenanzahl' },
],
}),
});
const data = await response.json();
console.log(data.ergebnis.mieterErgebnisse);Python (requests)
import requests
API_KEY = "nk_IHR_API_KEY"
BASE_URL = "https://www.mein-nebenkostenrechner.de/api/v1"
response = requests.post(
f"{BASE_URL}/calculate",
headers={"X-API-Key": API_KEY},
json={
"objekt": {
"adresse": "Musterstrasse 1",
"plz": "10115",
"ort": "Berlin",
"gesamtflaeche": 200,
"wohneinheiten": 4,
"gesamtPersonen": 8,
"abrechnungszeitraumVon": "2025-01-01",
"abrechnungszeitraumBis": "2025-12-31",
},
"mieter": [{
"id": "m1", "name": "Mustermann", "flaeche": 65,
"personenanzahl": 2, "einzugsdatum": "2020-01-01",
"vorauszahlungen": 2400,
}],
"positionen": [
{"kostenartId": "grundsteuer", "betrag": 800, "verteilerschluessel": "wohnflaeche"},
{"kostenartId": "wasserversorgung", "betrag": 1200, "verteilerschluessel": "personenanzahl"},
],
},
)
data = response.json()
for mieter in data["ergebnis"]["mieterErgebnisse"]:
print(f"{mieter['mieterName']}: Nachzahlung {mieter['nachzahlung']:.2f} EUR")PDF herunterladen (cURL)
curl -X POST https://www.mein-nebenkostenrechner.de/api/v1/pdf \
-H "Content-Type: application/json" \
-H "X-API-Key: nk_IHR_API_KEY" \
-d '{ ... gleiche Daten wie bei /calculate ... }' \
--output abrechnung.pdfRate Limits
- -1.000 Anfragen pro Tag pro API-Key (Standard, konfigurierbar)
- -60 Anfragen pro Minute pro API-Key
- -Bei Überschreitung erhalten Sie HTTP
429 Too Many Requests - -Für höhere Limits kontaktieren Sie uns
Fehlerbehandlung
Alle Fehler folgen einem einheitlichen Format:
{
"error": "Kurze Fehlerbeschreibung",
"message": "Detaillierte Erklaerung (optional)",
"details": ["Liste von Einzelfehlern (optional)"]
}| Status | Bedeutung |
|---|---|
| 200 | Erfolg |
| 400 | Ungültige Eingabedaten |
| 401 | API-Key fehlt oder ungültig |
| 403 | Fehlende Berechtigung |
| 429 | Rate-Limit überschritten |
| 500 | Interner Serverfehler |