REST API

POST /api/bodenwertFür Entwickler

Berechnet aus einem Bodenrichtwert und einer abweichenden Geschossflächenzahl (GFZ) den tatsächlichen Bodenrichtwert — und mit Grundstücksfläche den gesamten Bodenwert. Reine Berechnung, zählt nicht gegen das Kontingent.

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

NamePflichtTypBeschreibung
brwjanumberAmtlicher Bodenrichtwert in Euro pro Quadratmeter (>= 0)
gfz_referenzjanumberWertrelevante GFZ, auf die sich der Bodenrichtwert bezieht (> 0)
gfz_tatsaechlichjanumberTatsächliche bzw. zulässige GFZ des Grundstücks (> 0)
flaecheneinnumberGrundstücksfläche in m². Wenn gesetzt, wird zusätzlich der Bodenwert (Gesamtwert) zurückgegeben
hinterland_flaeche_m2neinnumberFläche des rückwärtigen Grundstücksteils (Hinterland) in m² — > 0 und < flaeche. Nur zusammen mit hinterland_faktor, setzt zusätzlich flaeche voraus
hinterland_faktorneinnumberWertfaktor 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

FeldTypPflichtBeschreibung
brw_input_euro_pro_m2numberjaDer übergebene amtliche Bodenrichtwert
gfz_referenznumberjaReferenz-GFZ (Eingabe)
gfz_tatsaechlichnumberjaTatsächliche GFZ (Eingabe)
koeffizient_referenznumberjaK(gfz_referenz)
koeffizient_tatsaechlichnumberjaK(gfz_tatsaechlich)
faktornumberjaUmrechnungsfaktor K(ist) / K(ref)
bodenrichtwert_tatsaechlich_euro_pro_m2numberjaTatsächlicher Bodenrichtwert für die angegebene GFZ (€/m²)
grundstuecksflaeche_m2numberoptionalNur wenn flaeche übergeben wurde
bodenwert_euronumberoptionalBodenwert — 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_m2numberoptionalEcho der Eingabe (m²). Nur wenn die Vorder-/Hinterland-Aufteilung genutzt wurde
hinterland_faktornumberoptionalEcho der Eingabe (01). Nur wenn die Vorder-/Hinterland-Aufteilung genutzt wurde
vorderland_flaeche_m2numberoptionalgrundstuecksflaeche_m2 - hinterland_flaeche_m2. Nur wenn die Vorder-/Hinterland-Aufteilung genutzt wurde
vorderland_wert_euronumberoptionalAnteil des Vorderlands am Gesamtwert. Nur wenn die Vorder-/Hinterland-Aufteilung genutzt wurde
hinterland_wert_euronumberoptionalAnteil des Hinterlands am Gesamtwert. Nur wenn die Vorder-/Hinterland-Aufteilung genutzt wurde
modellstringjaVerwendetes Modell, aktuell amtliche-standardformel
formelstringjaLesbare Formelbeschreibung
hinweisstringoptionalExtrapolations-Hinweis (GFZ außerhalb 0,1–3,0) und/oder Vorder-/Hinterland-Hinweise, space-getrennt kombiniert
disclaimerstringjaPflicht-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 AntwortBeispiel-Bundesländer
wertrel_geschossflaechenzahl (WGFZ)Berlin, Hessen, Baden-Württemberg, Hamburg
geschossflaechenzahl (GFZ)Brandenburg
nur vollgeschosszahl (Vollgeschosse)Nordrhein-Westfalen
keine Dichtekennzahlu. a. Niedersachsen, Rheinland-Pfalz, Thüringen
Liefert die Zone keine GFZ (z. B. in NRW, wo nur die Vollgeschosszahl geführt wird), musst du die Referenz-GFZ aus der amtlichen Zoneninfo selbst bestimmen und als 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:

BereichVerhalten
< 0,10Gültig, zusätzlicher Hinweis: unterhalb der publizierten Regelspannen
0,100,50Gültig, kein Zusatzhinweis (0,100,30 belegter Kernkorridor, 0,300,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,0Gültig, kein Zusatzhinweis — Sonderfall: identisch zum unaufgeteilten Wert
Für die Grundstückstiefe gibt es kein bundesweites Standardmodell — anders als bei der GFZ-Umrechnung. Fläche und Faktor des Hinterlands kommen von dir; maßgeblich sind vorrangig die Vorgaben deines Gutachterausschusses (§ 10 ImmoWertV, Modellkonformität) — liegen keine vor, ist der Ansatz sachverständig aus dem Markt abzuleiten. Für die Grundsteuer im Bodenwertmodell Baden-Württembergs gilt Abweichendes: Dort ist der Bodenrichtwert der Zone einheitlich auf die gesamte Fläche anzuwenden, auch wenn der Gutachterausschuss selbst eine Tiefenstaffelung veröffentlicht hat.
Bevor du 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> }.

StatusCodeBedeutung
400invalid_jsonDer Request-Body ist kein gültiges JSON
400invalid_bodyDer Request-Body ist kein JSON-Objekt
400missing_parameterEin 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
400invalid_brwbrw ist keine Zahl oder < 0
400invalid_gfz_referenzgfz_referenz ist keine Zahl oder <= 0
400invalid_gfz_tatsaechlichgfz_tatsaechlich ist keine Zahl oder <= 0
400invalid_flaecheflaeche ist gesetzt, aber keine Zahl oder <= 0
400invalid_hinterland_flaeche_m2hinterland_flaeche_m2 ist keine Zahl, <= 0 oder >= flaeche
400invalid_hinterland_faktorhinterland_faktor ist keine Zahl oder liegt außerhalb [0, 1]
401missing_tokenAuthorization: Bearer <token>-Header fehlt
401invalid_tokenToken ungültig oder abgelaufen
429rate_limit_exceededZu viele Requests pro Minute (120/min IP-Limit) — Retry-After-Header beachten
500internal_server_errorUnerwarteter Fehler
Das Ergebnis ist eine orientierende Berechnung nach der allgemeinen Standardformel. Sie ersetzt nicht die zonenspezifische amtliche Umrechnungstabelle des zuständigen Gutachterausschusses und ist kein Verkehrs- oder Kaufpreis. Für rechtsverbindliche Wertermittlungen ist ein Sachverständiger hinzuzuziehen.

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.