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

  1. In der AssetApp unter Einstellungen → Integrationen eine Integration anlegen und Bezeichner und Schlüssel kopieren.
  2. Mit Bezeichner und Schlüssel ein Zugriffstoken holen.
  3. 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…"
}
ScopeErlaubt
readAlle 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.

ParameterBedeutung
pageSeite, beginnend bei 1
itemsPerPageEinträ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.

StatusBedeutung
400Ungültiger Parameter, z. B. keine gültige UUID in einem Filter
401Token fehlt, ist abgelaufen oder die Integration wurde gelöscht
403Scope fehlt (z. B. write) oder keine Berechtigung für die Änderung
404Objekt existiert nicht oder ist für diese Integration nicht sichtbar
422Validierungsfehler; Details in violations[].propertyPath und violations[].message
429Zu 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 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.

  1. 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.
  2. Mit dem Einladungscode einen Sandbox-Zugang anlegen. Bezeichner und Schlüssel werden nur in dieser Antwort angezeigt.
  3. 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:

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

NameOrtTypBeschreibung
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

FeldTypBeschreibung
idUUIDUUID der Liegenschaft
identifierTextLiegenschaftsnummer in der AssetApp
labelTextBezeichnung
typeEnum: RESIDENTIAL, COMMERCIAL, MIXED_USE, nullNutzungsart
stateEnum: OPEN, PROGRESS, DONE, CANCELEDBearbeitungsstatus
addressObjektAnschrift
address.streetTextStraße
address.streetNumberTextHausnummer
address.postcodeTextPostleitzahl
address.cityTextOrt
address.countryTextLand (ISO 3166-1 alpha-2)
address.additionalText | nullAdresszusatz
constructionYearGanzzahl | nullBaujahr
isWegBooleanWohnungseigentümergemeinschaft (WEG)
apartmentsListeEinheiten der Liegenschaft, z. B. für den Umlagemaßstab 32 (zugeordnete Nutzereinheiten)
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Antwort

FeldTypBeschreibung
idUUIDUUID der Liegenschaft
identifierTextLiegenschaftsnummer in der AssetApp
labelTextBezeichnung
typeEnum: RESIDENTIAL, COMMERCIAL, MIXED_USE, nullNutzungsart
stateEnum: OPEN, PROGRESS, DONE, CANCELEDBearbeitungsstatus
addressObjektAnschrift
address.streetTextStraße
address.streetNumberTextHausnummer
address.postcodeTextPostleitzahl
address.cityTextOrt
address.countryTextLand (ISO 3166-1 alpha-2)
address.additionalText | nullAdresszusatz
constructionYearGanzzahl | nullBaujahr
isWegBooleanWohnungseigentümergemeinschaft (WEG)
apartmentsListeEinheiten der Liegenschaft, z. B. für den Umlagemaßstab 32 (zugeordnete Nutzereinheiten)
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Antwort

FeldTypBeschreibung
idUUIDUUID der Liegenschaft
heatingCostEnabledBooleanHeizkosten werden abgerechnet
warmWaterCostEnabledBooleanWarmwasserkosten werden abgerechnet
coldWaterCostEnabledBooleanKaltwasserkosten werden abgerechnet
additionalCostEnabledBooleanWeitere Betriebskosten werden abgerechnet
heatingBaseCostPercentageGanzzahlGrundkostenanteil Heizung in Prozent
heatingUsageCostPercentageGanzzahlVerbrauchskostenanteil Heizung in Prozent
heatingBaseCostDistributionObjektUmlagemaßstab der Grundkosten Heizung
heatingBaseCostDistribution.keyTextSchlüssel des Umlagemaßstabs
heatingBaseCostDistribution.labelTextBezeichnung, z. B. Wohnfläche
warmWaterBaseCostPercentageGanzzahlGrundkostenanteil Warmwasser in Prozent
warmWaterUsageCostPercentageGanzzahlVerbrauchskostenanteil Warmwasser in Prozent
warmWaterBaseCostDistributionObjektUmlagemaßstab der Grundkosten Warmwasser
warmWaterBaseCostDistribution.keyTextSchlüssel des Umlagemaßstabs
warmWaterBaseCostDistribution.labelTextBezeichnung, z. B. Wohnfläche
warmWaterUsageCostDistributionObjektUmlagemaßstab der Verbrauchskosten Warmwasser
warmWaterUsageCostDistribution.keyTextSchlüssel des Umlagemaßstabs
warmWaterUsageCostDistribution.labelTextBezeichnung, z. B. Wohnfläche
warmWaterShareMethodEnum: PERCENTAGE, DEVICE, WARM_WATER_USAGE, LIVING_SPACE, NO_HOT_WATER, nullErmittlung 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
warmWaterSharePercentageZahl | nullWarmwasseranteil in Prozent bei warmWaterShareMethod = PERCENTAGE
heatingSystemTextArt der Heizungsanlage der Liegenschaft
fuelTypeObjektBrennstoff der Liegenschaft
fuelType.keyTextSchlüssel des Brennstoffs
fuelType.argeKeyTextKostenart-Schlüssel nach ARGE Heiz- und Wasserkosten
fuelType.labelTextBezeichnung, z. B. Heizöl in Liter
fuelType.unitTextMengeneinheit
fuelType.storableBooleantrue = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben
fuelType.emissionFactorZahl | nullStandard-Emissionsfaktor in kg CO₂ je kWh
carbonCostSplitEnabledBooleanCO₂-Kosten werden nach CO2KostAufG aufgeteilt
commercialUseBooleanGewerbliche Nutzung (Nichtwohngebäude)
restructuringRequirementsBooleanSanierungsauflagen: öffentlich-rechtliche Vorgaben schränken eine energetische Sanierung ein
noTotalCarbonEmissionDeductionBooleanKein CO₂-Gesamtabzug (WEG)
monumentProtectionBooleanDenkmalschutz

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

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Anfrage

FeldTypBeschreibung
heatingBaseCostPercentageEnum: 0, 30, 40, 50, 100Grundkostenanteil Heizung in Prozent: 0, 30, 40, 50 oder 100
warmWaterBaseCostPercentageEnum: 0, 30, 40, 50, 100Grundkostenanteil Warmwasser in Prozent: 0, 30, 40, 50 oder 100
heatingBaseCostDistributionText | nullUmlagemaßstab der Grundkosten Heizung (key)
warmWaterBaseCostDistributionText | nullUmlagemaßstab der Grundkosten Warmwasser (key)
warmWaterUsageCostDistributionText | nullUmlagemaßstab der Verbrauchskosten Warmwasser (key)
warmWaterShareMethodEnum: PERCENTAGE, DEVICE, WARM_WATER_USAGE, LIVING_SPACE, NO_HOT_WATER, nullErmittlung des Warmwasseranteils an den Brennstoffkosten
warmWaterSharePercentageZahl | nullWarmwasseranteil in Prozent bei warmWaterShareMethod = PERCENTAGE
fuelTypeText | nullBrennstoff (fuelType.key); muss zur Heizungsanlage passen
carbonCostSplitEnabledBoolean | nullCO₂-Kosten nach CO2KostAufG aufteilen
commercialUseBoolean | nullGewerbliche Nutzung (Nichtwohngebäude)
restructuringRequirementsBoolean | nullSanierungsauflagen
noTotalCarbonEmissionDeductionBoolean | nullKein CO₂-Gesamtabzug (WEG)
monumentProtectionBoolean | nullDenkmalschutz

Beispiel

