Startseite › Immobilien-Einrichtung › Ausgabentypen

8 Ausgabentypen

Deklariere, welche Ausgabentypen im Objekt existieren und wie sie berechnet werden

Was sind Ausgabentypen?

Ausgabentypen sind eine Deklaration aller Kosten, die mit einem Objekt verbunden sind: was bezahlt werden muss und wie jede Zahlung berechnet wird. Dies ist die Konfigurationsvorlage, nicht die tatsächlichen Belastungen oder Zahlungen. Ausgabentypen gehören zum Objekt selbst, unabhängig davon, ob es vermietet oder leer ist.

Je genauer die Ausgaben konfiguriert sind, desto besser werden Ihre Mietverträge und desto klarer die finanzielle Beziehung zwischen Vermieter und Mieter.

Arbeitsablauf: Wie es funktioniert

Schritt 1: Erstellen Sie Ausgabentypen (Vorlagen)

Zuerst definieren Sie wiederkehrende Ausgabentypen (Vorlagen) wie "Strom", "Wasser", "Heizung". Dies sind die Kategorien, die Monat für Monat verwendet werden.

Beispiel: Erstellen Sie einen Ausgabentyp "Strom" mit Abrechnungszeitraum "Monatlich", Verbrauchstyp "Nach Zählern", Stückpreis 2,50 EUR/kWh.

↓

Schritt 2: Erstellen Sie Gebühren (tatsächliche Rechnungen)

Sobald Ausgabentypen konfiguriert sind, erstellen Sie Gebühren für bestimmte Zeiträume. Eine Gebühr stellt den tatsächlichen Verbrauch für einen bestimmten Monat dar.

Beispiel: Erstellen Sie für den Ausgabentyp "Strom" eine Gebühr für Januar 2026: Verbrauch 350 kWh × 2,50 EUR = 875 EUR.

Warum diese Trennung?

Ausgabentypen definieren WIE Gebühren berechnet werden (Preis, Zeitraum, Formel). Gebühren sind die ERGEBNISSE - tatsächliche Rechnungen, die an Mieter gesendet werden. Diese Trennung ermöglicht es Ihnen, Ausgabentyp-Konfigurationen jeden Monat wiederzuverwenden, ohne alle Details erneut einzugeben.

Verbrauchsarten

Fest

Ein bekannter, fester Betrag pro Abrechnungszeitraum. Der Preis hängt nicht vom Verbrauch oder Zählerständen ab.

Beispiel: Internet, Hausgeld, Sicherheitsdienst

Nach Zählerständen

Berechnet aus Zählerständen: Verbrauch (aktueller minus vorheriger Stand) multipliziert mit dem Einheitspreis. Die Ausgabe muss mit einem oder mehreren Zählern verknüpft sein.

Beispiel: Strom, Kaltwasser, Gas

Nach Aufwand (tatsächlich)

Der monatliche Betrag ist im Voraus unbekannt. Sie geben den tatsächlichen Betrag jede Periode nach Erhalt der Rechnung vom Dienstleister ein.

Beispiel: Heizung, Gebäudewartung, Müllabfuhr

Pauschale

Ein fester monatlicher Betrag, unabhängig vom tatsächlichen Verbrauch. Der Mieter zahlt jeden Monat den gleichen Betrag, unabhängig davon, wie viel der Dienstleistung genutzt wurde.

Beispiel: Internet 15 €/Monat, unabhängig vom Traffic-Volumen.

Verbindung zu Zählern

Zählerbasierte Ausgaben sind mit bestimmten an der Immobilie installierten Zählern verknüpft. Bei der Erstellung einer Gebühr nimmt das System aktuelle und vorherige Stände, berechnet den Verbrauch und multipliziert mit dem konfigurierten Einheitspreis. Mehrzonen-Tarife (Tag/Nacht oder Spitze/Halbspitze/Nacht) haben separate Preise pro Zone, und das System berechnet jede Zone unabhängig.

Abrechnungszeiträume

Jede Ausgabe hat einen Abrechnungszeitraum, der bestimmt, wie oft Gebühren erstellt werden. Das System kann Gebühren automatisch nach dem konfigurierten Zeitplan generieren.

