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.
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.
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.
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.
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.
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
- Gehen Sie zu Immobilien → [Immobilie] → Gebühren
- Klicken Sie auf die blaue Schaltfläche "Gebühr hinzufügen" (erscheint nur, wenn Sie Ausgaben haben, die manuelle Gebühren erfordern)
- Wählen Sie die Ausgabe aus dem modalen Fenster (zeigt Ausgabentyp, Anbieter und Berechnungsmethode)
- 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.
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
}
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):
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)
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"
}
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
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)
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"
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)