PATCH /api/v1/properties/{id}/settings
Content-Type: application/merge-patch+json

{
    "commercialUse": false,
    "heatingBaseCostPercentage": 30
}

Antwort

FeldTypBeschreibung
idUUIDUUID der Liegenschaft
heatingCostEnabledBooleanHeizkosten werden abgerechnet
warmWaterCostEnabledBooleanWarmwasserkosten werden abgerechnet
coldWaterCostEnabledBooleanKaltwasserkosten werden abgerechnet
additionalCostEnabledBooleanWeitere Betriebskosten werden abgerechnet
heatingBaseCostPercentageGanzzahlGrundkostenanteil Heizung in Prozent
heatingUsageCostPercentageGanzzahlVerbrauchskostenanteil Heizung in Prozent
heatingBaseCostDistributionObjektUmlagemaßstab der Grundkosten Heizung
heatingBaseCostDistribution.keyTextSchlüssel des Umlagemaßstabs
heatingBaseCostDistribution.labelTextBezeichnung, z. B. Wohnfläche
warmWaterBaseCostPercentageGanzzahlGrundkostenanteil Warmwasser in Prozent
warmWaterUsageCostPercentageGanzzahlVerbrauchskostenanteil Warmwasser in Prozent
warmWaterBaseCostDistributionObjektUmlagemaßstab der Grundkosten Warmwasser
warmWaterBaseCostDistribution.keyTextSchlüssel des Umlagemaßstabs
warmWaterBaseCostDistribution.labelTextBezeichnung, z. B. Wohnfläche
warmWaterUsageCostDistributionObjektUmlagemaßstab der Verbrauchskosten Warmwasser
warmWaterUsageCostDistribution.keyTextSchlüssel des Umlagemaßstabs
warmWaterUsageCostDistribution.labelTextBezeichnung, z. B. Wohnfläche
warmWaterShareMethodEnum: PERCENTAGE, DEVICE, WARM_WATER_USAGE, LIVING_SPACE, NO_HOT_WATER, nullErmittlung 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
warmWaterSharePercentageZahl | nullWarmwasseranteil in Prozent bei warmWaterShareMethod = PERCENTAGE
heatingSystemTextArt der Heizungsanlage der Liegenschaft
fuelTypeObjektBrennstoff der Liegenschaft
fuelType.keyTextSchlüssel des Brennstoffs
fuelType.argeKeyTextKostenart-Schlüssel nach ARGE Heiz- und Wasserkosten
fuelType.labelTextBezeichnung, z. B. Heizöl in Liter
fuelType.unitTextMengeneinheit
fuelType.storableBooleantrue = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben
fuelType.emissionFactorZahl | nullStandard-Emissionsfaktor in kg CO₂ je kWh
carbonCostSplitEnabledBooleanCO₂-Kosten werden nach CO2KostAufG aufgeteilt
commercialUseBooleanGewerbliche Nutzung (Nichtwohngebäude)
restructuringRequirementsBooleanSanierungsauflagen: öffentlich-rechtliche Vorgaben schränken eine energetische Sanierung ein
noTotalCarbonEmissionDeductionBooleanKein CO₂-Gesamtabzug (WEG)
monumentProtectionBooleanDenkmalschutz

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

NameOrtTypBeschreibung
propertyId Pflicht Pfad Text ServicePrice identifier

Antwort

FeldTypBeschreibung
serviceNumberTextLeistungsnummer
titleTextBezeichnung der Leistung
priceZahl | nullPreis 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

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Anfrage

FeldTypBeschreibung
validFromDatum/Zeit | nullGültig ab; bei der ersten Fassung nicht änderbar
areaZahl | nullWohn- bzw. Nutzfläche in m²
heatingAreaZahl | nullBeheizte Fläche in m² (Heizkostenverteilung)
warmWaterAreaZahl | nullFläche für die Warmwasserkosten in m²
additionalCostAreaZahl | nullFläche für die Nebenkosten in m²
commercialAreaZahl | nullDavon gewerblich genutzt in m²
ownershipShareZahl | nullMiteigentumsanteil (z. B. in Tausendsteln), 0 bis 10.000
personCountGanzzahl | nullAnzahl der Personen, 0 bis 12

Beispiel

PATCH /api/v1/apartment-areas/{id}
Content-Type: application/merge-patch+json

{
    "personCount": 3
}

Antwort

FeldTypBeschreibung
idGanzzahlID der Fassung
apartmentObjektEinheit
apartment.idUUIDUUID der Einheit
apartment.labelText | nullBezeichnung der Einheit
validFromDatum/Zeit | nullGültig ab; null = von Anfang an (erste Fassung)
areaZahlWohn- bzw. Nutzfläche in m²
heatingAreaZahlBeheizte Fläche in m² (Heizkostenverteilung)
warmWaterAreaZahlFläche für die Warmwasserkosten in m²
additionalCostAreaZahlFläche für die Nebenkosten in m²
commercialAreaZahlDavon gewerblich genutzt in m²
ownershipShareZahl | nullMiteigentumsanteil (z. B. in Tausendsteln)
personCountGanzzahl | nullAnzahl der Personen

GET/api/v1/apartments

Einheiten auflisten

Retrieves the collection of Apartment resources.

Scope: read

Parameter

NameOrtTypBeschreibung
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

FeldTypBeschreibung
idUUIDUUID der Einheit
identifierTextNummer der Einheit in der AssetApp
numberGanzzahl | nullLaufende Nummer innerhalb der Liegenschaft
labelText | nullBezeichnung, z. B. „Wohnung 04“
floorGanzzahlEtage
locationText | nullLage, z. B. „links“
partnerNumberText | nullEigene Nummer der Hausverwaltung bzw. des ERP-Systems
stateEnum: OPEN, DONE, ARCHIVEDAusstattungsstatus
addressObjektAnschrift der Einheit
address.streetTextStraße
address.streetNumberTextHausnummer
address.postcodeTextPostleitzahl
address.cityTextOrt
address.countryTextLand (ISO 3166-1 alpha-2)
address.additionalText | nullAdresszusatz
propertyObjektLiegenschaft der Einheit
property.idUUIDUUID der Liegenschaft
property.labelTextBezeichnung der Liegenschaft
property.addressObjektAnschrift der Liegenschaft
property.address.streetTextStraße
property.address.streetNumberTextHausnummer
property.address.postcodeTextPostleitzahl
property.address.cityTextOrt
property.address.countryTextLand (ISO 3166-1 alpha-2)
property.address.additionalText | nullAdresszusatz
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
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

FeldTypBeschreibung
idGanzzahlID der Fassung
apartmentObjektEinheit
apartment.idUUIDUUID der Einheit
apartment.labelText | nullBezeichnung der Einheit
validFromDatum/Zeit | nullGültig ab; null = von Anfang an (erste Fassung)
areaZahlWohn- bzw. Nutzfläche in m²
heatingAreaZahlBeheizte Fläche in m² (Heizkostenverteilung)
warmWaterAreaZahlFläche für die Warmwasserkosten in m²
additionalCostAreaZahlFläche für die Nebenkosten in m²
commercialAreaZahlDavon gewerblich genutzt in m²
ownershipShareZahl | nullMiteigentumsanteil (z. B. in Tausendsteln)
personCountGanzzahl | nullAnzahl 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

NameOrtTypBeschreibung
apartmentId Pflicht Pfad Text ApartmentArea identifier

Anfrage