Manuell Gebühren werden manuell vom Benutzer erstellt
Monatlich Eine Gebühr jeden Monat am konfigurierten Tag
Vierteljährlich Eine Gebühr alle 3 Monate
Halbjährlich Eine Gebühr alle 6 Monate
Jährlich Eine Gebühr pro Jahr
Abrechnungstag Tag des Monats (1-28), an dem die Gebühr erstellt wird. Standard: 15.
Zahlungstage Anzahl der Tage für die Zahlung nach Erstellung der Gebühr. Standard: 3.
Erinnerungstage Anzahl der Tage vor der Frist, an denen eine Erinnerung gesendet wird. Standard: 3.

Manuelle Erstellung von Gebühren

Für Ausgaben mit Verbrauchstyp "Nach Aufwand" oder Berechnungszeitraum "Manuell" können Sie Gebühren manuell über die Seite Gebühren erstellen.

Wann manuelle Gebühren verwendet werden

  • Für "Nach Aufwand"-Ausgaben, bei denen der tatsächliche Betrag in jeder Periode variiert
  • Für Ausgaben mit "Manuell"-Berechnungszeitraum, die nicht automatisch generiert werden sollen

Wie erstellen

  1. Gehen Sie zu Immobilien → [Immobilie] → Gebühren
  2. Klicken Sie auf die blaue Schaltfläche "Gebühr hinzufügen" (erscheint nur, wenn Sie Ausgaben haben, die manuelle Gebühren erfordern)
  3. Wählen Sie die Ausgabe aus dem modalen Fenster (zeigt Ausgabentyp, Anbieter und Berechnungsmethode)
  4. Füllen Sie das Gebührenformular aus: Datum, Zeitraum, Betrag und Notizen

Das Formular zeigt Ausgabeninformationen einschließlich Anbieter und Notizen aus der Ausgabenkonfiguration.

Mehrwährung

Jede Ausgabe kann ihre eigene Währung verwenden. Zum Beispiel kann eine Immobilie die Miete in USD, Strom in der Landeswährung und Internet in EUR haben. Die Währung wird bei der Konfiguration der Ausgabe festgelegt und gilt für alle daraus generierten Gebühren.

Dienstleister

Jede Ausgabe kann mit einem Dienstleister verknüpft werden — der Partei, die die Zahlung erhält. Das System unterstützt vier Arten von Anbietern:

Dienstleister

Unternehmen aus dem globalen Verzeichnis — Versorgungsunternehmen, Verwaltungsgesellschaften, Internetanbieter. Suche nach Name oder Steuernummer.

Eigener Vertragspartner

Ihr persönliches Verzeichnis von Vertragspartnern mit vollständigen Kontakt- und Bankdaten — Name, Steuernummer, IBAN, Adresse.

Systembenutzer

Bestehende Plattformbenutzer, die Zahlungen empfangen können — Wartungspersonal, Immobilienverwalter. Verknüpfung per E-Mail.

Partnereinladung

Per E-Mail eingeladene Partner, die noch nicht im System registriert sind. Eine automatische E-Mail-Einladung wird gesendet.

Abrechnungsdokumente

Zu jeder Abrechnung können Dokumente angehängt werden — Rechnungen, Quittungen, Zahlungsbestätigungen oder andere dateibezogene Unterlagen. Dokumente werden in sicheren S3-Speicher hochgeladen und über HMAC-signierte URLs bereitgestellt. Upload verwendet das multipart/form-data Format.

file Binärdatei zum Hochladen (PDF, JPG, PNG usw.). Pflichtfeld.
document_type_id Dokumenttyp-ID (z.B. 1 = offizielles Dokument, 2 = Quittung). Pflichtfeld.
comment Optionaler Textkommentar zur Beschreibung des Dokuments.

Dokumente werden an bestimmte Abrechnungen angehängt (nicht an die Ausgabe selbst). Erstellen oder aktualisieren Sie zuerst eine Abrechnung, dann laden Sie Dokumente dazu hoch. Dateigrößen- und Typbeschränkungen sind pro Dokumenttyp konfiguriert.

Warum genaue Konfiguration wichtig ist

Die Ausgabenkonfiguration ist die Grundlage aller Finanzoperationen. Genau deklarierte Ausgaben führen zu korrekten Mietverträgen, präzisen Gebührenberechnungen, rechtzeitigen Zahlungserinnerungen und transparenten Finanzberichten. Wenn ein Mieter einen Vertrag unterzeichnet, sieht er alle mit der Immobilie verbundenen Kosten.

