bimetricsEntwickler
Kassenbuch

Kassenbuch-Einträge buchen

Als Markdown ansehen

Benötigte Berechtigung:matching:write(Belege und Zahlungen zuordnen)

Echte Wirkung

Ändert Daten der Firma; wird atomar mit Idempotenzbeleg und Herkunft protokolliert.
post/api/cash-books/{id}/entries

Kein Testversand aus der Dokumentation: Dieser Aufruf ist nicht als rein lesend gekennzeichnet. Nutze das Codebeispiel.

Bucht einen oder bis zu 20 Einträge ins Kassenbuch, jeden mit der nächsten Nummer seines Jahres. Ohne Beleg gibt es: eine Ausgabe mit Eigenbeleg (expense mit category und ownReceipt, ohne Vorsteuer), Geld privat eingelegt oder entnommen (private_in, private_out; bei GmbH und UG über das Gesellschafter-Verrechnungskonto und nur bis zu dem Betrag, den die Firma den Gesellschaftern schuldet) und Geld zwischen Geschäftskonto und Kasse (transit_in, transit_out, über Geldtransit). Mit documentId bucht der Eintrag die Barzahlung dieses Belegs, wie POST /api/match/payment mit cashBookId; er geht dann allein. Einnahmen gibt es nur mit Beleg, einzelne Barverkäufe nie: bimetrics ist keine Registrierkasse. Der Bestand darf nach keiner Buchung unter 0 € fallen, gerechnet in der Reihenfolge des Kassenbuchs (Tag, dann Erfassung); die Ablehnung nennt die erste Buchung, für die das Geld nicht reicht. expectedBalanceMinor schützt vor einer Änderung dazwischen. Buchen dürfen Inhaber und Nutzer, nicht die Steuerberatung (403 CashBookOwnerOnly). Bei einer Wiederholung schickst du denselben Idempotency-Key.

Benötigt einen Schlüssel mit der Berechtigung matching:write.

Authentifizierung

headerAuthentifizierungBearer <bm_…>

Empfohlen: Authorization: Bearer bm_…. Der Schlüssel wird nur einmal angezeigt; nie in URLs, Logs oder Frontend-Code ablegen.

Pfadparameter

id*string

ID des Kassenbuchs (UUID).

Formatuuid

Header-Parameter

Idempotency-Key*string

Stabiler 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.

Muster^[!-~]+$
Länge1 <= length <= 128

Request-Body

the entries; expectedBalanceMinor from the last read

application/json
  1. body

Einträge fürs Kassenbuch.

entries?array<>|

Ein bis 20 Einträge; einer mit Beleg geht allein.

expectedBalanceMinor?integer

Der zuletzt gelesene Bestand in Cent. Weicht der Bestand ab, antwortet die Route mit 409 CashBookRejected und bucht nichts.

Antworten

Erfolg.

application/json
  1. response

Gebuchte oder geprüfte Einträge.

balanceMinor?integer

Geld in der Kasse danach, in Cent.

bookings?array<>

Nur in der Vorschau: die Buchungszeilen der Einträge ohne Beleg.

entries?array<>|

Die Einträge; bei einer Wiederholung mit demselben Idempotency-Key leer.

exported?boolean

Nur in der Vorschau: true, wenn ein Eintrag in einem Zeitraum liegt, der schon an DATEV exportiert ist. Er kommt dann erst mit, wenn die Firma den Monat noch einmal exportiert.

replayed?boolean

true bei einer Wiederholung.

Beispielanfrage
curl --fail-with-body "https://app.bimetrics.de/api/cash-books/497f6eca-6276-4993-bfeb-53cbbbba6f08/entries" \  -H "Authorization: Bearer $BIMETRICS_API_KEY" \  -H "Idempotency-Key: rechnung-2026-001" \  -H "Content-Type: application/json" \  -d '{}'
Beispielantwort
{  "balanceMinor": 15000,  "entries": [    {      "amountMinor": -5000,      "cashBookId": "7c2e9a41-5b3d-4f08-9e61-2d8a4c7f1b39",      "companyId": "9c388e1f-04a6-4770-80bd-66cd98dd00d5",      "createdAt": "2026-11-13T09:05:00Z",      "entryDate": {        "day": 12,        "month": 11,        "year": 2026      },      "id": "3f1d2c7a-8b9e-4a51-b6c2-0e4f8a9d7b13",      "kind": "private_out",      "number": "KB-2026-0002",      "origin": "api",      "text": "Privatentnahme",      "updatedAt": "2026-11-13T09:05:00Z",      "year": 2026    }  ]}