02 Schnellstart
Basis-URL:
https://app.dealpilot.immo/api/v1
Key unter Einstellungen → Account & Sicherheit → DealPilot API (einmalig gezeigt, dpk_live_…).
# Objekte auflisten (Summaries, ?limit bis 500, ?offset)
curl -H "X-API-Key: dpk_live_KEY" …/api/v1/objects?limit=100&offset=0
# Objekt anlegen
curl -X POST -H "X-API-Key: dpk_live_KEY" -H "Content-Type: application/json" \
-d '{"data":{"plz":"32609","ort":"Hüllhorst","str":"Musterweg 4","wfl":96,"nkm":820,"ek":40000}}' \
…/api/v1/objects
# Objekt ändern (nur data-Felder senden, die sich ändern sollen ist NICHT möglich — data wird komplett ersetzt)
curl -X PUT -H "X-API-Key: dpk_live_KEY" -H "Content-Type: application/json" \
-d '{"data":{ …kompletter Datensatz… }}' …/api/v1/objects/OBJEKT-ID
04 Endpunkte
GET/objectsListe als Summaries: Adresse, zuletzt gespeicherter KPI-Stand, Vorschaubild. ?limit (max 500) & ?offset
GET/objects/:idVolles Objekt: komplettes data, Fotos, KI-Analyse, Version
POST/objectsAnlegen — zählt gegen das Objektlimit deines Plans
PUT/objects/:idÄndern — data wird komplett ersetzt; optional expectedVersion gegen konkurrierende Änderungen
DEL/objects/:idEndgültig löschen (kein Papierkorb)
GET/objects/portfolio-exportDas ganze Portfolio in einem Abruf — alle Objekte mit vollem data, für Auswertungen und Sicherungen
Rechenkerne — auf Zuruf rechnen
Hier wird gerechnet, nicht nur gelesen. Diese beiden Endpunkte führen dieselben Kerne aus wie die App selbst — wörtlich dieselben Dateien, in das Backend gespiegelt. Eine zweite Rechnung gibt es nicht, damit Schnittstelle und App nie unterschiedlich urteilen.
POST/rechenkerne/rndRestnutzungsdauer nach Anlage 2 ImmoWertV, sechs Verfahren. Eingabe { objekt: … } (ein DealPilot-Datensatz) oder { eingabe: … } (direkt). Optional { afa: { gebaeudeanteil, grenzsteuersatz, standardAfaSatz } } — dann kommt der Steuervorteil mit. Zurück kommen final_rnd, final_source, alle Einzelverfahren und eingabe_verwendet
POST/rechenkerne/verkehrswertWertermittlung nach ImmoWertV: Boden-, Ertrags- und Sachwert, mit wert_stufe 1–3. Rechnet im Marktbericht-Dienst, weil dort das Register der Gutachterausschüsse liegt
GET/rechenkerne/Beschreibt sich selbst: welche Kerne es gibt, wo sie rechnen, welche Eingabe sie erwarten
Zwei Dinge, die die Antwort mitliefert — und die wichtiger sind als die Zahl:
eingabe_verwendet zeigt, womit wirklich gerechnet wurde (ein Feld, das nicht ankommt, wird sonst still durch einen Standardwert ersetzt), und
pruefung.uebernahme_gesperrt sagt, wann das Ergebnis nicht ohne Sachverständigenprüfung übernommen werden darf. Wer nur final_rnd ausliest, übersieht beides.
Marktbericht
GET/marktbericht/objectsObjekte mit Marktbericht-Bezug
GET/marktbericht/reports/oneEinen erzeugten Bericht abrufen
GET/marktbericht/objects/historyVerlauf der Berichte zu einem Objekt
Antwort-Beispiel GET /objects/:id (gekürzt):
{
"id": "9b2f…",
"version": 7,
"data": { "plz": "32609", "ort": "Hüllhorst", "wfl": 96, "nkm": 820, "ek": 40000, … },
"photos": ["data:image/jpeg;base64,…"],
"aiAnalysis": "…",
"updated_at": "2026-07-01T09:12:33Z"
}
05 Datenmodell — Feldreferenz
Voll durchlässig: data akzeptiert beliebige Schlüssel und gibt sie 1:1 zurück. Die App liest die unten stehenden Feld-IDs — wer sie beim Anlegen befüllt, sieht die Werte direkt in allen Modulen und Berechnungen.
Der schnellste Weg zur vollständigen Liste: Lege ein Referenzobjekt in der App an und fülle die Tabs aus, die du brauchst — ein GET /objects/:id zeigt dir anschließend jede Feld-ID deines Datensatzes 1:1 im data-Objekt. So ist deine Integration immer synchron zur App, auch wenn neue Felder dazukommen.
Objekt & Adresse
| Feld | Bedeutung |
|---|
plz | Postleitzahl |
ort | Ort |
str | Straße |
hnr | Hausnummer |
objart | Objektart (z. B. ETW, MFH) |
wfl | Wohnfläche in m² |
baujahr | Baujahr |
kaufdat | Kaufdatum |
wirtschaftlicher_uebergang | Wirtschaftlicher Übergang (Datum — Start für AfA/Mieten im Jahr 1) |
kuerzel | Objekt-Kürzel (Anzeige) |
ausst | Ausstattungsniveau |
halter | Halter/Mandant (privat oder Gesellschaft) |
These, Lage & Bewertung
| Feld | Bedeutung |
|---|
thesis | Investitionsthese (Freitext) |
risiken | Bekannte Risiken (Freitext) |
notizen | Notizen |
bankval | Bankbewertung in € |
svwert | Sachverständigenwert in € |
makrolage | Makrolage — Selbsteinschätzung |
mikrolage | Mikrolage — Selbsteinschätzung |
vermstand | Vermietungsstand |
exitstr | Exit-Strategie |
Investition & Erwerbskosten
| Feld | Bedeutung |
|---|
kp | Kaufpreis in € |
makler_p | Maklerprovision in % |
notar_p | Notar in % |
gba_p | Grundbuchamt in % |
gest_p | Grunderwerbsteuer in % |
ji_p | Weitere Erwerbskosten in % |
san | Sanierungskosten in € |
moebl | Möblierung in € |
inv_kueche | Inventar: Küche in € |
inv_moebel | Inventar: Möbel in € |
inv_geraete | Inventar: Geräte in € |
inv_pv | Inventar: Photovoltaik in € |
inv_stellplatz | Inventar: Stellplatz in € |
inv_sonst | Inventar: Sonstiges in € |
brw | Bodenrichtwert in €/m² |
mea | Miteigentumsanteil |
gsfl | Grundstücksfläche in m² |
Annahmen & Projektion
| Feld | Bedeutung |
|---|
mietstg | Mietsteigerung in %/Jahr |
wertstg | Wertsteigerung in %/Jahr |
kostenstg | Kostensteigerung in %/Jahr |
leerstand | Leerstand in % |
btj | Betrachtungszeitraum in Jahren |
exit_bmy | Exit-Bruttomietrendite in % |
Miete & Steuer
| Feld | Bedeutung |
|---|
nkm | Nettokaltmiete in €/Monat |
ze | Zusatzeinnahmen in €/Monat (Gesamt-Kaltmiete = nkm + ze) |
umlagef | Umlagefähige Kosten in €/Monat |
afa_satz | AfA-Satz in % |
geb_ant | Gebäudeanteil in % |
zve | Zu versteuerndes Einkommen in € |
grenz | Grenzsteuersatz in % |
Finanzierung — Darlehen 1
| Feld | Bedeutung |
|---|
ek | Eigenkapital in € |
d1 | Darlehenssumme in € |
d1z | Sollzins in % |
d1t | Anfängliche Tilgung in % |
d1_bindj | Zinsbindung in Jahren |
d1_type | Darlehenstyp |
d1_auszahl | Auszahlungsdatum (Start der Finanzierung in Jahr 1) |
d1_vertrag | Vertragsnummer |
anschl_z | Anschluss-Zins in % |
anschl_t | Anschluss-Tilgung in % |
anschl_bj | Anschluss: Bindung in Jahren |
bank_inst | Bank / Institut |
Finanzierung — Darlehen 2 & Bauspar
| Feld | Bedeutung |
|---|
d2 | Darlehen 2: Summe in € |
d2z | D2: Sollzins in % |
d2t | D2: Tilgung in % |
d2_bindj | D2: Zinsbindung in Jahren |
d2_inst | D2: Institut |
d2_type | D2: Typ (z. B. Tilgungsaussetzung) |
d2_auszahl | D2: Auszahlungsdatum |
d2_az | D2: Anschluss-Zins in % |
d2_at | D2: Anschluss-Tilgung in % |
bspar_inst | Bauspar: Institut |
bspar_vertrag | Bauspar: Vertragsnummer |
bspar_sum | Bauspar: Summe in € |
bspar_rate | Bauspar: Sparrate in €/Monat |
bspar_zuteil | Bauspar: Zuteilungsdatum |
bspar_zins | Bauspar: Guthabenzins in % |
bspar_quote_min | Bauspar: Mindest-Sparquote in % |
bspar_dar_z | Bauspar-Darlehen: Zins in % |
bspar_dar_t | Bauspar-Darlehen: Tilgung in % |
Bewirtschaftung
| Feld | Bedeutung |
|---|
hg_ul | Hausgeld umlagefähig in €/Monat |
hg_nul | Hausgeld nicht umlagefähig in €/Monat |
grundsteuer | Grundsteuer |
ul_sonst | Sonstige umlagefähige Kosten |
weg_r | WEG-Rücklage |
eigen_r | Eigene Rücklage |
mietausfall | Mietausfallwagnis |
nul_sonst | Sonstige nicht umlagefähige Kosten |
bwk_ul_pct | Pauschale umlagefähig in % |
bwk_nul_pct | Pauschale nicht umlagefähig in % |
bwk_kp_pct | Pauschale vom Kaufpreis in % |
Verhandlung & KI-Texte
| Feld | Bedeutung |
|---|
kp1 … kp4 | Kaufpreis-Szenarien (Werte in €) |
kp1l … kp4l | Labels der Szenarien |
ai_strat | KI-Text: Strategie |
ai_verk | KI-Text: Verkäufer/Verhandlung |
ai_risk | KI-Text: Risiko |
ai_markt | KI-Text: Markt |
Mietentwicklung (Detail-Modus)
| Feld | Bedeutung |
|---|
mietspiegel | Mietspiegel-Referenz in €/m² |
me_modus | Modus der Mietentwicklung (einfach / detailliert) |
me_soll | Sollmiete in €/Monat |
me_anz | Anzahl Anpassungsschritte |
me_int | Intervall zwischen Schritten in Jahren |
me_pct | Anpassung je Schritt in % |
Deal Score 2.0 — Zusatzangaben
| Feld | Bedeutung |
|---|
ds2_zustand | Objektzustand |
ds2_energie | Energieklasse |
ds2_mietausfall | Mietausfall-Einschätzung |
ds2_marktmiete | Marktmiete in €/m² |
ds2_bevoelkerung | Bevölkerungsentwicklung am Standort |
ds2_nachfrage | Nachfrage-Einschätzung |
ds2_marktfaktor | Marktfaktor |
ds2_wertsteigerung | Wertsteigerungs-Erwartung |
ds2_entwicklung | Entwicklungspotenzial |
Qualität, Zustand & Objektdetails
| Feld | Bedeutung |
|---|
rate_kueche / rate_bad / rate_boden / rate_fenster | Sterne-Bewertung Küche / Bad / Boden / Fenster |
qual_kueche / qual_bad / qual_boden / qual_fenster | Qualitätsstufe Küche / Bad / Boden / Fenster |
zimmer | Zimmeranzahl |
bad_anz | Anzahl Bäder |
etage | Etage |
etagen_ges | Etagen gesamt |
modernis | Modernisierungsjahr |
garagen | Garagenplätze |
stellpl_aussen | Außenstellplätze |
balkon_flae | Balkon-/Terrassenfläche in m² |
einheiten | Anzahl Einheiten (bei Mehrfamilienhäusern) |
Ausstattung für AVM-Bewertung
| Feld | Bedeutung |
|---|
eq_heating | Heizung |
eq_windows | Fenster |
eq_floor | Bodenbeläge |
eq_bath | Bad |
eq_guest_wc | Gäste-WC |
eq_store_room | Abstellraum |
eq_walls | Wände |
eq_roof | Dach |
eq_elevator | Aufzug |
Werte = Ausstattungs-Stufen, wie sie die App in den Ausstattungsdetails anbietet — am einfachsten per Referenzobjekt ablesen.
Steuerliche Übernahme
| Feld | Bedeutung |
|---|
san_tax_active | Sanierung als Werbungskosten ansetzen (Checkbox) |
san_tax_years | Verteilung der Sanierung in Jahren |
moebl_tax_active | Möblierung/Inventar steuerlich ansetzen (Checkbox) |
moebl_tax_years | Verteilung des Inventars in Jahren |
Erwerb & Inserat
| Feld | Bedeutung |
|---|
erwerbsart | Erwerbsart |
anbietertyp | Anbietertyp (privat / Makler / Bauträger …) |
Mandant & Überführung
| Feld | Bedeutung |
|---|
halter_seit | Halter seit (Datum) |
obj_herkunft | Herkunft des Objekts (Kauf / Überführung) |
verkehrswert_ueberf | Verkehrswert bei Überführung in € |
ueberf_preis | Überführungspreis in € |
gesellschafterdarlehen | Gesellschafterdarlehen in € |
ueberf_restschuld | Übernommene Restschuld in € |
ueberf_rest_zins | Zins der übernommenen Restschuld in % |
ueberf_ende | Privat-Phase: Enddatum |
App-interne Felder (nicht setzen)
Felder mit Unterstrich-Präfix verwaltet die App selbst — z. B. _thumb (Vorschaubild), _avm_state, _mb_state, _immometrica_id, _ueberf_link sowie Caches wie ai_lage_cache und brw_ki_result. Beim Schreiben nicht erfinden und nicht leeren.
Wichtig beim PUT: data wird komplett ersetzt. Deshalb immer Read-Modify-Write: erst GET /objects/:id, die gewünschten Felder im zurückgelieferten data ändern, dann das komplette Objekt zurücksenden — sonst gehen App-interne Felder und Caches verloren.
Top-Level (neben data)
| Feld | Bedeutung |
photos[] | Objektfotos als Base64-Data-URLs (App verkleinert auf max. 1600 px + Thumbnail) |
aiAnalysis | Text der letzten KI-Analyse |
expectedVersion | Optionale Versionsnummer beim PUT — schützt gegen konkurrierende Änderungen |
Die Liste (GET /objects) liefert zusätzlich den zuletzt in der App gespeicherten KPI-Stand je Objekt (u. a. Bruttomietrendite, Cashflow, DSCR, LTV) — praktisch fürs eigene Reporting, ohne das volle Objekt zu laden.