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.
Prinzipien
API-First
Jede Funktion ist ĂŒber REST-API erreichbar. Kein Feature existiert nur in der UI.
Event-basiert
Ănderungen im ERP feuern Webhooks. Externe Systeme reagieren darauf statt zu pollen.
Idempotent
Alle POST-Endpunkte sind idempotent wo möglich. Duplikate werden erkannt und abgewiesen.
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.
Scopes (geplant)
| Scope | Zugriff |
|---|---|
invoices:read | Rechnungen lesen |
invoices:write | Rechnungen anlegen, freigeben |
banking:read | KontoumsÀtze, VKN lesen |
banking:write | Zahlungen auslösen, VKN anlegen |
accounting:read | Journal, Saldenliste |
accounting:write | BuchungssÀtze erstellen |
ebics:admin | EBICS-Verbindungen verwalten |
Rechnungseingang
PDF-Datei hochladen. Automatische Extraktion von Lieferant, IBAN, BetrÀgen, Datum per Regex (+ optional Claude AI als Fallback).
Request â multipart/form-data
| Feld | Typ | Beschreibung |
|---|---|---|
file | File (PDF) | Pflicht â Rechnungs-PDF |
email_subject | string | Optional â 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"
Manuelle Korrekturen, Objekt-/Kontenzuordnung, Status-Wechsel.
Request JSON
{
"property_id": "SHW14",
"cost_account": "5250",
"status": "approved"
}
extracted â approved â booked â paidEBICS-Bankverbindung
Initialisierungsablauf
POST /ebics â Verbindung anlegen
RSA-SchlĂŒsselpaare werden automatisch erzeugt und verschlĂŒsselt gespeichert.
POST /ebics/{id}/init â INI + HIA senden
Ăffentliche SchlĂŒssel werden an die Bank ĂŒbermittelt.
POST /ebics/{id}/ini-letter â INI-Brief herunterladen
PDF-Brief mit SchlĂŒssel-Hashes ausdrucken, unterschreiben, an Bank senden.
POST /ebics/{id}/activate â Nach Bank-BestĂ€tigung
Bank-SchlĂŒssel (HPB) laden. Ab jetzt: automatischer C53-Pull 3x tĂ€glich.
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"
}
Ruft CAMT.053 per EBICS ab, importiert Transaktionen und fĂŒhrt automatisches VKN-Matching durch.
Query-Parameter
| Parameter | Default | Beschreibung |
|---|---|---|
date_from | heute | YYYY-MM-DD |
date_to | heute | YYYY-MM-DD |
auto_match | true | VKN-Matching automatisch ausfĂŒhren |
Response
{
"imported": 12,
"duplicates_skipped": 0,
"auto_match": { "total": 12, "matched": 10, "unmatched": 2 }
}
Webhooks (bidirektionale Sync)
Ereignisse
| Event | Wann | Payload |
|---|---|---|
invoice.created | Neue Rechnung erkannt | Invoice-Objekt |
invoice.approved | Rechnung freigegeben | Invoice + Kostenstelle |
invoice.booked | Rechnung gebucht | Invoice + Buchungssatz |
transaction.imported | Bankumsatz per EBICS/CAMT | BankTransaction |
transaction.matched | VKN-Zuordnung | Transaction + VKN |
journal.posted | Buchung festgeschrieben | JournalEntry |
recurring.run | Monatliche Sollstellungen | Liste 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