Was dieser Schritt NICHT abdeckt
Dieser Schritt behandelt nur die Ausgabenkonfiguration — die Deklaration, welche Kosten existieren. Die tatsächliche Gebührenerstellung, Zahlungsabwicklung und Quittungsgenerierung sind separate Vorgänge, die nach der Konfiguration der Ausgaben und der Aktivierung eines Mietvertrags stattfinden.

Wie man Ausgaben hinzufügt

Ausgaben können über die Weboberfläche oder über die API hinzugefügt werden. Navigieren Sie in der Weboberfläche zu einer Immobilie und öffnen Sie den Tab „Ausgaben".

Immobilie → Tab Ausgaben → Schaltfläche Ausgabe hinzufügen

Ausführliche Dokumentation einschließlich API-Endpunkte und Validierungsregeln finden Sie unter Immobilienausgaben in der Bibliothek.

Ausgabenfelder

Beim Erstellen einer Ausgabe sind folgende Felder erforderlich:

expense_type_id Art der Ausgabe (Strom, Gas, Internet usw.). IDs abrufen über GET /api/expense-types
calculation_period MANUAL, MONTHLY, QUARTERLY, SEMI_ANNUAL oder ANNUAL
unit_price Preis pro Einheit als String (z.B. "4.3200"). Bei festen Ausgaben ist dies der Gesamtbetrag
measurement_unit_id Maßeinheits-ID (kWh, m3, Stück usw.)
currency_id Währungs-ID für diese Ausgabe
start_date Startdatum im Format YYYY-MM-DD

Optionale Felder