FeldTypBeschreibung
validFromDatum/Zeit | nullGültig ab
areaZahl | nullWohn- bzw. Nutzfläche in m²
heatingAreaZahl | nullBeheizte Fläche in m² (Heizkostenverteilung)
warmWaterAreaZahl | nullFläche für die Warmwasserkosten in m²
additionalCostAreaZahl | nullFläche für die Nebenkosten in m²
commercialAreaZahl | nullDavon gewerblich genutzt in m²
ownershipShareZahl | nullMiteigentumsanteil (z. B. in Tausendsteln), 0 bis 10.000
personCountGanzzahl | nullAnzahl 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

FeldTypBeschreibung
idGanzzahlID der Fassung
apartmentObjektEinheit
apartment.idUUIDUUID der Einheit
apartment.labelText | nullBezeichnung der Einheit
validFromDatum/Zeit | nullGültig ab; null = von Anfang an (erste Fassung)
areaZahlWohn- bzw. Nutzfläche in m²
heatingAreaZahlBeheizte Fläche in m² (Heizkostenverteilung)
warmWaterAreaZahlFläche für die Warmwasserkosten in m²
additionalCostAreaZahlFläche für die Nebenkosten in m²
commercialAreaZahlDavon gewerblich genutzt in m²
ownershipShareZahl | nullMiteigentumsanteil (z. B. in Tausendsteln)
personCountGanzzahl | nullAnzahl der Personen

GET/api/v1/apartments/{id}

Einheit abrufen

Retrieves a Apartment resource.

Scope: read

Parameter

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Antwort

FeldTypBeschreibung
idUUIDUUID der Einheit
identifierTextNummer der Einheit in der AssetApp
numberGanzzahl | nullLaufende Nummer innerhalb der Liegenschaft
labelText | nullBezeichnung, z. B. „Wohnung 04“
floorGanzzahlEtage
locationText | nullLage, z. B. „links“
partnerNumberText | nullEigene Nummer der Hausverwaltung bzw. des ERP-Systems
stateEnum: OPEN, DONE, ARCHIVEDAusstattungsstatus
addressObjektAnschrift der Einheit
address.streetTextStraße
address.streetNumberTextHausnummer
address.postcodeTextPostleitzahl
address.cityTextOrt
address.countryTextLand (ISO 3166-1 alpha-2)
address.additionalText | nullAdresszusatz
propertyObjektLiegenschaft der Einheit
property.idUUIDUUID der Liegenschaft
property.labelTextBezeichnung der Liegenschaft
property.addressObjektAnschrift der Liegenschaft
property.address.streetTextStraße
property.address.streetNumberTextHausnummer
property.address.postcodeTextPostleitzahl
property.address.cityTextOrt
property.address.countryTextLand (ISO 3166-1 alpha-2)
property.address.additionalText | nullAdresszusatz
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Anfrage

FeldTypBeschreibung
labelText | nullBezeichnung
locationText | nullLage; null entfernt sie
floorGanzzahl | nullEtage
partnerNumberText | nullEigene 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

FeldTypBeschreibung
idUUIDUUID der Einheit
identifierTextNummer der Einheit in der AssetApp
numberGanzzahl | nullLaufende Nummer innerhalb der Liegenschaft
labelText | nullBezeichnung, z. B. „Wohnung 04“
floorGanzzahlEtage
locationText | nullLage, z. B. „links“
partnerNumberText | nullEigene Nummer der Hausverwaltung bzw. des ERP-Systems
stateEnum: OPEN, DONE, ARCHIVEDAusstattungsstatus
addressObjektAnschrift der Einheit
address.streetTextStraße
address.streetNumberTextHausnummer
address.postcodeTextPostleitzahl
address.cityTextOrt
address.countryTextLand (ISO 3166-1 alpha-2)
address.additionalText | nullAdresszusatz
propertyObjektLiegenschaft der Einheit
property.idUUIDUUID der Liegenschaft
property.labelTextBezeichnung der Liegenschaft
property.addressObjektAnschrift der Liegenschaft
property.address.streetTextStraße
property.address.streetNumberTextHausnummer
property.address.postcodeTextPostleitzahl
property.address.cityTextOrt
property.address.countryTextLand (ISO 3166-1 alpha-2)
property.address.additionalText | nullAdresszusatz
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
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

FeldTypBeschreibung
idGanzzahlID des Mietverhältnisses
apartmentObjektEinheit
apartment.idUUIDUUID der Einheit
apartment.labelText | nullBezeichnung der Einheit
referenceText | nullKennzeichen 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.
personIdUUID | nullUUID der Person; gleich für alle Mietverhältnisse derselben Person, z. B. bei einem Umzug innerhalb der Liegenschaft
vacantBooleantrue = Leerstand ohne Person; bei einer gelöschten oder nicht sichtbaren Person false, Name und Kontaktdaten sind dann leer
nameText | nullName des Mieters
companyText | nullFirma
emailText | nullE-Mail-Adresse
phoneText | nullTelefonnummer
beginDatum/ZeitEinzug
endDatum/Zeit | nullAuszug; null = unbefristet
prepaymentNetAmountZahl | nullVorauszahlungen netto für den Abrechnungszeitraum (Summe); aus dem Bruttobetrag abgeleitet
prepaymentGrossAmountZahl | nullVorauszahlungen brutto für den Abrechnungszeitraum (Summe, nicht monatlich)
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

FeldTypBeschreibung
apartmentUUIDUUID der Einheit
personIdUUID | nullBekannte Person (personId aus /api/v1/tenants), die einzieht; Name und Kontaktdaten werden dann nicht benötigt
beginDatum/Zeit | nullEinzugsdatum
endDatum/Zeit | nullAuszugsdatum, falls bereits bekannt
nameText | nullName des Mieters; Pflicht, wenn keine bekannte Person gefunden wird
referenceText | nullKennzeichen 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.
companyText | nullFirma
emailText | nullE-Mail-Adresse; der Mieter erhält keine Einladung
phoneText | nullTelefonnummer
prepaymentGrossAmountZahl | nullVorauszahlungen brutto für den Abrechnungszeitraum (Summe, nicht monatlich); bei einem Mietverhältnis über mehrere Jahre vor jeder Abrechnung mit PATCH aktualisieren
nettoCalculationBooleanVorauszahlungen netto abrechnen
adjustOverlappingTenanciesBooleanEin überschneidendes Mietverhältnis der Einheit anpassen statt die Anfrage abzulehnen (Mieterwechsel)
vacantBooleanLeerstand 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

FeldTypBeschreibung
idGanzzahlID des Mietverhältnisses
apartmentObjektEinheit
apartment.idUUIDUUID der Einheit
apartment.labelText | nullBezeichnung der Einheit
referenceText | nullKennzeichen 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.
personIdUUID | nullUUID der Person; gleich für alle Mietverhältnisse derselben Person, z. B. bei einem Umzug innerhalb der Liegenschaft
vacantBooleantrue = Leerstand ohne Person; bei einer gelöschten oder nicht sichtbaren Person false, Name und Kontaktdaten sind dann leer
nameText | nullName des Mieters
companyText | nullFirma
emailText | nullE-Mail-Adresse
phoneText | nullTelefonnummer
beginDatum/ZeitEinzug
endDatum/Zeit | nullAuszug; null = unbefristet
prepaymentNetAmountZahl | nullVorauszahlungen netto für den Abrechnungszeitraum (Summe); aus dem Bruttobetrag abgeleitet
prepaymentGrossAmountZahl | nullVorauszahlungen brutto für den Abrechnungszeitraum (Summe, nicht monatlich)
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt geändert am

