AssetApp API Beta
Die API befindet sich im Beta-Status. Endpunkte, Felder und Verhalten können sich noch ändern.
Mit der AssetApp API greifen Hausverwaltungen und ERP-Systeme auf ihre Liegenschaften, Einheiten, Mieter, Geräte, Zählerstände und Abrechnungen zu – lesend und schreibend, ohne manuelle Anmeldung im Portal.
Die API liefert JSON. Jede Integration sieht genau die Daten, die auch der Benutzer sieht, der sie angelegt hat. Objekte werden über ihre UUID adressiert; die UUID ändert sich nie und kann im Fremdsystem dauerhaft gespeichert werden.
Schnellstart
- In der AssetApp unter Einstellungen → Integrationen eine Integration anlegen und Bezeichner und Schlüssel kopieren.
- Mit Bezeichner und Schlüssel ein Zugriffstoken holen.
- Das Token bei jeder Anfrage im Header
Authorization: Bearer …mitsenden.
curl -X POST https://sandbox.assetapp.de/api/v1/token \
-d grant_type=client_credentials \
-d client_id=<BEZEICHNER> \
-d client_secret=<SCHLÜSSEL> \
-d "scope=read"
curl https://sandbox.assetapp.de/api/v1/properties \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Accept: application/ld+json"
Authentifizierung
Die API verwendet OAuth 2.0 mit dem Ablauf Client Credentials. Der Schlüssel einer Integration wird nur
einmal beim Anlegen angezeigt und ist kein Token: Er wird bei POST /api/v1/token gegen ein
Zugriffstoken getauscht.
POST /api/v1/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=<BEZEICHNER>&client_secret=<SCHLÜSSEL>&scope=read write
{
"token_type": "Bearer",
"expires_in": 3600,
"access_token": "eyJ0eXAiOiJKV1Qi…"
}
| Scope | Erlaubt |
|---|---|
read | Alle lesenden Anfragen (GET) |
write | Änderungen (POST, PATCH); nur für Integrationen, bei denen beim Anlegen „Schreibzugriff erlauben“ gewählt wurde |
Ein Token ist eine Stunde gültig; danach einfach ein neues holen. Wird die Integration in der AssetApp gelöscht, sind alle ihre Tokens sofort ungültig.
Formate und Paginierung
Standardformat ist JSON-LD (Accept: application/ld+json). Listen enthalten die Einträge in
hydra:member, die Gesamtzahl in hydra:totalItems und Links auf die nächste Seite in
hydra:view. Mit Accept: application/json kommt ein einfaches Array – ohne Angaben zur Paginierung.
| Parameter | Bedeutung |
|---|---|
page | Seite, beginnend bei 1 |
itemsPerPage | Einträge pro Seite, Standard 100, höchstens 500 |
Datumsangaben folgen ISO 8601, in Filtern mit Zeitzone, z. B. 2025-01-01T00:00:00+01:00
(in der URL + als %2B kodieren). Felder ohne Wert werden als null geliefert,
nicht weggelassen. Änderungen werden als application/merge-patch+json gesendet: Nur die
mitgeschickten Felder werden geändert.
Synchronisation
Für den regelmäßigen Abgleich reicht es, nur die seit dem letzten Lauf neuen oder geänderten Einträge zu holen.
changedSince berücksichtigt dabei auch die mitgelieferten Daten, etwa eine korrigierte Adresse oder
die E-Mail-Adresse eines Mieters:
GET /api/v1/apartments?changedSince=2026-10-01T00:00:00%2B02:00
updatedAt[after] prüft dagegen nur den Zeitstempel des Eintrags selbst. Gelöschte Einträge liefert
keiner der beiden Filter; für sie ist ein gelegentlicher vollständiger Abgleich nötig.
Fehler
Fehler werden als JSON mit title, detail und – bei Validierungsfehlern – violations geliefert.
| Status | Bedeutung |
|---|---|
| 400 | Ungültiger Parameter, z. B. keine gültige UUID in einem Filter |
| 401 | Token fehlt, ist abgelaufen oder die Integration wurde gelöscht |
| 403 | Scope fehlt (z. B. write) oder keine Berechtigung für die Änderung |
| 404 | Objekt existiert nicht oder ist für diese Integration nicht sichtbar |
| 422 | Validierungsfehler; Details in violations[].propertyPath und violations[].message |
| 429 | Zu viele Anfragen; der Header Retry-After nennt die Wartezeit in Sekunden |
Kostenpflichtige Aufrufe
Einige Aufrufe buchen Leistungen der AssetEnergy GmbH, die in Rechnung gestellt werden. Sie sind in dieser
Dokumentation mit Kostenpflichtig markiert, tragen in der Swagger-Oberfläche
„(kostenpflichtig)“ im Titel und in der OpenAPI-Beschreibung x-paid: true. Die aktuellen Preise
liefert GET /api/v1/properties/{propertyId}/price-list. Es gelten die
AGB der AssetEnergy GmbH.
Sandbox
Unter https://sandbox.assetapp.de läuft eine Testumgebung mit derselben API. Jeder Zugang bekommt eigene
Demodaten; kostenpflichtige Aufrufe buchen dort nichts, die Preisliste liefert feste Beispielpreise. Es werden
keine E-Mails versendet und keine Daten an Dienste der AssetEnergy GmbH weitergegeben.
- In der AssetApp unter Einstellungen → Integrationen eine Integration anlegen. Neben Bezeichner und Schlüssel wird ein Einladungscode für die Sandbox angezeigt. Er ist 14 Tage gültig und nur einmal verwendbar; einen neuen gibt es dort über Sandbox-Zugang erzeugen.
- Mit dem Einladungscode einen Sandbox-Zugang anlegen. Bezeichner und Schlüssel werden nur in dieser Antwort angezeigt.
- Damit wie gewohnt ein Token holen – an der Sandbox-Adresse, nicht an der produktiven.
curl -X POST https://sandbox.assetapp.de/api/v1/sandbox/signup \
-H "Content-Type: application/json" \
-d '{"invite": "<EINLADUNGSCODE>"}'
{
"client_id": "…",
"client_secret": "…",
"token_url": "https://sandbox.assetapp.de/api/v1/token",
"docs_url": "https://sandbox.assetapp.de/api/v1/docs"
}
Die Demodaten:
- fünf Liegenschaften vom Zweifamilienhaus bis zur Wohnanlage mit 24 Einheiten (insgesamt 58, zwei davon gewerblich), beheizt mit Heizöl, Erdgas, Fernwärme und Wärmepumpe
- Mieter mit Vorauszahlungen, ein Mieterwechsel, Leerstände und eine geänderte Wohnfläche
- 276 Zähler (Heizkostenverteiler, Warm- und Kaltwasser, Wärmemengenzähler) mit monatlichen Ablesewerten
- je Liegenschaft und Jahr eine Abrechnung mit Kosten sowie Brennstoffrechnungen bzw. Anfangsbestand, Lieferung und Endbestand
- für die Musterstraße 12 die abgeschlossene Abrechnung 2025 mit Einzel- und Gesamtabrechnungen (Platzhalter-PDF „Demo Dokument“)
Pro IP-Adresse sind 5 Versuche pro Stunde möglich, auch fehlgeschlagene zählen. Antworten: 201
Zugang angelegt, 400 Einladungscode ungültig oder abgelaufen, 409 Einladungscode schon
verwendet, 422 Body ist kein JSON mit Einladungscode, 429 zu viele Versuche,
503 Sandbox vorübergehend nicht verfügbar.
Limits
Pro Benutzer sind 60 Anfragen pro Minute erlaubt, über alle Integrationen dieses Benutzers zusammen.
Für Massenabrufe itemsPerPage=500 verwenden statt vieler kleiner Seiten.
Anwendungsfall: Zählerstände abrufen
Das Fremdsystem kennt die Seriennummer eines Zählers und liest dessen Zählerstände.
1. Gerät über die Seriennummer suchen
GET /api/v1/devices?number=21048992
{
"hydra:member": [{
"id": "004b417e-6f8a-40bc-93c6-2b05d5bb1049",
"number": "21048992",
"type": "COLD_WATER",
"state": "ACTIVE",
"property": { "label": "Flurstraße 28/30", … }
}],
"hydra:totalItems": 1
}
2. Zählerstände eines Zeitraums abrufen
GET /api/v1/devices/004b417e-6f8a-40bc-93c6-2b05d5bb1049/values
?reportDate[after]=2025-01-01T00:00:00%2B01:00
&reportDate[before]=2025-12-31T23:59:59%2B01:00
&itemsPerPage=500
Nur die Werte für die Heizkostenabrechnung: isBillingRelevant=true. Neueste zuerst:
order[reportDate]=desc. Die Geräte-UUID ändert sich nicht und kann gespeichert werden, sodass
Schritt 1 nur einmal nötig ist.
Eigentümer sehen Zählerstände nur aus dem Zeitraum, in dem ihnen die Liegenschaft gehört.
Anwendungsfall: Mieterwechsel
Ein neuer Mieter zieht zum 1. Juli ein, der bisherige Mieter hat ein offenes Mietverhältnis. Mit
adjustOverlappingTenancies endet das bisherige Mietverhältnis automatisch am Vortag (Scope write).
POST /api/v1/tenants
Content-Type: application/json
{
"apartment": "6f1c2b2e-0d7e-4a8f-9a51-0d0c8f1e2a33",
"begin": "2026-07-01",
"name": "Erika Mustermann",
"email": "erika.mustermann@example.com",
"reference": "MK 4711",
"prepaymentGrossAmount": 1140.00,
"adjustOverlappingTenancies": true
}
prepaymentGrossAmount ist die Summe der Vorauszahlungen im Abrechnungszeitraum, nicht der Monatsbetrag.
Läuft ein Mietverhältnis über mehrere Jahre, wird der Betrag vor jeder Abrechnung mit PATCH aktualisiert.
Mit reference wird das eigene Kennzeichen des Mieters gespeichert, z. B. die Mieterkontonummer.
Abgleich später über GET /api/v1/tenants?reference=MK%204711 statt über Name und Datum.
Zieht eine bereits bekannte Person um oder erneut ein, legt die API keine zweite Person an: Sie wird über
personId, reference oder email wiedererkannt, in dieser Reihenfolge. So behält
ein Mieter einen Datensatz mit allen Mietverhältnissen und kann später ein Konto für die AssetApp erhalten.
Ohne adjustOverlappingTenancies wird die Anfrage bei einer Überschneidung mit 422 abgelehnt. Ein Auszug wird so gemeldet:
PATCH /api/v1/tenants/1234
Content-Type: application/merge-patch+json
{ "end": "2026-06-30" }
Über die API angelegte Mieter erhalten keine Einladung in die AssetApp.
Anwendungsfall: Kosten übermitteln
Das Fremdsystem meldet die Rechnungen eines Abrechnungszeitraums (Scope write). Die Kostenart wird über
ihren key aus GET /api/v1/cost-types angegeben; der ARGE-Schlüssel ist nicht eindeutig.
POST /api/v1/billings/0b6c4f3e-2f1d-4c1a-9d7e-5a8b3c2d1e0f/costs
Content-Type: application/json
{
"costType": "2030",
"date": "2025-11-14",
"invoiceNumber": "RE-2025-4711",
"netAmount": 84.03,
"grossAmount": 100.00,
"taxRate": 19
}
Vor dem Senden lässt sich mit GET …/costs?invoiceNumber=RE-2025-4711 prüfen, ob eine Rechnung schon
erfasst ist. Eine Rechnung darf auf mehrere Positionen verteilt werden.
Brennstoffe
POST /api/v1/billings/0b6c4f3e-2f1d-4c1a-9d7e-5a8b3c2d1e0f/fuel-deliveries
Content-Type: application/json
{ "type": "PURCHASE", "date": "2025-06-02", "quantity": 3000, "netAmount": 2940.00, "grossAmount": 3498.60, "taxRate": 19 }
Bei Öl, Pellets und Flüssiggas werden zusätzlich Anfangsbestand (INITIAL) und Endbestand
(FINAL, nur quantity) gemeldet; den Wert des Endbestands berechnet die AssetApp aus den
Lieferungen. Heizwert, Emissionsfaktor, CO₂-Menge und CO₂-Kosten werden ergänzt, wenn sie fehlen.
Sobald die Kosten übermittelt sind (Status SUBMITTED oder DONE), lehnt die API Änderungen
mit 409 ab.
Anwendungsfall: Abrechnungsergebnisse abrufen
Das Fremdsystem fragt regelmäßig nach fertigen Abrechnungen und übernimmt das Ergebnis je Nutzer.
1. Seit dem letzten Abruf fertiggestellte Abrechnungen
GET /api/v1/billings?state=DONE&changedSince=2026-10-01T00:00:00%2B02:00
2. Ergebnisse und PDFs einer Abrechnung
GET /api/v1/billings/0b6c4f3e-2f1d-4c1a-9d7e-5a8b3c2d1e0f/documents
{
"hydra:member": [{
"id": 4711,
"type": "APARTMENT_HEATING_BILL",
"tenant": { "id": 1234, "name": "Erika Mustermann" },
"usageBegin": "2025-01-01T00:00:00+01:00",
"usageEnd": "2025-12-31T00:00:00+01:00",
"totalCostGross": 1012.40,
"prepaymentGross": 960.00,
"balanceGross": 52.40,
"pdf": "/api/v1/billing-documents/4711/pdf",
…
}]
}
tenant.id ist die ID aus /api/v1/tenants. balanceGross positiv bedeutet
Nachzahlung, negativ Guthaben. Die PDF-Datei mit Accept: application/pdf abrufen.
Liegenschaften
GET/api/v1/properties
Liegenschaften auflisten
Alle Liegenschaften, auf die die Integration Zugriff hat.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
page |
Query | Ganzzahl | Seite, beginnend bei 1 |
itemsPerPage |
Query | Ganzzahl | Einträge pro Seite, Standard 100, höchstens 500 |
updatedAt[before] |
Query | Datum/Zeit | Nur Einträge bis zu diesem Zeitpunkt (einschließlich) |
updatedAt[strictly_before] |
Query | Datum/Zeit | Nur Einträge vor diesem Zeitpunkt |
updatedAt[after] |
Query | Datum/Zeit | Nur Einträge ab diesem Zeitpunkt (einschließlich) |
updatedAt[strictly_after] |
Query | Datum/Zeit | Nur Einträge nach diesem Zeitpunkt |
label |
Query | Text | Bezeichnung, Teiltreffer |
identifier |
Query | Text | Nummer in der AssetApp, exakte Übereinstimmung |
identifier[] |
Query | Liste | Mehrere Werte, z. B. identifier[]=A&identifier[]=B |
changedSince |
Query | Text | Nur Einträge, die selbst oder deren mitgelieferte Daten (z. B. Adresse, Kontaktdaten) seit diesem Zeitpunkt angelegt oder geändert wurden (ISO 8601). |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Liegenschaft |
identifier | Text | Liegenschaftsnummer in der AssetApp |
label | Text | Bezeichnung |
type | Enum: RESIDENTIAL, COMMERCIAL, MIXED_USE, null | Nutzungsart |
state | Enum: OPEN, PROGRESS, DONE, CANCELED | Bearbeitungsstatus |
address | Objekt | Anschrift |
address.street | Text | Straße |
address.streetNumber | Text | Hausnummer |
address.postcode | Text | Postleitzahl |
address.city | Text | Ort |
address.country | Text | Land (ISO 3166-1 alpha-2) |
address.additional | Text | null | Adresszusatz |
constructionYear | Ganzzahl | null | Baujahr |
isWeg | Boolean | Wohnungseigentümergemeinschaft (WEG) |
apartments | Liste | Einheiten der Liegenschaft, z. B. für den Umlagemaßstab 32 (zugeordnete Nutzereinheiten) |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am; für die inkrementelle Synchronisation mit updatedAt[after] |
GET/api/v1/properties/{id}
Liegenschaft abrufen
Retrieves a Property resource.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Liegenschaft |
identifier | Text | Liegenschaftsnummer in der AssetApp |
label | Text | Bezeichnung |
type | Enum: RESIDENTIAL, COMMERCIAL, MIXED_USE, null | Nutzungsart |
state | Enum: OPEN, PROGRESS, DONE, CANCELED | Bearbeitungsstatus |
address | Objekt | Anschrift |
address.street | Text | Straße |
address.streetNumber | Text | Hausnummer |
address.postcode | Text | Postleitzahl |
address.city | Text | Ort |
address.country | Text | Land (ISO 3166-1 alpha-2) |
address.additional | Text | null | Adresszusatz |
constructionYear | Ganzzahl | null | Baujahr |
isWeg | Boolean | Wohnungseigentümergemeinschaft (WEG) |
apartments | Liste | Einheiten der Liegenschaft, z. B. für den Umlagemaßstab 32 (zugeordnete Nutzereinheiten) |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am; für die inkrementelle Synchronisation mit updatedAt[after] |
GET/api/v1/properties/{id}/settings
Einstellungen der Liegenschaft abrufen
Heizungsanlage, Brennstoff und Angaben zur CO₂-Kostenaufteilung sowie die Verteilung, mit der neue Abrechnungsperioden angelegt werden.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Liegenschaft |
heatingCostEnabled | Boolean | Heizkosten werden abgerechnet |
warmWaterCostEnabled | Boolean | Warmwasserkosten werden abgerechnet |
coldWaterCostEnabled | Boolean | Kaltwasserkosten werden abgerechnet |
additionalCostEnabled | Boolean | Weitere Betriebskosten werden abgerechnet |
heatingBaseCostPercentage | Ganzzahl | Grundkostenanteil Heizung in Prozent |
heatingUsageCostPercentage | Ganzzahl | Verbrauchskostenanteil Heizung in Prozent |
heatingBaseCostDistribution | Objekt | Umlagemaßstab der Grundkosten Heizung |
heatingBaseCostDistribution.key | Text | Schlüssel des Umlagemaßstabs |
heatingBaseCostDistribution.label | Text | Bezeichnung, z. B. Wohnfläche |
warmWaterBaseCostPercentage | Ganzzahl | Grundkostenanteil Warmwasser in Prozent |
warmWaterUsageCostPercentage | Ganzzahl | Verbrauchskostenanteil Warmwasser in Prozent |
warmWaterBaseCostDistribution | Objekt | Umlagemaßstab der Grundkosten Warmwasser |
warmWaterBaseCostDistribution.key | Text | Schlüssel des Umlagemaßstabs |
warmWaterBaseCostDistribution.label | Text | Bezeichnung, z. B. Wohnfläche |
warmWaterUsageCostDistribution | Objekt | Umlagemaßstab der Verbrauchskosten Warmwasser |
warmWaterUsageCostDistribution.key | Text | Schlüssel des Umlagemaßstabs |
warmWaterUsageCostDistribution.label | Text | Bezeichnung, z. B. Wohnfläche |
warmWaterShareMethod | Enum: PERCENTAGE, DEVICE, WARM_WATER_USAGE, LIVING_SPACE, NO_HOT_WATER, null | Ermittlung des Warmwasseranteils an den Brennstoffkosten bei zentraler Warmwasserbereitung: PERCENTAGE = fester Prozentsatz, DEVICE = Wärmemengenzähler, WARM_WATER_USAGE = Warmwasserverbrauch, LIVING_SPACE = Wohnfläche, NO_HOT_WATER = keine zentrale Warmwasserbereitung |
warmWaterSharePercentage | Zahl | null | Warmwasseranteil in Prozent bei warmWaterShareMethod = PERCENTAGE |
heatingSystem | Text | Art der Heizungsanlage der Liegenschaft |
fuelType | Objekt | Brennstoff der Liegenschaft |
fuelType.key | Text | Schlüssel des Brennstoffs |
fuelType.argeKey | Text | Kostenart-Schlüssel nach ARGE Heiz- und Wasserkosten |
fuelType.label | Text | Bezeichnung, z. B. Heizöl in Liter |
fuelType.unit | Text | Mengeneinheit |
fuelType.storable | Boolean | true = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben |
fuelType.emissionFactor | Zahl | null | Standard-Emissionsfaktor in kg CO₂ je kWh |
carbonCostSplitEnabled | Boolean | CO₂-Kosten werden nach CO2KostAufG aufgeteilt |
commercialUse | Boolean | Gewerbliche Nutzung (Nichtwohngebäude) |
restructuringRequirements | Boolean | Sanierungsauflagen: öffentlich-rechtliche Vorgaben schränken eine energetische Sanierung ein |
noTotalCarbonEmissionDeduction | Boolean | Kein CO₂-Gesamtabzug (WEG) |
monumentProtection | Boolean | Denkmalschutz |
PATCH/api/v1/properties/{id}/settings
Einstellungen der Liegenschaft ändern
Nur die gesendeten Felder werden geändert. Brennstoff und CO₂-Angaben gelten für alle Abrechnungen der Liegenschaft; die Verteilung nur für künftig angelegte Abrechnungsperioden, bestehende ändert PATCH /api/v1/billings/{id}/settings.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
heatingBaseCostPercentage | Enum: 0, 30, 40, 50, 100 | Grundkostenanteil Heizung in Prozent: 0, 30, 40, 50 oder 100 |
warmWaterBaseCostPercentage | Enum: 0, 30, 40, 50, 100 | Grundkostenanteil Warmwasser in Prozent: 0, 30, 40, 50 oder 100 |
heatingBaseCostDistribution | Text | null | Umlagemaßstab der Grundkosten Heizung (key) |
warmWaterBaseCostDistribution | Text | null | Umlagemaßstab der Grundkosten Warmwasser (key) |
warmWaterUsageCostDistribution | Text | null | Umlagemaßstab der Verbrauchskosten Warmwasser (key) |
warmWaterShareMethod | Enum: PERCENTAGE, DEVICE, WARM_WATER_USAGE, LIVING_SPACE, NO_HOT_WATER, null | Ermittlung des Warmwasseranteils an den Brennstoffkosten |
warmWaterSharePercentage | Zahl | null | Warmwasseranteil in Prozent bei warmWaterShareMethod = PERCENTAGE |
fuelType | Text | null | Brennstoff (fuelType.key); muss zur Heizungsanlage passen |
carbonCostSplitEnabled | Boolean | null | CO₂-Kosten nach CO2KostAufG aufteilen |
commercialUse | Boolean | null | Gewerbliche Nutzung (Nichtwohngebäude) |
restructuringRequirements | Boolean | null | Sanierungsauflagen |
noTotalCarbonEmissionDeduction | Boolean | null | Kein CO₂-Gesamtabzug (WEG) |
monumentProtection | Boolean | null | Denkmalschutz |
Beispiel
PATCH /api/v1/properties/{id}/settings
Content-Type: application/merge-patch+json
{
"commercialUse": false,
"heatingBaseCostPercentage": 30
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Liegenschaft |
heatingCostEnabled | Boolean | Heizkosten werden abgerechnet |
warmWaterCostEnabled | Boolean | Warmwasserkosten werden abgerechnet |
coldWaterCostEnabled | Boolean | Kaltwasserkosten werden abgerechnet |
additionalCostEnabled | Boolean | Weitere Betriebskosten werden abgerechnet |
heatingBaseCostPercentage | Ganzzahl | Grundkostenanteil Heizung in Prozent |
heatingUsageCostPercentage | Ganzzahl | Verbrauchskostenanteil Heizung in Prozent |
heatingBaseCostDistribution | Objekt | Umlagemaßstab der Grundkosten Heizung |
heatingBaseCostDistribution.key | Text | Schlüssel des Umlagemaßstabs |
heatingBaseCostDistribution.label | Text | Bezeichnung, z. B. Wohnfläche |
warmWaterBaseCostPercentage | Ganzzahl | Grundkostenanteil Warmwasser in Prozent |
warmWaterUsageCostPercentage | Ganzzahl | Verbrauchskostenanteil Warmwasser in Prozent |
warmWaterBaseCostDistribution | Objekt | Umlagemaßstab der Grundkosten Warmwasser |
warmWaterBaseCostDistribution.key | Text | Schlüssel des Umlagemaßstabs |
warmWaterBaseCostDistribution.label | Text | Bezeichnung, z. B. Wohnfläche |
warmWaterUsageCostDistribution | Objekt | Umlagemaßstab der Verbrauchskosten Warmwasser |
warmWaterUsageCostDistribution.key | Text | Schlüssel des Umlagemaßstabs |
warmWaterUsageCostDistribution.label | Text | Bezeichnung, z. B. Wohnfläche |
warmWaterShareMethod | Enum: PERCENTAGE, DEVICE, WARM_WATER_USAGE, LIVING_SPACE, NO_HOT_WATER, null | Ermittlung des Warmwasseranteils an den Brennstoffkosten bei zentraler Warmwasserbereitung: PERCENTAGE = fester Prozentsatz, DEVICE = Wärmemengenzähler, WARM_WATER_USAGE = Warmwasserverbrauch, LIVING_SPACE = Wohnfläche, NO_HOT_WATER = keine zentrale Warmwasserbereitung |
warmWaterSharePercentage | Zahl | null | Warmwasseranteil in Prozent bei warmWaterShareMethod = PERCENTAGE |
heatingSystem | Text | Art der Heizungsanlage der Liegenschaft |
fuelType | Objekt | Brennstoff der Liegenschaft |
fuelType.key | Text | Schlüssel des Brennstoffs |
fuelType.argeKey | Text | Kostenart-Schlüssel nach ARGE Heiz- und Wasserkosten |
fuelType.label | Text | Bezeichnung, z. B. Heizöl in Liter |
fuelType.unit | Text | Mengeneinheit |
fuelType.storable | Boolean | true = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben |
fuelType.emissionFactor | Zahl | null | Standard-Emissionsfaktor in kg CO₂ je kWh |
carbonCostSplitEnabled | Boolean | CO₂-Kosten werden nach CO2KostAufG aufgeteilt |
commercialUse | Boolean | Gewerbliche Nutzung (Nichtwohngebäude) |
restructuringRequirements | Boolean | Sanierungsauflagen: öffentlich-rechtliche Vorgaben schränken eine energetische Sanierung ein |
noTotalCarbonEmissionDeduction | Boolean | Kein CO₂-Gesamtabzug (WEG) |
monumentProtection | Boolean | Denkmalschutz |
GET/api/v1/properties/{propertyId}/price-list
Preisliste abrufen
Preise der Leistungen, die für diese Liegenschaft neu gebucht werden; bereits gebuchte Leistungen behalten ihren Preis. Antwortet AssetWork nicht, kommt 503 mit Retry-After. Kostenpflichtige Aufrufe buchen: 00001 Grundleistung Liegenschaft je Abrechnungsperiode, 00002 Heiz- und Warmwasserkosten, 00003 weitere Betriebskosten, 00004 Kaltwasserkosten, 00039 Zuschlag für einen Abrechnungszeitraum kürzer als ein Jahr.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
propertyId Pflicht |
Pfad | Text | ServicePrice identifier |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
serviceNumber | Text | Leistungsnummer |
title | Text | Bezeichnung der Leistung |
price | Zahl | null | Preis in Euro; null, wenn AssetWork keinen Preis nennt |
Einheiten
PATCH/api/v1/apartment-areas/{id}
Fassung der Flächen korrigieren
Korrigiert eine bestehende Fassung; nicht gesendete Felder bleiben unverändert. Für eine Änderung ab einem Datum eine neue Fassung erfassen. Bereits übermittelte Abrechnungen bleiben unverändert.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
validFrom | Datum/Zeit | null | Gültig ab; bei der ersten Fassung nicht änderbar |
area | Zahl | null | Wohn- bzw. Nutzfläche in m² |
heatingArea | Zahl | null | Beheizte Fläche in m² (Heizkostenverteilung) |
warmWaterArea | Zahl | null | Fläche für die Warmwasserkosten in m² |
additionalCostArea | Zahl | null | Fläche für die Nebenkosten in m² |
commercialArea | Zahl | null | Davon gewerblich genutzt in m² |
ownershipShare | Zahl | null | Miteigentumsanteil (z. B. in Tausendsteln), 0 bis 10.000 |
personCount | Ganzzahl | null | Anzahl der Personen, 0 bis 12 |
Beispiel
PATCH /api/v1/apartment-areas/{id}
Content-Type: application/merge-patch+json
{
"personCount": 3
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | ID der Fassung |
apartment | Objekt | Einheit |
apartment.id | UUID | UUID der Einheit |
apartment.label | Text | null | Bezeichnung der Einheit |
validFrom | Datum/Zeit | null | Gültig ab; null = von Anfang an (erste Fassung) |
area | Zahl | Wohn- bzw. Nutzfläche in m² |
heatingArea | Zahl | Beheizte Fläche in m² (Heizkostenverteilung) |
warmWaterArea | Zahl | Fläche für die Warmwasserkosten in m² |
additionalCostArea | Zahl | Fläche für die Nebenkosten in m² |
commercialArea | Zahl | Davon gewerblich genutzt in m² |
ownershipShare | Zahl | null | Miteigentumsanteil (z. B. in Tausendsteln) |
personCount | Ganzzahl | null | Anzahl der Personen |
GET/api/v1/apartments
Einheiten auflisten
Retrieves the collection of Apartment resources.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
page |
Query | Ganzzahl | Seite, beginnend bei 1 |
itemsPerPage |
Query | Ganzzahl | Einträge pro Seite, Standard 100, höchstens 500 |
identifier |
Query | Text | Nummer in der AssetApp, exakte Übereinstimmung |
identifier[] |
Query | Liste | Mehrere Werte, z. B. identifier[]=A&identifier[]=B |
label |
Query | Text | Bezeichnung, Teiltreffer |
property |
Query | Text | Filtert nach der UUID von „property“. |
updatedAt[before] |
Query | Datum/Zeit | Nur Einträge bis zu diesem Zeitpunkt (einschließlich) |
updatedAt[strictly_before] |
Query | Datum/Zeit | Nur Einträge vor diesem Zeitpunkt |
updatedAt[after] |
Query | Datum/Zeit | Nur Einträge ab diesem Zeitpunkt (einschließlich) |
updatedAt[strictly_after] |
Query | Datum/Zeit | Nur Einträge nach diesem Zeitpunkt |
changedSince |
Query | Text | Nur Einträge, die selbst oder deren mitgelieferte Daten (z. B. Adresse, Kontaktdaten) seit diesem Zeitpunkt angelegt oder geändert wurden (ISO 8601). |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Einheit |
identifier | Text | Nummer der Einheit in der AssetApp |
number | Ganzzahl | null | Laufende Nummer innerhalb der Liegenschaft |
label | Text | null | Bezeichnung, z. B. „Wohnung 04“ |
floor | Ganzzahl | Etage |
location | Text | null | Lage, z. B. „links“ |
partnerNumber | Text | null | Eigene Nummer der Hausverwaltung bzw. des ERP-Systems |
state | Enum: OPEN, DONE, ARCHIVED | Ausstattungsstatus |
address | Objekt | Anschrift der Einheit |
address.street | Text | Straße |
address.streetNumber | Text | Hausnummer |
address.postcode | Text | Postleitzahl |
address.city | Text | Ort |
address.country | Text | Land (ISO 3166-1 alpha-2) |
address.additional | Text | null | Adresszusatz |
property | Objekt | Liegenschaft der Einheit |
property.id | UUID | UUID der Liegenschaft |
property.label | Text | Bezeichnung der Liegenschaft |
property.address | Objekt | Anschrift der Liegenschaft |
property.address.street | Text | Straße |
property.address.streetNumber | Text | Hausnummer |
property.address.postcode | Text | Postleitzahl |
property.address.city | Text | Ort |
property.address.country | Text | Land (ISO 3166-1 alpha-2) |
property.address.additional | Text | null | Adresszusatz |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
GET/api/v1/apartments/{apartmentId}/areas
Flächen und Personen einer Einheit
Alle Fassungen, älteste zuerst. Eine Fassung gilt ab validFrom bis zur nächsten; die erste gilt von Anfang an (validFrom = null).
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
apartmentId Pflicht |
Pfad | Text | ApartmentArea identifier |
page |
Query | Ganzzahl | Seite, beginnend bei 1 |
itemsPerPage |
Query | Ganzzahl | Einträge pro Seite, Standard 100, höchstens 500 |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | ID der Fassung |
apartment | Objekt | Einheit |
apartment.id | UUID | UUID der Einheit |
apartment.label | Text | null | Bezeichnung der Einheit |
validFrom | Datum/Zeit | null | Gültig ab; null = von Anfang an (erste Fassung) |
area | Zahl | Wohn- bzw. Nutzfläche in m² |
heatingArea | Zahl | Beheizte Fläche in m² (Heizkostenverteilung) |
warmWaterArea | Zahl | Fläche für die Warmwasserkosten in m² |
additionalCostArea | Zahl | Fläche für die Nebenkosten in m² |
commercialArea | Zahl | Davon gewerblich genutzt in m² |
ownershipShare | Zahl | null | Miteigentumsanteil (z. B. in Tausendsteln) |
personCount | Ganzzahl | null | Anzahl der Personen |
POST/api/v1/apartments/{apartmentId}/areas
Neue Fassung der Flächen erfassen
Neue Flächen, Anteile oder Personenzahl ab einem Datum, z. B. nach einem Umbau oder bei einem Mieterwechsel mit anderer Personenzahl. Bereits übermittelte Abrechnungen bleiben unverändert. Hat die Einheit noch keine Fassung, gilt die neue von Anfang an.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
apartmentId Pflicht |
Pfad | Text | ApartmentArea identifier |
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
validFrom | Datum/Zeit | null | Gültig ab |
area | Zahl | null | Wohn- bzw. Nutzfläche in m² |
heatingArea | Zahl | null | Beheizte Fläche in m² (Heizkostenverteilung) |
warmWaterArea | Zahl | null | Fläche für die Warmwasserkosten in m² |
additionalCostArea | Zahl | null | Fläche für die Nebenkosten in m² |
commercialArea | Zahl | null | Davon gewerblich genutzt in m² |
ownershipShare | Zahl | null | Miteigentumsanteil (z. B. in Tausendsteln), 0 bis 10.000 |
personCount | Ganzzahl | null | Anzahl der Personen, 0 bis 12 |
Beispiel
POST /api/v1/apartments/{apartmentId}/areas
Content-Type: application/json
{
"validFrom": "2026-07-01",
"area": 78.5,
"heatingArea": 78.5,
"warmWaterArea": 78.5,
"additionalCostArea": 78.5,
"commercialArea": 0,
"ownershipShare": 112.5,
"personCount": 2
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | ID der Fassung |
apartment | Objekt | Einheit |
apartment.id | UUID | UUID der Einheit |
apartment.label | Text | null | Bezeichnung der Einheit |
validFrom | Datum/Zeit | null | Gültig ab; null = von Anfang an (erste Fassung) |
area | Zahl | Wohn- bzw. Nutzfläche in m² |
heatingArea | Zahl | Beheizte Fläche in m² (Heizkostenverteilung) |
warmWaterArea | Zahl | Fläche für die Warmwasserkosten in m² |
additionalCostArea | Zahl | Fläche für die Nebenkosten in m² |
commercialArea | Zahl | Davon gewerblich genutzt in m² |
ownershipShare | Zahl | null | Miteigentumsanteil (z. B. in Tausendsteln) |
personCount | Ganzzahl | null | Anzahl der Personen |
GET/api/v1/apartments/{id}
Einheit abrufen
Retrieves a Apartment resource.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Einheit |
identifier | Text | Nummer der Einheit in der AssetApp |
number | Ganzzahl | null | Laufende Nummer innerhalb der Liegenschaft |
label | Text | null | Bezeichnung, z. B. „Wohnung 04“ |
floor | Ganzzahl | Etage |
location | Text | null | Lage, z. B. „links“ |
partnerNumber | Text | null | Eigene Nummer der Hausverwaltung bzw. des ERP-Systems |
state | Enum: OPEN, DONE, ARCHIVED | Ausstattungsstatus |
address | Objekt | Anschrift der Einheit |
address.street | Text | Straße |
address.streetNumber | Text | Hausnummer |
address.postcode | Text | Postleitzahl |
address.city | Text | Ort |
address.country | Text | Land (ISO 3166-1 alpha-2) |
address.additional | Text | null | Adresszusatz |
property | Objekt | Liegenschaft der Einheit |
property.id | UUID | UUID der Liegenschaft |
property.label | Text | Bezeichnung der Liegenschaft |
property.address | Objekt | Anschrift der Liegenschaft |
property.address.street | Text | Straße |
property.address.streetNumber | Text | Hausnummer |
property.address.postcode | Text | Postleitzahl |
property.address.city | Text | Ort |
property.address.country | Text | Land (ISO 3166-1 alpha-2) |
property.address.additional | Text | null | Adresszusatz |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
PATCH/api/v1/apartments/{id}
Stammdaten einer Einheit ändern
Bezeichnung, Lage, Etage und Partnernummer. Flächen, Anteile und Personenzahl werden als Fassungen unter „Flächen und Personen einer Einheit“ gepflegt.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
label | Text | null | Bezeichnung |
location | Text | null | Lage; null entfernt sie |
floor | Ganzzahl | null | Etage |
partnerNumber | Text | null | Eigene Nummer der Hausverwaltung (höchstens 20 Zeichen); null entfernt sie |
Beispiel
PATCH /api/v1/apartments/{id}
Content-Type: application/merge-patch+json
{
"label": "Wohnung 04",
"location": "links",
"floor": 2
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Einheit |
identifier | Text | Nummer der Einheit in der AssetApp |
number | Ganzzahl | null | Laufende Nummer innerhalb der Liegenschaft |
label | Text | null | Bezeichnung, z. B. „Wohnung 04“ |
floor | Ganzzahl | Etage |
location | Text | null | Lage, z. B. „links“ |
partnerNumber | Text | null | Eigene Nummer der Hausverwaltung bzw. des ERP-Systems |
state | Enum: OPEN, DONE, ARCHIVED | Ausstattungsstatus |
address | Objekt | Anschrift der Einheit |
address.street | Text | Straße |
address.streetNumber | Text | Hausnummer |
address.postcode | Text | Postleitzahl |
address.city | Text | Ort |
address.country | Text | Land (ISO 3166-1 alpha-2) |
address.additional | Text | null | Adresszusatz |
property | Objekt | Liegenschaft der Einheit |
property.id | UUID | UUID der Liegenschaft |
property.label | Text | Bezeichnung der Liegenschaft |
property.address | Objekt | Anschrift der Liegenschaft |
property.address.street | Text | Straße |
property.address.streetNumber | Text | Hausnummer |
property.address.postcode | Text | Postleitzahl |
property.address.city | Text | Ort |
property.address.country | Text | Land (ISO 3166-1 alpha-2) |
property.address.additional | Text | null | Adresszusatz |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
Mieter
GET/api/v1/tenants
Mieter auflisten
Mietverhältnisse der Einheiten. end[after]=<heute> liefert die aktuellen Mieter; ein offenes Ende zählt als aktuell.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
page |
Query | Ganzzahl | Seite, beginnend bei 1 |
itemsPerPage |
Query | Ganzzahl | Einträge pro Seite, Standard 100, höchstens 500 |
apartment |
Query | Text | Filtert nach der UUID von „apartment“. |
apartment.property |
Query | Text | Filtert nach der UUID von „apartment.property“. |
begin[before] |
Query | Datum/Zeit | Nur Einträge bis zu diesem Zeitpunkt (einschließlich) |
begin[strictly_before] |
Query | Datum/Zeit | Nur Einträge vor diesem Zeitpunkt |
begin[after] |
Query | Datum/Zeit | Nur Einträge ab diesem Zeitpunkt (einschließlich) |
begin[strictly_after] |
Query | Datum/Zeit | Nur Einträge nach diesem Zeitpunkt |
end[before] |
Query | Datum/Zeit | Nur Einträge bis zu diesem Zeitpunkt (einschließlich) |
end[strictly_before] |
Query | Datum/Zeit | Nur Einträge vor diesem Zeitpunkt |
end[after] |
Query | Datum/Zeit | Nur Einträge ab diesem Zeitpunkt (einschließlich) |
end[strictly_after] |
Query | Datum/Zeit | Nur Einträge nach diesem Zeitpunkt |
updatedAt[before] |
Query | Datum/Zeit | Nur Einträge bis zu diesem Zeitpunkt (einschließlich) |
updatedAt[strictly_before] |
Query | Datum/Zeit | Nur Einträge vor diesem Zeitpunkt |
updatedAt[after] |
Query | Datum/Zeit | Nur Einträge ab diesem Zeitpunkt (einschließlich) |
updatedAt[strictly_after] |
Query | Datum/Zeit | Nur Einträge nach diesem Zeitpunkt |
changedSince |
Query | Text | Nur Einträge, die selbst oder deren mitgelieferte Daten (z. B. Adresse, Kontaktdaten) seit diesem Zeitpunkt angelegt oder geändert wurden (ISO 8601). |
reference |
Query | Text | Kennzeichen des Mieters, z. B. Mieterkontonummer; exakte Übereinstimmung |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | ID des Mietverhältnisses |
apartment | Objekt | Einheit |
apartment.id | UUID | UUID der Einheit |
apartment.label | Text | null | Bezeichnung der Einheit |
reference | Text | null | Kennzeichen des Mieters im Fremdsystem, z. B. die Mieterkontonummer (max. 20 Zeichen); gilt für die Person und damit für alle ihre Mietverhältnisse. Wird in der ARGE-Übergabe als Ordnungsbegriff des Auftraggebers verwendet. |
personId | UUID | null | UUID der Person; gleich für alle Mietverhältnisse derselben Person, z. B. bei einem Umzug innerhalb der Liegenschaft |
vacant | Boolean | true = Leerstand ohne Person; bei einer gelöschten oder nicht sichtbaren Person false, Name und Kontaktdaten sind dann leer |
name | Text | null | Name des Mieters |
company | Text | null | Firma |
email | Text | null | E-Mail-Adresse |
phone | Text | null | Telefonnummer |
begin | Datum/Zeit | Einzug |
end | Datum/Zeit | null | Auszug; null = unbefristet |
prepaymentNetAmount | Zahl | null | Vorauszahlungen netto für den Abrechnungszeitraum (Summe); aus dem Bruttobetrag abgeleitet |
prepaymentGrossAmount | Zahl | null | Vorauszahlungen brutto für den Abrechnungszeitraum (Summe, nicht monatlich) |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
POST/api/v1/tenants
Einzug erfassen
Legt das Mietverhältnis an. Mit vacant: true wird stattdessen ein Leerstand ohne Person erfasst, z. B. nach einem Auszug ohne Nachmieter; erst danach ist die Einheit für die Abrechnung vollständig. Die Person wird wiederverwendet, wenn sie bekannt ist: über personId, sonst über reference, sonst über email (nur Mieter der eigenen Liegenschaften; deren Kontaktdaten bleiben unverändert). Andernfalls wird sie neu angelegt. Mit adjustOverlappingTenancies wird ein überschneidendes Mietverhältnis automatisch angepasst (Mieterwechsel). Der Mieter erhält keine Einladung.
Scope: write
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
apartment | UUID | UUID der Einheit |
personId | UUID | null | Bekannte Person (personId aus /api/v1/tenants), die einzieht; Name und Kontaktdaten werden dann nicht benötigt |
begin | Datum/Zeit | null | Einzugsdatum |
end | Datum/Zeit | null | Auszugsdatum, falls bereits bekannt |
name | Text | null | Name des Mieters; Pflicht, wenn keine bekannte Person gefunden wird |
reference | Text | null | Kennzeichen des Mieters im Fremdsystem, z. B. die Mieterkontonummer (max. 20 Zeichen); gilt für die Person und damit für alle ihre Mietverhältnisse. Wird in der ARGE-Übergabe als Ordnungsbegriff des Auftraggebers verwendet. |
company | Text | null | Firma |
email | Text | null | E-Mail-Adresse; der Mieter erhält keine Einladung |
phone | Text | null | Telefonnummer |
prepaymentGrossAmount | Zahl | null | Vorauszahlungen brutto für den Abrechnungszeitraum (Summe, nicht monatlich); bei einem Mietverhältnis über mehrere Jahre vor jeder Abrechnung mit PATCH aktualisieren |
nettoCalculation | Boolean | Vorauszahlungen netto abrechnen |
adjustOverlappingTenancies | Boolean | Ein überschneidendes Mietverhältnis der Einheit anpassen statt die Anfrage abzulehnen (Mieterwechsel) |
vacant | Boolean | Leerstand erfassen, z. B. nach einem Auszug ohne Nachmieter; ohne Person und ohne Vorauszahlung |
Beispiel
POST /api/v1/tenants
Content-Type: application/json
{
"apartment": "6f1c2b2e-0d7e-4a8f-9a51-0d0c8f1e2a33",
"begin": "2026-07-01",
"name": "Erika Mustermann",
"email": "erika.mustermann@example.com",
"phone": "+49 89 1234567",
"reference": "MK 4711",
"prepaymentGrossAmount": 1140.0,
"adjustOverlappingTenancies": true
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | ID des Mietverhältnisses |
apartment | Objekt | Einheit |
apartment.id | UUID | UUID der Einheit |
apartment.label | Text | null | Bezeichnung der Einheit |
reference | Text | null | Kennzeichen des Mieters im Fremdsystem, z. B. die Mieterkontonummer (max. 20 Zeichen); gilt für die Person und damit für alle ihre Mietverhältnisse. Wird in der ARGE-Übergabe als Ordnungsbegriff des Auftraggebers verwendet. |
personId | UUID | null | UUID der Person; gleich für alle Mietverhältnisse derselben Person, z. B. bei einem Umzug innerhalb der Liegenschaft |
vacant | Boolean | true = Leerstand ohne Person; bei einer gelöschten oder nicht sichtbaren Person false, Name und Kontaktdaten sind dann leer |
name | Text | null | Name des Mieters |
company | Text | null | Firma |
email | Text | null | E-Mail-Adresse |
phone | Text | null | Telefonnummer |
begin | Datum/Zeit | Einzug |
end | Datum/Zeit | null | Auszug; null = unbefristet |
prepaymentNetAmount | Zahl | null | Vorauszahlungen netto für den Abrechnungszeitraum (Summe); aus dem Bruttobetrag abgeleitet |
prepaymentGrossAmount | Zahl | null | Vorauszahlungen brutto für den Abrechnungszeitraum (Summe, nicht monatlich) |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
GET/api/v1/tenants/{id}
Mieter abrufen
Retrieves a Tenant resource.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | ID des Mietverhältnisses |
apartment | Objekt | Einheit |
apartment.id | UUID | UUID der Einheit |
apartment.label | Text | null | Bezeichnung der Einheit |
reference | Text | null | Kennzeichen des Mieters im Fremdsystem, z. B. die Mieterkontonummer (max. 20 Zeichen); gilt für die Person und damit für alle ihre Mietverhältnisse. Wird in der ARGE-Übergabe als Ordnungsbegriff des Auftraggebers verwendet. |
personId | UUID | null | UUID der Person; gleich für alle Mietverhältnisse derselben Person, z. B. bei einem Umzug innerhalb der Liegenschaft |
vacant | Boolean | true = Leerstand ohne Person; bei einer gelöschten oder nicht sichtbaren Person false, Name und Kontaktdaten sind dann leer |
name | Text | null | Name des Mieters |
company | Text | null | Firma |
email | Text | null | E-Mail-Adresse |
phone | Text | null | Telefonnummer |
begin | Datum/Zeit | Einzug |
end | Datum/Zeit | null | Auszug; null = unbefristet |
prepaymentNetAmount | Zahl | null | Vorauszahlungen netto für den Abrechnungszeitraum (Summe); aus dem Bruttobetrag abgeleitet |
prepaymentGrossAmount | Zahl | null | Vorauszahlungen brutto für den Abrechnungszeitraum (Summe, nicht monatlich) |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
PATCH/api/v1/tenants/{id}
Mietverhältnis ändern
Auszug (end), Korrektur des Zeitraums, neue Vorauszahlung oder Kennzeichen (reference). Überschneidungen mit anderen Mietverhältnissen werden abgelehnt; ein Mieterwechsel wird mit „Einzug erfassen“ gemeldet.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
begin | Datum/Zeit | null | Neues Einzugsdatum |
end | Datum/Zeit | null | Auszugsdatum; null öffnet das Mietverhältnis wieder, weglassen behält es bei |
reference | Text | null | Kennzeichen des Mieters im Fremdsystem, z. B. die Mieterkontonummer (max. 20 Zeichen); gilt für die Person und damit für alle ihre Mietverhältnisse. Wird in der ARGE-Übergabe als Ordnungsbegriff des Auftraggebers verwendet. null löscht es, weglassen behält es bei. |
prepaymentGrossAmount | Zahl | null | Vorauszahlungen brutto für den Abrechnungszeitraum (Summe, nicht monatlich) |
Beispiel
PATCH /api/v1/tenants/{id}
Content-Type: application/merge-patch+json
{
"end": "2027-06-30",
"prepaymentGrossAmount": 1200.0
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | ID des Mietverhältnisses |
apartment | Objekt | Einheit |
apartment.id | UUID | UUID der Einheit |
apartment.label | Text | null | Bezeichnung der Einheit |
reference | Text | null | Kennzeichen des Mieters im Fremdsystem, z. B. die Mieterkontonummer (max. 20 Zeichen); gilt für die Person und damit für alle ihre Mietverhältnisse. Wird in der ARGE-Übergabe als Ordnungsbegriff des Auftraggebers verwendet. |
personId | UUID | null | UUID der Person; gleich für alle Mietverhältnisse derselben Person, z. B. bei einem Umzug innerhalb der Liegenschaft |
vacant | Boolean | true = Leerstand ohne Person; bei einer gelöschten oder nicht sichtbaren Person false, Name und Kontaktdaten sind dann leer |
name | Text | null | Name des Mieters |
company | Text | null | Firma |
email | Text | null | E-Mail-Adresse |
phone | Text | null | Telefonnummer |
begin | Datum/Zeit | Einzug |
end | Datum/Zeit | null | Auszug; null = unbefristet |
prepaymentNetAmount | Zahl | null | Vorauszahlungen netto für den Abrechnungszeitraum (Summe); aus dem Bruttobetrag abgeleitet |
prepaymentGrossAmount | Zahl | null | Vorauszahlungen brutto für den Abrechnungszeitraum (Summe, nicht monatlich) |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
DELETE/api/v1/tenants/{id}
Mietverhältnis löschen
Für falsch erfasste Mietverhältnisse; ein Auszug wird mit „Mietverhältnis ändern“ (end) gemeldet. Die Lücke im Zeitraum der Einheit bleibt bestehen, bis sie mit einem Einzug oder einer Änderung des benachbarten Mietverhältnisses geschlossen wird. Die Person selbst und ihr Konto bleiben unverändert. Bereits übermittelte Abrechnungen bleiben unverändert.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
GET/api/v1/tenants/{tenantId}/move-out-readings
Zählerstände zum Auszug prüfen
Zeigt je Gerät der Einheit, welcher Zählerstand beim Auszug (end des Mietverhältnisses) für die Abrechnung zählt: ON_DATE = Stand vom Auszugstag, NEARBY = nächstgelegener Stand innerhalb von 7 Tagen, der beim Übermitteln der Abrechnung auf den Auszugstag übernommen wird, sobald ein Nachmieter oder Leerstand folgt, MISSING = kein Stand; bitte mit „Zählerstand erfassen“ zum Auszugsdatum melden. Mehrere Stände am Auszugstag: der letzte zählt; bei gleichem Abstand der spätere. Rauchmelder haben keine Zählerstände und fehlen hier.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
tenantId Pflicht |
Pfad | Text | MoveOutReading identifier |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
deviceId | UUID | UUID des Geräts |
deviceNumber | Text | null | Gerätenummer |
deviceType | Enum: HEAT, HCA, WARM_WATER, COLD_WATER, SMOKE, ELECTRICITY, GAS | Gerätetyp |
moveOutDate | Datum/Zeit | Auszugstag, zu dem der Stand zählt |
status | Enum: ON_DATE, NEARBY, MISSING | ON_DATE, NEARBY oder MISSING |
readingDate | Datum/Zeit | null | Zeitpunkt des zählenden Stands; null bei MISSING |
value | Zahl | null | Zählerstand; null bei MISSING |
unit | Enum: m³, kWh, Einheiten, "", null | Einheit |
readingType | Enum: MANUAL, REMOTE, ESTIMATED, SYSTEM, CALCULATED, null | Erfassungsart des Stands; null bei MISSING |
Geräte
GET/api/v1/devices
Geräte auflisten
Mit number wird ein Zähler über seine Seriennummer gefunden.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
page |
Query | Ganzzahl | Seite, beginnend bei 1 |
itemsPerPage |
Query | Ganzzahl | Einträge pro Seite, Standard 100, höchstens 500 |
number |
Query | Text | Zählernummer bzw. Seriennummer, exakte Übereinstimmung |
number[] |
Query | Liste | Mehrere Werte, z. B. number[]=A&number[]=B |
state |
Query | Text | Status, exakte Übereinstimmung |
state[] |
Query | Liste | Mehrere Werte, z. B. state[]=A&state[]=B |
type |
Query | Text | Gerätetyp, exakte Übereinstimmung |
type[] |
Query | Liste | Mehrere Werte, z. B. type[]=A&type[]=B |
updatedAt[before] |
Query | Datum/Zeit | Nur Einträge bis zu diesem Zeitpunkt (einschließlich) |
updatedAt[strictly_before] |
Query | Datum/Zeit | Nur Einträge vor diesem Zeitpunkt |
updatedAt[after] |
Query | Datum/Zeit | Nur Einträge ab diesem Zeitpunkt (einschließlich) |
updatedAt[strictly_after] |
Query | Datum/Zeit | Nur Einträge nach diesem Zeitpunkt |
property |
Query | Text | Filtert nach der UUID von „property“. |
apartment |
Query | Text | Filtert nach der UUID von „apartment“. |
changedSince |
Query | Text | Nur Einträge, die selbst oder deren mitgelieferte Daten (z. B. Adresse, Kontaktdaten) seit diesem Zeitpunkt angelegt oder geändert wurden (ISO 8601). |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID des Geräts; für alle Folgeabfragen verwenden |
number | Text | null | Zählernummer bzw. Seriennummer, wie auf dem Gerät aufgedruckt |
type | Enum: HEAT, HCA, WARM_WATER, COLD_WATER, SMOKE, ELECTRICITY, GAS | Gerätetyp |
state | Enum: ACTIVE, HINT, ERROR, DISMANTLED | Status des Geräts |
manufacturer | Text | null | Hersteller |
begin | Datum/Zeit | Montagedatum |
end | Datum/Zeit | null | Demontagedatum; null = aktuell montiert |
apartment | Objekt | Zugeordnete Einheit; null bei Geräten der Liegenschaft (z. B. Hauptzähler) |
apartment.id | UUID | UUID der Einheit |
apartment.label | Text | null | Bezeichnung der Einheit |
property | Objekt | Zugeordnete Liegenschaft |
property.id | UUID | UUID der Liegenschaft |
property.label | Text | Bezeichnung der Liegenschaft |
property.address | Objekt | Anschrift der Liegenschaft |
property.address.street | Text | Straße |
property.address.streetNumber | Text | Hausnummer |
property.address.postcode | Text | Postleitzahl |
property.address.city | Text | Ort |
property.address.country | Text | Land (ISO 3166-1 alpha-2) |
property.address.additional | Text | null | Adresszusatz |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
GET/api/v1/devices/{id}
Gerät abrufen
Retrieves a Device resource.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID des Geräts; für alle Folgeabfragen verwenden |
number | Text | null | Zählernummer bzw. Seriennummer, wie auf dem Gerät aufgedruckt |
type | Enum: HEAT, HCA, WARM_WATER, COLD_WATER, SMOKE, ELECTRICITY, GAS | Gerätetyp |
state | Enum: ACTIVE, HINT, ERROR, DISMANTLED | Status des Geräts |
manufacturer | Text | null | Hersteller |
begin | Datum/Zeit | Montagedatum |
end | Datum/Zeit | null | Demontagedatum; null = aktuell montiert |
apartment | Objekt | Zugeordnete Einheit; null bei Geräten der Liegenschaft (z. B. Hauptzähler) |
apartment.id | UUID | UUID der Einheit |
apartment.label | Text | null | Bezeichnung der Einheit |
property | Objekt | Zugeordnete Liegenschaft |
property.id | UUID | UUID der Liegenschaft |
property.label | Text | Bezeichnung der Liegenschaft |
property.address | Objekt | Anschrift der Liegenschaft |
property.address.street | Text | Straße |
property.address.streetNumber | Text | Hausnummer |
property.address.postcode | Text | Postleitzahl |
property.address.city | Text | Ort |
property.address.country | Text | Land (ISO 3166-1 alpha-2) |
property.address.additional | Text | null | Adresszusatz |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
Zählerstände
GET/api/v1/devices/{deviceId}/values
Zählerstände eines Geräts
Aktuelle und historische Zählerstände. isBillingRelevant=true liefert nur die abrechnungsrelevanten Werte.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
deviceId Pflicht |
Pfad | UUID | UUID des Objekts |
page |
Query | Ganzzahl | Seite, beginnend bei 1 |
itemsPerPage |
Query | Ganzzahl | Einträge pro Seite, Standard 100, höchstens 500 |
reportDate[before] |
Query | Datum/Zeit | Nur Einträge bis zu diesem Zeitpunkt (einschließlich) |
reportDate[strictly_before] |
Query | Datum/Zeit | Nur Einträge vor diesem Zeitpunkt |
reportDate[after] |
Query | Datum/Zeit | Nur Einträge ab diesem Zeitpunkt (einschließlich) |
reportDate[strictly_after] |
Query | Datum/Zeit | Nur Einträge nach diesem Zeitpunkt |
isBillingRelevant |
Query | Boolean | true liefert nur abrechnungsrelevante Werte |
order[reportDate] |
Query | Enum: asc, desc | Sortierung |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | Text | ID des Messwerts |
reportDate | Datum/Zeit | Zeitpunkt der Erfassung (ISO 8601 mit Zeitzone) |
value | Zahl | Zählerstand |
unit | Enum: m³, kWh, Einheiten, "", null | Einheit; leer bei Rauchmeldern |
type | Enum: MANUAL, REMOTE, ESTIMATED, SYSTEM, CALCULATED | Erfassungsart: REMOTE = per Funk, MANUAL = manuell, ESTIMATED = geschätzt, SYSTEM/CALCULATED = vom System berechnet |
deviceType | Enum: HEAT, HCA, WARM_WATER, COLD_WATER, SMOKE, ELECTRICITY, GAS | Gerätetyp des Zählers |
isBillingRelevant | Boolean | true = fließt in die Heizkostenabrechnung ein |
POST/api/v1/devices/{deviceId}/values
Zählerstand erfassen
Erfasst einen manuellen Zählerstand. Manuelle Werte sind abrechnungsrelevant; das Datum muss im Einbauzeitraum des Geräts liegen.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
deviceId Pflicht |
Pfad | UUID | UUID des Objekts |
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
reportDate | Datum/Zeit | null | Ablesezeitpunkt (ISO 8601 mit Zeitzone) |
value | Zahl | null | Zählerstand |
Beispiel
POST /api/v1/devices/{deviceId}/values
Content-Type: application/json
{
"reportDate": "2026-06-30T12:00:00+02:00",
"value": 1234.567
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | Text | ID des Messwerts |
reportDate | Datum/Zeit | Zeitpunkt der Erfassung (ISO 8601 mit Zeitzone) |
value | Zahl | Zählerstand |
unit | Enum: m³, kWh, Einheiten, "", null | Einheit; leer bei Rauchmeldern |
type | Enum: MANUAL, REMOTE, ESTIMATED, SYSTEM, CALCULATED | Erfassungsart: REMOTE = per Funk, MANUAL = manuell, ESTIMATED = geschätzt, SYSTEM/CALCULATED = vom System berechnet |
deviceType | Enum: HEAT, HCA, WARM_WATER, COLD_WATER, SMOKE, ELECTRICITY, GAS | Gerätetyp des Zählers |
isBillingRelevant | Boolean | true = fließt in die Heizkostenabrechnung ein |
Abrechnungen
PATCH/api/v1/billing-costs/{id}
Kostenposition ändern
Nur die gesendeten Felder werden geändert.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
costType | Text | null | Schlüssel der Kostenart; nur innerhalb derselben Kategorie (HEATING bzw. ADDITIONAL) änderbar |
date | Datum/Zeit | null | Rechnungsdatum |
netAmount | Zahl | null | Betrag netto |
grossAmount | Zahl | null | Betrag brutto |
taxRate | Zahl | null | Umsatzsteuersatz in Prozent; null = abweichender Satz |
invoiceNumber | Text | null | Rechnungsnummer |
description | Text | null | Abweichende Bezeichnung der Position |
labourCost | Zahl | null | Darin enthaltene Arbeitskosten (§ 35a EStG) |
distribution | Text | null | Umlagemaßstab (distribution.key); nur bei Betriebskosten. 25 braucht tenants, 32 braucht apartments |
tenants | Liste | null | Nur bei Umlagemaßstab 25 (zugeordnete Nutzer): IDs der Mietverhältnisse aus /api/v1/tenants, auf die die Kosten umgelegt werden |
apartments | Liste | null | Nur bei Umlagemaßstab 32 (zugeordnete Nutzereinheiten): UUIDs der Einheiten, auf die die Kosten umgelegt werden |
Beispiel
PATCH /api/v1/billing-costs/{id}
Content-Type: application/merge-patch+json
{
"netAmount": 92.44,
"grossAmount": 110.0
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Kostenposition |
category | Enum: HEATING, ADDITIONAL | HEATING = Heiz- und Warmwassernebenkosten, ADDITIONAL = Kaltwasser und weitere Betriebskosten |
costType | Objekt | Kostenart |
costType.key | Text | Schlüssel der Kostenart, siehe /api/v1/cost-types |
costType.argeKey | Text | Kostenart-Schlüssel nach ARGE Heiz- und Wasserkosten; nicht eindeutig |
costType.label | Text | Bezeichnung der Kostenart |
description | Text | null | Abweichende Bezeichnung der Position |
date | Datum/Zeit | Rechnungsdatum |
invoiceNumber | Text | null | Rechnungsnummer |
netAmount | Zahl | null | Betrag netto |
grossAmount | Zahl | Betrag brutto |
taxRate | Zahl | null | Umsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag |
labourCost | Zahl | null | Darin enthaltene Arbeitskosten (§ 35a EStG) |
distribution | Objekt | Umlagemaßstab; nur bei ADDITIONAL |
distribution.key | Text | Schlüssel des Umlagemaßstabs |
distribution.label | Text | Bezeichnung, z. B. Wohnfläche |
tenants | Liste | Mietverhältnisse, auf die die Kosten umgelegt werden; nur bei Umlagemaßstab 25 |
apartments | Liste | Einheiten, auf die die Kosten umgelegt werden; nur bei Umlagemaßstab 32 |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
DELETE/api/v1/billing-costs/{id}
Kostenposition löschen
Removes the BillingCost resource.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
GET/api/v1/billing-documents/{id}
Abrechnungsdokument abrufen
Retrieves a BillingDocument resource.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | ID des Dokuments |
type | Enum: PROPERTY_METER_PROTOCOL, TENANT_METER_PROTOCOL, INQUIRY, INQUIRY_RESPONSE, CONTRACT, ADVANCE_PAYMENT_ADJUSTMENT, ORDER_CONFIRMATION, INSTALLATION, USER_UPLOADED, PREVIOUS_CONTRACT, SERVICE_INVOICE, DEVICE_INVOICE, FLOOR_PLAN, PROPERTY_HEATING_BILL, APARTMENT_HEATING_BILL, INDIVIDUAL_CUSTOMER_LETTER, COST_TRANSMISSION_DATA, TERMINATION_CONFIRMATION, TERMINATION_LETTER_THIRD_PARTY_MEASUREMENT, DELIVERY_NOTE_DEVICES, TENANT_LIST, MONTHLY_CONSUMPTION_INFORMATION, INSTALLATION_PROTOCOL, SEPA_DIRECT_DEBIT_MANDATE, SEPA_DIRECT_DEBIT_MANDATE_CONFIRMATION, PARTITION_DECLARATION, APARTMENT_CONSUMPTION_ANALYSIS, CONTRACT_CONFIRMATION_SERVICE, CONTRACT_CONFIRMATION_DEVICE, BILLING_DOCUMENT, INSTALLATION_ORDER, MANDATE, ROTATING_PLAN, ROTATING_PLAN_CONFIRMATION, PIPE_SCHEMA, METER_LIST, MISCELLANEOUS_DOCUMENT, PROPERTY_ANALYSIS_RESULT, CONTRACT_REQUESTED | Dokumentart; APARTMENT_HEATING_BILL = Einzelabrechnung, PROPERTY_HEATING_BILL = Gesamtabrechnung |
name | Text | null | Dateiname |
date | Datum/Zeit | null | Erstellt am |
apartment | Objekt | Einheit; nur bei Einzelabrechnungen |
apartment.id | UUID | UUID der Einheit |
apartment.label | Text | null | Bezeichnung der Einheit |
tenant | Objekt | Nutzer; nur bei Einzelabrechnungen |
tenant.id | Ganzzahl | null | ID des Mietverhältnisses (/api/v1/tenants/{id}); null, wenn es nicht zugeordnet werden konnte, z. B. bei Leerstand |
tenant.name | Text | null | Name, wie er auf der Abrechnung steht |
usageBegin | Datum/Zeit | null | Beginn des abgerechneten Nutzungszeitraums |
usageEnd | Datum/Zeit | null | Ende des abgerechneten Nutzungszeitraums |
totalCostGross | Zahl | null | Kosten brutto; bei der Gesamtabrechnung die Gesamtkosten der Liegenschaft |
prepaymentGross | Zahl | null | Geleistete Vorauszahlungen brutto; nur bei Einzelabrechnungen |
balanceGross | Zahl | null | Ergebnis brutto: positiv = Nachzahlung, negativ = Guthaben; nur bei Einzelabrechnungen |
pdf | Text | Pfad zum Herunterladen der PDF-Datei |
GET/api/v1/billing-documents/{id}/pdf
PDF eines Abrechnungsdokuments herunterladen
Mit Accept: application/pdf abrufen.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
GET/api/v1/billings
Abrechnungsperioden auflisten
Abrechnungsperioden aller Liegenschaften, auf die die Integration Zugriff hat. Mit state=DONE&changedSince=… lassen sich neu fertiggestellte Abrechnungen abfragen.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
page |
Query | Ganzzahl | Seite, beginnend bei 1 |
itemsPerPage |
Query | Ganzzahl | Einträge pro Seite, Standard 100, höchstens 500 |
state |
Query | Text | Status, exakte Übereinstimmung |
state[] |
Query | Liste | Mehrere Werte, z. B. state[]=A&state[]=B |
begin[before] |
Query | Datum/Zeit | Nur Einträge bis zu diesem Zeitpunkt (einschließlich) |
begin[strictly_before] |
Query | Datum/Zeit | Nur Einträge vor diesem Zeitpunkt |
begin[after] |
Query | Datum/Zeit | Nur Einträge ab diesem Zeitpunkt (einschließlich) |
begin[strictly_after] |
Query | Datum/Zeit | Nur Einträge nach diesem Zeitpunkt |
end[before] |
Query | Datum/Zeit | Nur Einträge bis zu diesem Zeitpunkt (einschließlich) |
end[strictly_before] |
Query | Datum/Zeit | Nur Einträge vor diesem Zeitpunkt |
end[after] |
Query | Datum/Zeit | Nur Einträge ab diesem Zeitpunkt (einschließlich) |
end[strictly_after] |
Query | Datum/Zeit | Nur Einträge nach diesem Zeitpunkt |
updatedAt[before] |
Query | Datum/Zeit | Nur Einträge bis zu diesem Zeitpunkt (einschließlich) |
updatedAt[strictly_before] |
Query | Datum/Zeit | Nur Einträge vor diesem Zeitpunkt |
updatedAt[after] |
Query | Datum/Zeit | Nur Einträge ab diesem Zeitpunkt (einschließlich) |
updatedAt[strictly_after] |
Query | Datum/Zeit | Nur Einträge nach diesem Zeitpunkt |
property |
Query | Text | Filtert nach der UUID von „property“. |
changedSince |
Query | Text | Nur Einträge, die selbst oder deren mitgelieferte Daten (z. B. Adresse, Kontaktdaten) seit diesem Zeitpunkt angelegt oder geändert wurden (ISO 8601). |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Abrechnungsperiode |
property | Objekt | Liegenschaft |
property.id | UUID | UUID der Liegenschaft |
property.label | Text | Bezeichnung der Liegenschaft |
property.address | Objekt | Anschrift der Liegenschaft |
property.address.street | Text | Straße |
property.address.streetNumber | Text | Hausnummer |
property.address.postcode | Text | Postleitzahl |
property.address.city | Text | Ort |
property.address.country | Text | Land (ISO 3166-1 alpha-2) |
property.address.additional | Text | null | Adresszusatz |
begin | Datum/Zeit | Beginn des Abrechnungszeitraums |
end | Datum/Zeit | Ende des Abrechnungszeitraums (Stichtag) |
state | Enum: OPEN, BILLABLE, SUBMITTED, REVIEW, DONE | OPEN = Zeitraum läuft noch, BILLABLE = Kosten können erfasst werden, SUBMITTED = Kosten übermittelt, REVIEW = Rückfrage, Kosten ergänzen und erneut übermitteln, DONE = Abrechnung erstellt, Ergebnisse unter /documents |
submitDate | Datum/Zeit | null | Zeitpunkt, zu dem die Kosten übermittelt wurden |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am, z. B. durch einen Statuswechsel |
POST/api/v1/billings Kostenpflichtig
Abrechnungsperiode anlegen (kostenpflichtig)
**Kostenpflichtig:** bucht die Grundleistung 00001, die Leistungen der gewählten Kostenarten und bei einem Zeitraum kürzer als ein Jahr zusätzlich 00039; Preise unter GET /api/v1/properties/{propertyId}/price-list. Es gelten die AGB der AssetEnergy GmbH (https://www.assetenergy.de/agb). Mindestens eine Kostenart ist nötig; Warmwasser wird mit der Heizkosten-Leistung abgerechnet und braucht eine hinterlegte Ermittlung des Warmwasseranteils (sonst 422, dann ohne Warmwasser anlegen und per PATCH /api/v1/billings/{id}/settings hinzubuchen). Überschneidet der Zeitraum eine andere Abrechnungsperiode: 422 an property. Beginnt er in der Zukunft: 400.
Scope: write
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
property | Text | null | UUID der Liegenschaft |
begin | Datum/Zeit | null | Beginn des Abrechnungszeitraums |
end | Datum/Zeit | null | Ende des Abrechnungszeitraums (Stichtag), höchstens ein Jahr nach dem Beginn |
heatingCostEnabled | Boolean | Heizkosten abrechnen (bucht 00002) |
warmWaterCostEnabled | Boolean | Warmwasserkosten abrechnen (bucht 00002) |
coldWaterCostEnabled | Boolean | Kaltwasserkosten abrechnen (bucht 00004) |
additionalCostEnabled | Boolean | Weitere Betriebskosten abrechnen (bucht 00003) |
Beispiel
POST /api/v1/billings
Content-Type: application/json
{
"property": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"begin": "2026-01-01",
"end": "2026-12-31",
"heatingCostEnabled": true,
"warmWaterCostEnabled": true,
"coldWaterCostEnabled": true
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Abrechnungsperiode |
property | Objekt | Liegenschaft |
property.id | UUID | UUID der Liegenschaft |
property.label | Text | Bezeichnung der Liegenschaft |
property.address | Objekt | Anschrift der Liegenschaft |
property.address.street | Text | Straße |
property.address.streetNumber | Text | Hausnummer |
property.address.postcode | Text | Postleitzahl |
property.address.city | Text | Ort |
property.address.country | Text | Land (ISO 3166-1 alpha-2) |
property.address.additional | Text | null | Adresszusatz |
begin | Datum/Zeit | Beginn des Abrechnungszeitraums |
end | Datum/Zeit | Ende des Abrechnungszeitraums (Stichtag) |
state | Enum: OPEN, BILLABLE, SUBMITTED, REVIEW, DONE | OPEN = Zeitraum läuft noch, BILLABLE = Kosten können erfasst werden, SUBMITTED = Kosten übermittelt, REVIEW = Rückfrage, Kosten ergänzen und erneut übermitteln, DONE = Abrechnung erstellt, Ergebnisse unter /documents |
submitDate | Datum/Zeit | null | Zeitpunkt, zu dem die Kosten übermittelt wurden |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am, z. B. durch einen Statuswechsel |
GET/api/v1/billings/{billingId}/costs
Kostenpositionen einer Abrechnung
Heiz- und Warmwassernebenkosten sowie Kaltwasser und weitere Betriebskosten, nach Rechnungsdatum sortiert. Brennstoffe stehen unter /fuel-deliveries.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
invoiceNumber |
Query | Text | Nur Positionen mit dieser Rechnungsnummer, z. B. um eine Rechnung vor dem Senden auf Dubletten zu prüfen |
billingId Pflicht |
Pfad | Text | BillingCost identifier |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Kostenposition |
category | Enum: HEATING, ADDITIONAL | HEATING = Heiz- und Warmwassernebenkosten, ADDITIONAL = Kaltwasser und weitere Betriebskosten |
costType | Objekt | Kostenart |
costType.key | Text | Schlüssel der Kostenart, siehe /api/v1/cost-types |
costType.argeKey | Text | Kostenart-Schlüssel nach ARGE Heiz- und Wasserkosten; nicht eindeutig |
costType.label | Text | Bezeichnung der Kostenart |
description | Text | null | Abweichende Bezeichnung der Position |
date | Datum/Zeit | Rechnungsdatum |
invoiceNumber | Text | null | Rechnungsnummer |
netAmount | Zahl | null | Betrag netto |
grossAmount | Zahl | Betrag brutto |
taxRate | Zahl | null | Umsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag |
labourCost | Zahl | null | Darin enthaltene Arbeitskosten (§ 35a EStG) |
distribution | Objekt | Umlagemaßstab; nur bei ADDITIONAL |
distribution.key | Text | Schlüssel des Umlagemaßstabs |
distribution.label | Text | Bezeichnung, z. B. Wohnfläche |
tenants | Liste | Mietverhältnisse, auf die die Kosten umgelegt werden; nur bei Umlagemaßstab 25 |
apartments | Liste | Einheiten, auf die die Kosten umgelegt werden; nur bei Umlagemaßstab 32 |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
POST/api/v1/billings/{billingId}/costs
Kostenposition erfassen
Die Kostenart (key aus /api/v1/cost-types) bestimmt, ob die Position zu den Heiz- oder den Betriebskosten gehört. Nach dem Übermitteln der Kosten (Status SUBMITTED oder DONE) antwortet die API mit 409.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
billingId Pflicht |
Pfad | Text | BillingCost identifier |
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
costType | Text | Schlüssel der Kostenart (key aus /api/v1/cost-types) |
date | Datum/Zeit | null | Rechnungsdatum |
netAmount | Zahl | null | Betrag netto |
grossAmount | Zahl | null | Betrag brutto |
taxRate | Zahl | null | Umsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag |
invoiceNumber | Text | null | Rechnungsnummer |
description | Text | null | Abweichende Bezeichnung der Position |
labourCost | Zahl | null | Darin enthaltene Arbeitskosten (§ 35a EStG) |
distribution | Text | null | Umlagemaßstab (distribution.key); nur bei Betriebskosten, Standard ist der Umlagemaßstab der Kostenart. 25 braucht tenants, 32 braucht apartments |
tenants | Liste | null | Nur bei Umlagemaßstab 25 (zugeordnete Nutzer): IDs der Mietverhältnisse aus /api/v1/tenants, auf die die Kosten umgelegt werden |
apartments | Liste | null | Nur bei Umlagemaßstab 32 (zugeordnete Nutzereinheiten): UUIDs der Einheiten, auf die die Kosten umgelegt werden |
Beispiel
POST /api/v1/billings/{billingId}/costs
Content-Type: application/json
{
"costType": "2030",
"date": "2025-11-14",
"invoiceNumber": "RE-2025-4711",
"netAmount": 84.03,
"grossAmount": 100.0,
"taxRate": 19
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Kostenposition |
category | Enum: HEATING, ADDITIONAL | HEATING = Heiz- und Warmwassernebenkosten, ADDITIONAL = Kaltwasser und weitere Betriebskosten |
costType | Objekt | Kostenart |
costType.key | Text | Schlüssel der Kostenart, siehe /api/v1/cost-types |
costType.argeKey | Text | Kostenart-Schlüssel nach ARGE Heiz- und Wasserkosten; nicht eindeutig |
costType.label | Text | Bezeichnung der Kostenart |
description | Text | null | Abweichende Bezeichnung der Position |
date | Datum/Zeit | Rechnungsdatum |
invoiceNumber | Text | null | Rechnungsnummer |
netAmount | Zahl | null | Betrag netto |
grossAmount | Zahl | Betrag brutto |
taxRate | Zahl | null | Umsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag |
labourCost | Zahl | null | Darin enthaltene Arbeitskosten (§ 35a EStG) |
distribution | Objekt | Umlagemaßstab; nur bei ADDITIONAL |
distribution.key | Text | Schlüssel des Umlagemaßstabs |
distribution.label | Text | Bezeichnung, z. B. Wohnfläche |
tenants | Liste | Mietverhältnisse, auf die die Kosten umgelegt werden; nur bei Umlagemaßstab 25 |
apartments | Liste | Einheiten, auf die die Kosten umgelegt werden; nur bei Umlagemaßstab 32 |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
GET/api/v1/billings/{billingId}/documents
Abrechnungsergebnisse und Dokumente
Einzelabrechnungen (APARTMENT_HEATING_BILL) mit dem Ergebnis je Nutzer, die Gesamtabrechnung (PROPERTY_HEATING_BILL) und weitere Dokumente der Abrechnung. Die PDF-Datei liegt unter pdf.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
billingId Pflicht |
Pfad | Text | BillingDocument identifier |
page |
Query | Ganzzahl | Seite, beginnend bei 1 |
itemsPerPage |
Query | Ganzzahl | Einträge pro Seite, Standard 100, höchstens 500 |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | ID des Dokuments |
type | Enum: PROPERTY_METER_PROTOCOL, TENANT_METER_PROTOCOL, INQUIRY, INQUIRY_RESPONSE, CONTRACT, ADVANCE_PAYMENT_ADJUSTMENT, ORDER_CONFIRMATION, INSTALLATION, USER_UPLOADED, PREVIOUS_CONTRACT, SERVICE_INVOICE, DEVICE_INVOICE, FLOOR_PLAN, PROPERTY_HEATING_BILL, APARTMENT_HEATING_BILL, INDIVIDUAL_CUSTOMER_LETTER, COST_TRANSMISSION_DATA, TERMINATION_CONFIRMATION, TERMINATION_LETTER_THIRD_PARTY_MEASUREMENT, DELIVERY_NOTE_DEVICES, TENANT_LIST, MONTHLY_CONSUMPTION_INFORMATION, INSTALLATION_PROTOCOL, SEPA_DIRECT_DEBIT_MANDATE, SEPA_DIRECT_DEBIT_MANDATE_CONFIRMATION, PARTITION_DECLARATION, APARTMENT_CONSUMPTION_ANALYSIS, CONTRACT_CONFIRMATION_SERVICE, CONTRACT_CONFIRMATION_DEVICE, BILLING_DOCUMENT, INSTALLATION_ORDER, MANDATE, ROTATING_PLAN, ROTATING_PLAN_CONFIRMATION, PIPE_SCHEMA, METER_LIST, MISCELLANEOUS_DOCUMENT, PROPERTY_ANALYSIS_RESULT, CONTRACT_REQUESTED | Dokumentart; APARTMENT_HEATING_BILL = Einzelabrechnung, PROPERTY_HEATING_BILL = Gesamtabrechnung |
name | Text | null | Dateiname |
date | Datum/Zeit | null | Erstellt am |
apartment | Objekt | Einheit; nur bei Einzelabrechnungen |
apartment.id | UUID | UUID der Einheit |
apartment.label | Text | null | Bezeichnung der Einheit |
tenant | Objekt | Nutzer; nur bei Einzelabrechnungen |
tenant.id | Ganzzahl | null | ID des Mietverhältnisses (/api/v1/tenants/{id}); null, wenn es nicht zugeordnet werden konnte, z. B. bei Leerstand |
tenant.name | Text | null | Name, wie er auf der Abrechnung steht |
usageBegin | Datum/Zeit | null | Beginn des abgerechneten Nutzungszeitraums |
usageEnd | Datum/Zeit | null | Ende des abgerechneten Nutzungszeitraums |
totalCostGross | Zahl | null | Kosten brutto; bei der Gesamtabrechnung die Gesamtkosten der Liegenschaft |
prepaymentGross | Zahl | null | Geleistete Vorauszahlungen brutto; nur bei Einzelabrechnungen |
balanceGross | Zahl | null | Ergebnis brutto: positiv = Nachzahlung, negativ = Guthaben; nur bei Einzelabrechnungen |
pdf | Text | Pfad zum Herunterladen der PDF-Datei |
GET/api/v1/billings/{billingId}/fuel-deliveries
Brennstoffe einer Abrechnung
Anfangsbestand, Lieferungen und Endbestand mit Menge, Betrag und CO₂-Angaben, nach Datum sortiert.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
billingId Pflicht |
Pfad | Text | FuelDelivery identifier |
invoiceNumber |
Query | Text | |
invoiceNumber[] |
Query | Liste | Mehrere Werte, z. B. invoiceNumber[]=A&invoiceNumber[]=B |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Position |
type | Enum: INITIAL, PURCHASE, FINAL | INITIAL = Anfangsbestand, PURCHASE = Lieferung bzw. Rechnung, FINAL = Endbestand |
date | Datum/Zeit | Liefer- bzw. Stichtag |
invoiceNumber | Text | null | Rechnungsnummer |
fuelType | Objekt | Brennstoff |
fuelType.key | Text | Schlüssel des Brennstoffs |
fuelType.argeKey | Text | Kostenart-Schlüssel nach ARGE Heiz- und Wasserkosten |
fuelType.label | Text | Bezeichnung, z. B. Heizöl in Liter |
fuelType.unit | Text | Mengeneinheit |
fuelType.storable | Boolean | true = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben |
fuelType.emissionFactor | Zahl | null | Standard-Emissionsfaktor in kg CO₂ je kWh |
quantity | Zahl | Menge in der Einheit des Brennstoffs |
netAmount | Zahl | Betrag netto |
grossAmount | Zahl | Betrag brutto |
taxRate | Zahl | null | Umsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag |
calorificValue | Zahl | Heizwert in kWh je Mengeneinheit |
emissionFactor | Zahl | Emissionsfaktor in kg CO₂ je kWh |
carbonEmission | Zahl | CO₂-Menge in kg |
carbonCost | Zahl | CO₂-Kosten brutto |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
POST/api/v1/billings/{billingId}/fuel-deliveries
Brennstoff erfassen
Anfangsbestand, Lieferung oder Endbestand. Der Endbestand wird aus den Lieferungen bewertet (zuerst geliefert, zuerst verbraucht); Heizwert, Emissionsfaktor, CO₂-Menge und CO₂-Kosten werden ergänzt, wenn sie fehlen. Nach dem Übermitteln der Kosten antwortet die API mit 409.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
billingId Pflicht |
Pfad | Text | FuelDelivery identifier |
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
type | Enum: INITIAL, PURCHASE, FINAL, null | INITIAL = Anfangsbestand, PURCHASE = Lieferung bzw. Rechnung, FINAL = Endbestand |
date | Datum/Zeit | null | Liefer- bzw. Rechnungsdatum; bei INITIAL standardmäßig Beginn, bei FINAL Ende des Abrechnungszeitraums |
quantity | Zahl | null | Menge in der Einheit des Brennstoffs der Liegenschaft; 0 nur bei leerem Anfangs- oder Endbestand |
netAmount | Zahl | null | Betrag netto; bei FINAL wird der Endbestand aus den Lieferungen bewertet |
grossAmount | Zahl | null | Betrag brutto; bei FINAL wird der Endbestand aus den Lieferungen bewertet |
taxRate | Zahl | null | Umsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz |
calorificValue | Zahl | null | Heizwert in kWh je Mengeneinheit; Standard ist der Wert des Brennstoffs |
emissionFactor | Zahl | null | Emissionsfaktor in kg CO₂ je kWh; Standard ist der Wert des Brennstoffs |
carbonEmission | Zahl | null | CO₂-Menge in kg; Standard: Menge × Heizwert × Emissionsfaktor |
carbonCost | Zahl | null | CO₂-Kosten brutto; Standard: CO₂-Menge × CO₂-Preis des Jahres (BEHG) |
invoiceNumber | Text | null | Rechnungsnummer |
Beispiel
POST /api/v1/billings/{billingId}/fuel-deliveries
Content-Type: application/json
{
"type": "PURCHASE",
"date": "2025-06-02",
"invoiceNumber": "OEL-2025-06",
"quantity": 3000,
"netAmount": 2940.0,
"grossAmount": 3498.6,
"taxRate": 19
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Position |
type | Enum: INITIAL, PURCHASE, FINAL | INITIAL = Anfangsbestand, PURCHASE = Lieferung bzw. Rechnung, FINAL = Endbestand |
date | Datum/Zeit | Liefer- bzw. Stichtag |
invoiceNumber | Text | null | Rechnungsnummer |
fuelType | Objekt | Brennstoff |
fuelType.key | Text | Schlüssel des Brennstoffs |
fuelType.argeKey | Text | Kostenart-Schlüssel nach ARGE Heiz- und Wasserkosten |
fuelType.label | Text | Bezeichnung, z. B. Heizöl in Liter |
fuelType.unit | Text | Mengeneinheit |
fuelType.storable | Boolean | true = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben |
fuelType.emissionFactor | Zahl | null | Standard-Emissionsfaktor in kg CO₂ je kWh |
quantity | Zahl | Menge in der Einheit des Brennstoffs |
netAmount | Zahl | Betrag netto |
grossAmount | Zahl | Betrag brutto |
taxRate | Zahl | null | Umsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag |
calorificValue | Zahl | Heizwert in kWh je Mengeneinheit |
emissionFactor | Zahl | Emissionsfaktor in kg CO₂ je kWh |
carbonEmission | Zahl | CO₂-Menge in kg |
carbonCost | Zahl | CO₂-Kosten brutto |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
GET/api/v1/billings/{id}
Abrechnungsperiode abrufen
Retrieves a Billing resource.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Abrechnungsperiode |
property | Objekt | Liegenschaft |
property.id | UUID | UUID der Liegenschaft |
property.label | Text | Bezeichnung der Liegenschaft |
property.address | Objekt | Anschrift der Liegenschaft |
property.address.street | Text | Straße |
property.address.streetNumber | Text | Hausnummer |
property.address.postcode | Text | Postleitzahl |
property.address.city | Text | Ort |
property.address.country | Text | Land (ISO 3166-1 alpha-2) |
property.address.additional | Text | null | Adresszusatz |
begin | Datum/Zeit | Beginn des Abrechnungszeitraums |
end | Datum/Zeit | Ende des Abrechnungszeitraums (Stichtag) |
state | Enum: OPEN, BILLABLE, SUBMITTED, REVIEW, DONE | OPEN = Zeitraum läuft noch, BILLABLE = Kosten können erfasst werden, SUBMITTED = Kosten übermittelt, REVIEW = Rückfrage, Kosten ergänzen und erneut übermitteln, DONE = Abrechnung erstellt, Ergebnisse unter /documents |
submitDate | Datum/Zeit | null | Zeitpunkt, zu dem die Kosten übermittelt wurden |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am, z. B. durch einen Statuswechsel |
GET/api/v1/billings/{id}/settings
Abrechnungseinstellungen abrufen
Verteilung (Grund- und Verbrauchskostenanteil, Warmwasseranteil) dieser Abrechnungsperiode sowie Heizungsanlage und Angaben zur CO₂-Kostenaufteilung (CO2KostAufG) der Liegenschaft.
Scope: read
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Abrechnungsperiode |
heatingCostEnabled | Boolean | Heizkosten werden abgerechnet |
warmWaterCostEnabled | Boolean | Warmwasserkosten werden abgerechnet |
coldWaterCostEnabled | Boolean | Kaltwasserkosten werden abgerechnet |
additionalCostEnabled | Boolean | Weitere Betriebskosten werden abgerechnet |
heatingBaseCostPercentage | Ganzzahl | Grundkostenanteil Heizung in Prozent |
heatingUsageCostPercentage | Ganzzahl | Verbrauchskostenanteil Heizung in Prozent |
heatingBaseCostDistribution | Objekt | Umlagemaßstab der Grundkosten Heizung |
heatingBaseCostDistribution.key | Text | Schlüssel des Umlagemaßstabs |
heatingBaseCostDistribution.label | Text | Bezeichnung, z. B. Wohnfläche |
warmWaterBaseCostPercentage | Ganzzahl | Grundkostenanteil Warmwasser in Prozent |
warmWaterUsageCostPercentage | Ganzzahl | Verbrauchskostenanteil Warmwasser in Prozent |
warmWaterBaseCostDistribution | Objekt | Umlagemaßstab der Grundkosten Warmwasser |
warmWaterBaseCostDistribution.key | Text | Schlüssel des Umlagemaßstabs |
warmWaterBaseCostDistribution.label | Text | Bezeichnung, z. B. Wohnfläche |
warmWaterUsageCostDistribution | Objekt | Umlagemaßstab der Verbrauchskosten Warmwasser |
warmWaterUsageCostDistribution.key | Text | Schlüssel des Umlagemaßstabs |
warmWaterUsageCostDistribution.label | Text | Bezeichnung, z. B. Wohnfläche |
warmWaterShareMethod | Enum: PERCENTAGE, DEVICE, WARM_WATER_USAGE, LIVING_SPACE, NO_HOT_WATER, null | Ermittlung des Warmwasseranteils an den Brennstoffkosten bei zentraler Warmwasserbereitung: PERCENTAGE = fester Prozentsatz, DEVICE = Wärmemengenzähler, WARM_WATER_USAGE = Warmwasserverbrauch, LIVING_SPACE = Wohnfläche, NO_HOT_WATER = keine zentrale Warmwasserbereitung |
warmWaterSharePercentage | Zahl | null | Warmwasseranteil in Prozent bei warmWaterShareMethod = PERCENTAGE |
warmWaterTemperature | Zahl | Warmwassertemperatur in °C |
heatingSystem | Text | Art der Heizungsanlage der Liegenschaft |
fuelType | Objekt | Brennstoff der Liegenschaft |
fuelType.key | Text | Schlüssel des Brennstoffs |
fuelType.argeKey | Text | Kostenart-Schlüssel nach ARGE Heiz- und Wasserkosten |
fuelType.label | Text | Bezeichnung, z. B. Heizöl in Liter |
fuelType.unit | Text | Mengeneinheit |
fuelType.storable | Boolean | true = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben |
fuelType.emissionFactor | Zahl | null | Standard-Emissionsfaktor in kg CO₂ je kWh |
carbonCostSplitEnabled | Boolean | CO₂-Kosten werden nach CO2KostAufG aufgeteilt |
commercialUse | Boolean | Gewerbliche Nutzung (Nichtwohngebäude) |
restructuringRequirements | Boolean | Sanierungsauflagen: öffentlich-rechtliche Vorgaben schränken eine energetische Sanierung ein |
noTotalCarbonEmissionDeduction | Boolean | Kein CO₂-Gesamtabzug (WEG) |
monumentProtection | Boolean | Denkmalschutz |
PATCH/api/v1/billings/{id}/settings Kostenpflichtig
Kostenarten und Verteilung der Abrechnung ändern (kostenpflichtig)
Kostenarten, Grund- und Verbrauchskostenanteil, Umlagemaßstäbe und Warmwasseranteil dieser Abrechnungsperiode; nur die gesendeten Felder werden geändert. **Kostenpflichtig**, wenn eine Kostenart hinzukommt (*CostEnabled: true): bucht deren Leistung, Preise unter GET /api/v1/properties/{propertyId}/price-list; eine abgewählte Kostenart storniert ihre Leistung. Schlägt eine Buchung fehl, werden bereits gebuchte Leistungen wieder storniert. Wer Warmwasser hinzubucht, braucht eine warmWaterShareMethod außer NO_HOT_WATER. Kostenarten können für Abrechnungsperioden mit Beginn in der Zukunft nicht hinzugebucht werden (400). Brennstoff und CO₂-Angaben ändert PATCH /api/v1/properties/{id}/settings.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
heatingBaseCostPercentage | Enum: 0, 30, 40, 50, 100 | Grundkostenanteil Heizung in Prozent: 0, 30, 40, 50 oder 100 |
heatingCostEnabled | Boolean | null | Kostenpflichtig: Heizkosten abrechnen (bucht 00002) |
warmWaterCostEnabled | Boolean | null | Kostenpflichtig: Warmwasserkosten abrechnen (bucht 00002) |
coldWaterCostEnabled | Boolean | null | Kostenpflichtig: Kaltwasserkosten abrechnen (bucht 00004) |
additionalCostEnabled | Boolean | null | Kostenpflichtig: Weitere Betriebskosten abrechnen (bucht 00003) |
warmWaterBaseCostPercentage | Enum: 0, 30, 40, 50, 100 | Grundkostenanteil Warmwasser in Prozent: 0, 30, 40, 50 oder 100 |
heatingBaseCostDistribution | Text | null | Umlagemaßstab der Grundkosten Heizung (key) |
warmWaterBaseCostDistribution | Text | null | Umlagemaßstab der Grundkosten Warmwasser (key) |
warmWaterUsageCostDistribution | Text | null | Umlagemaßstab der Verbrauchskosten Warmwasser (key) |
warmWaterShareMethod | Enum: PERCENTAGE, DEVICE, WARM_WATER_USAGE, LIVING_SPACE, NO_HOT_WATER, null | Ermittlung des Warmwasseranteils an den Brennstoffkosten |
warmWaterSharePercentage | Zahl | null | Warmwasseranteil in Prozent bei warmWaterShareMethod = PERCENTAGE |
Beispiel
PATCH /api/v1/billings/{id}/settings
Content-Type: application/merge-patch+json
{
"heatingBaseCostPercentage": 30,
"warmWaterShareMethod": "PERCENTAGE",
"warmWaterSharePercentage": 18
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Abrechnungsperiode |
heatingCostEnabled | Boolean | Heizkosten werden abgerechnet |
warmWaterCostEnabled | Boolean | Warmwasserkosten werden abgerechnet |
coldWaterCostEnabled | Boolean | Kaltwasserkosten werden abgerechnet |
additionalCostEnabled | Boolean | Weitere Betriebskosten werden abgerechnet |
heatingBaseCostPercentage | Ganzzahl | Grundkostenanteil Heizung in Prozent |
heatingUsageCostPercentage | Ganzzahl | Verbrauchskostenanteil Heizung in Prozent |
heatingBaseCostDistribution | Objekt | Umlagemaßstab der Grundkosten Heizung |
heatingBaseCostDistribution.key | Text | Schlüssel des Umlagemaßstabs |
heatingBaseCostDistribution.label | Text | Bezeichnung, z. B. Wohnfläche |
warmWaterBaseCostPercentage | Ganzzahl | Grundkostenanteil Warmwasser in Prozent |
warmWaterUsageCostPercentage | Ganzzahl | Verbrauchskostenanteil Warmwasser in Prozent |
warmWaterBaseCostDistribution | Objekt | Umlagemaßstab der Grundkosten Warmwasser |
warmWaterBaseCostDistribution.key | Text | Schlüssel des Umlagemaßstabs |
warmWaterBaseCostDistribution.label | Text | Bezeichnung, z. B. Wohnfläche |
warmWaterUsageCostDistribution | Objekt | Umlagemaßstab der Verbrauchskosten Warmwasser |
warmWaterUsageCostDistribution.key | Text | Schlüssel des Umlagemaßstabs |
warmWaterUsageCostDistribution.label | Text | Bezeichnung, z. B. Wohnfläche |
warmWaterShareMethod | Enum: PERCENTAGE, DEVICE, WARM_WATER_USAGE, LIVING_SPACE, NO_HOT_WATER, null | Ermittlung des Warmwasseranteils an den Brennstoffkosten bei zentraler Warmwasserbereitung: PERCENTAGE = fester Prozentsatz, DEVICE = Wärmemengenzähler, WARM_WATER_USAGE = Warmwasserverbrauch, LIVING_SPACE = Wohnfläche, NO_HOT_WATER = keine zentrale Warmwasserbereitung |
warmWaterSharePercentage | Zahl | null | Warmwasseranteil in Prozent bei warmWaterShareMethod = PERCENTAGE |
warmWaterTemperature | Zahl | Warmwassertemperatur in °C |
heatingSystem | Text | Art der Heizungsanlage der Liegenschaft |
fuelType | Objekt | Brennstoff der Liegenschaft |
fuelType.key | Text | Schlüssel des Brennstoffs |
fuelType.argeKey | Text | Kostenart-Schlüssel nach ARGE Heiz- und Wasserkosten |
fuelType.label | Text | Bezeichnung, z. B. Heizöl in Liter |
fuelType.unit | Text | Mengeneinheit |
fuelType.storable | Boolean | true = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben |
fuelType.emissionFactor | Zahl | null | Standard-Emissionsfaktor in kg CO₂ je kWh |
carbonCostSplitEnabled | Boolean | CO₂-Kosten werden nach CO2KostAufG aufgeteilt |
commercialUse | Boolean | Gewerbliche Nutzung (Nichtwohngebäude) |
restructuringRequirements | Boolean | Sanierungsauflagen: öffentlich-rechtliche Vorgaben schränken eine energetische Sanierung ein |
noTotalCarbonEmissionDeduction | Boolean | Kein CO₂-Gesamtabzug (WEG) |
monumentProtection | Boolean | Denkmalschutz |
GET/api/v1/cost-types
Kostenarten auflisten
Alle aktiven Kostenarten. Kostenpositionen werden über key zugeordnet; argeKey ist nicht eindeutig (z. B. teilen sich mehrere Heiznebenkosten den Schlüssel 228).
Scope: read
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
key | Text | Eindeutiger Schlüssel der Kostenart |
argeKey | Text | Kostenart-Schlüssel nach ARGE Heiz- und Wasserkosten; nicht eindeutig |
label | Text | Bezeichnung |
category | Enum: HEATING, ADDITIONAL | HEATING = Heiz- und Warmwassernebenkosten, ADDITIONAL = Kaltwasser und weitere Betriebskosten |
group | Text | HEATING: DEFAULT_HEATING_COST = Heizung und Warmwasser, SPECIAL_HEATING_COST = nur Heizung, SPECIAL_WARM_WATER_COST = nur Warmwasser; ADDITIONAL: Kostengruppe, z. B. Wasserversorgung |
distribution | Objekt | Standard-Umlagemaßstab |
distribution.key | Text | Schlüssel des Umlagemaßstabs |
distribution.label | Text | Bezeichnung, z. B. Wohnfläche |
hint | Text | null | Hinweis zur Erfassung |
PATCH/api/v1/fuel-deliveries/{id}
Brennstoff ändern
Nur die gesendeten Felder werden geändert.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |
Anfrage
| Feld | Typ | Beschreibung |
|---|---|---|
type | Enum: INITIAL, PURCHASE, FINAL, null | INITIAL = Anfangsbestand, PURCHASE = Lieferung bzw. Rechnung, FINAL = Endbestand |
date | Datum/Zeit | null | Liefer- bzw. Rechnungsdatum |
quantity | Zahl | null | Menge in der Einheit des Brennstoffs der Liegenschaft; 0 nur bei leerem Anfangs- oder Endbestand |
netAmount | Zahl | null | Betrag netto |
grossAmount | Zahl | null | Betrag brutto |
taxRate | Zahl | null | Umsatzsteuersatz in Prozent; null = abweichender Satz |
calorificValue | Zahl | null | Heizwert in kWh je Mengeneinheit |
emissionFactor | Zahl | null | Emissionsfaktor in kg CO₂ je kWh |
carbonEmission | Zahl | null | CO₂-Menge in kg |
carbonCost | Zahl | null | CO₂-Kosten brutto |
invoiceNumber | Text | null | Rechnungsnummer |
Beispiel
PATCH /api/v1/fuel-deliveries/{id}
Content-Type: application/merge-patch+json
{
"quantity": 3100
}
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
id | UUID | UUID der Position |
type | Enum: INITIAL, PURCHASE, FINAL | INITIAL = Anfangsbestand, PURCHASE = Lieferung bzw. Rechnung, FINAL = Endbestand |
date | Datum/Zeit | Liefer- bzw. Stichtag |
invoiceNumber | Text | null | Rechnungsnummer |
fuelType | Objekt | Brennstoff |
fuelType.key | Text | Schlüssel des Brennstoffs |
fuelType.argeKey | Text | Kostenart-Schlüssel nach ARGE Heiz- und Wasserkosten |
fuelType.label | Text | Bezeichnung, z. B. Heizöl in Liter |
fuelType.unit | Text | Mengeneinheit |
fuelType.storable | Boolean | true = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben |
fuelType.emissionFactor | Zahl | null | Standard-Emissionsfaktor in kg CO₂ je kWh |
quantity | Zahl | Menge in der Einheit des Brennstoffs |
netAmount | Zahl | Betrag netto |
grossAmount | Zahl | Betrag brutto |
taxRate | Zahl | null | Umsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag |
calorificValue | Zahl | Heizwert in kWh je Mengeneinheit |
emissionFactor | Zahl | Emissionsfaktor in kg CO₂ je kWh |
carbonEmission | Zahl | CO₂-Menge in kg |
carbonCost | Zahl | CO₂-Kosten brutto |
createdAt | Datum/Zeit | Angelegt am |
updatedAt | Datum/Zeit | null | Zuletzt geändert am |
DELETE/api/v1/fuel-deliveries/{id}
Brennstoff löschen
Removes the FuelDelivery resource.
Scope: write
Parameter
| Name | Ort | Typ | Beschreibung |
|---|---|---|---|
id Pflicht |
Pfad | UUID | UUID des Objekts |