Dauerbuchung anlegen
Benötigte Berechtigung:collections:write(Vorlagen und Dauerbuchungen ändern)
Echte Wirkung
/api/document/collection/contract/Kein Testversand aus der Dokumentation: Dieser Aufruf ist nicht als rein lesend gekennzeichnet. Nutze das Codebeispiel.
Legt eine Dauerbuchung an, wie in der App: Für jede Periode entsteht sofort ein Beleg mit Buchung, auch für vergangene. POST /api/document/collection/contract/preview zeigt das vorher. Der Rhythmus ist 1, 3, 6 oder 12 Monate, end gilt ausschließlich und liegt nach start. Zeilen haben einen festen Betrag. Geprüft wird wie im Formular der App: Bezeichnung, Art invoice oder receipt, 1 bis 100 Zeilen mit Betrag oder Anteil, Kategorie passend zu Art, Verwendung und Kontenrahmen, Steuersatz 19, 7 oder 0 %, auf Eingangsbelegen auch 9 oder 5,5 %, soweit die Kategorie ihn zulässt, Steuerfall bei 0 % auf Eingangsbelegen und die Gegenpartei der Art, außer alle Kategorien werden direkt gebucht. Verstöße ergeben 400 InvalidBookkeepingChange mit context.field. Bezeichnung, Kategorie und Steuersatz werden nur geprüft, wenn sie neu sind. Eine Wiederholung mit gleichem Idempotency-Key wirkt nicht doppelt.
Benötigt einen Schlüssel mit der Berechtigung collections:write.
AuthentifizierungBearer <bm_…>Empfohlen: Authorization: Bearer bm_…. Der Schlüssel wird nur einmal angezeigt; nie in URLs, Logs oder Frontend-Code ablegen.
Idempotency-Key*stringStabiler Schlüssel für genau diese Änderung: 1–128 druckbare ASCII-Zeichen ohne Leerzeichen. Bei Wiederholungen denselben Schlüssel und unveränderten Inhalt senden; das Ergebnis wird nicht nochmals erzeugt.
^[!-~]+$1 <= length <= 128application/json- body
Felder einer Buchungsvorlage oder Dauerbuchung.
collectionNumber?|Nummer; wird zur Rechnungsnummer der erzeugten Belege.
costCenterId?stringKostenstelle oder Verteilung aller Belege der Dauerbuchung als ID, ein leerer String entfernt sie. Eine Änderung gilt für künftige Belege und für alle, die noch nicht festgeschrieben, zugeordnet oder bezahlt sind. Ohne Angabe bleibt sie.
documentContractRepetitionFixed?Nur bei Dauerbuchungen: Beginn, ausschließliches Ende und Rhythmus.
expectedUpdatedAt?stringupdatedAt des gelesenen Objekts, beim Ändern Pflicht.
date-timefriendlyName?|Bezeichnung.
issuer?|Aussteller: die Gegenpartei bei receipt.
kind?|invoice (Ausgangsrechnung) oder receipt (Eingangsbeleg), ohne Angabe beim Anlegen receipt.
positionTemplate?array<>|Die Zeilen, 1 bis 100. Ersetzt beim Ändern alle Zeilen.
recipient?|Empfänger: die Gegenpartei bei invoice.
Erfolg.
application/json- response
Dauerbuchung, aus der der Beleg entstand: ein fester Betrag im festen Rhythmus, z. B. Miete. Für jeden Zeitraum legt bimetrics einen Beleg an.
collectionNumber?stringNummer der Dauerbuchung; wird zur Rechnungsnummer (invoiceNumber) der erzeugten Belege. Ist sie leer, entsteht die Rechnungsnummer aus der Bezeichnung.
companyId?stringID der Firma.
uuidcostCenterId?stringKostenstelle oder Verteilung als ID; fehlt ohne.
uuidcreatedAt?stringAnlage in bimetrics.
date-timedocumentContractRepetitionFixed?Zeitraum und Rhythmus der erzeugten Belege.
friendlyName?stringBezeichnung.
id?stringID der Dauerbuchung.
uuidissuer?Aussteller der erzeugten Belege.
kind?stringBelegart der erzeugten Belege: invoice oder receipt.
"invoice""receipt"positionTemplate?array<>|Vorlagen der Positionen der erzeugten Belege.
recipient?Empfänger der erzeugten Belege.
updatedAt?stringLetzte Änderung.
date-timeuploadDocument?|Die hinterlegte Datei; null ohne Datei.
uploadDocumentId?|ID einer hinterlegten Datei; null ohne Datei.
uuidcurl --fail-with-body "https://app.bimetrics.de/api/document/collection/contract/" \ -H "Authorization: Bearer $BIMETRICS_API_KEY" \ -H "Idempotency-Key: rechnung-2026-001" \ -H "Content-Type: application/json" \ -d '{}'{ "collectionNumber": "MIETE", "companyId": "9c388e1f-04a6-4770-80bd-66cd98dd00d5", "createdAt": "2026-01-05T09:00:00Z", "documentContractRepetitionFixed": { "end": null, "repetitionPeriodDays": 0, "repetitionPeriodMonth": 1, "start": { "day": 1, "month": 1, "year": 2026 } }, "friendlyName": "Büromiete", "id": "6d0e3f52-81a4-4b7c-9f26-2a7e5c1d4b83", "issuer": { "address": "", "customerNumber": null, "iban": "", "name": "Muster Immobilien GmbH", "taxId": "" }, "kind": "receipt", "positionTemplate": [ { "additionalInfo": { "freeOfVat": false, "reverseCharge": false }, "category": "rent_payment", "label": "Miete", "totalFixed": 120000, "totalRatio": null, "vatPercentage": "19" } ], "recipient": { "address": "", "customerNumber": null, "iban": "", "name": "", "taxId": "" }, "updatedAt": "2026-01-05T09:00:00Z", "uploadDocument": null, "uploadDocumentId": null}Per E-Mail senden POST
Sendet ein ausgestelltes Dokument an die genannten Empfänger, wie „Per E-Mail senden“ in der App: Absender ist bimetrics, Antworten gehen an die Antwortadresse der Firma, unter dem Text stehen Signatur und Pflichtangaben. Betreff und Text gehen genau so raus, wie du sie schickst. Platzhalter wie `{Betrag}` füllt nur die Vorschau. Unumkehrbar. Je Firma gehen höchstens 20 Empfänger am Tag raus, in der Testphase 3, für App, API und MCP zusammen (`429 DocumentMailLimitExceeded`). Ohne eingerichteten E-Mail-Versand antwortet die Route mit `409 DocumentMailNotConfigured`, in der Testphase vor der Bestätigung der E-Mail-Adresse mit `403 MailNotConfirmed`. Eine Wiederholung mit gleichem Idempotency-Key sendet nichts doppelt. Benötigt einen Schlüssel mit der Berechtigung `mail:send`.
Dauerbuchungen suchen POST
Sucht die Dauerbuchungen der Firma: ein fester Betrag im festen Rhythmus ohne eigene Rechnung, etwa die Büromiete. Gelöschte fehlen, auch wenn ihre Belege bleiben. Benötigt einen Schlüssel mit der Berechtigung `read`.