GET/api/v1/tenants/{id}

Mieter abrufen

Retrieves a Tenant resource.

Scope: read

Parameter

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Antwort

FeldTypBeschreibung
idGanzzahlID des Mietverhältnisses
apartmentObjektEinheit
apartment.idUUIDUUID der Einheit
apartment.labelText | nullBezeichnung der Einheit
referenceText | nullKennzeichen 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.
personIdUUID | nullUUID der Person; gleich für alle Mietverhältnisse derselben Person, z. B. bei einem Umzug innerhalb der Liegenschaft
vacantBooleantrue = Leerstand ohne Person; bei einer gelöschten oder nicht sichtbaren Person false, Name und Kontaktdaten sind dann leer
nameText | nullName des Mieters
companyText | nullFirma
emailText | nullE-Mail-Adresse
phoneText | nullTelefonnummer
beginDatum/ZeitEinzug
endDatum/Zeit | nullAuszug; null = unbefristet
prepaymentNetAmountZahl | nullVorauszahlungen netto für den Abrechnungszeitraum (Summe); aus dem Bruttobetrag abgeleitet
prepaymentGrossAmountZahl | nullVorauszahlungen brutto für den Abrechnungszeitraum (Summe, nicht monatlich)
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Anfrage

FeldTypBeschreibung
beginDatum/Zeit | nullNeues Einzugsdatum
endDatum/Zeit | nullAuszugsdatum; null öffnet das Mietverhältnis wieder, weglassen behält es bei
referenceText | nullKennzeichen 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.
prepaymentGrossAmountZahl | nullVorauszahlungen 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

FeldTypBeschreibung
idGanzzahlID des Mietverhältnisses
apartmentObjektEinheit
apartment.idUUIDUUID der Einheit
apartment.labelText | nullBezeichnung der Einheit
referenceText | nullKennzeichen 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.
personIdUUID | nullUUID der Person; gleich für alle Mietverhältnisse derselben Person, z. B. bei einem Umzug innerhalb der Liegenschaft
vacantBooleantrue = Leerstand ohne Person; bei einer gelöschten oder nicht sichtbaren Person false, Name und Kontaktdaten sind dann leer
nameText | nullName des Mieters
companyText | nullFirma
emailText | nullE-Mail-Adresse
phoneText | nullTelefonnummer
beginDatum/ZeitEinzug
endDatum/Zeit | nullAuszug; null = unbefristet
prepaymentNetAmountZahl | nullVorauszahlungen netto für den Abrechnungszeitraum (Summe); aus dem Bruttobetrag abgeleitet
prepaymentGrossAmountZahl | nullVorauszahlungen brutto für den Abrechnungszeitraum (Summe, nicht monatlich)
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
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

NameOrtTypBeschreibung
tenantId Pflicht Pfad Text MoveOutReading identifier

Antwort

FeldTypBeschreibung
deviceIdUUIDUUID des Geräts
deviceNumberText | nullGerätenummer
deviceTypeEnum: HEAT, HCA, WARM_WATER, COLD_WATER, SMOKE, ELECTRICITY, GASGerätetyp
moveOutDateDatum/ZeitAuszugstag, zu dem der Stand zählt
statusEnum: ON_DATE, NEARBY, MISSINGON_DATE, NEARBY oder MISSING
readingDateDatum/Zeit | nullZeitpunkt des zählenden Stands; null bei MISSING
valueZahl | nullZählerstand; null bei MISSING
unitEnum: m³, kWh, Einheiten, "", nullEinheit
readingTypeEnum: MANUAL, REMOTE, ESTIMATED, SYSTEM, CALCULATED, nullErfassungsart 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

NameOrtTypBeschreibung
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

FeldTypBeschreibung
idUUIDUUID des Geräts; für alle Folgeabfragen verwenden
numberText | nullZählernummer bzw. Seriennummer, wie auf dem Gerät aufgedruckt
typeEnum: HEAT, HCA, WARM_WATER, COLD_WATER, SMOKE, ELECTRICITY, GASGerätetyp
stateEnum: ACTIVE, HINT, ERROR, DISMANTLEDStatus des Geräts
manufacturerText | nullHersteller
beginDatum/ZeitMontagedatum
endDatum/Zeit | nullDemontagedatum; null = aktuell montiert
apartmentObjektZugeordnete Einheit; null bei Geräten der Liegenschaft (z. B. Hauptzähler)
apartment.idUUIDUUID der Einheit
apartment.labelText | nullBezeichnung der Einheit
propertyObjektZugeordnete Liegenschaft
property.idUUIDUUID der Liegenschaft
property.labelTextBezeichnung der Liegenschaft
property.addressObjektAnschrift der Liegenschaft
property.address.streetTextStraße
property.address.streetNumberTextHausnummer
property.address.postcodeTextPostleitzahl
property.address.cityTextOrt
property.address.countryTextLand (ISO 3166-1 alpha-2)
property.address.additionalText | nullAdresszusatz
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt geändert am

GET/api/v1/devices/{id}

Gerät abrufen

Retrieves a Device resource.

Scope: read

Parameter

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Antwort

FeldTypBeschreibung
idUUIDUUID des Geräts; für alle Folgeabfragen verwenden
numberText | nullZählernummer bzw. Seriennummer, wie auf dem Gerät aufgedruckt
typeEnum: HEAT, HCA, WARM_WATER, COLD_WATER, SMOKE, ELECTRICITY, GASGerätetyp
stateEnum: ACTIVE, HINT, ERROR, DISMANTLEDStatus des Geräts
manufacturerText | nullHersteller
beginDatum/ZeitMontagedatum
endDatum/Zeit | nullDemontagedatum; null = aktuell montiert
apartmentObjektZugeordnete Einheit; null bei Geräten der Liegenschaft (z. B. Hauptzähler)
apartment.idUUIDUUID der Einheit
apartment.labelText | nullBezeichnung der Einheit
propertyObjektZugeordnete Liegenschaft
property.idUUIDUUID der Liegenschaft
property.labelTextBezeichnung der Liegenschaft
property.addressObjektAnschrift der Liegenschaft
property.address.streetTextStraße
property.address.streetNumberTextHausnummer
property.address.postcodeTextPostleitzahl
property.address.cityTextOrt
property.address.countryTextLand (ISO 3166-1 alpha-2)
property.address.additionalText | nullAdresszusatz
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
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

FeldTypBeschreibung
idTextID des Messwerts
reportDateDatum/ZeitZeitpunkt der Erfassung (ISO 8601 mit Zeitzone)
valueZahlZählerstand
unitEnum: m³, kWh, Einheiten, "", nullEinheit; leer bei Rauchmeldern
typeEnum: MANUAL, REMOTE, ESTIMATED, SYSTEM, CALCULATEDErfassungsart: REMOTE = per Funk, MANUAL = manuell, ESTIMATED = geschätzt, SYSTEM/CALCULATED = vom System berechnet
deviceTypeEnum: HEAT, HCA, WARM_WATER, COLD_WATER, SMOKE, ELECTRICITY, GASGerätetyp des Zählers
isBillingRelevantBooleantrue = 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

NameOrtTypBeschreibung
deviceId Pflicht Pfad UUID UUID des Objekts

Anfrage

FeldTypBeschreibung
reportDateDatum/Zeit | nullAblesezeitpunkt (ISO 8601 mit Zeitzone)
valueZahl | nullZählerstand

Beispiel

