POST /api/bodenwertFür Entwickler
Ein Bodenrichtwert bezieht sich immer auf eine bestimmte bauliche Dichte — die wertrelevante Geschossflächenzahl (GFZ). Weicht die tatsächliche oder zulässige GFZ eines Grundstücks davon ab, ist der Wert nicht direkt übertragbar. Dieser Endpunkt nimmt den Bodenrichtwert, die Referenz-GFZ und die tatsächliche GFZ entgegen und berechnet daraus den tatsächlichen Bodenrichtwert (dichtekorrigiert, €/m²). Gibst du zusätzlich die Grundstücksfläche an, kommt der Bodenwert (Gesamtwert des Grundstücks, €) gleich mit. Optional lässt sich der Bodenwert zusätzlich in einen Vorderland- und einen Hinterland-Anteil aufteilen — siehe „Vorder-/Hinterland-Aufteilung" weiter unten.
Es ist eine reine Berechnung: kein Adress-Lookup, kein Datenabruf — und der Aufruf zählt nicht gegen dein Monatskontingent.
Request
POST https://api.bodenrichtwert.ai/api/bodenwert
Authorization: Bearer brw_pat_...
Content-Type: application/json
{
"brw": 450,
"gfz_referenz": 0.8,
"gfz_tatsaechlich": 1.2
}
Body-Felder
| Name | Pflicht | Typ | Beschreibung |
|---|---|---|---|
brw | ja | number | Amtlicher Bodenrichtwert in Euro pro Quadratmeter (>= 0) |
gfz_referenz | ja | number | Wertrelevante GFZ, auf die sich der Bodenrichtwert bezieht (> 0) |
gfz_tatsaechlich | ja | number | Tatsächliche bzw. zulässige GFZ des Grundstücks (> 0) |
flaeche | nein | number | Grundstücksfläche in m². Wenn gesetzt, wird zusätzlich der Bodenwert (Gesamtwert) zurückgegeben |
hinterland_flaeche_m2 | nein | number | Fläche des rückwärtigen Grundstücksteils (Hinterland) in m² — > 0 und < flaeche. Nur zusammen mit hinterland_faktor, setzt zusätzlich flaeche voraus |
hinterland_faktor | nein | number | Wertfaktor des Hinterlands relativ zum Vorderland, 0 bis 1. Nur zusammen mit hinterland_flaeche_m2 |
Zahlen können als JSON-Number (0.8) oder als String mit Punkt oder Komma ("0,8") übergeben werden.
Rechenmodell
Der Endpunkt nutzt die amtliche Standardformel für Umrechnungskoeffizienten — den Fallback der Gutachterausschüsse, wenn keine zonenspezifische Umrechnungstabelle vorliegt (u. a. ErbStH zu § 179 BewG):
K(GFZ) = 0,6 · √GFZ + 0,2 · GFZ + 0,2 (normiert: K(1,0) = 1,0)
BRW_tatsaechlich = BRW × K(gfz_tatsaechlich) / K(gfz_referenz)
Bodenwert = BRW_tatsaechlich × flaeche (nur mit flaeche)
Die Funktion ist nicht-linear: mit steigender Dichte wächst der Wert unterproportional (abnehmender Grenzwertzuwachs).
Response (200 OK)
Ohne flaeche liefert der Endpunkt den tatsächlichen Bodenrichtwert (€/m²):
{
"brw_input_euro_pro_m2": 450,
"gfz_referenz": 0.8,
"gfz_tatsaechlich": 1.2,
"koeffizient_referenz": 0.8967,
"koeffizient_tatsaechlich": 1.0973,
"faktor": 1.2237,
"bodenrichtwert_tatsaechlich_euro_pro_m2": 550.68,
"modell": "amtliche-standardformel",
"formel": "K(GFZ) = 0,6·√GFZ + 0,2·GFZ + 0,2 · BRW_neu = BRW × K(GFZ_ist) / K(GFZ_ref)",
"disclaimer": "Orientierende Umrechnung nach der Standardformel für Umrechnungskoeffizienten (0,6·√GFZ + 0,2·GFZ + 0,2; u. a. ErbStH zu § 179 BewG). Ersetzt NICHT die zonenspezifische amtliche Umrechnungstabelle des zuständigen Gutachterausschusses. Gutachterlicher Orientierungswert — kein Verkehrswert, kein Kaufpreis, keine Rechtsberatung."
}
Mit "flaeche": 500 im Body enthält die Antwort zusätzlich grundstuecksflaeche_m2 und bodenwert_euro (tatsächlicher Bodenrichtwert × Fläche).
Response-Felder
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
brw_input_euro_pro_m2 | number | ja | Der übergebene amtliche Bodenrichtwert |
gfz_referenz | number | ja | Referenz-GFZ (Eingabe) |
gfz_tatsaechlich | number | ja | Tatsächliche GFZ (Eingabe) |
koeffizient_referenz | number | ja | K(gfz_referenz) |
koeffizient_tatsaechlich | number | ja | K(gfz_tatsaechlich) |
faktor | number | ja | Umrechnungsfaktor K(ist) / K(ref) |
bodenrichtwert_tatsaechlich_euro_pro_m2 | number | ja | Tatsächlicher Bodenrichtwert für die angegebene GFZ (€/m²) |
grundstuecksflaeche_m2 | number | optional | Nur wenn flaeche übergeben wurde |
bodenwert_euro | number | optional | Bodenwert — ein kanonisches Gesamtfeld. Ohne Vorder-/Hinterland-Aufteilung: tatsächlicher Bodenrichtwert × flaeche. Mit Aufteilung: vorderland_wert_euro + hinterland_wert_euro (derselbe Feldname, jetzt gemischt). Nur wenn flaeche übergeben wurde |
hinterland_flaeche_m2 | number | optional | Echo der Eingabe (m²). Nur wenn die Vorder-/Hinterland-Aufteilung genutzt wurde |
hinterland_faktor | number | optional | Echo der Eingabe (0–1). Nur wenn die Vorder-/Hinterland-Aufteilung genutzt wurde |
vorderland_flaeche_m2 | number | optional | grundstuecksflaeche_m2 - hinterland_flaeche_m2. Nur wenn die Vorder-/Hinterland-Aufteilung genutzt wurde |
vorderland_wert_euro | number | optional | Anteil des Vorderlands am Gesamtwert. Nur wenn die Vorder-/Hinterland-Aufteilung genutzt wurde |
hinterland_wert_euro | number | optional | Anteil des Hinterlands am Gesamtwert. Nur wenn die Vorder-/Hinterland-Aufteilung genutzt wurde |
modell | string | ja | Verwendetes Modell, aktuell amtliche-standardformel |
formel | string | ja | Lesbare Formelbeschreibung |
hinweis | string | optional | Extrapolations-Hinweis (GFZ außerhalb 0,1–3,0) und/oder Vorder-/Hinterland-Hinweise, space-getrennt kombiniert |
disclaimer | string | ja | Pflicht-Hinweis: orientierende Berechnung, kein Verkehrswert |
Woher kommt die Referenz-GFZ?
Bei einer Adressabfrage über GET /api/bodenrichtwert liefert das Feld wertrel_geschossflaechenzahl genau diese Referenz-GFZ. Nicht jeder Gutachterausschuss veröffentlicht sie maschinenlesbar:
| Kennzahl in der Antwort | Beispiel-Bundesländer |
|---|---|
wertrel_geschossflaechenzahl (WGFZ) | Berlin, Hessen, Baden-Württemberg, Hamburg |
geschossflaechenzahl (GFZ) | Brandenburg |
nur vollgeschosszahl (Vollgeschosse) | Nordrhein-Westfalen |
| keine Dichtekennzahl | u. a. Niedersachsen, Rheinland-Pfalz, Thüringen |
gfz_referenz übergeben. Vollgeschosse sind nicht dasselbe wie eine GFZ — die Formel ist ausschließlich für die GFZ definiert.Vorder-/Hinterland-Aufteilung (optional)
Grundstücke, die tiefer sind als die von der Zone unterstellte Bebauungstiefe, werden in der Praxis oft in einen Vorderland- (straßennaher Teil) und einen Hinterland-Anteil (rückwärtiger Teil) aufgeteilt und getrennt bewertet. Gib zusätzlich hinterland_flaeche_m2 und hinterland_faktor an, um das nachzubilden:
POST https://api.bodenrichtwert.ai/api/bodenwert
Authorization: Bearer brw_pat_...
Content-Type: application/json
{
"brw": 450,
"gfz_referenz": 0.8,
"gfz_tatsaechlich": 1.2,
"flaeche": 600,
"hinterland_flaeche_m2": 200,
"hinterland_faktor": 0.3
}
{
"brw_input_euro_pro_m2": 450,
"gfz_referenz": 0.8,
"gfz_tatsaechlich": 1.2,
"koeffizient_referenz": 0.8967,
"koeffizient_tatsaechlich": 1.0973,
"faktor": 1.2237,
"bodenrichtwert_tatsaechlich_euro_pro_m2": 550.68,
"grundstuecksflaeche_m2": 600,
"bodenwert_euro": 253312.53,
"hinterland_flaeche_m2": 200,
"hinterland_faktor": 0.3,
"vorderland_flaeche_m2": 400,
"vorderland_wert_euro": 220271.77,
"hinterland_wert_euro": 33040.77,
"modell": "amtliche-standardformel",
"formel": "K(GFZ) = 0,6·√GFZ + 0,2·GFZ + 0,2 · BRW_neu = BRW × K(GFZ_ist) / K(GFZ_ref)",
"hinweis": "Der Hinterland-Faktor stammt aus Ihrer Eingabe, nicht aus einem amtlichen Modell. […]",
"disclaimer": "Orientierende Umrechnung nach der Standardformel für Umrechnungskoeffizienten […]"
}
bodenwert_euro bleibt das eine kanonische Gesamtfeld — mit Aufteilung ist es vorderland_wert_euro + hinterland_wert_euro, ohne Aufteilung tatsächlicher Bodenrichtwert × flaeche. Beide Angaben sind ein Paar: ohne sie ist das Verhalten unverändert (rein additiv), genau eine der beiden oder eine fehlende flaeche liefert missing_parameter.
modell und formel beziehen sich ausschließlich auf die GFZ-Umrechnung. Die Vorder-/Hinterland-Aufteilung ist kein Modell, sondern reine Arithmetik auf deinen Eingaben — modell bleibt "amtliche-standardformel", auch wenn hinterland_faktor gesetzt ist.
Plausibilitätskorridor für hinterland_faktor
hinterland_faktor muss zwischen 0 und 1 liegen (sonst invalid_hinterland_faktor) — ein Wert über 1 würde bedeuten, dass das Hinterland mehr wert ist als das Vorderland. Innerhalb [0, 1] gilt eine Heuristik, keine amtliche Norm:
| Bereich | Verhalten |
|---|---|
< 0,10 | Gültig, zusätzlicher Hinweis: unterhalb der publizierten Regelspannen |
0,10 – 0,50 | Gültig, kein Zusatzhinweis (0,10–0,30 belegter Kernkorridor, 0,30–0,50 laut Grundstücksmarktbericht Düsseldorf ausdrücklich möglich) |
> 0,50 (bis < 1,0) | Gültig, zusätzlicher Hinweis: deutlich über den Regelspannen |
= 1,0 | Gültig, kein Zusatzhinweis — Sonderfall: identisch zum unaufgeteilten Wert |
hinterland_faktor nutzt: Liegt der rückwärtige Grundstücksteil in einer eigenen Bodenrichtwertzone (z. B. Landwirtschaft/Wald statt Bauland), ist deren Bodenrichtwert maßgebend — nicht ein Tiefenfaktor auf den Bauland-Bodenrichtwert. GET /api/bodenrichtwert liefert an einer Adresse ohnehin alle vorhandenen Nutzungsarten — frag sie für den rückwärtigen Teil gezielt mit der passenden nutzungsart ab, statt hinterland_faktor zu verwenden.Fehler
Alle Fehler folgen demselben Format: { "error": "<code>", "message": "<Beschreibung>", "status": <HTTP-Status> }.
| Status | Code | Bedeutung |
|---|---|---|
400 | invalid_json | Der Request-Body ist kein gültiges JSON |
400 | invalid_body | Der Request-Body ist kein JSON-Objekt |
400 | missing_parameter | Ein Pflichtfeld (brw, gfz_referenz, gfz_tatsaechlich) fehlt im Body — oder nur eines von hinterland_flaeche_m2/hinterland_faktor ist gesetzt, oder flaeche fehlt trotz Hinterland-Angabe |
400 | invalid_brw | brw ist keine Zahl oder < 0 |
400 | invalid_gfz_referenz | gfz_referenz ist keine Zahl oder <= 0 |
400 | invalid_gfz_tatsaechlich | gfz_tatsaechlich ist keine Zahl oder <= 0 |
400 | invalid_flaeche | flaeche ist gesetzt, aber keine Zahl oder <= 0 |
400 | invalid_hinterland_flaeche_m2 | hinterland_flaeche_m2 ist keine Zahl, <= 0 oder >= flaeche |
400 | invalid_hinterland_faktor | hinterland_faktor ist keine Zahl oder liegt außerhalb [0, 1] |
401 | missing_token | Authorization: Bearer <token>-Header fehlt |
401 | invalid_token | Token ungültig oder abgelaufen |
429 | rate_limit_exceeded | Zu viele Requests pro Minute (120/min IP-Limit) — Retry-After-Header beachten |
500 | internal_server_error | Unerwarteter Fehler |
Auch als MCP-Tool
Dieselbe Berechnung steht im MCP-Server als Tool calculate_bodenwert bereit (Parameter brw, gfz_referenz, gfz_tatsaechlich, optional flaeche, optional hinterland_flaeche_m2 + hinterland_faktor) — praktisch, um in ChatGPT oder Claude direkt vom abgefragten Wert zum tatsächlichen Bodenrichtwert und Bodenwert zu kommen. Die Text-Zusammenfassung des Tools nennt bei Vorder-/Hinterland-Aufteilung weiterhin nur einen EUR-Betrag (die Aufteilung selbst als Klammerzusatz im selben Satz) — die Aufschlüsselung in vorderland_wert_euro/hinterland_wert_euro steht nur in der strukturierten Antwort, damit ein anfragendes LLM beim Weitergeben nicht zwischen mehreren Zahlen verwechseln kann.