fixed_consumption Fester Verbrauch für Ausgaben mit festem Typ (z.B. "1.0000" für einen Pauschalservice)
end_date Enddatum (optional). Nach diesem Datum werden keine Gebühren mehr erstellt
counter_ids Array von Zähler-IDs zur Verknüpfung (für zählerbasierte Ausgaben). Zähler müssen zur selben Immobilie gehören
zone_prices Zonenpreis-Objekt für Mehrzonen-Tarife: {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"}
service_provider_id Dienstleister-ID (vom expense-providers Endpunkt)
account_number Kontonummer beim Dienstleister
charge_day Tag des Monats (1-28) der Gebührenerstellung. Standard: 15
payment_days Zahlungsfrist in Tagen nach Gebühr. Standard: 3
reminder_days Tage vor Frist für Erinnerung. Standard: 3
notes Freitextnotizen (nur Text, HTML wird bereinigt)

Für Entwickler: REST API

Alle Ausgabenoperationen sind über die REST API verfügbar. Authentifizierung per Bearer-Token erforderlich.

GET Ausgaben auflisten

▶

Gibt alle Ausgaben einer Immobilie zurück. Verwenden Sie active_only=true, um nur aktive Ausgaben zu filtern.

GET /api/v1/properties/{propertyId}/expenses

Nur aktive filtern:

GET /api/v1/properties/{propertyId}/expenses?active_only=true

Antwort (200 OK):

{ "expenses": [ { "id": 1, "expense_type": {"id": 3, "code": "ELECTRICITY", "name_key": "expense_type.electricity"}, "calculation_period": "MONTHLY", "unit_price": "4.3200", "measurement_unit": {"id": 1, "symbol": "kWh", "name_key": "unit.kwh"}, "fixed_consumption": null, "currency": {"id": 1, "code": "UAH", "symbol": "\u20b4"}, "start_date": "2026-01-01", "end_date": null, "service_provider": {"id": 5, "name": "Energozbut"}, "account_number": "0123456789", "is_active": true, "has_charges": true, "can_delete": false, "notes": null, "charge_day": 15, "payment_days": 3, "reminder_days": 3, "counters": [ {"id": 4, "serial_number": "NIK-2281-073915", "tariff_type": "THREE_ZONE"} ], "zone_prices": {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"}, "created_at": "2026-01-01T00:00:00+00:00", "updated_at": "2026-02-15T10:30:00+00:00" }, { "id": 2, "expense_type": {"id": 15, "code": "INTERNET", "name_key": "expense_type.internet"}, "calculation_period": "MONTHLY", "unit_price": "500.0000", "measurement_unit": {"id": 5, "symbol": "unit", "name_key": "unit.unit"}, "fixed_consumption": "1.0000", "currency": {"id": 1, "code": "UAH", "symbol": "\u20b4"}, "start_date": "2026-01-01", "end_date": null, "service_provider": null, "account_number": null, "is_active": true, "has_charges": false, "can_delete": true, "notes": null, "charge_day": 1, "payment_days": 5, "reminder_days": 2, "created_at": "2026-01-01T00:00:00+00:00", "updated_at": "2026-01-01T00:00:00+00:00" } ], "total": 2 }

POST Ausgabe erstellen

▶

Erstellt eine neue Ausgabe für die Immobilie. Pro Immobilie ist nur eine Ausgabe pro Ausgabentyp erlaubt.

POST /api/v1/properties/{propertyId}/expenses

Header:

Authorization: Bearer {token} Content-Type: application/json

Feste Ausgabe (z.B. Internet):

{ "expense_type_id": 15, "calculation_period": "MONTHLY", "unit_price": "500.0000", "measurement_unit_id": 5, "fixed_consumption": "1.0000", "currency_id": 1, "start_date": "2026-01-01", "charge_day": 1, "payment_days": 5, "reminder_days": 2, "notes": "Fiber 100 Mbps" }

Zählerbasierte Ausgabe mit Zonenpreisen (z.B. Strom):

{ "expense_type_id": 3, "calculation_period": "MONTHLY", "unit_price": "4.3200", "measurement_unit_id": 1, "currency_id": 1, "start_date": "2026-01-01", "counter_ids": [4], "zone_prices": { "PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16" }, "service_provider_id": 5, "account_number": "0123456789" }

Aufwandsbasierte Ausgabe (z.B. Heizung):

{ "expense_type_id": 1, "calculation_period": "MONTHLY", "unit_price": "1.0000", "measurement_unit_id": 6, "currency_id": 1, "start_date": "2026-01-01", "charge_day": 20 }
Pro Immobilie ist nur eine Ausgabe pro Typ erlaubt. Ein Duplikat führt zu einem 400-Fehler.

Antwort (201 Created):

{ "id": 3, "expense_type": {"id": 15, "code": "INTERNET", "name_key": "expense_type.internet"}, "calculation_period": "MONTHLY", "unit_price": "500.0000", "measurement_unit": {"id": 5, "symbol": "unit", "name_key": "unit.unit"}, "fixed_consumption": "1.0000", "currency": {"id": 1, "code": "UAH", "symbol": "\u20b4"}, "start_date": "2026-01-01", "end_date": null, "service_provider": null, "account_number": null, "is_active": true, "has_charges": false, "can_delete": true, "notes": "Fiber 100 Mbps", "charge_day": 1, "payment_days": 5, "reminder_days": 2, "created_at": "2026-02-22T10:00:00+00:00", "updated_at": "2026-02-22T10:00:00+00:00" }

GET Ausgabendetails abrufen

▶

Gibt vollständige Ausgabendetails zurück, einschließlich verknüpfter Zähler, Zonenpreise und Gebührenhistorie.

GET /api/v1/properties/{propertyId}/expenses/{id}

Antwort (200 OK):

{ "id": 1, "expense_type": {"id": 3, "code": "ELECTRICITY", "name_key": "expense_type.electricity"}, "calculation_period": "MONTHLY", "unit_price": "4.3200", "measurement_unit": {"id": 1, "symbol": "kWh", "name_key": "unit.kwh"}, "fixed_consumption": null, "currency": {"id": 1, "code": "UAH", "symbol": "\u20b4"}, "start_date": "2026-01-01", "end_date": null, "service_provider": {"id": 5, "name": "Energozbut"}, "account_number": "0123456789", "is_active": true, "has_charges": true, "can_delete": false, "notes": null, "charge_day": 15, "payment_days": 3, "reminder_days": 3, "counters": [ {"id": 4, "serial_number": "NIK-2281-073915", "tariff_type": "THREE_ZONE"} ], "zone_prices": {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"}, "charges": [ { "id": 12, "charge_date": "2026-02-15", "period_start": "2026-02-01", "period_end": "2026-02-28", "quantity": "279.000", "amount": "1205.28", "source": "auto", "has_items": true } ], "total_charges": 1, "required_zones": ["PEAK", "HALF_PEAK", "NIGHT"], "created_at": "2026-01-01T00:00:00+00:00", "updated_at": "2026-02-15T10:30:00+00:00" }

PUT Ausgabe aktualisieren

▶

Aktualisiert eine Ausgabe teilweise. Nur die zu ändernden Felder angeben. Bei Angabe von counter_ids oder zone_prices werden alle bestehenden Werte ersetzt.

PUT /api/v1/properties/{propertyId}/expenses/{id}

Aktualisierbare Felder (alle optional):

unit_price string
calculation_period string
counter_ids array
zone_prices object
is_active boolean
charge_day integer (1-28)

Anfragekörper:

{ "unit_price": "4.5600", "zone_prices": { "PEAK": "4.56", "HALF_PEAK": "3.42", "NIGHT": "2.28" }, "charge_day": 10 }

Antwort (200 OK):

{ "id": 1, "expense_type": {"id": 3, "code": "ELECTRICITY", "name_key": "expense_type.electricity"}, "calculation_period": "MONTHLY", "unit_price": "4.5600", "charge_day": 10, "zone_prices": {"PEAK": "4.56", "HALF_PEAK": "3.42", "NIGHT": "2.28"}, ... }

DELETE Ausgabe löschen

▶

Löscht eine Ausgabe. Gibt 204 No Content bei Erfolg zurück.

DELETE /api/v1/properties/{propertyId}/expenses/{id}

Antwort (204 No Content)

Eine Ausgabe mit bestehenden Gebühren kann nicht gelöscht werden. Deaktivieren Sie sie stattdessen über toggle-active oder setzen Sie is_active auf false im Update-Endpunkt.

POST Aktivstatus umschalten

▶

Aktiviert oder deaktiviert eine Ausgabe. Deaktivierte Ausgaben werden nicht für die automatische Gebührenerstellung verwendet.

POST /api/v1/properties/{propertyId}/expenses/{id}/toggle-active

Antwort (200 OK):

{"id": 1, "is_active": false}

POST Gebühren für Ausgabe aktualisieren

▶

Generiert eine Gebühr für eine einzelne Ausgabe, wenn ihr Abrechnungszeitraum abgelaufen ist und keine Gebühr für den aktuellen Zeitraum existiert.

POST /api/v1/properties/{propertyId}/expenses/{id}/refresh

Antwort (200 OK):

{ "success": true, "charge_id": 15, "message": "Charge created for period 2026-02-01 - 2026-02-28" }
Funktioniert nur für aktive, nicht-manuelle Ausgaben. Manuelle Ausgaben unterstützen keine automatische Aktualisierung.

POST Alle automatischen Gebühren aktualisieren

▶

Generiert Gebühren für alle aktiven automatischen (nicht-manuellen) Ausgaben der Immobilie. Gibt Anzahl erstellter, übersprungener und fehlerhafter Gebühren zurück.

POST /api/v1/properties/{propertyId}/expenses/refresh-all

Antwort (200 OK):

{ "created": 3, "skipped": 2, "errors": 0 }

Dokumente im Ausgabenmodul

Im Ausgabenmodul können Dokumente auf zwei Ebenen angehängt werden:

Warum Dokumente an Ausgaben anhängen?

Ausgabendokumente ermöglichen es, wichtige Referenzmaterialien zu speichern, die sich auf die wiederkehrende Ausgabenkonfiguration selbst beziehen, nicht auf einzelne Abrechnungen. Dies umfasst:

  • Serviceverträge mit Versorgungsunternehmen
  • Tarifpläne und Tarifkarten
  • Service-Level-Vereinbarungen (SLAs)
  • Gerätehandbücher und Wartungspläne

Ausgabentyp definiert die wiederkehrende Vorlage (z.B. "Wasserversorgung"). Gebühr ist die tatsächliche Abrechnungsinstanz, die aus dieser Vorlage erstellt wurde (z.B. "Wasser für Januar 2026").

Abrechnung Ein spezifischer Abrechnungseintrag für einen Zeitraum (z.B. Strom für Januar). Rechnungen, Quittungen und Zahlungsbestätigungen werden hier über die API angehängt. Pfad: /api/properties/{id}/charges/{chargeId}/documents
Ausgabentyp (Vorlage) Definition des wiederkehrenden Ausgabentyps (z.B. "Strom, monatlich"). Dokumente wie Verträge mit Auftragnehmern oder Tarifpläne können dem Ausgabentyp beigefügt werden. API-Pfad: /api/properties/{id}/expenses/{expenseId}/documents
Nicht mit Zählerdokumenten verwechseln
Zählerablesungen haben eigene Dokumentanhänge, die über das Zählermodul verwaltet werden. Die folgenden Endpunkte sind ausschließlich für Abrechnungsdokumente von Ausgaben.

API für Abrechnungsdokumente

Basispfad: /api/properties/{propertyId}/charges/{chargeId}/documents. Eine Abrechnung wird aus einer Ausgabe erstellt und repräsentiert einen bestimmten Abrechnungszeitraum. Hier angehängte Dokumente dienen als Zahlungsnachweis oder Rechnungen für diese Abrechnung.

GET Abrechnungsdokumente auflisten

▶

Gibt alle an eine bestimmte Abrechnung angehängten Dokumente zurück. Jedes Dokument enthält eine sichere Download-URL, Dateimetadaten und einen optionalen Kommentar.

GET /api/v1/properties/{propertyId}/charges/{chargeId}/documents

Antwort (200 OK):

{ "documents": [ { "id": 1, "document": { "id": 10, "original_name": "invoice_february.pdf", "file_url": "https://landlordkeeper.com/file/abc123hash", "mime_type": "application/pdf", "file_size": 245760, "document_type": { "id": 1, "code": "OFFICIAL_DOCUMENT", "name_key": "document_type.official_document" }, "created_at": "2026-02-15T10:30:00+00:00" }, "comment": "Electricity invoice for February 2026", "created_at": "2026-02-15T10:30:00+00:00" }, { "id": 2, "document": { "id": 11, "original_name": "receipt_scan.jpg", "file_url": "https://landlordkeeper.com/file/def456hash", "mime_type": "image/jpeg", "file_size": 128000, "document_type": { "id": 2, "code": "RECEIPT", "name_key": "document_type.receipt" }, "created_at": "2026-02-16T14:00:00+00:00" }, "comment": null, "created_at": "2026-02-16T14:00:00+00:00" } ], "total": 2 }

POST Abrechnungsdokument hochladen

▶

Lädt eine Datei zur Abrechnung hoch. Verwendet multipart/form-data (nicht JSON). Die Datei wird gemäß den Dokumenttyp-Beschränkungen (erlaubte Erweiterungen, maximale Größe) validiert und in S3 gespeichert.

POST /api/v1/properties/{propertyId}/charges/{chargeId}/documents

Header:

Authorization: Bearer {token} Content-Type: multipart/form-data

Upload-Felder (multipart/form-data):

file Binärdatei (PDF, JPG, PNG usw.). Pflichtfeld. Wird nach Dokumenttyp-Beschränkungen validiert.
document_type_id Dokumenttyp-ID (Ganzzahl). Pflichtfeld. Definiert erlaubte Dateierweiterungen und maximale Größe.
comment Optionaler Textkommentar (String, nullable). Klartext, HTML-Tags werden entfernt.

Antwort (201 Created):

{ "id": 3, "document": { "id": 12, "original_name": "water_bill_march.pdf", "file_url": "https://landlordkeeper.com/file/ghi789hash", "mime_type": "application/pdf", "file_size": 184320, "document_type": { "id": 1, "code": "OFFICIAL_DOCUMENT", "name_key": "document_type.official_document" }, "created_at": "2026-02-22T12:00:00+00:00" }, "comment": "Water bill March 2026", "created_at": "2026-02-22T12:00:00+00:00" }

GET Dokumentdetails abrufen

▶

Gibt vollständige Details eines bestimmten Abrechnungsdokuments zurück, einschließlich der sicheren Datei-URL, Dateimetadaten und Kommentar.

GET /api/v1/properties/{propertyId}/charges/{chargeId}/documents/{id}

Antwort (200 OK):

{ "id": 1, "document": { "id": 10, "original_name": "invoice_february.pdf", "file_url": "https://landlordkeeper.com/file/abc123hash", "mime_type": "application/pdf", "file_size": 245760, "document_type": { "id": 1, "code": "OFFICIAL_DOCUMENT", "name_key": "document_type.official_document" }, "created_at": "2026-02-15T10:30:00+00:00" }, "comment": "Electricity invoice for February 2026", "created_at": "2026-02-15T10:30:00+00:00" }

PUT Dokumentkommentar aktualisieren

▶

Aktualisiert den Kommentar eines Abrechnungsdokuments. Nur das Kommentarfeld kann geändert werden. Senden Sie einen JSON-Body mit dem neuen Kommentarwert. Setzen Sie null um den Kommentar zu entfernen.

PUT /api/v1/properties/{propertyId}/charges/{chargeId}/documents/{id}

Anfragekörper:

{ "comment": "Updated: electricity invoice Feb 2026 (paid)" }

Antwort (200 OK):

{ "id": 1, "document": { "id": 10, "original_name": "invoice_february.pdf", "file_url": "https://landlordkeeper.com/file/abc123hash", ... }, "comment": "Updated: electricity invoice Feb 2026 (paid)", "created_at": "2026-02-15T10:30:00+00:00" }

DELETE Abrechnungsdokument löschen

▶

Löscht ein Dokument dauerhaft aus der Abrechnung. Die Datei wird zuerst aus dem S3-Speicher entfernt, dann wird der Datenbankeintrag gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.

DELETE /api/v1/properties/{propertyId}/charges/{chargeId}/documents/{id}

Antwort (204 No Content)

Das Löschen eines Dokuments entfernt die Datei dauerhaft aus dem S3-Speicher und kann nicht rückgängig gemacht werden. Stellen Sie sicher, dass Sie das Dokument nicht mehr benötigen, bevor Sie es löschen.

cURL-Beispiele

▶

1. Feste Ausgabe (z.B. Internet)

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -d '{ "expense_type_id": 15, "calculation_period": "MONTHLY", "unit_price": "500.0000", "measurement_unit_id": 5, "fixed_consumption": "1.0000", "currency_id": 1, "start_date": "2026-01-01", "charge_day": 1 }'

2. Zählerbasierte Ausgabe mit Zonenpreisen (z.B. Strom)

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -d '{ "expense_type_id": 3, "calculation_period": "MONTHLY", "unit_price": "4.3200", "measurement_unit_id": 1, "currency_id": 1, "start_date": "2026-01-01", "counter_ids": [4], "zone_prices": {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"}, "service_provider_id": 5, "account_number": "0123456789" }'

3. Ausgaben auflisten

curl https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses \ -H "Authorization: Bearer YOUR_TOKEN_HERE"

4. Ausgabe aktualisieren

curl -X PUT https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses/1 \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -d '{"unit_price": "4.5600", "charge_day": 10}'

5. Aktivstatus umschalten

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses/1/toggle-active \ -H "Authorization: Bearer YOUR_TOKEN_HERE"

6. Alle automatischen Gebühren aktualisieren

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses/refresh-all \ -H "Authorization: Bearer YOUR_TOKEN_HERE"

7. Abrechnungsdokument hochladen

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/charges/12/documents \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -F "file=@/path/to/invoice.pdf" \ -F "document_type_id=1" \ -F "comment=Electricity invoice February 2026"

8. Abrechnungsdokumente auflisten

curl https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/charges/12/documents \ -H "Authorization: Bearer YOUR_TOKEN_HERE"

9. Abrechnungsdokument löschen

curl -X DELETE https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/charges/12/documents/1 \ -H "Authorization: Bearer YOUR_TOKEN_HERE"
Ersetzen Sie YOUR_TOKEN_HERE durch den JWT-Token aus dem Authentifizierungsschritt.

Ausgabentyp-Dokumente-API

Basispfad: /api/properties/{propertyId}/expenses/{expenseId}/documents. Dokumente, die an eine Ausgabe angehängt sind (wie Verträge mit Auftragnehmern oder Tarifpläne), werden über diese Endpunkte verwaltet.

GET List Expense Documents

▶

GET /api/v1/properties/{propertyId}/expenses/{expenseId}/documents

Retrieve all documents attached to an expense.

Response (200 OK):

{ "documents": [...], "total": 2 }

POST Upload Expense Document

▶

POST /api/v1/properties/{propertyId}/expenses/{expenseId}/documents

Upload a new document to an expense (multipart/form-data).

Request Body (multipart/form-data):

file: (binary file) document_type_id: integer (required) comment: string (optional)

Response (201 Created):

{ "id": 3, "document": {...}, "comment": "..." }

GET Get Expense Document

▶

GET /api/v1/properties/{propertyId}/expenses/{expenseId}/documents/{id}

Retrieve details of a specific expense document.

PUT Update Expense Document

▶

PUT /api/v1/properties/{propertyId}/expenses/{expenseId}/documents/{id}

Update the comment of an expense document.

Request Body (application/json):

{ "comment": "Updated comment" }

DELETE Delete Expense Document

▶

DELETE /api/v1/properties/{propertyId}/expenses/{expenseId}/documents/{id}

Delete an expense document and its associated file from S3.

Response (204 No Content):

(empty)
Anfangssalden → Zu den Anfangssalden