HV-Buchhaltung API v0.1

Swagger UI →
Rechnungen
POST/invoices/upload GET/invoices GET/invoices/{id} PATCH/invoices/{id}
Banking
POST/virtual-accounts GET/virtual-accounts GET/bank-accounts POST/import/camt053 GET/transactions POST/transactions/{id}/match POST/sepa/pain001 POST/sepa/pain008
EBICS
POST/ebics POST/ebics/{id}/init POST/ebics/{id}/ini-letter POST/ebics/{id}/activate POST/ebics/{id}/pull POST/ebics/{id}/transfer
Buchhaltung
POST/cost-centers GET/cost-centers POST/journal POST/journal/{id}/post POST/journal/{id}/reverse GET/journal GET/balance-sheet POST/recurring-charges GET/accounts

HV-Buchhaltung API

Offene REST-API fĂŒr Hausverwaltungs-Buchhaltung. VollstĂ€ndig integrierbar mit Donexus, CASITA-Portal, easimo und anderen HV-Systemen. Das ERP ist das fĂŒhrende System — externe Systeme synchronisieren bidirektional.

Rechnungen https://buchhaltung.verwaltercoach.de/api/invoice
Banking https://buchhaltung.verwaltercoach.de/api/banking
Buchhaltung https://buchhaltung.verwaltercoach.de/api/accounting
ERP als fĂŒhrendes System: Alle Buchungen, Sollstellungen und Zahlungen entstehen hier. Externe Systeme (Donexus, CASITA-Portal) synchronisieren ĂŒber Webhooks oder Polling.

Prinzipien

1

API-First

Jede Funktion ist ĂŒber REST-API erreichbar. Kein Feature existiert nur in der UI.

2

Event-basiert

Änderungen im ERP feuern Webhooks. Externe Systeme reagieren darauf statt zu pollen.

3

Idempotent

Alle POST-Endpunkte sind idempotent wo möglich. Duplikate werden erkannt und abgewiesen.

4

Portabel

VollstÀndig Docker-basiert. Umzug auf neuen VPS: docker compose up -d.

Authentifizierung

API-Key (Header)

X-API-Key: hv_live_xxxxxxxxxxxxxxxxxxxx

API-Keys werden pro Integration vergeben. Donexus, CASITA-Portal und externe Tools erhalten jeweils eigene Keys mit eingeschrÀnkten Scopes.

Auth noch nicht produktiv — wird in v0.2 aktiviert. Aktuell alle Endpunkte offen (internes Netz + Traefik BasicAuth).

Scopes (geplant)

ScopeZugriff
invoices:readRechnungen lesen
invoices:writeRechnungen anlegen, freigeben
banking:readKontoumsÀtze, VKN lesen
banking:writeZahlungen auslösen, VKN anlegen
accounting:readJournal, Saldenliste
accounting:writeBuchungssÀtze erstellen
ebics:adminEBICS-Verbindungen verwalten

Rechnungseingang

POST Rechnung hochladen & extrahieren /invoices/upload

PDF-Datei hochladen. Automatische Extraktion von Lieferant, IBAN, BetrÀgen, Datum per Regex (+ optional Claude AI als Fallback).

Request — multipart/form-data

FeldTypBeschreibung
fileFile (PDF)Pflicht — Rechnungs-PDF
email_subjectstringOptional — E-Mail-Betreff fĂŒr Objekt-Matching

Response 200

"id": 42,
"supplier_name": "Musterbau GmbH",
"supplier_iban": "DE89370400440532013000",
"invoice_number": "2026-1847",
"invoice_date": "2026-06-15",
"due_date": "2026-06-30",
"gross_amount": "193.38",
"property_hint": "Scheunhornweg 14, 13583 Berlin",
"extraction_confidence": 1.0,
"status": "extracted"
PATCH Rechnung korrigieren / freigeben /invoices/{id}