POST /api/v1/devices/{deviceId}/values
Content-Type: application/json

{
    "reportDate": "2026-06-30T12:00:00+02:00",
    "value": 1234.567
}

Antwort

FeldTypBeschreibung
idTextID des Messwerts
reportDateDatum/ZeitZeitpunkt der Erfassung (ISO 8601 mit Zeitzone)
valueZahlZählerstand
unitEnum: m³, kWh, Einheiten, "", nullEinheit; leer bei Rauchmeldern
typeEnum: MANUAL, REMOTE, ESTIMATED, SYSTEM, CALCULATEDErfassungsart: REMOTE = per Funk, MANUAL = manuell, ESTIMATED = geschätzt, SYSTEM/CALCULATED = vom System berechnet
deviceTypeEnum: HEAT, HCA, WARM_WATER, COLD_WATER, SMOKE, ELECTRICITY, GASGerätetyp des Zählers
isBillingRelevantBooleantrue = 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

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Anfrage

FeldTypBeschreibung
costTypeText | nullSchlüssel der Kostenart; nur innerhalb derselben Kategorie (HEATING bzw. ADDITIONAL) änderbar
dateDatum/Zeit | nullRechnungsdatum
netAmountZahl | nullBetrag netto
grossAmountZahl | nullBetrag brutto
taxRateZahl | nullUmsatzsteuersatz in Prozent; null = abweichender Satz
invoiceNumberText | nullRechnungsnummer
descriptionText | nullAbweichende Bezeichnung der Position
labourCostZahl | nullDarin enthaltene Arbeitskosten (§ 35a EStG)
distributionText | nullUmlagemaßstab (distribution.key); nur bei Betriebskosten. 25 braucht tenants, 32 braucht apartments
tenantsListe | nullNur bei Umlagemaßstab 25 (zugeordnete Nutzer): IDs der Mietverhältnisse aus /api/v1/tenants, auf die die Kosten umgelegt werden
apartmentsListe | nullNur 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

FeldTypBeschreibung
idUUIDUUID der Kostenposition
categoryEnum: HEATING, ADDITIONALHEATING = Heiz- und Warmwassernebenkosten, ADDITIONAL = Kaltwasser und weitere Betriebskosten
costTypeObjektKostenart
costType.keyTextSchlüssel der Kostenart, siehe /api/v1/cost-types
costType.argeKeyTextKostenart-Schlüssel nach ARGE Heiz- und Wasserkosten; nicht eindeutig
costType.labelTextBezeichnung der Kostenart
descriptionText | nullAbweichende Bezeichnung der Position
dateDatum/ZeitRechnungsdatum
invoiceNumberText | nullRechnungsnummer
netAmountZahl | nullBetrag netto
grossAmountZahlBetrag brutto
taxRateZahl | nullUmsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag
labourCostZahl | nullDarin enthaltene Arbeitskosten (§ 35a EStG)
distributionObjektUmlagemaßstab; nur bei ADDITIONAL
distribution.keyTextSchlüssel des Umlagemaßstabs
distribution.labelTextBezeichnung, z. B. Wohnfläche
tenantsListeMietverhältnisse, auf die die Kosten umgelegt werden; nur bei Umlagemaßstab 25
apartmentsListeEinheiten, auf die die Kosten umgelegt werden; nur bei Umlagemaßstab 32
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt geändert am

DELETE/api/v1/billing-costs/{id}

Kostenposition löschen

Removes the BillingCost resource.

Scope: write

Parameter

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

GET/api/v1/billing-documents/{id}

Abrechnungsdokument abrufen

Retrieves a BillingDocument resource.

Scope: read

Parameter

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Antwort

FeldTypBeschreibung
idGanzzahlID des Dokuments
typeEnum: 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_REQUESTEDDokumentart; APARTMENT_HEATING_BILL = Einzelabrechnung, PROPERTY_HEATING_BILL = Gesamtabrechnung
nameText | nullDateiname
dateDatum/Zeit | nullErstellt am
apartmentObjektEinheit; nur bei Einzelabrechnungen
apartment.idUUIDUUID der Einheit
apartment.labelText | nullBezeichnung der Einheit
tenantObjektNutzer; nur bei Einzelabrechnungen
tenant.idGanzzahl | nullID des Mietverhältnisses (/api/v1/tenants/{id}); null, wenn es nicht zugeordnet werden konnte, z. B. bei Leerstand
tenant.nameText | nullName, wie er auf der Abrechnung steht
usageBeginDatum/Zeit | nullBeginn des abgerechneten Nutzungszeitraums
usageEndDatum/Zeit | nullEnde des abgerechneten Nutzungszeitraums
totalCostGrossZahl | nullKosten brutto; bei der Gesamtabrechnung die Gesamtkosten der Liegenschaft
prepaymentGrossZahl | nullGeleistete Vorauszahlungen brutto; nur bei Einzelabrechnungen
balanceGrossZahl | nullErgebnis brutto: positiv = Nachzahlung, negativ = Guthaben; nur bei Einzelabrechnungen
pdfTextPfad zum Herunterladen der PDF-Datei

GET/api/v1/billing-documents/{id}/pdf

PDF eines Abrechnungsdokuments herunterladen

Mit Accept: application/pdf abrufen.

Scope: read

Parameter

NameOrtTypBeschreibung
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

NameOrtTypBeschreibung
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

FeldTypBeschreibung
idUUIDUUID der Abrechnungsperiode
propertyObjektLiegenschaft
property.idUUIDUUID der Liegenschaft
property.labelTextBezeichnung der Liegenschaft
property.addressObjektAnschrift der Liegenschaft
property.address.streetTextStraße
property.address.streetNumberTextHausnummer
property.address.postcodeTextPostleitzahl
property.address.cityTextOrt
property.address.countryTextLand (ISO 3166-1 alpha-2)
property.address.additionalText | nullAdresszusatz
beginDatum/ZeitBeginn des Abrechnungszeitraums
endDatum/ZeitEnde des Abrechnungszeitraums (Stichtag)
stateEnum: OPEN, BILLABLE, SUBMITTED, REVIEW, DONEOPEN = 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
submitDateDatum/Zeit | nullZeitpunkt, zu dem die Kosten übermittelt wurden
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt geändert am, z. B. durch einen Statuswechsel

POST/api/v1/billings

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

FeldTypBeschreibung
propertyText | nullUUID der Liegenschaft
beginDatum/Zeit | nullBeginn des Abrechnungszeitraums
endDatum/Zeit | nullEnde des Abrechnungszeitraums (Stichtag), höchstens ein Jahr nach dem Beginn
heatingCostEnabledBooleanHeizkosten abrechnen (bucht 00002)
warmWaterCostEnabledBooleanWarmwasserkosten abrechnen (bucht 00002)
coldWaterCostEnabledBooleanKaltwasserkosten abrechnen (bucht 00004)
additionalCostEnabledBooleanWeitere 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

FeldTypBeschreibung
idUUIDUUID der Abrechnungsperiode
propertyObjektLiegenschaft
property.idUUIDUUID der Liegenschaft
property.labelTextBezeichnung der Liegenschaft
property.addressObjektAnschrift der Liegenschaft
property.address.streetTextStraße
property.address.streetNumberTextHausnummer
property.address.postcodeTextPostleitzahl
property.address.cityTextOrt
property.address.countryTextLand (ISO 3166-1 alpha-2)
property.address.additionalText | nullAdresszusatz
beginDatum/ZeitBeginn des Abrechnungszeitraums
endDatum/ZeitEnde des Abrechnungszeitraums (Stichtag)
stateEnum: OPEN, BILLABLE, SUBMITTED, REVIEW, DONEOPEN = 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
submitDateDatum/Zeit | nullZeitpunkt, zu dem die Kosten übermittelt wurden
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
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

