GET /api/bodenrichtwertFür Entwickler
Request
GET https://api.bodenrichtwert.ai/api/bodenrichtwert
Authorization: Bearer brw_pat_...
Query-Parameter
| Name | Pflicht | Typ | Beschreibung |
|---|---|---|---|
address | ja | string | Vollständige Adresse mit PLZ und Ort |
nutzungsart | nein | W | M | G | S | L | F | SO | Filter auf eine oder mehrere Nutzungsarten — Parameter mehrfach anhängen (?nutzungsart=W&nutzungsart=G), nicht kommagetrennt. Ohne Angabe: kein Filter, alle an der Adresse vorhandenen Nutzungsarten werden zurückgegeben |
Nutzungsart-Codes:
| Code | Nutzungsart |
|---|---|
W | Wohnbaufläche |
M | Gemischte Baufläche |
G | Gewerbliche Baufläche |
S | Sonderbaufläche (z. B. Kliniken, Schulen) |
L | Landwirtschaftliche Fläche |
F | Forstwirtschaftliche Fläche |
SO | Sonstige Fläche |
Response (200 OK)
bodenrichtwerte ist ein Array und enthält alle an der Koordinate gefundenen Nutzungsarten, sortiert W, M, G, S, L, F, SO — außer der Request filtert mit nutzungsart auf einen oder mehrere bestimmte Codes, dann enthält es nur die passenden Einträge. Reales Beispiel für „Platz d. Menschenrechte 1, 30159 Hannover" mit explizitem ?nutzungsart=S — die Koordinate liegt in der Sonderbaufläche des Regierungsviertels:
{
"address_input": "Platz d. Menschenrechte 1, 30159 Hannover",
"address_resolved": "Platz der Menschenrechte 1, 30159 Hannover - Mitte",
"coordinates": { "lat": 52.368, "lon": 9.737 },
"bodenrichtwerte": [
{
"nutzungsart": "Sonderbaufläche",
"code": "S",
"brw_euro_pro_m2": 800,
"stichtag": "2025-01-01",
"gemeinde": "Hannover",
"gutachterausschuss": "",
"bodenrichtwertnummer": "04305204",
"zonenbezeichnung": "Regierungsviertel"
}
],
"cache_hit": false,
"attribution": {
"text": "© Daten der Gutachterausschüsse für Grundstückswerte 2025, dl-de/by-2-0",
"license_url": "https://www.govdata.de/dl-de/by-2-0",
"source_url": "https://www.bodenrichtwerte-boris.de",
"year": 2025
},
"disclaimer": "Der Bodenrichtwert ist ein gutachterlicher Orientierungswert — kein Verkehrswert, kein Verkaufspreis, keine Rechtsberatung."
}
Dieselbe Koordinate liegt auch in der flächendeckenden Forst-Zone der Stadt (bodenrichtwertnummer: "04309601"). Mit ?nutzungsart=S&nutzungsart=F (Parameter zweimal anhängen, nicht kommagetrennt) liefert ein einzelner Request beide Einträge zusammen; ganz ohne nutzungsart wären zusätzlich alle anderen an der Koordinate vorhandenen Nutzungsarten enthalten.
Response-Felder pro Bodenrichtwert
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
nutzungsart | string | ja | Menschenlesbare Bezeichnung (z. B. „Wohnbaufläche") |
code | string | ja | Kurz-Code, Enum W | M | G | S | L | F | SO |
brw_euro_pro_m2 | number | ja | Bodenrichtwert in Euro pro Quadratmeter |
stichtag | string | ja | Stichtag im ISO-Format YYYY-MM-DD |
gemeinde | string | ja | Gemeindename |
gutachterausschuss | string | ja | Name des Gutachterausschusses (in NI/einigen Ländern upstream leer — bleibt als Leerstring erhalten) |
bodenrichtwertnummer | string | optional | Eindeutige Zonen-ID (BRN) — stabil pro Koordinate, zitierfähig im Gutachten |
zonenbezeichnung | string | optional | Zonenname (BZN), meist Ortsteil oder Quartier, z. B. „Regierungsviertel" oder „Stederdorf W" |
bauweise | string | optional | Bauweise (BAW), z. B. „offen" / „geschlossen" |
geschossflaechenzahl | number | optional | Geschossflächenzahl (GFZ) |
grundflaechenzahl | number | optional | Grundflächenzahl (GRZ) |
vollgeschosszahl | number | optional | Anzahl Vollgeschosse (VGZ) |
baumassenzahl | number | optional | Baumassenzahl (BMZ) — meist in dichter Gewerbe-/Hochhausbebauung |
wertrel_geschossflaechenzahl | number | optional | Wertrelevante GFZ (WGF) — die vom Gutachterausschuss für den BRW angesetzte Referenz-GFZ. Notwendig, wenn ein Grundstück mit abweichender GFZ umgerechnet werden soll. |
Fehler
Alle Fehler folgen demselben Format: { "error": "<code>", "message": "<Beschreibung>", "status": <HTTP-Status> }.
| Status | Code | Bedeutung |
|---|---|---|
400 | missing_address | Query-Parameter address fehlt |
400 | invalid_nutzungsart | Ungültiger nutzungsart-Code — gültig sind W, M, G, S, L, F, SO |
401 | missing_token | Authorization: Bearer <token>-Header fehlt |
401 | invalid_token | Token ungültig oder abgelaufen |
402 | limit_reached | Monatslimit erreicht — Plan upgraden |
402 | payment_past_due | Letzte Zahlung fehlgeschlagen — Zahlungsdaten im Dashboard aktualisieren |
404 | address_not_found | Adresse konnte nicht geokodiert werden |
404 | no_data | Für diese Koordinate liegt kein Bodenrichtwert vor |
429 | rate_limit_exceeded | Zu viele Requests pro Minute (120/min IP-Limit) — Retry-After-Header beachten |
451 | restricted_state | SH/SN/BY — aktuell keine Daten verfügbar |
503 | service_error | Datenquelle temporär nicht erreichbar |
500 | processing_error | Unerwarteter Fehler bei der Verarbeitung |
Zwischenspeicherung
Antworten werden 7 Tage in Cloudflare KV zwischengespeichert (Schlüssel: brw:v3:SHA-256(lat,lon)), unabhängig vom nutzungsart-Filter — intern wird immer der vollständige Datensatz einer Koordinate zwischengespeichert, gefiltert wird bei jedem Read. Liegt bereits ein Ergebnis vor, ist die Response identisch; das Feld cache_hit: true im Response-Body zeigt das an. Die Key-Version v3 sorgt dafür, dass Einträge aus der Zeit vor dem Default-Wechsel automatisch ignoriert werden.