Schnittstelle für Unternehmen
Standortanalysen direkt in Ihrer Software
Eine Adresse hinein, eine vollständige Auswertung als JSON heraus. Hochwasser, Starkregen, Lärm, Hitze, Erreichbarkeit, Umfeld und Soziodemografie für jede bewohnte Adresse in Deutschland, ohne dass etwas anklicken muss.
Alles aus dem Vollreport
Dieselben Werte wie im bezahlten Bericht auf der Website, nur als JSON und ohne Oberfläche.
Zum Verbinden gebaut
Jede Antwort trägt den amtlichen Gemeindeschlüssel, die Rasterzelle und die Datenversion. Damit fügt sich das Ergebnis in Ihren Bestand ein.
Kostenlos entwickeln
Ein Testschlüssel liefert einen festen Beispielreport, ohne Kontingent zu verbrauchen. Sie zahlen erst im Echtbetrieb.
Pakete und Preise
Abgerechnet wird in Credits. Ein Credit ist ein Report mit allen Werten als JSON. Der KI-Text kostet einen zweiten Credit und ist standardmäßig ausgeschaltet, weil er den Aufruf deutlich verlangsamt. Jedes Paket ist eine Einmalzahlung, kein Abonnement.
Die Schnittstelle liefert Daten, keine fertigen Texte. Das ist der Unterschied zu den Paketen im Browser. Dort ist die Lagebeschreibung das Produkt und immer enthalten. Die Schnittstelle lohnt sich, wenn Sie die Werte in Ihre eigene Oberfläche, Ihr CRM oder Ihre Bewertung übernehmen.
API Start
Einstieg und Anbindung
entspricht 0,098 € je Credit
- Inklusive
- 500 Credits
- Gültigkeit
- mindestens 3 Jahre
- Aufgebraucht
- einfach nachkaufen
- Testzugang
- inklusive
API Pro
Laufender Betrieb
entspricht 0,060 € je Credit
- Inklusive
- 5.000 Credits
- Gültigkeit
- mindestens 3 Jahre
- Aufgebraucht
- einfach nachkaufen
- Testzugang
- inklusive
API Scale
Hohe Volumina
entspricht 0,040 € je Credit
- Inklusive
- 20.000 Credits
- Gültigkeit
- mindestens 3 Jahre
- Aufgebraucht
- einfach nachkaufen
- Testzugang
- inklusive
Enterprise
Ab 50.000 Credits im Monat. Volumen, Konditionen und Verfügbarkeit vereinbaren wir vertraglich.
Kontakt aufnehmen →Einmalige Massenauswertung
Sie haben eine Liste und brauchen sie einmal ausgewertet, nicht laufend? Wir rechnen den Bestand in einem Durchgang und liefern eine Datei.
- ab 30.000 Adressen: 0,05 € je Adresse
- ab 50.000 Adressen: 0,04 € je Adresse
- ab 100.000 Adressen: 0,03 € je Adresse
Mindestauftrag 1.500 €.
Alle Preise dieser Seite sind Nettopreise und richten sich ausschließlich an Unternehmen. Als Kleinunternehmer nach § 19 UStG erheben wir derzeit keine Umsatzsteuer. Sollten wir künftig umsatzsteuerpflichtig werden, kommt die gesetzliche Umsatzsteuer hinzu. Das Guthaben gilt je Konto, nicht je Schlüssel. Credits gelten bis zum Ende des dritten Kalenderjahres nach dem Kauf. Vier Wochen vor dem Ablauf erinnern wir Sie per E-Mail daran. Ist das Guthaben aufgebraucht, bleiben Konto und Schlüssel bestehen, und Sie können jederzeit ein weiteres Paket kaufen.
In drei Schritten
- 1
Credits kaufen
Konto anlegen, Paket wählen, Vertrag zur Auftragsverarbeitung bestätigen. Danach legen Sie unter „Konto → API-Zugang“ sofort selbst Schlüssel an. Kein Abo, die Credits gelten bis zum Ende des dritten Kalenderjahres nach dem Kauf.
- 2
Gegen den Testschlüssel entwickeln
Ein Schlüssel mit dem Präfix wd_test_ liefert immer denselben Beispielreport, kostenlos und ohne Kontingent. Ideal, um Ihre Anbindung zu schreiben.
- 3
Umschalten
Denselben Aufruf mit dem echten Schlüssel senden. An Ihrem Code ändert sich nichts, die Antwortstruktur ist identisch.
So sieht ein Aufruf aus
curl -X POST https://api.wohn-data.de/api/v1/report \
-H "Authorization: Bearer wd_..." \
-H "Content-Type: application/json" \
-d '{"address": "Musterstraße 1, 66111 Saarbrücken"}'Antwort: ein JSON-Objekt mit allen Kennzahlen, dem amtlichen Gemeindeschlüssel und der Datenversion. Der KI-Text ist optional und standardmäßig aus, weil er den Aufruf deutlich verlangsamt. Alle Felder und eine Beispielantwort.
Was Sie bekommen
Die Antwort enthält alle verfügbaren Auswertungen zur Rasterzelle, die der Adresse zugeordnet ist. Die folgenden Abschnitte beschreiben die einzelnen Datenblöcke.
- meta
- Metadaten für die Weiterverarbeitung: Amtlicher Gemeindeschlüssel, Rasterzellen-ID, die tatsächlich aufgelöste Adresse, Daten- und Formelversion, die verbrauchten und verbleibenden Credits und was aus dem KI-Text geworden ist.
- headline
- Die höchste Einzelbewertung unter den Gefahren und Belastungen der Zelle, mit Kategorie, Stufe und Ampelfarbe. Kein Mittelwert über alle Kategorien.
- verdict
- Ein Satz, der das Ergebnis zusammenfasst. Regelbasiert, nicht vom Sprachmodell.
- tiles
- Die sechs bewerteten Kategorien: Überflutungsgefahr, Hitzebelastung, Lärmbelastung, Grünzugang, Nahversorgung und ÖPNV-Anbindung. Jede mit Stufe oder Kennwert, Ampel und einem detail-Objekt mit den Rohwerten dahinter. Die Lärm-Kachel nennt in basis, worauf ihre Stufe beruht: mapped (amtliche Lärmkarte), venues (keine kartierte Quelle, eingeschätzt aus der Zahl der Lokale im Umkreis von 500 m, kein Schallpegel) oder mapped_and_venues (amtliche Lärmkarte, und die Zahl der Lokale hebt die Stufe um eine Stufe an). Die Wasser-Kachel trägt basis neighbour_cell, wenn die Adresse in einer Zelle ohne Bewohner laut Zensus liegt: Die Stufe gehört dann zur nächstgelegenen bewohnten Zelle und gilt nicht für die Adresse selbst. Eine niedrige Stufe ist zusätzlich grau.
- info_tiles
- Neutrale Zusatzangaben ohne Bewertung, etwa Mietniveau, nächster Supermarkt, nächster Spielplatz und ein Schutzgebiet, falls die Adresse in einem liegt. Fehlt ein Wert, kann nodata_reason den Grund nennen: suppressed steht für eine Angabe, die wir für Zellen mit weniger als 11 Einwohnern aus Datenschutzgründen nicht ausgeben.
- eignungsprofile
- Familie, Senioren und Pendler als Kennwert von 0 bis 100 mit Einstufung, der Angabe, aus wie vielen Merkmalen er gebildet wurde, und den Namen der Merkmale, die gefehlt haben (components_missing).
- baustruktur
- Ob die Bebauung im Umfeld kleinteilig, gemischt oder verdichtet ist, mit den Anteilen der Gebäudegrößen.
- details
- Lärm und Wasser im Detail: Pegel je Quelle und Zeitraum, Hochwasserszenarien mit Tiefe und Flächenanteil, Starkregen. Die Lärmpegel sind Obergrenzen der amtlichen 5-dB-Bänder. Der Flächenanteil eines Hochwasserszenarios (coverage_pct) ist eine vorsichtige Obergrenze: er liegt im Mittel rund 14 Prozentpunkte über dem Anteil, den die amtlichen Flächen tatsächlich bedecken. Für Schwellenwerte bitte die eigene Verteilung des Feldes verwenden, nicht die Annahme eines exakten Flächenanteils. Jeder Block nennt in observed, aus welcher Kartierung er stammt (Lärm 2022, Hochwasserkarten der Länder in der Zusammenstellung 2025, Starkregen-Hinweiskarte 2025).
- datenblaetter
- Bis zu sechs Tabellen mit den Zahlenwerten: Menschen, Wohnen, Nahversorgung & ÖPNV, Klima, Luft sowie Gelände & Umfeld. Jede Zeile mit Wert und Einordnung. Neben dem formatierten value steht die Zahl maschinenlesbar in raw und ihre Einheit in unit. Beide sind null, wo die Zeile ein Wort statt einer Zahl zeigt. Entfernungen sind in value und raw auf 50 Meter gerundet, weil sie ab der Mitte der Rasterzelle gemessen werden. Jede Zeile nennt in observed, wann der Wert erhoben wurde (zum Beispiel Stichtag 15. Mai 2022 für den Zensus), und in denominator, worauf sich ein Anteil oder eine häufigste Gruppe bezieht. Das Baualter zählt Gebäude, die Heizungsart Wohnungen. Die Liste vintages einer Tabelle fasst die Zeiträume ihrer Zeilen mit Beginn und Ende zusammen.
- comparison
- Einordnung gegen Deutschland, Gemeinde und Stadtteil, je mit Perzentil und Band. Die gezeigte Zahl steht zusätzlich in raw und unit. Beim Mietniveau bleibt raw immer null, weil wir dort nur eine Einordnung und keinen Eurobetrag ausgeben.
- gemeinde, stadtteil
- Name und Slug des Gebiets, in dem die Adresse liegt.
- cell, gitter_id, lat, lon
- Die 100-Meter-Rasterzelle als GeoJSON-Polygon, ihre stabile Kennung und der Mittelpunkt in WGS 84.
- address, report_type
- Die angefragte Adresse und die Stufe des Berichts. Über die API ist das immer die vollständige Auswertung.
- fallback_ring, neighbour_fallback
- Ob wir auf eine andere Zelle ausweichen mussten, weil der Zensus 2022 für die Zelle der Adresse keine Bewohner ausweist. Das ist der Fall, wenn dort am Stichtag 15. Mai 2022 niemand oder nur sehr wenige Menschen wohnten, zum Beispiel bei einem später gebauten Haus. Alle Werte beschreiben dann die ausgewertete Nachbarzelle. 1 ist die nächstgelegene bewohnte angrenzende Zelle, 2 eine Zelle im Umkreis von 200 Metern. Für Massenauswertungen der wichtigste Filter.
- fallback_distance_m, fallback_direction
- Nur bei einer ausgewichenen Zelle: die Entfernung vom Adresspunkt zum Mittelpunkt der ausgewerteten Zelle, auf 10 Meter gerundet, und die Himmelsrichtung dorthin (N, NE, E, SE, S, SW, W, NW). Sonst null.
- address_note
- Steht hier, wenn die Adresse nicht genau so gefunden wurde, wie sie eingegeben war. Fehlt die Hausnummer in den Kartendaten, haben wir eine nahe Nummer derselben Straße verwendet, die Lage zwischen zwei Nachbarn geschätzt oder die Straße ausgewertet. Außerdem nennt der Hinweis eine erkannte Schreibweise von Straße oder Ort und bei mehreren eingegebenen Hausnummern die ausgewertete. Ohne diesen Eintrag wurde die Adresse direkt gefunden.
- match, resolved_at
- Was der ausgewertete Punkt ist: house (die angefragte Hausnummer), interpolated (zwischen zwei Nachbarn geschätzt), nearest_number (eine nahe Nummer derselben Straße) oder street (ein Punkt der Straße). Dazu der Zeitpunkt, zu dem die Adresse der Zelle zugeordnet wurde.
- near_border
- Die Zelle liegt an der Staatsgrenze. Umfeldwerte können dort unvollständig sein, weil jenseits der Grenze keine Daten vorliegen.
- starkregen_coverage
- Ob für das Bundesland Starkregendaten vorliegen. Fehlen sie, bewertet die Kategorie nur Hochwasser und heißt Hochwassergefahr.
- data_version, generated_at, from_cache
- Datenstand, Zeitpunkt der Erstellung und ob die Antwort aus dem Zellen-Cache kam.
- report_text, llm_blocked
- Nur bei include_narration: der ausformulierte Bericht als Markdown, und ob das Modell die Ausgabe verweigert hat.
- narration_provenance
- Nur mit report_text: kennzeichnet report_text maschinenlesbar als mit KI erstellt (Art. 50 Abs. 2 KI-VO). Die Kennzahlen sind berechnet, nicht erzeugt.
Beispielantwort ansehen
Gekürzt: jede Liste zeigt nur ihren ersten Eintrag. Vollständig enthält die Antwort sechs Einträge in tiles, bis zu drei in info_tiles, drei in eignungsprofile und bis zu sechs datenblaetter. Das GeoJSON-Polygon der Zelle ist hier weggelassen. Die Werte stammen aus unserem Testdatensatz, die Struktur ist die der echten Antwort.
{
"address": "Musterstraße 1, 66111 Musterstadt",
"address_note": null,
"baustruktur": {
"ampel": "info",
"available": true,
"detail": {
"dominant_class": "3bis6_wohnungen",
"shares": {
"13undmehr_wohnungen": 0.16,
"1_wohnung": 0.08,
"2_wohnungen": 0.06,
"3bis6_wohnungen": 0.4,
"7bis12_wohnungen": 0.3
},
"tier_shares": {
"gross": 0.16,
"klein": 0.14,
"mittel": 0.7
}
},
"key": "baustruktur",
"kind": "label",
"label": "Baustruktur",
"value": "Mehrfamilienhaus-geprägt"
},
"comparison": {
"gemeinde_available": true,
"gemeinde_name": "Musterstadt",
"metrics": [
{
"key": "durchschnittsalter",
"label": "Durchschnittsalter",
"note": null,
"raw": 42.5,
"scopes": {
"deutschland": {
"band_key": "durchschnittlich",
"band_label": "Durchschnittlich",
"percentile": 66
},
"gemeinde": {
"band_key": "durchschnittlich",
"band_label": "Durchschnittlich",
"percentile": 66
},
"stadtteil": {
"band_key": "durchschnittlich",
"band_label": "Durchschnittlich",
"percentile": 66
}
},
"unit": "years",
"value": "42,5 Jahre"
}
],
"stadtteil_available": true,
"stadtteil_name": "Musterviertel"
},
"data_version": "golden000000",
"datenblaetter": [
{
"rows": [
{
"denominator": "Personen",
"label": "Bevölkerungsdichte",
"observed": "Stichtag 15. Mai 2022",
"raw": 240,
"sub": "Median der Wohnlagen in Deutschland: 30 Personen je Hektar",
"unit": "persons_per_ha",
"value": "240 Personen je Hektar",
"vintage": "zensus2022"
}
],
"title": "Soziodemografie",
"vintages": [
{
"end": "2022-05-15",
"id": "zensus2022",
"period_de": "Stichtag 15. Mai 2022",
"source": "Zensus 2022",
"start": "2022-05-15"
}
]
}
],
"details": {
"laerm": {
"any_exposure": true,
"entries": [
{
"hits": 5,
"period": "lden",
"source": "road",
"value": "66 dB Lden"
}
],
"overall": "66 dB Lden (Straße)",
"observed": "Kartierung 2022",
"vintage": "uba_laerm"
},
"wasser": {
"entries": [
{
"area_type": "1",
"coverage_pct": 8.0,
"depth": "0,8 m",
"family": "river",
"scenario": "hq100"
}
],
"observed": "Zusammenstellung 2025, Stand der Länderkarten unterschiedlich",
"starkregen": {
"deep_pct": 3.0,
"flooded_pct": 12.0,
"observed": "Ausgabe 2025",
"vintage": "bkg_starkregen"
},
"vintage": "bfg_hochwasser",
"zuers_class": 3
}
},
"eignungsprofile": [
{
"ampel": "green",
"available": true,
"detail": {
"band": "Gut geeignet",
"components_total": 6,
"components_used": 6,
"gruen": 0.52,
"hitze": 0.25,
"kita": 1.0,
"ruhe": 0.6,
"schule": 1.0,
"spielplatz": 0.85
},
"key": "profil_familie",
"kind": "score",
"label": "Familien-Eignung",
"value": 72
}
],
"fallback_direction": null,
"fallback_distance_m": null,
"fallback_ring": 0,
"from_cache": false,
"gemeinde": {
"land": "SL",
"name": "Musterstadt",
"published": true,
"slug": "musterstadt"
},
"generated_at": "2026-07-16T12:00:00+00:00",
"gitter_id": "crs3035res100mn2691750e4341150",
"headline": {
"ampel": "red",
"category_key": "water_risk_level",
"category_label": "Überflutungsgefahr",
"has_unknown_risk": false,
"level": "Hoch",
"note": "Höchste Gefahr oder Belastung der Rasterzelle. Kein Mittelwert über alle Kategorien."
},
"info_tiles": [
{
"ampel": "green",
"available": true,
"detail": null,
"key": "miete_level",
"kind": "level",
"label": "Mietniveau",
"value": "Gering"
}
],
"lat": 49.234,
"lon": 6.994,
"match": "house",
"near_border": true,
"neighbour_fallback": false,
"report_type": "voll",
"resolved_at": "2026-07-16T12:00:00+00:00",
"stadtteil": {
"city_slug": "musterstadt",
"name": "Musterviertel",
"published": true,
"slug": "musterviertel"
},
"starkregen_coverage": "verfuegbar",
"tiles": [
{
"ampel": "red",
"available": true,
"detail": {
"flood_layer_assessed": true,
"flood_risk_label": "HQ100",
"flood_zuers_class": 3,
"hochwasser_present": true,
"hochwasser_severity": 3,
"starkregen_assessed": true,
"starkregen_deep_pct": 3.0,
"starkregen_flooded_pct": 12.0,
"starkregen_max_class": 3,
"starkregen_severity": 2
},
"key": "water_risk_level",
"kind": "level",
"label": "Überflutungsgefahr",
"value": "Hoch"
}
],
"verdict": "Diese Lage bringt eine erhöhte Hochwasser- und Starkregengefahr sowie eine hohe sommerliche Hitzebelastung mit sich.",
"meta": {
"api_version": "v1",
"request_id": "b3f1c8e2-4a17-4d90-9f21-7c0a5e6d1234",
"ags": "10041000",
"gitter_id": "crs3035res100mn2691750e4341150",
"resolved_address": "Musterstraße 1, 66111 Musterstadt",
"match": "house",
"address_note": null,
"fallback_ring": 0,
"data_version": "golden000000",
"composites_version": "3.2",
"generated_at": "2026-07-16T12:00:00+00:00",
"from_cache": false,
"idempotent_replay": false,
"sandbox": false,
"credits_charged": 1,
"narration_status": "not_requested",
"credits_remaining": 499
}
}
Denselben Aufbau liefert der kostenlose Testschlüssel, bevor Sie ein Paket buchen. Sie sehen also vor dem Kauf genau das, was Sie später bekommen.
Technische Dokumentation
Alles zum Anbinden. Klappen Sie auf, was Sie gerade brauchen. Eine maschinenlesbare Beschreibung liegt unter /api/v1/openapi.json.
Authentifizierung
Jede Anfrage trägt einen API-Schlüssel. Schlüssel legen Sie in Ihrem Konto unter „API-Zugang“ an. Der Schlüssel wird genau einmal angezeigt, danach liegt bei uns nur noch ein Hash. Verlieren Sie ihn, legen Sie einen neuen an.
Ein Schlüssel ist ein Passwort. Legen Sie ihn nicht in ein öffentliches Repository und geben Sie ihn nicht im Browser preis, denn er wirkt ohne weitere Anmeldung.
Authorization: Bearer wd_IHR_SCHLUESSEL
# alternativ
X-API-Key: wd_IHR_SCHLUESSELEndpunkte
GET /api/v1/account
Prüft den Schlüssel und nennt den Verbrauch des laufenden Tages. Der Aufruf verbraucht selbst kein Kontingent.
curl -H "Authorization: Bearer wd_..." \
https://api.wohn-data.de/api/v1/accountPOST /api/v1/report
Eine Adresse hinein, ein vollständiger Report heraus. Geliefert wird immer die vollständige Auswertung, nicht die kostenlose Kurzfassung. Felder im Anfragekörper:
address(Pflicht): die zu prüfende Adresse in Deutschland.include_narration(optional, Standardfalse): liefert zusätzlich den KI-Text alsreport_text. Kostet zwei Credits statt einem und dauert deutlich länger. Berechnet werden die zwei Credits nur, wenn der Text auch geliefert wird. Ob das der Fall ist, steht inmeta.narration_status.wide_fallback(optional, Standardfalse): liegt die Adresse in einer Rasterzelle ohne Zensus-Daten, suchen wir ohne diesen Schalter in den acht angrenzenden Zellen. Mit ihm suchen wir auch in den 16 Zellen dahinter und nehmen die bewohnte Zelle, deren Mittelpunkt der Adresse am nächsten liegt. Das ist eine geänderte Anfrage und keine Wiederholung. Senden Sie sie deshalb mit einem neuenIdempotency-Key.
Metadaten in der Antwort
Jede erfolgreiche Antwort enthält einen Block meta mit den Feldern, die Sie zum Zusammenführen mit eigenen Daten brauchen:
ags: der achtstellige Amtliche Gemeindeschlüssel. Der Schlüssel, über den Sie unsere Ergebnisse mit eigenen Beständen oder amtlichen Statistiken verbinden.gitter_id: die 100-Meter-Rasterzelle, auf die sich alle Werte beziehen. Zwei Adressen mit derselben Zelle haben identische Werte.resolved_address: die Adresse, die das Geocoding tatsächlich getroffen hat. Mit Ihrer Eingabe vergleichen, um stille Fehltreffer bei Tippfehlern zu erkennen.fallback_ring:0heißt, die Adresse liegt in einer bewohnten Zelle.1heißt, dass die nächstgelegene bewohnte angrenzende Zelle verwendet wurde,2eine Zelle aus der erweiterten Suche (nur mitwide_fallback). Wie weit ihr Mittelpunkt von der Adresse entfernt ist und in welcher Richtung er liegt, steht infallback_distance_mundfallback_direction. Für Auswertungen sollten Sie diese Fälle kennzeichnen.data_versionundcomposites_version: Stand der Daten und Version der Berechnungsvorschrift. Beide mitspeichern, sonst lässt sich ein Ergebnis später nicht mehr nachvollziehen.credits_charged: was der Aufruf gekostet hat.credits_remaining: das Guthaben nach dem Aufruf. Bei Enterprise und im Testzugang ist esnull, was nicht null Credits bedeutet.narration_status: was aus dem KI-Text geworden ist.not_requestedheißt, er war nicht angefragt.deliveredheißt, er steht inreport_text.blockedheißt, das Modell hat keinen Text geliefert.busyheißt, die Kapazität war erschöpft und ein späterer Versuch kann gelingen.failedheißt, der Aufruf des Modells ist fehlgeschlagen. Nur beideliveredkostet der Aufruf zwei Credits, sonst einen.request_id: identisch mit dem Antwort-HeaderX-Request-ID.
Was die Werte räumlich bedeuten
Alle Werte gelten für eine 100-Meter-Rasterzelle, aber nicht jeder ist dort gemessen. Manche sind Mittel über ein Quadrat um die Zelle, manche zählen in einem Kreis, manche stammen aus einem 1-km-Rasterfeld, und manche sind Meldungen der Anbieter. Für Auswertungen gilt die Bezugsfläche in der letzten Spalte.
| Wert | Quelle | Art | Bezugsfläche |
|---|---|---|---|
| Baumkronen im Umfeld | Copernicus Tree Cover Density 2023Auflösung: 100 mZeitbezug: Referenzjahr 2023 | Messung aus Satellitendaten | Mittel über ein Quadrat von 1,1 × 1,1 km um die Zelle.Bezugsgröße: Fläche |
| Baumkronen im 500-m-Quadrat | Copernicus Tree Cover Density 2023Auflösung: 100 mZeitbezug: Referenzjahr 2023 | Messung aus Satellitendaten | Mittel über ein Quadrat von 500 × 500 m um die Zelle.Bezugsgröße: Fläche |
| Grünflächen im Umfeld | OpenStreetMap (Parks, Wald, Wiesen) ergänzt um die amtliche Flächennutzung des IÖR-Monitors (Wald, Grünland)Auflösung: Flächen, auf 100 m gerastert, je Zelle der größere Wert beider QuellenZeitbezug: Stand 24. August 2026 | Kartierung (was erfasst ist, nicht zwingend alles) | Anteil in einem Quadrat von 1,1 × 1,1 km um die Zelle.Bezugsgröße: Fläche |
| Oberflächentemperatur (Sommer) | Landsat 8/9, Sommermediane 2018 bis 2025Auflösung: 30 m, auf das 100-m-Raster übertragenZeitbezug: Sommer 2018 bis 2025 | Messung aus Satellitendaten | Die Zelle. Gemessen wird die Temperatur der Oberflächen, nicht der Luft. |
| Versiegelungsgrad | Copernicus Imperviousness Density 2024Auflösung: 100 mZeitbezug: Referenzjahr 2024 | Messung aus Satellitendaten | Die Zelle.Bezugsgröße: Fläche |
| Heiße Tage (ab 30 °C) | DWD, Normalperiode 1991 bis 2020Auflösung: 1 kmZeitbezug: Mittel der Jahre 1991 bis 2020 | Stationswerte auf ein Raster übertragen | Das 1-km-Rasterfeld des DWD, in dem die Zelle liegt. Lufttemperatur. |
| Wärmeinselintensität | DWD UHI-MAP, Modell über 1995 bis 2024Auflösung: 1 kmZeitbezug: Modellzeitraum 1995 bis 2024 | Modellrechnung | Das 1-km-Rasterfeld des DWD-Modells, in dem die Zelle liegt. Unterschied der Lufttemperatur zum ländlichen Umland im Mittel der Tagesmaxima, keine absolute Temperatur. |
| Stickstoffdioxid (NO2) | Europäische Umweltagentur, Jahreskarte 2024Auflösung: 1 kmZeitbezug: Jahr 2024 | Modellrechnung | Das 1-km-Rasterfeld der EEA-Karte. Hintergrundbelastung, direkt an einer stark befahrenen Straße liegt der Wert höher. |
| Feinstaub (PM2,5) | Europäische Umweltagentur, Jahreskarte 2024Auflösung: 1 kmZeitbezug: Jahr 2024 | Modellrechnung | Das 1-km-Rasterfeld der EEA-Karte. Hintergrundbelastung. |
| Ozon (Sommerspitze) | Europäische Umweltagentur, Jahreskarte 2024Auflösung: 1 kmZeitbezug: Jahr 2024 | Modellrechnung | Das 1-km-Rasterfeld der EEA-Karte. Hintergrundbelastung. |
| Internet (verfügbare Geschwindigkeit) | Bundesnetzagentur, Gigabit-Grundbuch (Breitbandatlas)Auflösung: 100-m-Raster des BKGZeitbezug: Stand 31. Dezember 2025 | Meldung der Anbieter, nicht gemessen | Die Zelle, flächengewichtet aus dem 100-m-Raster des BKG übertragen. Gemeldete Verfügbarkeit der Anbieter, keine gemessene Leistung.Bezugsgröße: Haushalte |
| Mobilfunk (5G) | Bundesnetzagentur, Gigabit-GrundbuchAuflösung: 100-m-Raster des BKGZeitbezug: Stand Januar 2026 | Meldung der Anbieter, nicht gemessen | Die Zelle, aus dem 100-m-Raster des BKG übertragen. Gemeldete Versorgung der Netzbetreiber, keine gemessene Leistung.Bezugsgröße: Netzbetreiber |
| Ziele im Umkreis von 500 m | OpenStreetMapAuflösung: Punkte und FlächenZeitbezug: Stand 24. August 2026 | Kartierung (was erfasst ist, nicht zwingend alles) | Ein Kreis mit 500 m Radius um den Mittelpunkt der Zelle, in Luftlinie.Bezugsgröße: Einrichtungen |
| Haltestellen und Abfahrten im Umkreis von 500 m | DELFI-Sollfahrplan (GTFS)Auflösung: Haltestellen als PunkteZeitbezug: Mittel der Werktage vom 1. August bis 12. Dezember 2026 | Meldung der Anbieter, nicht gemessen | Ein Kreis mit 500 m Radius um den Mittelpunkt der Zelle, in Luftlinie. Fahrplan, nicht tatsächlich gefahrene Fahrten.Bezugsgröße: Haltestellen und Abfahrten |
| Bevölkerungsdichte | Zensus 2022Auflösung: 100 mZeitbezug: Stichtag 15. Mai 2022 | Amtliche Zählung | Die Zelle.Bezugsgröße: Personen |
| Durchschnittsalter | Zensus 2022Auflösung: 100 mZeitbezug: Stichtag 15. Mai 2022 | Amtliche Zählung | Die Zelle.Bezugsgröße: Personen |
| Haushaltsgröße (häufigste) | Zensus 2022Auflösung: 100 mZeitbezug: Stichtag 15. Mai 2022 | Amtliche Zählung | Die Zelle.Bezugsgröße: Haushalte |
| Anteil ausländische Bevölkerung | Zensus 2022Auflösung: 100 mZeitbezug: Stichtag 15. Mai 2022 | Amtliche Zählung | Die Zelle.Bezugsgröße: Personen |
| Größte Religionsgruppe | Zensus 2022Auflösung: 100 mZeitbezug: Stichtag 15. Mai 2022 | Amtliche Zählung | Die Zelle.Bezugsgröße: Personen |
| Gebäudealter (häufigste Klasse) | Zensus 2022Auflösung: 100 mZeitbezug: Stichtag 15. Mai 2022 | Amtliche Zählung | Die Zelle.Bezugsgröße: Gebäude mit Wohnraum |
| Heizung der Wohnungen (häufigste Art) | Zensus 2022Auflösung: 100 mZeitbezug: Stichtag 15. Mai 2022 | Amtliche Zählung | Die Zelle.Bezugsgröße: Wohnungen |
| Wohnfläche je Wohnung | Zensus 2022Auflösung: 100 mZeitbezug: Stichtag 15. Mai 2022 | Amtliche Zählung | Die Zelle.Bezugsgröße: Wohnungen |
| Eigentümerquote | Zensus 2022Auflösung: 100 mZeitbezug: Stichtag 15. Mai 2022 | Amtliche Zählung | Die Zelle.Bezugsgröße: bewohnte Wohnungen |
| Leerstandsquote | Zensus 2022Auflösung: 100 mZeitbezug: Stichtag 15. Mai 2022 | Amtliche Zählung | Die Zelle.Bezugsgröße: Wohnungen |
| Marktaktive Leerstandsquote | Zensus 2022Auflösung: 100 mZeitbezug: Stichtag 15. Mai 2022 | Amtliche Zählung | Die Zelle.Bezugsgröße: Wohnungen in Wohngebäuden mit mehr als zwei Wohnungen |
Fehler und Statuscodes
Fehler tragen den passenden HTTP-Status und in error ein Objekt mit code, message, request_id und retry. Werten Sie immer den code aus, nicht den Text. Der Text kann sich ändern, der Code nicht.
{
"error": {
"code": "ADDRESS_NOT_FOUND",
"message": "The address could not be geocoded. ...",
"request_id": "9f2c1ab73d4e5f60",
"retry": "fix_request"
}
}Das gilt für alle Fehler, auch für ungültige Eingaben. Bei einer fehlerhaften Anfrage kommt INVALID_REQUEST zurück, zusätzlich mit details und der Angabe, welches Feld beanstandet wurde.
{
"error": {
"code": "INVALID_REQUEST",
"message": "The request body is not valid. Check: address.",
"request_id": "9f2c1ab73d4e5f60",
"retry": "fix_request",
"details": [
{ "field": "address", "reason": "String should have at least 3 characters",
"type": "string_too_short" }
]
}
}| Status | code | Bedeutung | retry |
|---|---|---|---|
| 400 | BAD_REQUEST | Anfrage nicht verarbeitbar. | fix_request |
| 401 | MISSING_API_KEY | Kein Schlüssel gesendet. | fix_account |
| 401 | INVALID_API_KEY | Schlüssel unbekannt, gelöscht oder Paket beendet. | fix_account |
| 402 | INSUFFICIENT_CREDITS | Guthaben aufgebraucht. Neues Paket kaufen, der Schlüssel bleibt gültig. | fix_account |
| 403 | FORBIDDEN | Der Schlüssel darf diesen Aufruf nicht ausführen. | fix_account |
| 404 | ADDRESS_NOT_FOUND | Geocoding hat keinen Treffer. Schreibweise prüfen. | fix_request |
| 404 | ADDRESS_AMBIGUOUS | Straße und Hausnummer gibt es in mehreren Orten. Die Orte stehen in candidates. Postleitzahl und Ort ergänzen oder ein label aus candidates senden. | fix_request |
| 404 | PLACE_NOT_ADDRESS | Ein Ort statt einer Adresse. Straße und Hausnummer ergänzen. | fix_request |
| 404 | HOUSENUMBER_NOT_FOUND | Hausnummer nicht verzeichnet, und die geschätzte Lage hat keine Zensus-Zelle. | fix_request |
| 404 | OUTSIDE_GERMANY | Treffer liegt außerhalb Deutschlands. | fix_request |
| 404 | NO_CENSUS_DATA | Keine bewohnte Zelle in der Nähe. Mit wide_fallback und einem neuen Idempotency-Key erneut senden. | fix_request |
| 404 | ADDRESS_RESOLUTION_FAILED | Die Adresse ließ sich keiner Rasterzelle zuordnen. | fix_request |
| 404 | NOT_FOUND | Unbekannter Pfad. | fix_request |
| 405 | METHOD_NOT_ALLOWED | Falsche HTTP-Methode für diesen Pfad. | fix_request |
| 409 | REQUEST_IN_PROGRESS | Ein Aufruf mit diesem Idempotency-Key läuft noch. | retry_later |
| 411 | LENGTH_REQUIRED | Der Content-Length-Header fehlt. | fix_request |
| 413 | REQUEST_TOO_LARGE | Der Anfragekörper ist zu groß. | fix_request |
| 422 | INVALID_REQUEST | Anfrage formal fehlerhaft. Welches Feld, steht in details. | fix_request |
| 422 | IDEMPOTENCY_KEY_REUSED | Derselbe Schlüssel mit anderem Anfragekörper. | fix_request |
| 422 | IDEMPOTENCY_KEY_TOO_LONG | Der Idempotency-Key ist zu lang. | fix_request |
| 429 | DAILY_QUOTA_EXCEEDED | Tageskontingent erreicht. Retry-After beachten. | retry_later |
| 429 | TOO_MANY_CONCURRENT_REQUESTS | Mehr als drei Anfragen gleichzeitig. | retry_later |
| 429 | RATE_LIMITED | Zu viele Anfragen in kurzer Zeit. Retry-After beachten. | retry_later |
| 500 | INTERNAL_ERROR | Fehler auf unserer Seite. | retry_later |
| 503 | SERVICE_BUSY | Kurzzeitig überlastet. | retry_later |
| 503 | GEOCODER_UNAVAILABLE | Geocoding nicht erreichbar. | retry_later |
| 503 | SANDBOX_UNAVAILABLE | Die Beispielantwort des Testzugangs ist gerade nicht verfügbar. | retry_later |
| 503 | API_NOT_AVAILABLE | Die Schnittstelle ist noch nicht freigeschaltet. | retry_later |
| andere | REQUEST_FAILED | Sonstiger Fehler ohne eigenen Code. | retry_later |
Ein 404 ist ein endgültiges Ergebnis für diese Adresse und sollte nicht wiederholt werden. Was nach einem Fehler zu tun ist, steht in retry. fix_request heißt, dieselbe Anfrage bekommt dieselbe Antwort, sie muss geändert werden. fix_account heißt, erst Schlüssel oder Guthaben in Ordnung bringen. Danach darf derselbe Idempotency-Key wiederholt werden. retry_later heißt, dieselbe Anfrage später erneut senden und dabei Retry-After beachten.
Wiederholte Aufrufe absichern (Idempotency-Key)
Bricht eine Verbindung ab, wissen Sie nicht, ob der Aufruf angekommen ist. Schicken Sie deshalb bei Massenläufen einen Idempotency-Key mit, zum Beispiel Ihre Datensatznummer. Ein Aufruf mit demselben Schlüssel wird dann höchstens einmal berechnet, auch wenn die Verbindung abbricht oder unser Server währenddessen neu startet. Bei einer Wiederholung steht in der Antwort meta.idempotent_replay: true und meta.credits_charged: 0.
curl -X POST https://api.wohn-data.de/api/v1/report \
-H "Authorization: Bearer wd_..." \
-H "Idempotency-Key: batch-2026-08-04-row-00042" \
-H "Content-Type: application/json" \
-d '{"address": "Musterstraße 1, 66111 Saarbrücken"}'- Derselbe Schlüssel mit einem anderen Anfragekörper ergibt
422 IDEMPOTENCY_KEY_REUSED. Das ist Absicht, denn es ist fast immer ein Fehler im aufrufenden Programm. - War der erste Versuch erfolglos, liefert die Wiederholung denselben Fehler zurück, ohne erneut zu rechnen.
- Vorübergehende Fehler wie
429oder503geben den Schlüssel wieder frei, ebenso402, damit derselbe Aufruf nach dem Kauf eines Pakets durchgeht. - Bricht ein Aufruf auf unserer Seite ab, ist der Schlüssel nach spätestens zehn Minuten wieder frei. War der abgebrochene Aufruf schon berechnet, liefert die Wiederholung den Report ohne erneute Berechnung.
- Schlüssel gelten mindestens 24 Stunden. Ein Aufruf mit einem abgelaufenen Schlüssel ist ein neuer Aufruf und wird berechnet.
Wir speichern dabei nicht die Antwort, sondern nur, wie der Aufruf ausgegangen ist. So bleibt es dabei, dass wir Ihre Adressen nicht vorhalten. Die Antwort wird bei einer Wiederholung deshalb neu erzeugt. Die Werte sind dieselben, solange sich Datenstand und Berechnungsvorschrift nicht geändert haben, was meta.data_version und meta.composites_version zeigen. request_id und generated_at sind bei jeder Antwort neu.
Testzugang (Sandbox)
Für die Entwicklung legen Sie im Konto einen Testschlüssel an. Er beginnt mit wd_test_ und liefert für jede Anfrage einen festen Beispielreport in genau der Struktur, die auch die echten Antworten haben.
- verbraucht kein Kontingent,
- unterliegt keiner Gleichzeitigkeitsgrenze,
- antwortet immer mit
meta.sandbox: true. Prüfen Sie dieses Feld, damit Testdaten nie in Ihre Auswertung geraten.
Die Werte beziehen sich immer auf dieselbe Adresse und ändern sich nicht, egal was Sie anfragen. Der Testzugang dient dazu, Ihre Anbindung zu schreiben, nicht dazu, Ergebnisse zu prüfen.
Damit Sie auch die Fehlerfälle Ihrer Anbindung schreiben können, antwortet der Testzugang auf die folgenden Adressen mit dem jeweiligen Fehler oder Teilergebnis statt mit dem Beispielreport, in genau der Form einer echten Antwort. Die Adresse wird genau so als address gesendet.
| address | Antwort |
|---|---|
sandbox-not-found | 404 ADDRESS_NOT_FOUND |
sandbox-ambiguous | 404 ADDRESS_AMBIGUOUS mit zwei Einträgen in candidates |
sandbox-outside-germany | 404 OUTSIDE_GERMANY |
sandbox-no-census-data | 404 NO_CENSUS_DATA |
sandbox-insufficient-credits | 402 INSUFFICIENT_CREDITS |
sandbox-quota-exceeded | 429 DAILY_QUOTA_EXCEEDED mit Retry-After |
sandbox-service-busy | 503 SERVICE_BUSY mit Retry-After |
sandbox-narration-failed | 200 mit Report, aber ohne KI-Text: report_text ist null und meta.narration_status ist failed |
Grenzen und Lastverhalten
Das Kontingent gilt je Konto, nicht je Schlüssel. Zusätzliche Schlüssel erhöhen es also nicht, sie dienen der Trennung Ihrer Systeme. Die genaue Zahl steht in Ihrem Konto unter „API-Zugang“.
Pro Konto dürfen höchstens drei Anfragen gleichzeitig laufen. Darüber antworten wir sofort mit 429 TOO_MANY_CONCURRENT_REQUESTS, damit Ihr Programm reagieren kann, statt in einen Timeout zu laufen. Ist der Dienst insgesamt ausgelastet, kommt stattdessen 503.
Für größere Bestände empfehlen wir wenige parallele Verbindungen statt vieler, und include_narration im Massenbetrieb ausgeschaltet zu lassen: der KI-Text ist der langsamste und teuerste Teil, und ohne ihn verlassen Ihre Daten unseren Verarbeitungskreis nicht in Richtung eines KI-Anbieters.
Nachvollziehbarkeit und Protokoll
Jede Antwort trägt den Header X-Request-ID. Wenn Sie eine Anfrage reklamieren, nennen Sie diesen Wert, dann finden wir den Vorgang. Sie können auch selbst einen Wert mitschicken, dann verwenden wir Ihren. Er muss zwischen 8 und 64 Zeichen lang sein und darf nur Buchstaben, Ziffern, Punkt, Bindestrich und Unterstrich enthalten. Andernfalls vergeben wir einen eigenen Wert, statt Ihren stillschweigend zu verändern.
In Ihrem Konto finden Sie unter „API-Verlauf“ die Aufrufe der letzten 30 Tage mit Zeitpunkt, Status, Fehlercode, Dauer und verwendetem Schlüssel. Die abgefragte Adresse steht dort nicht, weil wir sie nicht speichern. Genau dafür ist die selbst gesetzte Kennung gedacht: Schicken Sie Ihre Datensatznummer als X-Request-ID mit, dann verbinden Sie den Verlauf mit Ihren eigenen Daten, ohne dass uns die Adresse bekannt wird.
Bitte übermitteln Sie in diesem Feld keine personenbezogenen Daten, also keine Namen und keine Kundendaten. Eine interne Nummer erfüllt denselben Zweck.
Stabilität und Versionierung
Der Pfad enthält die Version. Innerhalb von v1 nehmen wir nur ergänzende Änderungen vor, etwa zusätzliche Felder. Ihre Auswertung sollte unbekannte Felder daher ignorieren statt an ihnen zu scheitern. Eine Änderung, die bestehende Felder entfernt oder umdeutet, erscheint als v2.
Nutzungsrechte, Datenschutz und Grenzen der Aussage
Der Schlüssel erlaubt genau das, was die AGB sonst untersagen, nämlich die systematische Abfrage. Erlaubt ist die Nutzung der Ergebnisse in Ihren eigenen Prozessen und gegenüber Ihrer eigenen Kundschaft. Untersagt bleiben der Aufbau eines eigenen oder konkurrierenden Datenbestands aus den Antworten, die Weitergabe als eigenes Produkt und der Weiterverkauf einzelner Auskünfte an Verbraucher. Die Quellenangaben der Datenlieferanten sind mitzuführen, siehe Datenquellen.
Wenn Sie Adressen Ihrer eigenen Kundschaft an die Schnittstelle senden, verarbeiten wir diese in Ihrem Auftrag. Dafür schließen wir vor der Freischaltung einen Vertrag zur Auftragsverarbeitung nach Art. 28 DSGVO. Sprechen Sie uns darauf an, wir halten ihn bereit.
Die Ergebnisse sind eine Information und kein Gutachten. Das gilt über die Schnittstelle genauso wie auf der Website, siehe Methodik & Grenzen der Daten.
Passt das zu Ihrem Bestand?
Schreiben Sie uns kurz, worum es geht. Wir schalten den Zugang frei, schicken den Vertrag zur Auftragsverarbeitung, und Sie können am selben Tag gegen den Testschlüssel entwickeln.
Sie suchen keine Schnittstelle, sondern einen Zugang für Ihr Team? Im Office-Paket arbeitet Ihr Team mit einem gemeinsamen Konto, siehe Preise & Pakete.