FeldTypBeschreibung
idUUIDUUID der Kostenposition
categoryEnum: HEATING, ADDITIONALHEATING = Heiz- und Warmwassernebenkosten, ADDITIONAL = Kaltwasser und weitere Betriebskosten
costTypeObjektKostenart
costType.keyTextSchlüssel der Kostenart, siehe /api/v1/cost-types
costType.argeKeyTextKostenart-Schlüssel nach ARGE Heiz- und Wasserkosten; nicht eindeutig
costType.labelTextBezeichnung der Kostenart
descriptionText | nullAbweichende Bezeichnung der Position
dateDatum/ZeitRechnungsdatum
invoiceNumberText | nullRechnungsnummer
netAmountZahl | nullBetrag netto
grossAmountZahlBetrag brutto
taxRateZahl | nullUmsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag
labourCostZahl | nullDarin enthaltene Arbeitskosten (§ 35a EStG)
distributionObjektUmlagemaßstab; nur bei ADDITIONAL
distribution.keyTextSchlüssel des Umlagemaßstabs
distribution.labelTextBezeichnung, z. B. Wohnfläche
tenantsListeMietverhältnisse, auf die die Kosten umgelegt werden; nur bei Umlagemaßstab 25
apartmentsListeEinheiten, auf die die Kosten umgelegt werden; nur bei Umlagemaßstab 32
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
billingId Pflicht Pfad Text BillingCost identifier

Anfrage

FeldTypBeschreibung
costTypeTextSchlüssel der Kostenart (key aus /api/v1/cost-types)
dateDatum/Zeit | nullRechnungsdatum
netAmountZahl | nullBetrag netto
grossAmountZahl | nullBetrag brutto
taxRateZahl | nullUmsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag
invoiceNumberText | nullRechnungsnummer
descriptionText | nullAbweichende Bezeichnung der Position
labourCostZahl | nullDarin enthaltene Arbeitskosten (§ 35a EStG)
distributionText | nullUmlagemaßstab (distribution.key); nur bei Betriebskosten, Standard ist der Umlagemaßstab der Kostenart. 25 braucht tenants, 32 braucht apartments
tenantsListe | nullNur bei Umlagemaßstab 25 (zugeordnete Nutzer): IDs der Mietverhältnisse aus /api/v1/tenants, auf die die Kosten umgelegt werden
apartmentsListe | nullNur 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

FeldTypBeschreibung
idUUIDUUID der Kostenposition
categoryEnum: HEATING, ADDITIONALHEATING = Heiz- und Warmwassernebenkosten, ADDITIONAL = Kaltwasser und weitere Betriebskosten
costTypeObjektKostenart
costType.keyTextSchlüssel der Kostenart, siehe /api/v1/cost-types
costType.argeKeyTextKostenart-Schlüssel nach ARGE Heiz- und Wasserkosten; nicht eindeutig
costType.labelTextBezeichnung der Kostenart
descriptionText | nullAbweichende Bezeichnung der Position
dateDatum/ZeitRechnungsdatum
invoiceNumberText | nullRechnungsnummer
netAmountZahl | nullBetrag netto
grossAmountZahlBetrag brutto
taxRateZahl | nullUmsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag
labourCostZahl | nullDarin enthaltene Arbeitskosten (§ 35a EStG)
distributionObjektUmlagemaßstab; nur bei ADDITIONAL
distribution.keyTextSchlüssel des Umlagemaßstabs
distribution.labelTextBezeichnung, z. B. Wohnfläche
tenantsListeMietverhältnisse, auf die die Kosten umgelegt werden; nur bei Umlagemaßstab 25
apartmentsListeEinheiten, auf die die Kosten umgelegt werden; nur bei Umlagemaßstab 32
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
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

FeldTypBeschreibung
idGanzzahlID des Dokuments
typeEnum: 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_REQUESTEDDokumentart; APARTMENT_HEATING_BILL = Einzelabrechnung, PROPERTY_HEATING_BILL = Gesamtabrechnung
nameText | nullDateiname
dateDatum/Zeit | nullErstellt am
apartmentObjektEinheit; nur bei Einzelabrechnungen
apartment.idUUIDUUID der Einheit
apartment.labelText | nullBezeichnung der Einheit
tenantObjektNutzer; nur bei Einzelabrechnungen
tenant.idGanzzahl | nullID des Mietverhältnisses (/api/v1/tenants/{id}); null, wenn es nicht zugeordnet werden konnte, z. B. bei Leerstand
tenant.nameText | nullName, wie er auf der Abrechnung steht
usageBeginDatum/Zeit | nullBeginn des abgerechneten Nutzungszeitraums
usageEndDatum/Zeit | nullEnde des abgerechneten Nutzungszeitraums
totalCostGrossZahl | nullKosten brutto; bei der Gesamtabrechnung die Gesamtkosten der Liegenschaft
prepaymentGrossZahl | nullGeleistete Vorauszahlungen brutto; nur bei Einzelabrechnungen
balanceGrossZahl | nullErgebnis brutto: positiv = Nachzahlung, negativ = Guthaben; nur bei Einzelabrechnungen
pdfTextPfad 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

NameOrtTypBeschreibung
billingId Pflicht Pfad Text FuelDelivery identifier
invoiceNumber Query Text
invoiceNumber[] Query Liste Mehrere Werte, z. B. invoiceNumber[]=A&invoiceNumber[]=B

Antwort

FeldTypBeschreibung
idUUIDUUID der Position
typeEnum: INITIAL, PURCHASE, FINALINITIAL = Anfangsbestand, PURCHASE = Lieferung bzw. Rechnung, FINAL = Endbestand
dateDatum/ZeitLiefer- bzw. Stichtag
invoiceNumberText | nullRechnungsnummer
fuelTypeObjektBrennstoff
fuelType.keyTextSchlüssel des Brennstoffs
fuelType.argeKeyTextKostenart-Schlüssel nach ARGE Heiz- und Wasserkosten
fuelType.labelTextBezeichnung, z. B. Heizöl in Liter
fuelType.unitTextMengeneinheit
fuelType.storableBooleantrue = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben
fuelType.emissionFactorZahl | nullStandard-Emissionsfaktor in kg CO₂ je kWh
quantityZahlMenge in der Einheit des Brennstoffs
netAmountZahlBetrag netto
grossAmountZahlBetrag brutto
taxRateZahl | nullUmsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag
calorificValueZahlHeizwert in kWh je Mengeneinheit
emissionFactorZahlEmissionsfaktor in kg CO₂ je kWh
carbonEmissionZahlCO₂-Menge in kg
carbonCostZahlCO₂-Kosten brutto
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
billingId Pflicht Pfad Text FuelDelivery identifier

Anfrage

