{"openapi":"3.1.0","info":{"title":"ImmoFluss REST API","version":"1.0.0","description":"Öffentliche REST-API von ImmoFluss für Nutzer-Workflows (Skripte, Automatisierungen, eigene Integrationen). Teilt sich die Business-Logik mit dem MCP-Server. Authentifizierung per persönlichem API-Key (`Authorization: Bearer imf_sk_…`) oder OAuth-Access-Token (`imf_at_…`). Schreib-Endpunkte erfordern ein Pro-/Ultra-Abo. Tageskontingent geteilt mit MCP.","contact":{"name":"ImmoFluss","url":"https://immo-fluss.de"}},"servers":[{"url":"https://app.immo-fluss.de/api/v1"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","description":"Persönlicher API-Key (imf_sk_…) im Authorization-Header."},"BearerAuth":{"type":"http","scheme":"bearer","description":"OAuth-2.1-Access-Token des MCP-Servers (imf_at_…)."}}},"paths":{"/properties":{"get":{"summary":"Immobilien auflisten","operationId":"get_properties","tags":["Lesen"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}},"post":{"summary":"Immobilie anlegen","operationId":"post_properties","tags":["Schreiben"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":150},"adresse":{"type":"string","maxLength":300},"typ":{"type":"string","maxLength":50},"kaufpreis":{"type":"number","minimum":0},"qm":{"type":"number","exclusiveMinimum":0},"baujahr":{"type":"integer","minimum":1500,"maximum":2100},"kaufdatum":{"type":"string","maxLength":10},"geschaetzteKaltmiete":{"type":"number","minimum":0},"notizen":{"type":"string","maxLength":1000}},"required":["name"]}}}},"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/tenants":{"get":{"summary":"Mieter auflisten","operationId":"get_tenants","tags":["Lesen"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}},"post":{"summary":"Mieter anlegen","operationId":"post_tenants","tags":["Schreiben"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":150},"immobilieId":{"type":"string","maxLength":100},"kaltmiete":{"type":"number","minimum":0},"nebenkosten":{"type":"number","minimum":0},"kaution":{"type":"number","minimum":0},"mietbeginn":{"type":"string","maxLength":10},"mietende":{"type":"string","maxLength":10},"email":{"type":"string","maxLength":150},"telefon":{"type":"string","maxLength":50},"notizen":{"type":"string","maxLength":500}},"required":["name","immobilieId","kaltmiete"]}}}},"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/loans":{"get":{"summary":"Kredite auflisten","operationId":"get_loans","tags":["Lesen"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}},"post":{"summary":"Kredit anlegen","operationId":"post_loans","tags":["Schreiben"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":150},"bank":{"type":"string","maxLength":150},"ursprungsBetrag":{"type":"number","exclusiveMinimum":0},"jahreszins":{"type":"number","minimum":0,"maximum":25},"monatlicheRate":{"type":"number","minimum":0},"restschuld":{"type":"number","minimum":0},"startdatum":{"type":"string","maxLength":10},"zinsbindungJahre":{"type":"integer","minimum":1,"maximum":40},"immobilieId":{"type":"string","maxLength":100}},"required":["name","bank","ursprungsBetrag","jahreszins","monatlicheRate"]}}}},"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/expenses":{"get":{"summary":"Ausgaben durchsuchen","operationId":"get_expenses","tags":["Lesen"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string","maxLength":100}},{"name":"category","in":"query","required":false,"schema":{"type":"string","maxLength":100}},{"name":"propertyId","in":"query","required":false,"schema":{"type":"string","maxLength":100}},{"name":"year","in":"query","required":false,"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"amount","in":"query","required":false,"schema":{"type":"number"}},{"name":"amountTolerance","in":"query","required":false,"schema":{"type":"number","minimum":0}}],"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}},"post":{"summary":"Ausgabe anlegen","operationId":"post_expenses","tags":["Schreiben"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","maxLength":150},"amount":{"type":"number","exclusiveMinimum":0},"category":{"type":"string","maxLength":100},"paymentDate":{"type":"string","maxLength":10},"propertyId":{"type":"string","maxLength":100},"paymentMethod":{"type":"string","maxLength":50},"notes":{"type":"string","maxLength":500}},"required":["title","amount","category"]}}}},"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/expenses/breakdown":{"get":{"summary":"Ausgaben-Auswertung","operationId":"get_expenses_breakdown","tags":["Lesen"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"propertyId","in":"query","required":false,"schema":{"type":"string","maxLength":100}}],"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/pending-receipts":{"get":{"summary":"Offene Belege durchsuchen","operationId":"get_pending_receipts","tags":["Lesen"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string","maxLength":100}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","processing","processed","error"]}},{"name":"includeUrls","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/portfolio":{"get":{"summary":"Portfolio-Übersicht","operationId":"get_portfolio","tags":["Lesen"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/fahrten":{"get":{"summary":"Fahrten auflisten","operationId":"get_fahrten","tags":["Lesen"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"propertyId","in":"query","required":false,"schema":{"type":"string","maxLength":100}},{"name":"category","in":"query","required":false,"schema":{"type":"string","maxLength":100}}],"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}},"post":{"summary":"Fahrt anlegen","operationId":"post_fahrten","tags":["Schreiben"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"startAddress":{"type":"string","maxLength":250},"destinationAddress":{"type":"string","maxLength":250},"category":{"type":"string","maxLength":100},"title":{"type":"string","maxLength":150},"reason":{"type":"string","maxLength":500},"date":{"type":"string","maxLength":10},"dates":{"maxItems":62,"type":"array","items":{"type":"string","maxLength":10}},"numberOfRoundTrips":{"type":"integer","minimum":1,"maximum":365},"oneWayDistanceKm":{"type":"number","exclusiveMinimum":0},"immobilieId":{"type":"string","maxLength":100}},"required":["startAddress","destinationAddress","category"]}}}},"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/bauzinsen":{"get":{"summary":"Aktuelle Bauzinsen","operationId":"get_bauzinsen","tags":["Lesen"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/expenses/{id}":{"patch":{"summary":"Ausgabe bearbeiten","operationId":"patch_expenses_id","tags":["Schreiben"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"ID (expenseId)","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","maxLength":150},"amount":{"type":"number","exclusiveMinimum":0},"category":{"type":"string","maxLength":100},"paymentDate":{"type":"string","maxLength":10},"propertyId":{"type":"string","maxLength":100},"paymentMethod":{"type":"string","maxLength":50},"notes":{"type":"string","maxLength":500}},"required":[]}}}},"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}},"delete":{"summary":"Ausgabe löschen","operationId":"delete_expenses_id","tags":["Schreiben"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"ID (expenseId)","schema":{"type":"string"}}],"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/fahrten/{id}":{"delete":{"summary":"Fahrt löschen","operationId":"delete_fahrten_id","tags":["Schreiben"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"ID (fahrtId)","schema":{"type":"string"}}],"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/tenants/{id}":{"patch":{"summary":"Mieter bearbeiten","operationId":"patch_tenants_id","tags":["Schreiben"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"ID (tenantId)","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":150},"email":{"type":"string","maxLength":150},"telefon":{"type":"string","maxLength":50},"kaltmiete":{"type":"number","minimum":0},"nebenkosten":{"type":"number","minimum":0},"kaution":{"type":"number","minimum":0},"mietbeginn":{"type":"string","maxLength":10},"mietende":{"type":"string","maxLength":10},"immobilieId":{"type":"string","maxLength":100},"notizen":{"type":"string","maxLength":500}},"required":[]}}}},"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/loans/{id}":{"patch":{"summary":"Kredit bearbeiten","operationId":"patch_loans_id","tags":["Schreiben"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"ID (loanId)","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":150},"bank":{"type":"string","maxLength":150},"jahreszins":{"type":"number","minimum":0,"maximum":25},"monatlicheRate":{"type":"number","minimum":0},"restschuld":{"type":"number","minimum":0},"startdatum":{"type":"string","maxLength":10},"zinsbindungJahre":{"type":"integer","minimum":1,"maximum":40},"immobilieId":{"type":"string","maxLength":100}},"required":[]}}}},"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}},"/properties/{id}":{"patch":{"summary":"Immobilie bearbeiten","operationId":"patch_properties_id","tags":["Schreiben"],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"ID (propertyId)","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":150},"kaufpreis":{"type":"number","exclusiveMinimum":0},"qm":{"type":"number","exclusiveMinimum":0},"baujahr":{"type":"integer","minimum":1500,"maximum":2100},"manuellGeschaetzterWert":{"type":"number","exclusiveMinimum":0},"notizen":{"type":"string","maxLength":1000}},"required":[]}}}},"responses":{"200":{"description":"Erfolg","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Kein/ungültiges Token"},"403":{"description":"Fehlender Scope oder Tier (Pro/Ultra) erforderlich"},"422":{"description":"Validierungsfehler"},"429":{"description":"Tageskontingent erreicht"}}}}}}