Manuelle Korrekturen, Objekt-/Kontenzuordnung, Status-Wechsel.

Request JSON

{
  "property_id": "SHW14",
  "cost_account": "5250",
  "status": "approved"
}
Status-Flow: extracted → approved → booked → paid

EBICS-Bankverbindung

Voraussetzung: EBICS-Teilnahmevertrag mit der Bank existiert bereits.

Initialisierungsablauf

1

POST /ebics — Verbindung anlegen

RSA-SchlĂŒsselpaare werden automatisch erzeugt und verschlĂŒsselt gespeichert.

2

POST /ebics/{id}/init — INI + HIA senden

Öffentliche SchlĂŒssel werden an die Bank ĂŒbermittelt.

3

POST /ebics/{id}/ini-letter — INI-Brief herunterladen

PDF-Brief mit SchlĂŒssel-Hashes ausdrucken, unterschreiben, an Bank senden.

4

POST /ebics/{id}/activate — Nach Bank-BestĂ€tigung

Bank-SchlĂŒssel (HPB) laden. Ab jetzt: automatischer C53-Pull 3x tĂ€glich.

POST EBICS-Verbindung anlegen /ebics

Request JSON

{
  "label": "Berliner Sparkasse – CASITA Betriebskonto",
  "bank_name": "Berliner Sparkasse",
  "host_url": "https://ebics.berliner-sparkasse.de/ebics",
  "host_id": "BELADEBE",
  "partner_id": "CASITA001",
  "user_id": "TIM01",
  "ebics_version": "H004"
}
POST Kontoauszug abrufen (C53) /ebics/{id}/pull

Ruft CAMT.053 per EBICS ab, importiert Transaktionen und fĂŒhrt automatisches VKN-Matching durch.

Query-Parameter

ParameterDefaultBeschreibung
date_fromheuteYYYY-MM-DD
date_toheuteYYYY-MM-DD
auto_matchtrueVKN-Matching automatisch ausfĂŒhren

Response

{
  "imported": 12,
  "duplicates_skipped": 0,
  "auto_match": { "total": 12, "matched": 10, "unmatched": 2 }
}

Webhooks (bidirektionale Sync)

Das ERP ist das fĂŒhrende System. Externe Systeme registrieren Webhook-URLs und werden bei Ereignissen benachrichtigt.

Ereignisse

EventWannPayload
invoice.createdNeue Rechnung erkanntInvoice-Objekt
invoice.approvedRechnung freigegebenInvoice + Kostenstelle
invoice.bookedRechnung gebuchtInvoice + Buchungssatz
transaction.importedBankumsatz per EBICS/CAMTBankTransaction
transaction.matchedVKN-ZuordnungTransaction + VKN
journal.postedBuchung festgeschriebenJournalEntry
recurring.runMonatliche SollstellungenListe gebuchter EintrÀge

Webhook-Format

{
  "event": "invoice.approved",
  "timestamp": "2026-06-20T14:32:11Z",
  "source": "hv-erp",
  "data": { ... }
}

Integrationen

Donexus → ERP

→

Objekte & Einheiten

Donexus liefert property_id und unit_id. ERP ĂŒbernimmt als Kostenstellen-Codes.

←

Offene Forderungen

ERP schickt offene Mieten/Hausgelder per Webhook. Donexus zeigt Status im Portal.

↔

Schadensmeldungen → Rechnungen

Donexus-Incident-ID wird in Rechnung gespeichert. Bezahlung fließt zurĂŒck als Webhook.

CASITA-Portal → ERP

GET /api/accounting/balance-sheet?cost_center_id={id}
→ Saldenliste fĂŒr EigentĂŒmer-Anzeige im Portal

GET /api/banking/transactions?match_status=unmatched
→ Liste offener Zahlungen fĂŒr manuelle Zuordnung im Portal

POST /api/invoices/{id} { "status": "approved" }
→ Freigabe direkt aus dem Portal heraus