FeldTypBeschreibung
typeEnum: INITIAL, PURCHASE, FINAL, nullINITIAL = Anfangsbestand, PURCHASE = Lieferung bzw. Rechnung, FINAL = Endbestand
dateDatum/Zeit | nullLiefer- bzw. Rechnungsdatum; bei INITIAL standardmäßig Beginn, bei FINAL Ende des Abrechnungszeitraums
quantityZahl | nullMenge in der Einheit des Brennstoffs der Liegenschaft; 0 nur bei leerem Anfangs- oder Endbestand
netAmountZahl | nullBetrag netto; bei FINAL wird der Endbestand aus den Lieferungen bewertet
grossAmountZahl | nullBetrag brutto; bei FINAL wird der Endbestand aus den Lieferungen bewertet
taxRateZahl | nullUmsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz
calorificValueZahl | nullHeizwert in kWh je Mengeneinheit; Standard ist der Wert des Brennstoffs
emissionFactorZahl | nullEmissionsfaktor in kg CO₂ je kWh; Standard ist der Wert des Brennstoffs
carbonEmissionZahl | nullCO₂-Menge in kg; Standard: Menge × Heizwert × Emissionsfaktor
carbonCostZahl | nullCO₂-Kosten brutto; Standard: CO₂-Menge × CO₂-Preis des Jahres (BEHG)
invoiceNumberText | nullRechnungsnummer

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

FeldTypBeschreibung
idUUIDUUID der Position
typeEnum: INITIAL, PURCHASE, FINALINITIAL = Anfangsbestand, PURCHASE = Lieferung bzw. Rechnung, FINAL = Endbestand
dateDatum/ZeitLiefer- bzw. Stichtag
invoiceNumberText | nullRechnungsnummer
fuelTypeObjektBrennstoff
fuelType.keyTextSchlüssel des Brennstoffs
fuelType.argeKeyTextKostenart-Schlüssel nach ARGE Heiz- und Wasserkosten
fuelType.labelTextBezeichnung, z. B. Heizöl in Liter
fuelType.unitTextMengeneinheit
fuelType.storableBooleantrue = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben
fuelType.emissionFactorZahl | nullStandard-Emissionsfaktor in kg CO₂ je kWh
quantityZahlMenge in der Einheit des Brennstoffs
netAmountZahlBetrag netto
grossAmountZahlBetrag brutto
taxRateZahl | nullUmsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag
calorificValueZahlHeizwert in kWh je Mengeneinheit
emissionFactorZahlEmissionsfaktor in kg CO₂ je kWh
carbonEmissionZahlCO₂-Menge in kg
carbonCostZahlCO₂-Kosten brutto
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt geändert am

GET/api/v1/billings/{id}

Abrechnungsperiode abrufen

Retrieves a Billing resource.

Scope: read

Parameter

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Antwort

FeldTypBeschreibung
idUUIDUUID der Abrechnungsperiode
propertyObjektLiegenschaft
property.idUUIDUUID der Liegenschaft
property.labelTextBezeichnung der Liegenschaft
property.addressObjektAnschrift der Liegenschaft
property.address.streetTextStraße
property.address.streetNumberTextHausnummer
property.address.postcodeTextPostleitzahl
property.address.cityTextOrt
property.address.countryTextLand (ISO 3166-1 alpha-2)
property.address.additionalText | nullAdresszusatz
beginDatum/ZeitBeginn des Abrechnungszeitraums
endDatum/ZeitEnde des Abrechnungszeitraums (Stichtag)
stateEnum: OPEN, BILLABLE, SUBMITTED, REVIEW, DONEOPEN = 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
submitDateDatum/Zeit | nullZeitpunkt, zu dem die Kosten übermittelt wurden
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt 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

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Antwort

FeldTypBeschreibung
idUUIDUUID der Abrechnungsperiode
heatingCostEnabledBooleanHeizkosten werden abgerechnet
warmWaterCostEnabledBooleanWarmwasserkosten werden abgerechnet
coldWaterCostEnabledBooleanKaltwasserkosten werden abgerechnet
additionalCostEnabledBooleanWeitere Betriebskosten werden abgerechnet
heatingBaseCostPercentageGanzzahlGrundkostenanteil Heizung in Prozent
heatingUsageCostPercentageGanzzahlVerbrauchskostenanteil Heizung in Prozent
heatingBaseCostDistributionObjektUmlagemaßstab der Grundkosten Heizung
heatingBaseCostDistribution.keyTextSchlüssel des Umlagemaßstabs
heatingBaseCostDistribution.labelTextBezeichnung, z. B. Wohnfläche
warmWaterBaseCostPercentageGanzzahlGrundkostenanteil Warmwasser in Prozent
warmWaterUsageCostPercentageGanzzahlVerbrauchskostenanteil Warmwasser in Prozent
warmWaterBaseCostDistributionObjektUmlagemaßstab der Grundkosten Warmwasser
warmWaterBaseCostDistribution.keyTextSchlüssel des Umlagemaßstabs
warmWaterBaseCostDistribution.labelTextBezeichnung, z. B. Wohnfläche
warmWaterUsageCostDistributionObjektUmlagemaßstab der Verbrauchskosten Warmwasser
warmWaterUsageCostDistribution.keyTextSchlüssel des Umlagemaßstabs
warmWaterUsageCostDistribution.labelTextBezeichnung, z. B. Wohnfläche
warmWaterShareMethodEnum: PERCENTAGE, DEVICE, WARM_WATER_USAGE, LIVING_SPACE, NO_HOT_WATER, nullErmittlung 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
warmWaterSharePercentageZahl | nullWarmwasseranteil in Prozent bei warmWaterShareMethod = PERCENTAGE
warmWaterTemperatureZahlWarmwassertemperatur in °C
heatingSystemTextArt der Heizungsanlage der Liegenschaft
fuelTypeObjektBrennstoff der Liegenschaft
fuelType.keyTextSchlüssel des Brennstoffs
fuelType.argeKeyTextKostenart-Schlüssel nach ARGE Heiz- und Wasserkosten
fuelType.labelTextBezeichnung, z. B. Heizöl in Liter
fuelType.unitTextMengeneinheit
fuelType.storableBooleantrue = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben
fuelType.emissionFactorZahl | nullStandard-Emissionsfaktor in kg CO₂ je kWh
carbonCostSplitEnabledBooleanCO₂-Kosten werden nach CO2KostAufG aufgeteilt
commercialUseBooleanGewerbliche Nutzung (Nichtwohngebäude)
restructuringRequirementsBooleanSanierungsauflagen: öffentlich-rechtliche Vorgaben schränken eine energetische Sanierung ein
noTotalCarbonEmissionDeductionBooleanKein CO₂-Gesamtabzug (WEG)
monumentProtectionBooleanDenkmalschutz

PATCH/api/v1/billings/{id}/settings

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

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Anfrage

FeldTypBeschreibung
heatingBaseCostPercentageEnum: 0, 30, 40, 50, 100Grundkostenanteil Heizung in Prozent: 0, 30, 40, 50 oder 100
heatingCostEnabledBoolean | nullKostenpflichtig: Heizkosten abrechnen (bucht 00002)
warmWaterCostEnabledBoolean | nullKostenpflichtig: Warmwasserkosten abrechnen (bucht 00002)
coldWaterCostEnabledBoolean | nullKostenpflichtig: Kaltwasserkosten abrechnen (bucht 00004)
additionalCostEnabledBoolean | nullKostenpflichtig: Weitere Betriebskosten abrechnen (bucht 00003)
warmWaterBaseCostPercentageEnum: 0, 30, 40, 50, 100Grundkostenanteil Warmwasser in Prozent: 0, 30, 40, 50 oder 100
heatingBaseCostDistributionText | nullUmlagemaßstab der Grundkosten Heizung (key)
warmWaterBaseCostDistributionText | nullUmlagemaßstab der Grundkosten Warmwasser (key)
warmWaterUsageCostDistributionText | nullUmlagemaßstab der Verbrauchskosten Warmwasser (key)
warmWaterShareMethodEnum: PERCENTAGE, DEVICE, WARM_WATER_USAGE, LIVING_SPACE, NO_HOT_WATER, nullErmittlung des Warmwasseranteils an den Brennstoffkosten
warmWaterSharePercentageZahl | nullWarmwasseranteil 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

FeldTypBeschreibung
idUUIDUUID der Abrechnungsperiode
heatingCostEnabledBooleanHeizkosten werden abgerechnet
warmWaterCostEnabledBooleanWarmwasserkosten werden abgerechnet
coldWaterCostEnabledBooleanKaltwasserkosten werden abgerechnet
additionalCostEnabledBooleanWeitere Betriebskosten werden abgerechnet
heatingBaseCostPercentageGanzzahlGrundkostenanteil Heizung in Prozent
heatingUsageCostPercentageGanzzahlVerbrauchskostenanteil Heizung in Prozent
heatingBaseCostDistributionObjektUmlagemaßstab der Grundkosten Heizung
heatingBaseCostDistribution.keyTextSchlüssel des Umlagemaßstabs
heatingBaseCostDistribution.labelTextBezeichnung, z. B. Wohnfläche
warmWaterBaseCostPercentageGanzzahlGrundkostenanteil Warmwasser in Prozent
warmWaterUsageCostPercentageGanzzahlVerbrauchskostenanteil Warmwasser in Prozent
warmWaterBaseCostDistributionObjektUmlagemaßstab der Grundkosten Warmwasser
warmWaterBaseCostDistribution.keyTextSchlüssel des Umlagemaßstabs
warmWaterBaseCostDistribution.labelTextBezeichnung, z. B. Wohnfläche
warmWaterUsageCostDistributionObjektUmlagemaßstab der Verbrauchskosten Warmwasser
warmWaterUsageCostDistribution.keyTextSchlüssel des Umlagemaßstabs
warmWaterUsageCostDistribution.labelTextBezeichnung, z. B. Wohnfläche
warmWaterShareMethodEnum: PERCENTAGE, DEVICE, WARM_WATER_USAGE, LIVING_SPACE, NO_HOT_WATER, nullErmittlung 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
warmWaterSharePercentageZahl | nullWarmwasseranteil in Prozent bei warmWaterShareMethod = PERCENTAGE
warmWaterTemperatureZahlWarmwassertemperatur in °C
heatingSystemTextArt der Heizungsanlage der Liegenschaft
fuelTypeObjektBrennstoff der Liegenschaft
fuelType.keyTextSchlüssel des Brennstoffs
fuelType.argeKeyTextKostenart-Schlüssel nach ARGE Heiz- und Wasserkosten
fuelType.labelTextBezeichnung, z. B. Heizöl in Liter
fuelType.unitTextMengeneinheit
fuelType.storableBooleantrue = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben
fuelType.emissionFactorZahl | nullStandard-Emissionsfaktor in kg CO₂ je kWh
carbonCostSplitEnabledBooleanCO₂-Kosten werden nach CO2KostAufG aufgeteilt
commercialUseBooleanGewerbliche Nutzung (Nichtwohngebäude)
restructuringRequirementsBooleanSanierungsauflagen: öffentlich-rechtliche Vorgaben schränken eine energetische Sanierung ein
noTotalCarbonEmissionDeductionBooleanKein CO₂-Gesamtabzug (WEG)
monumentProtectionBooleanDenkmalschutz

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

FeldTypBeschreibung
keyTextEindeutiger Schlüssel der Kostenart
argeKeyTextKostenart-Schlüssel nach ARGE Heiz- und Wasserkosten; nicht eindeutig
labelTextBezeichnung
categoryEnum: HEATING, ADDITIONALHEATING = Heiz- und Warmwassernebenkosten, ADDITIONAL = Kaltwasser und weitere Betriebskosten
groupTextHEATING: DEFAULT_HEATING_COST = Heizung und Warmwasser, SPECIAL_HEATING_COST = nur Heizung, SPECIAL_WARM_WATER_COST = nur Warmwasser; ADDITIONAL: Kostengruppe, z. B. Wasserversorgung
distributionObjektStandard-Umlagemaßstab
distribution.keyTextSchlüssel des Umlagemaßstabs
distribution.labelTextBezeichnung, z. B. Wohnfläche
hintText | nullHinweis zur Erfassung

PATCH/api/v1/fuel-deliveries/{id}

Brennstoff ändern

Nur die gesendeten Felder werden geändert.

Scope: write

Parameter

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts

Anfrage

FeldTypBeschreibung
typeEnum: INITIAL, PURCHASE, FINAL, nullINITIAL = Anfangsbestand, PURCHASE = Lieferung bzw. Rechnung, FINAL = Endbestand
dateDatum/Zeit | nullLiefer- bzw. Rechnungsdatum
quantityZahl | nullMenge in der Einheit des Brennstoffs der Liegenschaft; 0 nur bei leerem Anfangs- oder Endbestand
netAmountZahl | nullBetrag netto
grossAmountZahl | nullBetrag brutto
taxRateZahl | nullUmsatzsteuersatz in Prozent; null = abweichender Satz
calorificValueZahl | nullHeizwert in kWh je Mengeneinheit
emissionFactorZahl | nullEmissionsfaktor in kg CO₂ je kWh
carbonEmissionZahl | nullCO₂-Menge in kg
carbonCostZahl | nullCO₂-Kosten brutto
invoiceNumberText | nullRechnungsnummer

Beispiel

PATCH /api/v1/fuel-deliveries/{id}
Content-Type: application/merge-patch+json

{
    "quantity": 3100
}

Antwort

FeldTypBeschreibung
idUUIDUUID der Position
typeEnum: INITIAL, PURCHASE, FINALINITIAL = Anfangsbestand, PURCHASE = Lieferung bzw. Rechnung, FINAL = Endbestand
dateDatum/ZeitLiefer- bzw. Stichtag
invoiceNumberText | nullRechnungsnummer
fuelTypeObjektBrennstoff
fuelType.keyTextSchlüssel des Brennstoffs
fuelType.argeKeyTextKostenart-Schlüssel nach ARGE Heiz- und Wasserkosten
fuelType.labelTextBezeichnung, z. B. Heizöl in Liter
fuelType.unitTextMengeneinheit
fuelType.storableBooleantrue = lagerfähig (Öl, Pellets, Flüssiggas); dann sind Anfangs- und Endbestand anzugeben
fuelType.emissionFactorZahl | nullStandard-Emissionsfaktor in kg CO₂ je kWh
quantityZahlMenge in der Einheit des Brennstoffs
netAmountZahlBetrag netto
grossAmountZahlBetrag brutto
taxRateZahl | nullUmsatzsteuersatz in Prozent, z. B. 19; null = abweichender Satz, maßgeblich sind Netto- und Bruttobetrag
calorificValueZahlHeizwert in kWh je Mengeneinheit
emissionFactorZahlEmissionsfaktor in kg CO₂ je kWh
carbonEmissionZahlCO₂-Menge in kg
carbonCostZahlCO₂-Kosten brutto
createdAtDatum/ZeitAngelegt am
updatedAtDatum/Zeit | nullZuletzt geändert am

DELETE/api/v1/fuel-deliveries/{id}

Brennstoff löschen

Removes the FuelDelivery resource.

Scope: write

Parameter

NameOrtTypBeschreibung
id Pflicht Pfad UUID UUID des Objekts