Changelog
Änderungen an der bimetrics API, neueste zuerst.
12.11.2026: Kostenstelle beim Verschieben zu einem anderen Kontakt
POST /api/document/bulk/counterparty,POST /api/contact/{id}/mergeundcounterparty.contactIdinPATCH /api/document/{id}: Trägt der Beleg genau die Kostenstelle, die am alten Kontakt für neue Belege hinterlegt ist (defaultCostCenterId), oder hat er keine, bekommt er beim Wechsel die des neuen Kontakts oder keine. Bisher behielt er die alte, und der DATEV-Export trug sie weiter. Jede andere Kostenstelle bleibt, auch eine, die dieselbe Änderung mitcostCenterIdsetzt.- Löst
counterpartymit freien Angaben den Beleg vom Kontakt, entfällt dessen Kostenstelle für neue Belege ebenso.
12.11.2026: Zwölf neue Kategorien
- Neu in
GET /api/category/undlist_categories:material_purchase(Materialeinkauf, SKR03 3000, bei 7 % 3010, bei 19 % 3030; SKR04 5100, 5110, 5130),machine_rental,machine_purchase,rent_ancillary_costs,office_equipment_leasing,customs_duties,sales_commissions,fines_penaltiesundstatutory_accident_insurancefür Belege, dazu die direkt gebuchten Vorlagen-Kategoriensecurity_deposit,insurance_compensationundsick_pay_reimbursement. - Neuer Titel, der Schlüssel bleibt:
technical_equipment_leasingheißt „Leasing von Maschinen und Anlagen“.
12.11.2026: Belege zu einem anderen Kontakt verschieben
- Neu:
POST /api/document/bulk/counterpartyverschiebt bis zu 50 Belege zum KontaktcontactId, wie die Massenaktion „Kontakt ändern“ in der App. Jeder Beleg bekommt Name, Anschrift, USt-IdNr., IBAN und Nummer des Kontakts, und bimetrics bucht ihn auf dessen Personenkonto um. Festgeschriebene Buchungen storniert bimetrics und bucht sie neu,reversedFinalizedMonthsnennt die Monate. Ausgestellte Rechnungen, an DATEV exportierte Belege und Belege aus Dauerbuchungen bleiben und stehen mit Grund inskipped. Erst mitdryRun, dann mitexpectedVersions, Rechtdocuments:write. - Neu:
POST /api/contact/{id}/mergeführt zwei Kontakte zusammen: Die Belege des Kontakts{id}kommen zum KontakttargetContactId, je Aufruf die ältesten 50, undremainingnennt, was danach noch beim Kontakt bleibt. MitdeleteSourcelöscht bimetrics den leeren Kontakt danach, wenn nichts mehr auf ihn verweist (sourceDeleted). Über einen API-Schlüssel braucht das zusätzlich das Rechtcontacts:write. - Über MCP folgen
preview_contact_merge,merge_contactsund die Aktioncounterpartyinpreview_bulk_document_changeundapply_bulk_document_changemit der nächsten MCP-Version.
12.11.2026: Kostenstellen an Belegen und Buchungen
- Neu:
costCenterIdan Belegen, Buchungen und Dauerbuchungen nennt die Kostenstelle oder Verteilung. Buchungen tragen sie nur mit Aufwands- oder Erlöskonto, Zahlungen nie. Bei einer Verteilung nenntcostCenterPartsden Betrag je Kostenstelle, centgenau wie die Zeilen im DATEV-Export.costCenterRelevantsagt, ob eine Buchung eine Kostenstelle tragen kann.accountIsIncomeStatementundaccountContraIsIncomeStatementnennen die Seite mit dem Erfolgskonto. costCenterIdinPATCH /api/document/{id}setzt die Kostenstelle eines Belegs, ein leerer String entfernt sie. Das geht auch bei ausgestellten und bezahlten Belegen, weil sich kein Betrag ändert. In festgeschriebenen Monaten storniert bimetrics die Buchungen und bucht sie neu.defaultCostCenterIdinPOST /api/contact/undPUT /api/contact/{id}: Neue Belege des Kontakts bekommen diese Kostenstelle, solange sie noch keine haben.- Kostenstellen und Verteilungen verwaltest du jetzt auch per API, wie in den Einstellungen der App. Dafür gibt es fünf Routen:
GET /api/cost-centers,POST /api/cost-centers,PUT /api/cost-centers/{id},POST /api/cost-centers/{id}/archiveundPOST /api/cost-centers/{id}/unarchive. Zum Lesen reichtread, alles andere brauchtcompany:write. Nummer und Anteile stehen fest, sobald ein Beleg sie nutzt. Gelöscht wird nie, nur archiviert. POST /api/document/bulk/cost-centersetzt eine Kostenstelle an bis zu 50 Belegen auf einmal, mitdryRunundexpectedVersionswie bei der Kategorie. Festgeschriebene Belege überspringt die Route; änderst du sie einzeln, bucht bimetrics sie neu.POST /api/document/filterundPOST /api/accounting/booking/filterfiltern jetzt auch nachcostCenterId. Miteqund dem Wertnullfindest du Einträge ohne Kostenstelle.- Über MCP kommen Kostenstellen mit der nächsten MCP-Version.
11.11.2026: Möglicher Doppelbeleg
- Neu:
possibleDuplicateOfIdinGET /api/document/{id}undPOST /api/document/filter. Es nennt einen älteren Beleg mit gleichem Inhalt, meist dasselbe Papier als zweiter Scan. Siehe Möglicher Doppelbeleg. Nur ein Hinweis, er sperrt und löscht nichts.
11.11.2026: Beschreibungen zu Nachträgen und Festschreibung
- Die Beschreibungen von
GET /api/export/datev/addenda, vonexportundexport.addendumeiner Buchung und vonorigin.matchIdsagen genauer, was ein Nachtrag ist und welche ZuordnungmatchIdnennt. Verhalten, Anfrage und Antwort bleiben gleich. finalizedBookingsundexportedBookingsinGET /api/match/{id}/cash-discount-previewundGET /api/match/{id}/reminder-charges-previewsowieexportedBookingsinGET /api/match/{id}/euro-amount-previewbeschreiben, was in der App geschieht: Skonto, Mahnkosten und Zinsen kommen mit dem Datum der Zahlung als neue Buchungen dazu, festgeschriebene Buchungen bleiben stehen.DELETE /api/match/{id}nennt, wann beim Lösen Storno und Neubuchung entstehen: bei einer festgeschriebenen Zahlung immer, bei den Belegen nur bei einer Sammelzahlung mit Rest.
11.11.2026: Lange PDFs vollständig lesen, „Erneut lesen“
- bimetrics liest jetzt bis zu 60 Seiten je PDF. Bisher waren es bei einem Scan die ersten 5 Seiten und bei einer PDF-Datei mit Text die ersten 20. Einen Scan ohne Textebene mit mehr als einer Seite liest bimetrics Seite für Seite und überspringt dabei leere Rückseiten. Eine einzelne langsame Seite lässt die Erkennung nicht mehr scheitern, bei vielen Seiten dauert das Lesen aber einige Minuten.
- Neu in
uploadDocument:pageCount(Seitenzahl der PDF-Datei) undpagesRead(gelesene Seiten). IstpagesReadkleiner alspageCount, hat die Datei mehr als 60 Seiten und die Seiten danach fehlen. Beide sind0bei Bildern, E-Rechnungen und früher gelesenen Belegen. - Neu:
POST /api/document/{id}/reading/retrystartet mit dem Rechtuploaddie Erkennung eines Belegs neu, dessen Lesen fehlgeschlagen ist (ocrStatusfailed), wie „Erneut lesen“ in der App. Der Beleg wartet danach sofort wieder (pending). Das erneute Lesen zählt im Tarif als weiterer Beleg ins Kontingent. Neue Fehler:409 DocumentReadingNotFailed(gelesen, wartet oder wird gelesen, auch beim zweiten Aufruf),409 DocumentReadingManual(von Hand erfasst),409 DocumentReadingFinalized(festgeschriebene Buchungen) und409 DocumentReadingIssued(in bimetrics ausgestellte Rechnung). - Kann bimetrics den Positionen keine Kategorie zuordnen, endet die Erkennung nicht mehr mit
failed: Der Beleg ist gelesen (success), seine Positionen haben keinecategory, und er wird erst gebucht, wenn jemand sie wählt. - Über MCP folgen
retry_document_readingund der Hinweis auf nur zum Teil gelesene Dateien mit der nächsten MCP-Version.
11.11.2026: Leistung an einem Grundstück, Kleinunternehmer im Ausland
- Neu:
items[].kindinPOST /api/draft/undPUT /api/draft/{id}nimmtproperty_service, eine Leistung an einem Grundstück. Ihre Umsatzsteuer richtet sich nach dem Land des Grundstücks:delivery.countryId, ohne Lieferadresse das Land der Kundenanschrift.taxCase.facts.deliveryCountrynennt es. - Grundstück in Deutschland:
standard, auch für Kunden im Ausland. Grundstück in einem anderen EU-Land und Unternehmen mit gültiger USt-IdNr.: neuer Falleu_property_service(Reverse Charge, Konto 8339 bzw. 4339, keine Zusammenfassende Meldung). Grundstück im Drittland: neuer Fallthird_country_property_service(8338 bzw. 4338). - Kleinunternehmer: Eine Leistung an ein Unternehmen in einem anderen EU-Land mit gültiger USt-IdNr. ist jetzt
eu_reverse_charge_serviceauf 8339 bzw. 4339, eine an ein Unternehmen im Drittlandthird_country_service. Bisher war jede Positionsmall_business. Ohne gültige USt-IdNr. bleibt es bei § 19 mit einer Warnung. - Neue Codes in
POST /api/draft/{id}/tax-case:tax_case_property_eu_privateundtax_case_property_partly_markedsperren.property_reverse_charge_check,property_abroad_registrationundsmall_business_eu_business_without_vat_idwarnen, ohne zu sperren. - Neue Kategorie
sales_income_eu_not_taxable(8339 bzw. 4339) inGET /api/category/.taxHintTextsinPATCH /api/company/nimmt die beiden neuen Fälle an. Hinweistexte kennen den Platzhalter{propertyCountry}, etwa „in Österreich“. ruleVersionist jetzt 3. Ausgestellte Rechnungen behalten ihren Steuerfall.- Verschärfungen:
- Ein Grundstück im EU-Ausland sperrt bei einer Privatperson (
tax_case_property_eu_private) und bei einem Unternehmen ohne gültige USt-IdNr. (tax_case_buyer_vat_id_requiredodertax_case_buyer_vat_id_invalid).acceptStandardVatWithoutVatIdhilft hier nicht. - Liegen Positionen nur deshalb steuerlich auseinander, weil ein Teil als Grundstück gekennzeichnet ist, sperrt
tax_case_property_partly_markedstatttax_case_mixed_reverse_chargeodertax_case_outside_scope_mixed. - Hat
deliveryStraße, PLZ oder Ort, aber keincountryId, sperrt eine Grundstücksposition mittax_case_delivery_country_invalid. Das Land der Kundenanschrift gilt dann nicht. - Ein Satz über 0 % auf einem Grundstück im Ausland sperrt mit
tax_case_rate_conflicts_case. Bei anderen Positionen ohne deutsche Umsatzsteuer bleibt es beim Hinweistax_case_override_standard. - Ein Kleinunternehmer mit
salesKindbothbrauchtkindje Position, wenn der Fall daran hängt (tax_case_position_kind_required). - Eine nicht steuerbare Leistung im Drittland neben § 19 sperrt mit
tax_case_outside_scope_mixed. - Ein eigener Hinweistext eines Kleinunternehmers für Reverse Charge braucht „Steuerschuldnerschaft des Leistungsempfängers“, sonst sperrt
tax_hint_text_invalid.
- Ein Grundstück im EU-Ausland sperrt bei einer Privatperson (
- MCP setzt
property_servicenoch nicht.get_sales_documentliest eine solche Position ohnekindund den Entwurf miteditable: false.
11.11.2026: Skonto automatisch ausgleichen
- Bucht ein Lieferant genau den Belegbetrag abzüglich des Skontos ab, das die Zahlungsbedingungen des Eingangsbelegs nennen (genau ein Satz bis 5 %), ordnet bimetrics Beleg und Abbuchung automatisch zu und gleicht die Differenz als erhaltenes Skonto aus. Das gilt auch für Belege aus
POST /api/document/. Eine Zuordnung mitautoMatch: truekann damit eincashDiscounttragen; Anfragen und Antworten bleiben gleich. DELETE /api/match/{id}macht es rückgängig: Beleg und Abbuchung sind wieder offen, eine festgeschriebene Skonto-Buchung wird storniert, und bimetrics ordnet die Kombination nicht noch einmal automatisch zu. Sind Buchungen schon an DATEV exportiert, geht das nur in der App.- Über MCP zeigt
get_matchsolche Zuordnungen schon jetzt mitautomaticundcashDiscount, unddelete_matchhebt sie auf. Die Texte der Werkzeuge folgen mit der nächsten MCP-Version.
11.11.2026: Skonto bei einer Sammelzahlung
- Bezahlt eine Abbuchung mehrere Eingangsbelege desselben Lieferanten mit einem Umsatzsteuersatz und liegt höchstens 5 % unter ihrer Summe, gleicht
POST /api/match/mitconfirmCashDiscountdie Differenz als erhaltenes Skonto aus, nachträglich auchPOST /api/match/{id}/cash-discount. Das Skonto verteilt sich nach Betrag auf die Belege;cashDiscount.documentsnennt den Anteil jedes Belegs,reference.documentsihre Nummern. Im DATEV-Export trägt jede Bank- und Skontozeile die Nummer ihres Belegs. - Gibt es trotz einer solchen Differenz kein Skonto, nennt
POST /api/match/util/amountopenden Grund incashDiscountRefusalundGET /api/match/{id}/cash-discount-previewinreason:supplier,category,taxRatesoderdocumentAmount. - Maut, die ein Lieferant mit 19 % Umsatzsteuer berechnet, sperrt erhaltenes Skonto nicht mehr, auch bei einem einzelnen Beleg. Maut ohne Umsatzsteuer bleibt ausgeschlossen.
- Über MCP gleicht
create_matchmitconfirmCashDiscountmehrere Belege schon jetzt aus, Anteile und Gründe kommen mit der nächsten MCP-Version.
09.11.2026: Zuordnung nach der Festschreibung
- Ändert sich bei einer festgeschriebenen Buchung nur die Zuordnung, etwa wenn du einer Rechnung eine Zahlung zuordnest, bleibt die Buchung stehen. Storno und Neubuchung gibt es nur noch, wenn sich für DATEV etwas ändert, etwa das Konto eines Umsatzes oder bei einer Sammelzahlung mit Rest. Das gilt für
POST /api/match/,DELETE /api/match/{id},POST /api/match/{id}/extend,POST /api/match/{id}/cash-discountundPOST /api/match/{id}/reminder-charges. Anfrage und Antwort bleiben gleich;reversedFinalizedMonthsnannte eine reine Zuordnung schon bisher nicht. origin.matchIdinPOST /api/accounting/booking/filterundGET /api/accounting/booking/{id}nennt bei einer geltenden Buchung die aktuelle Zuordnung von Beleg bzw. Umsatz.refMatchbleibt die Zuordnung, aus der die Buchung entstand; beide unterscheiden sich, wenn eine festgeschriebene Buchung beim Zuordnen stehen blieb.- Über MCP gilt dasselbe, die Texte der Werkzeuge folgen mit der nächsten MCP-Version.
09.11.2026: Späte Belege nach dem DATEV-Export
GET /api/export/datev/addendazählt jede Buchung, die DATEV noch nicht hat, wenn ihr Datum im Zeitraum eines zugestellten Exports liegt. Bisher zählte die Route nur bis zum letzten Buchungstag, den der Export im Monat geliefert hatte. Ein Beleg vom 31.10., der erst nach dem Export des Oktobers kam, wurde deshalb nicht mitgezählt. Nach einem Export vom 01. bis 20.10. zählt ein später Beleg vom 18.10., einer vom 25.10. nicht. Exporte ohne gespeicherten Zeitraum (vor dem 04.11.2026) gelten für die ganzen Monate ihrer Buchungen. Anfrage und Antwort bleiben gleich.- Buchungen aus
POST /api/accounting/booking/filterundGET /api/accounting/booking/{id}nennen nach derselben Regel neuexport.addendum. - Für MCP gilt die Änderung ab der nächsten MCP-Version.
09.11.2026: Zahlungsziel und Skonto je Kunde
- Kontakte kennen
paymentTermsmit Zahlungsziel (paymentTermDays) und Skonto (cashDiscount), lesbar mitGET /api/contact/{id}, änderbar mitPOST /api/contact/undPUT /api/contact/{id}. Statt der Vorgaben der Firma nehmen sie neue Rechnungsentwürfe über MCP, aus Angebot oder Auftragsbestätigung umgewandelte Rechnungen und Rechnungsentwürfe überPOST /api/draft/mit Kunde, aber ohnedueDateundcashDiscount, siehe Kontakte.
09.11.2026: Abschlags- und Schlussrechnungen
POST /api/draft/{id}/deriveleitet aus einem ausgestellten Angebot oder einer ausgestellten Auftragsbestätigung mitinvoiceRoledown_paymenteinen Abschlag ab, mitpercentoderamountMinorund optionalexpectedPerformance, und mitfinaldie Schlussrechnung. Antworten neu mit409 DownPaymentsExistund422 DownPaymentTaxCaseUnsupported, siehe Abschlags- und Schlussrechnung.PUT /api/draft/{id}nimmt an einem AbschlagdownPayment: bimetrics baut dann Positionen und Preisart aus dem Auftrag neu.PUT /api/draft/{id}/finalizenimmt bei einer SchlussrechnungacceptCancelOpenDownPaymentsundexpectedSettlementRevision.POST /api/draft/{id}/tax-casenennt dazusettlementmit Abzügen, Stornos, Korrekturen und dem Betrag „Noch zu zahlen“ (dueMinor). Die Schlussrechnung bekommt die nächste freie Nummer, ihre Stornos und Korrekturen die folgenden.- Neue Lesefelder:
billinganGET /api/draft/{id}eines ausgestellten Angebots oder einer ausgestellten Auftragsbestätigung, die abschließende Rechnung darin mit Beträgen und Storno (closing.netMinor,closing.grossMinor,closing.cancelledBy),billingSummaryinPOST /api/draft/filter, an EntwürfeninvoiceRole(auch als Filter),downPaymentOrdinal,deductedByundsettledByFinalDraftId, je Positiondeduction, an BelegeninvoiceRole. Neue Buchungsartendown_paymentunddown_payment_clearing. Bei einer Schlussrechnung nenntGET /api/draft/{id}/correction-capacityinremainingGrossMinorhöchstens den Rest ihres Steuersatzes nach den Abzügen. - Über MCP mit der nächsten MCP-Version.
09.11.2026: Debitoren- und Kreditorenkonto am Kontakt
GET /api/contact/{id},POST /api/contact/,PUT /api/contact/{id}und je TrefferPOST /api/contact/filternennendatevAccounts: das Debitoren- und das Kreditorenkonto des Kontakts im DATEV-Export, aus der Kundennummer abgeleitet wie die Buchungen und nur lesbar.debitorCollectivebzw.creditorCollectivesagen, dass die Nummer fehlt oder zu groß für ein eigenes Konto ist und auf das Sammelkonto gebucht wird.externalRefheißt in der App „Alte Nummer“, etwa die Kundennummer aus dem früheren Programm. Sie steht nie auf Belegen.- Über MCP nennt
get_contactdatevAccountsmit der nächsten MCP-Version.
09.11.2026: Logo immer änderbar
GET /api/company/logosnenntenabledimmertrue. Die Antwort404 LogoSetDisabledauf Änderungen am Logo gibt es nicht mehr; Anfrage und Antwort bleiben sonst gleich.
09.11.2026: Angebote annehmen, ablehnen und nach Ergebnis filtern
- Neu:
POST /api/draft/{id}/proposal-outcomehält mitinvoices:draftfest, ob der Kunde ein ausgestelltes Angebot angenommen (accepted) oder abgelehnt (rejected) hat, eine Ablehnung mit Grund.opennimmt das Ergebnis zurück. Angebot und PDF bleiben unverändert. Neue Fehler:409 ProposalNotIssued,409 ProposalOutcomeUnchangedund409 ProposalConverted, letzterer, solange zum Angebot eine Auftragsbestätigung oder Rechnung besteht. POST /api/draft/{id}/derivesetzt ein Angebot automatisch auf angenommen, auch nach einer Ablehnung.POST /api/draft/filterfiltert mitproposalStatesausgestellte Angebote nach ihrem Ergebnis:open,expired(gültig bis vor heute),acceptedoderrejected. Das Feld geht nur mit einem Filter aufkindproposal, sonst kommt400.- Jedes ausgestellte Angebot trägt in
POST /api/draft/filterundGET /api/draft/{id}neu das Objektproposalmitoutcome,outcomeAt,outcomeReason,outcomeBy(Person, API-Schlüssel oder MCP-Client),outcomeVia(app,apiodermcp) undsentAt(letzter Versand per E-Mail). POST /api/draft/list/countzählt mit einem Filter aufkindproposaldie Reiter der Angebotsliste:all,draft,open,expired,acceptedundrejected, die vier letzten mit Bruttobetrag. Für Rechnungen bleibt die Antwort gleich.
09.11.2026: Notiz am Kontakt
contactInfo.notesist die interne Notiz zum Kontakt.GET /api/contact/{id}liest sie,POST /api/contact/undPUT /api/contact/{id}schreiben sie wie bisher. Sie steht nie auf Belegen. Über MCP kommt sie mit der nächsten MCP-Version.
09.11.2026: Bank und BIC aus der IBAN
POST /api/contact/checknennt bei einer gültigen deutschen oder österreichischen IBAN neubankmitnameundbic, aus den Bankleitzahl-Verzeichnissen der Deutschen Bundesbank und der Oesterreichischen Nationalbank. Das Feld fehlt bei anderen Ländern und bei unbekannter Bankleitzahl.
09.11.2026: Wording „Zahlung eintragen“
POST /api/match/payment/bulkheißt jetzt „Zahlungen für mehrere Belege eintragen“, wie die Aktion in der App. Nur Titel und Beschreibung ändern sich, Anfrage und Antwort bleiben gleich.
08.11.2026: Ort aus PLZ
- Neu:
GET /api/address/postalliefert mitcontacts:readfür Deutschland und Österreich die Orte einer PLZ oder die PLZ eines Orts, siehe Kontakte prüfen. POST /api/contact/,PUT /api/contact/{id}undPOST /api/contact/checknennen inhintsauch Hinweise zur PLZ der ersten Anschrift:postal_code_format,postal_code_cityundpostal_code_country. Sie sperren nie, eine unbekannte PLZ ergibt keinen. Die Prüfung vorab nimmt dafürpostalCodeundcity.
08.11.2026: Rechnungen nach Zahlstand filtern und zählen
POST /api/draft/filterfiltert ausgestellte Rechnungen nach Zahlstand, wie die Reiter der Rechnungsliste:paymentStatesmitopen(offen, auch überfällig, wie der Reiter „Offen“),overdue(nur die überfälligen),unknown,paidodercancelled, dazupartiallyPaid,reminded,reminderLevels,reminderHold,dueFrom/dueToundlastPaymentFrom/lastPaymentTo. Die Felder gehen nur mit einem Filter aufkindinvoice, sonst kommt400.- Jede ausgestellte Rechnung trägt in
POST /api/draft/filterundGET /api/draft/{id}neu das Objektpaymentmit Zahlstand (state:open,unknown,paidodercancelled),overdue, offenem Betrag, letzter Zahlung, Mahnstufe und Mahnsperre. Es fehlt, solange der Zahlstand noch berechnet wird. - Neu:
POST /api/draft/list/countzählt alle Reiter in einer Abfrage, mit offenem Betrag beiopenundoverdueund dem Rechnungsbetrag nach Gutschriften beiunknownundpaid, mitsales:read. - Solange bimetrics die Zahlstände einer Firma zum ersten Mal berechnet, antworten der Zähler und die Zahlstand-Filter mit
409 ReceivableStatesPending. Sende die Anfrage dann gleich noch einmal.
08.11.2026: Grund eines abgelehnten Stornos
GET /api/receivable/undGET /api/receivable/{id}nennen neucancellationBlockReason, wenn ein Storno mitPOST /api/draft/{id}/cancelabgelehnt würde:cancelled(schon storniert),corrected(per Gutschrift gemindert),paid(bezahlt) odermatched(eine Zahlung ist zugeordnet). Solange ein Storno möglich ist, fehlt das Feld.correctionBlockReasonist jetzt auchcancelled, wenn die Rechnung per Storno-Zuordnung (invoice_cancellation) aufgehoben ist, etwa mit einer hochgeladenen Stornorechnung. Eine Gutschrift lehnte bimetrics in diesem Fall schon bisher ab.
08.11.2026: Kontakte prüfen
- Neu:
POST /api/contact/checkprüft IBAN und USt-IdNr. eines Kontakts mitcontacts:read, ohne etwas zu speichern, siehe Kontakte prüfen. POST /api/contact/undPUT /api/contact/{id}nennen inhintsHinweise, die nie sperren, etwa eine USt-IdNr. mit falscher Prüfziffer.- Verschärfung:
PUT /api/contact/{id}lehnt eine neue IBAN ohne die Länge ihres Landes oder mit falscher Prüfziffer mit400 InvalidIbanab, wie die App. Eine gespeicherte IBAN bleibt, leeren geht immer.
08.11.2026: Standardtexte neuer Belege
- Zeigt das Layout der Belegart den Baustein „Dank“, setzen
POST /api/draft/und MCP bei leeremremarkden Standard-Kopftext ohne Dank ein, etwa „Guten Tag, wir berechnen Ihnen die folgenden Leistungen:“. Ebenso beim Umwandeln und Duplizieren. So dankt der Beleg nur einmal. - Übernimmt ein neuer Entwurf einen Standard-Fußtext, ersetzt bimetrics ihn nur noch, wenn unter „Viele Grüße“ der aktuelle Firmenname oder kein Name steht. Ein anderer Name bleibt stehen, etwa ein von Hand eingetragener oder einer von vor einer Umbenennung.
08.11.2026: Sammelzahlung zählt als bezahlt
- Bezahlt ein Bankumsatz mehrere Ausgangsrechnungen zusammen und geht genau auf, liefern
GET /api/receivable/undGET /api/receivable/{id}für jede dieser RechnungenpaymentKnown: true,paidMinorgleich dem Rechnungsbetrag,openMinor0,reminderBlockReasonsettledsowielastPaymentOnundlastPaymentTransactionIddes Umsatzes. Bisher kampaymentKnown: falsemitpayment_unknown. - Genau aufgehen heißt: kein Rest in der Zuordnung, keine Mahnkosten, kein Skonto, keine erfasste Zahlung, Rechnungskorrektur oder Storno an einer der Rechnungen, der Umsatz gebucht, in Euro und in keiner anderen Zuordnung. Sonst bleibt es bei
paymentKnown: false. - Die Prüfliste
review=remindersführt solche Rechnungen nicht mehr,POST /api/reminder/bulküberspringt sie mit Grundsettledstattpayment_unknown, undpaidSincenennt sie ab dem Zuordnen. Eine Zahlung erfassen lässt sich bei ihnen weiterhin nicht (409 DocumentWriteLocked).
08.11.2026: Behoben: Mahnen bei unklarer Zahlung
- Ist die Zahlung einer Rechnung unklar, antworten
POST /api/reminder/,POST /api/reminder/{id}/previewundPOST /api/reminder/{id}/issuewie beschrieben mit409 ReminderNotAllowedundcontext.reasonpayment_unknown. Bisher kam409 DocumentWriteLocked. POST /api/reminder/bulkführt eine solche Rechnung unterskippedmit Grundpayment_unknownstatt unterfailedmitDocumentWriteLocked.
08.11.2026: Serien mit Zwischenüberschriften über MCP
get_recurring_invoicemeldet eine Serienvorlage mit Zwischenüberschriften, Untertiteln oder optionalen Positionen als nicht bearbeitbar (editable: false) und nennt den Grund.update_recurring_invoicelehnt sie ab. Bisher gingen diese Angaben beim Ändern ohne Meldung verloren. Solche Vorlagen bearbeitest du in der App.
08.11.2026: Abgelehnte USt-IdNr. nicht mehr per API bestätigen
- Verschärfung:
POST /api/draft/,PUT /api/draft/{id},POST /api/recurringinvoice/undPUT /api/recurringinvoice/{id}lehnenacceptUnverifiedVatId: truemit400und dem CodeVatIdConfirmationNotAllowedab, wenn der Entwurf oder die Serienvorlage die Bestätigung nicht schon trägt. Wie in der App und über MCP sperrt eine von VIES abgelehnte USt-IdNr. das Ausstellen. Korrigiere die USt-IdNr. am Kontakt. Eine gespeicherte Bestätigung darfst du unverändert zurückschicken,falsenimmt sie zurück.
08.11.2026: Befreiungsgründe lesen
- Neu:
GET /api/tax-case/exempt-reasonsliefert die Befreiungsgründe für eine Rechnung, die nach § 4 UStG steuerfrei ist, wie die Auswahl unter „Steuerfall anpassen“ in der App, mitsales:read.shortcutist der Wert fürtaxException.reasonbeikindexempt_4, dazu kommen der Name und das Erlöskonto in SKR03 und SKR04.
08.11.2026: Steuersätze je Position
POST /api/draft/{id}/tax-casenennt neuallowedRatesund je Positionlines[].allowedRates: die Steuersätze, die der Steuerfall erlaubt und das Ausstellen annimmt.- Mit § 13b oder § 4 in
taxExceptionspeichernPOST /api/draft/undPUT /api/draft/{id}jede Position mit Satz als 0 % und merken sich ihren Satz. Bisher blieb der Satz stehen, und das Ausstellen lehnte mit 422tax_case_rate_conflicts_caseab. - Entfernst du die Ausnahme, bekommt eine Position mit 0 % ihren Satz zurück, solange sie an derselben Stelle mit demselben Namen und derselben Beschreibung steht und der Kunde in Deutschland sitzt. Bei Kunden im Ausland bleibt 0 % (Reverse Charge, Ausfuhr). Für andere Positionen sendest du den Satz mit.
- Das gilt nur für Rechnungen. Angebote, Auftragsbestätigungen und Stornos behalten ihre Sätze wie gesendet.
- Bei
priceTypegrossgilt der Preis unter der Ausnahme ohne Umsatzsteuer. Soll der Kunde netto zahlen, rechnest du ihn selbst um.
08.11.2026: Freundlichere Standardtexte
POST /api/draft/setzt bei leeremremarkodernotesohne Textvorlage der Firma jetzt den Standardtext der App ein, wie MCP. Bisher blieb der Text dann leer.- Die Standardtexte beginnen mit „Guten Tag,“ und enden im Fußtext mit „Viele Grüße“ und dem Firmennamen. Einzelunternehmen schreiben „ich“, alle anderen „wir“. Die Auftragsbestätigung hat neu einen Fußtext. Den Wortlaut nennt das Glossar.
- Übernimmt ein neuer Entwurf einen Standardtext von bimetrics, beim Umwandeln, Duplizieren oder über MCP aus dem letzten Entwurf, kommt der heutige mit aktuellem Firmennamen. Eigene Texte und Textvorlagen bleiben.
POST /api/draft/{id}/cancellegt die Stornorechnung ohne Fußtext an. Der Kopftext nennt die Rechnung wie bisher.- MCP liest Einleitungs- und Fußtext ohne Absätze.
update_sales_draft,amend_invoice_draftundupdate_recurring_invoicebehalten den gespeicherten Text, wenn er fehlt oder so zurückkommt, wie er gelesen wurde. Ein geänderter Text gilt wie gesendet, auch wenn der gespeicherte Absätze hat. Abgelehnt wird er nur noch, wenn die Lesung eine IBAN kürzt oder den Text abschneidet.
08.11.2026: Weitere Dateien beim Versand per E-Mail
- Neu:
POST /api/document-mail/attachmentslädt eine Datei für Mails hoch, PDF, JPG oder PNG bis 10 MiB, mitmail:send. Den Typ erkennt bimetrics am Inhalt und passt die Endung an. Die Datei wird kein Beleg. POST /api/document-mail/previewundPOST /api/document-mail/sendnehmenattachments: bis zu 10 weitere Dateien alsuploadId,documentId(Beleg) oderdraftId(ausgestellte Rechnung, Angebot oder Auftragsbestätigung). Alle Anhänge zusammen dürfen höchstens 10 MiB groß sein, PDF und XML eingerechnet. Zu einer XRechnung gehen keine weiteren Dateien. Einen Beleg (documentId) hängt ein Schlüssel nur mitreadan. Die Vorschau nennt die Grenzen inattachmentLimitBytesundmaxExtraAttachments.- Weitere Dateien einer gesendeten Mail haben
kindfilemitsourceundsourceId. Jede weitere Datei bleibt als Kopie an der Mail, auch wenn ihre Quelle später gelöscht wird.
08.11.2026: Grund einer gesperrten Gutschrift
GET /api/receivable/undGET /api/receivable/{id}nennen neucorrectionBlockReason, wenncanCorrectfalse ist:cancelled,fully_corrected,no_amount,cash_discount,reminder_chargesoderbooking_error. Solange eine Gutschrift möglich ist, fehlt das Feld.
08.11.2026: Mahnung vor dem Mahnlauf ansehen
- Neu:
GET /api/receivable/{id}/reminder-previewzeigt die Mahnung, die der Mahnlauf für eine Rechnung jetzt ausstellen würde, als PDF und Bildseiten, mitsales:read. Die Nummer vergibt erst das Ausstellen. Bekäme die Rechnung keine Mahnung, antwortet die Route mit409 ReminderNotAllowedund nennt den Grund.
08.11.2026: Rechnungen und Angebote duplizieren
- Neu:
POST /api/draft/{id}/copydupliziert eine Rechnung oder ein Angebot als neuen Entwurf mit heutigem Datum, wie „Duplizieren“ in der App, mitinvoices:draft. Eine Rechnung behält die Zahlungsfrist des Originals in Tagen, ein Angebot seine Gültigkeit. - Dieselbe Regel gilt jetzt in der App und für
copy_sales_documentüber MCP. Bisher übernahm die Kopie Datum, Fälligkeit und Leistungszeitraum des Originals.
07.11.2026: Mahnlauf
- Neu:
POST /api/reminder/bulkstellt für bis zu 25 Rechnungen je eine Mahnung der nächsten Stufe aus, wie der Mahnlauf in der App, mitinvoices:draft. MitdryRunzeigt die Route Stufe, Frist, Gebühren, Zinsen und Gesamtbetrag je Rechnung und eineversion, ohne etwas auszustellen. - Zum Ausstellen gibst du die Versionen als
expectedVersionszurück. Übersprungen werden Rechnungen mit Mahnsperre, laufender Frist, in den 3 Tagen danach, mit ungeklärter Zahlung und weitere, je mit Grund. Eine inzwischen geänderte Rechnung kommt mitVersionConflictinfailed. Ein Idempotency-Key gilt für den ganzen Lauf; eine Wiederholung stellt nichts doppelt aus.
07.11.2026: Wartezeit nach der Mahnfrist
- Nach der Frist einer ausgestellten Mahnung wartet die Prüfliste
review=remindersvonGET /api/receivable/noch 3 Tage, weil Zahlungen nachlaufen. Erst dann schlägt sie die Rechnung wieder vor, und erst dann zähltoverdueinGET /api/home/taskssie mit. - Forderungen nennen diesen Tag unter
remindAgainOn.canRemindbleibt unberührt.
07.11.2026: Mahnsperre
- Neu:
PUT /api/receivable/{id}/reminder-holdsperrt eine Rechnung für Mahnungen, mit optionalem Grund und letztem Tag (until).DELETE /api/receivable/{id}/reminder-holdhebt die Sperre auf. Beide mitinvoices:draft. - Kontakte kennen
noReminders(„Nicht mahnen“), lesbar mitGET /api/contact/{id}und änderbar mitPUT /api/contact/{id}. - Forderungen nennen eine geltende Sperre unter
reminderHold.reminderBlockReasonkennt den neuen Wertreminder_hold.review=reminderslässt gesperrte Rechnungen weg, Anlegen und Ausstellen einer Mahnung antworten mit409 ReminderNotAllowed.
07.11.2026: Mahnungen als ZIP, Mails des Tages
- Neu:
GET /api/reminder/pdfsliefert die Original-PDFs von bis zu 50 ausgestellten oder zurückgezogenen Mahnungen in einer ZIP-Datei, mitsales:read. Mehr als 50:400 BulkLimitExceeded. POST /api/document-mail/previewnennt untersenderneusentToday: die Empfänger, an die die Firma heute (UTC) schon gesendet hat. MitcompanyDailyLimitsiehst du, wie viele heute noch gehen.
07.11.2026: BU-Schlüssel der Zahlungen bei Ist-Versteuerung
- Bei Ist-Versteuerung nennen
POST /api/accounting/booking/filterundGET /api/accounting/booking/{id}inbuKeyeiner Zahlung auf eine Ausgangsrechnung denselben Schlüssel wie der DATEV-Export:0101bei 19 %,0102bei 7 % und0040ohne deutsche Umsatzsteuer. Bisher fehltebuKeydort. Schon exportierte Zahlungen zeigen den Schlüssel, mit dem sie an DATEV gingen. Teilt der Export die Zahlung auf mehrere Steuersätze oder nennt er keine einzelne Rechnung, fehltbuKeyweiter. - Bei Soll-Versteuerung bleiben die Antworten wie bisher.
07.11.2026: Kontakte nach Ort suchen
POST /api/contact/filterkennt das Attributaddresses.city, die Orte der Anschriften eines Kontakts. Mitinfindet es auch einen Teil des Orts. Sortieren lässt sich danach nicht.
07.11.2026: Referenz: Rechnungsentwürfe ohne gelöschte Einträge
- Die Referenz beschreibt
POST /api/draft/filterjetzt richtig: Gelöschte Entwürfe liefert die Route nicht, auch nicht mitincludeDeleted, unddeletedAtist dort immernull. Das Verhalten der API ändert sich nicht.
07.11.2026: Firmenname bleibt gefüllt
PATCH /api/company/antwortet auf einen leerennamemit400 CompanyNameRequired, wenn die Firma einen Namen hat. Bisher wurde der leere Name gespeichert.update_company_profileüber MCP prüft dasselbe.
06.11.2026: Nachträge in schon exportierten Monaten
GET /api/export/datev/addendanennt Buchungen, die DATEV noch nicht hat, in Monaten, die ein zugestellter DATEV-Export schon enthält, außerhalb vonfrombisto: Anzahl und Monate. Ein Export des Zeitraums gibt sie nicht weiter, erst ein Export dieser Monate mit „Nur noch nicht exportierte“. Lesbar mitread.
06.11.2026: Referenz: fehlende Fehlerantworten ergänzt
- Zehn Endpunkte nennen jetzt auch die Fehlerantworten, die ihre Beschreibung schon nannte, etwa
417 CannotDeleteMatchedDocumentbeiDELETE /api/document/{id}und422 ReminderChargesNotEligiblebeiPOST /api/match/{id}/extend. Das Verhalten der API ändert sich nicht. - Die Liste der Codes unter Fehler ist vollständig für alle Codes, die Referenz und Leitfäden nennen.
06.11.2026: Belege in Fremdwährung
- Ist ein Beleg in einer anderen Währung als Euro, nennt ihn
GET /api/document/{id}mitdocumentCurrency, dem Betrag vom Beleg inoriginalTotalAmountund, sobald der Euro-Betrag feststeht,euroAmountSource. Gebucht wird er wie bisher vorerst mit dem Betrag vom Beleg; die App zeigt dann „Euro-Betrag fehlt“. - Neu:
POST /api/match/{id}/euro-amountübernimmt den Euro-Betrag der Zahlungen für den Beleg einer Zuordnung, mitmatching:writeund denexpectedVersionsausGET /api/match/{id}/euro-amount-preview. - Neu:
PATCH /api/document/{id}nimmteuroTotalAmount, den Euro-Betrag in EUR-Cent, und rechnet die Positionen anteilig darauf um. AußerdemdocumentCurrencyundeuroAmountsConfirmed. - Skonto für solche Belege lehnt bimetrics mit
400 CashDiscountForeignCurrencyab.
06.11.2026: Zahlungen bei Ist-Versteuerung prüfen
GET /api/export/datev/cash-basisnennt für eine Firma mit Ist-Versteuerung die Zahlungen eines Zeitraums, bei denen DATEV die Umsatzsteuer keiner Rechnung zuordnen kann: Zahlungseingänge ohne Zuordnung und Zahlungen für mehrere Rechnungen ohne Rechnungsnummer. Bei Soll-Versteuerung istappliesfalse.- Die
Meldungen.csvdes DATEV-Exports nennt dieselben Zahlungen bei Ist-Versteuerung als Hinweis. Bei Soll bleibt sie unverändert.
06.11.2026: Mehrbetrag als Mahnkosten und Zinsen buchen
- Zahlt ein Kunde nach einer Mahnung mehr als die Rechnung, bucht
POST /api/match/{id}/reminder-chargesden Mehrbetrag als Mahnkosten und Verzugszinsen der zuletzt ausgestellten Mahnung, ohne die Zuordnung aufzuheben, mitmatching:writeund denexpectedVersionsausGET /api/match/{id}/reminder-charges-preview. Erst die Kosten, dann die Zinsen, je eine Buchung ohne Umsatzsteuer. POST /api/match/nimmtconfirmReminderCharges,POST /api/match/util/amountopennennt dazureminderCharges. Die Zuordnung trägt danachreminderCharges, Buchungen die Artreminder_charges.- Neuer Fehler
422 ReminderChargesNotEligible.
06.11.2026: Mahngebühr, Verzugszinsen und Pauschale
- Mahnungen fordern neben dem offenen Betrag eine Mahngebühr, Verzugszinsen und die Pauschale von 40 € nach § 288 BGB, wenn die Firma sie eingeschaltet hat; standardmäßig ist alles aus. Gefordert wird erst ab Verzug, also nach der Frist der ersten ausgestellten Mahnung der Rechnung. Die Pauschale gibt es nur gegenüber Unternehmen und einmal je Rechnung, sie schließt die Mahngebühren ein. Nichts davon wird gebucht.
- Mahnungen haben neu
chargeFee,chargeInterestundchargeFlatRate:falselässt den Vorschlag auf dieser Mahnung weg, einPUTohne die Felder behält die Wahl.chargesnennt Zustand und Betrag je Posten,totalChargesMinorundtotalMinor; beim Entwurf ausGET /api/reminder/{id},POST /api/reminder/,PUT /api/reminder/{id}und der Vorschau aktuell gerechnet, beim Ausstellen eingefroren. In der Liste fehlt es bei Entwürfen. GET /api/reminder/settingsliefert je StufefeeEnabledundfeeMinor(Vorschlag 250 je Mahnung, 0 bis 5000), dazuinterestEnabled,flatRateEnabledund den heutigenbaseRatePercent.PUT /api/reminder/settings/{level}nimmtfeeEnabledundfeeMinor, ohne sie bleibt die Gebühr. Neu schaltetPUT /api/reminder/settings/chargesZinsen und Pauschale, nur für den Inhaber.- Neuer Platzhalter
{Gesamtbetrag}: offener Betrag plus Gebühren und Zinsen. Die Standardtexte der Mahnungen nennen ihn. - Neuer Fehler
422 ReminderBaseRateMissing, wenn für einen Zinstag der Basiszinssatz fehlt. - MCP:
create_payment_reminderundupdate_payment_remindernehmen ab Version 2026-10-11chargeFee,chargeInterestundchargeFlatRate, die Mahnungswerkzeuge lesencharges. Rechte bleiben gleich.
06.11.2026: Zahlung nach dem DATEV-Export erfassen
POST /api/match/paymentnimmt eine Zahlung jetzt auch an, wenn Buchungen des Belegs schon an DATEV exportiert sind. Bisher kam dann409 FinalizedBookingsLocked. Die exportierten Buchungen bleiben unverändert, es gibt kein Storno. Die Zahlung ist eine neue Buchung zum Zahltag und geht mit dem nächsten DATEV-Export ihres Monats an die Kanzlei.- Über MCP gilt dasselbe für
record_document_payment.get_document_paymentliefertexportedweiter, eine Zahlung geht trotzdem. POST /api/match/payment/bulkbleibt, wie es ist: Es bucht zum Belegdatum und überspringt an DATEV exportierte Belege weiter (exported).
06.11.2026: Versteuerungsart
GET /api/company/liefertvatCashBasis: true, wenn die Firma nach vereinnahmten Entgelten versteuert (Ist-Versteuerung). Bei der Soll-Versteuerung, dem Standard, fehlt das Feld, die Antwort bleibt wie bisher.- Ändern lässt sich die Versteuerungsart nur in der App, wie die Versteuerung.
PATCH /api/company/antwortet aufaccounting.vatCashBasismit400 CompanyFieldNotChangeable. - DATEV-Export bei Ist-Versteuerung: Jede Zahlung auf eine Ausgangsrechnung oder Rechnungskorrektur trägt im Buchungsstapel den Steuerschlüssel des Steuersatzes der Rechnung, 0101 bei 19 %, 0102 bei 7 % und 40 ohne deutsche Umsatzsteuer. Hat die Rechnung mehrere Sätze, teilt der Export die Zahlung in eine Zeile je Satz. Rechnungen, Skonto und Eingangsbelege bleiben unverändert.
buKeyder Zahlungsbuchung bleibt leer, den Schlüssel setzt nur der Export. Die Kanzlei stellt den Mandanten in DATEV auf Istversteuerung. Bei Soll-Versteuerung bleibt der Export wie bisher.
06.11.2026: Belegtyp prüfen
- Bei einem Upload mit
auto[]entscheidet die Erkennung die Belegart mit den Daten deiner Firma. Kann sie nicht sicher entscheiden, trägt der BelegkindReview: trueund wird nicht gebucht, nicht exportiert und nicht zugeordnet, bis jemand die Belegart wählt. Zuordnen und Zahlung erfassen antworten dann mit409 DocumentKindUnconfirmed. Siehe Belegart ohne Wahl. - Neuer Filter
kindReviewanPOST /api/document/filter. kindinPATCH /api/document/{id}beendet „Belegtyp prüfen“, auch mit demselben Wert.- Neu:
POST /api/document/bulk/kindsetzt die Belegart für bis zu 50 Belege, mitdocuments:write,dryRunundexpectedVersionswie die Kategorie.
05.11.2026: Skonto nachträglich ausgleichen
POST /api/match/{id}/cash-discountgleicht den offenen Betrag einer Zuordnung als Skonto aus, ohne sie vorher aufzuheben, mitmatching:writeund denexpectedVersionsausGET /api/match/{id}/cash-discount-preview. Die Vorschau nennt, was der Nutzer vergleicht, und antwortet miteligible: false, wenn die Zuordnung nicht passt.POST /api/match/util/amountopenliefert zucashDiscountneucashDiscountReference: Belegnummer, Verwendungszweck und abweichende Nummern im Verwendungszweck.
05.11.2026: Feste Texte je Belegart
Eine Firma hinterlegt längere feste Texte für neue Rechnungen, Angebote und Auftragsbestätigungen, etwa eine Widerrufsbelehrung.
- Hinterlegen:
PATCH /api/company/nimmtdocumentTexts,GET /api/company/liefert sie. Je Text und fürinvoiceDefaults.closingTextgelten höchstens 6000 Zeichen. - Neue Entwürfe:
POST /api/draft/setzt den festen Text ein, wo die Anfrageremarkodernotesleer lässt. Das gilt auch für einen vorhandenenclosingText. - Neuer Fehler:
400 CompanyTextCharactersbei einem Zeichen, das das PDF nicht drucken kann.
Neue Entwürfe über MCP übernehmen sie, wenn der Aufruf keinen Text nennt. Offene Entwürfe und ausgestellte Belege behalten ihren Text.
05.11.2026: Optionale Positionen und Titel
- Positionen in
itemshaben neuoption(optional,demandoderalternative, nur im Angebot),titleundsubtitle. Optionale Positionen stehen mit dem Betrag in Klammern im PDF und zählen in keine Summe und keine XML. Titel gliedern das PDF in Abschnitte mit Zwischensumme, die XML bleibt flach (siehe Ausgangsrechnungen). POST /api/draft/{id}/derivenimmtselectedLines: die beauftragten optionalen Positionen als Index initemsder Quelle. Ohne Angabe kommen nur die festen Positionen mit.
05.11.2026: Mahnstufen
- Mahnungen haben neu
level: 0 ist die Zahlungserinnerung, 1 bis 3 sind Mahnungen. Der Titel auf dem PDF folgt der Stufe, zum Beispiel „2. Mahnung“.kindgeht weiter und passt immer zulevel. - Forderungen nennen in
nextReminderLeveldie vorgeschlagene nächste Stufe,activeRemindernenntlevel. Zurückgezogene Mahnungen zählen nicht. GET /api/reminder/settingsundPUT /api/reminder/settings/{level}lesen und ändern Frist und Text je Stufe. Der Text darf Platzhalter wie{Frist}nutzen, das PDF füllt sie aus.POST /api/reminder/settings/{level}/previewzeigt Frist und Text einer Stufe als PDF mit Beispieldaten, auch ungespeichert.POST /api/reminder/nimmt ohnelevel,paymentDeadlineundtextdie nächste Stufe mit deren Frist und Text.GET /api/reminder/filtert auch nachsourceDraftIds.- MCP:
create_payment_reminderundupdate_payment_remindernehmen ab Version 2026-10-11level,search_receivables,get_receivableund die Werkzeuge für Mahnungen lesen die Stufe.
05.11.2026: MCP-Version 2026-11-05
Neue Verbindungen bekommen die MCP-Version 2026-11-05. Bestehende behalten ihren Umfang, bis sie neu verbinden.
- Postfach:
search_inbox_mailsundget_inbox_maillesen das Belegpostfach, auch ohne Schreibzugriff,preview_inbox_attachmentzeigt einen Anhang,import_inbox_attachmentübernimmt ihn,archive_inbox_maillegt die Mail ab. Der Text einer Mail kommt gekürzt und als reiner Text, Links nur als Host, IBANs gekürzt.get_company_contextnennt die Adresse des Postfachs. Mail löschen bleibt in der App. - Belege löschen:
preview_document_deletionzeigt, was passiert,delete_documentlöscht genau das nach dem Ja des Nutzers, höchstens 20 je Firma am Tag.search_document_duplicatesunddelete_document_duplicateslesen und entfernen Duplikat-Einträge. - Kontoauszug einlesen:
prepare_statement_upload,inspect_bank_statement,preview_bank_statementundapply_bank_statementlesen eine Datei der Bank ein, für den Inhaber und immer mit Vorschau.get_statement_importsundretry_statement_importwie in der App.search_transactionsundget_transactionnennensource. - Vorlagen und Dauerbuchungen:
save_document_templateunddelete_document_templatefür eigene Vorlagen,list_recurring_bookings,preview_recurring_bookingundapply_recurring_bookingfür Dauerbuchungen.list_document_templatesnennt auch Zeilen,systemundupdatedAt. - Sammelaktionen:
preview_bulk_document_changezeigt für bis zu 50 Belege, was „Kategorie setzen“ oder „Als bezahlt markieren“ ändert und was bleibt,apply_bulk_document_changeführt genau das nach dem Ja des Nutzers aus. - Zuordnungen:
get_match_suggestionsnimmtdocumentIdsundtransactionIdsfür bis zu 20 Belege und Umsätze in einem Aufruf. Neu istrestore_match_suggestion.create_matchnimmtsuggestionId; ohne sie lernt bimetrics aus der Zuordnung eine Regel wie in der App, mit ihr nicht.
05.11.2026: Registernummer für § 13b ohne USt-IdNr.
- Kontakte haben neu
paymentInfo.registrationNumber, Entwürfebuyer.registrationNumber: Handelsregister-, Handwerksrollen- oder Wirtschafts-Identifikationsnummer, höchstens 100 Zeichen und eine Zeile. Ohne Angabe im Entwurf gilt die des verknüpften Kontakts; über die API gilt mitbuyer.contactIdimmer die des Kontakts. - Eine Bauleistung nach § 13b im Inland geht jetzt auch ohne USt-IdNr., wenn der Kunde eine Registernummer hat. In der E-Rechnung steht sie als BT-47. Fehlt beides, meldet
POST /api/draft/{id}/tax-caseden neuen Codetax_case_buyer_vat_id_or_registration_requiredals blockierend, undPUT /api/draft/{id}/finalizeantwortet mit422 TaxCaseInvalid. Der bisherige Codetax_case_buyer_vat_id_requiredbleibt für die anderen Steuerfälle, dort genügt die Registernummer nicht. - MCP:
update_contactpflegt ab Version 2026-10-05 auchregistrationNumber,get_contact,search_contactsund die Antworten vonupdate_contactundcreate_contactsliefern sie. Rechte bleiben gleich.
05.11.2026: Kontoauszug auch als CAMT und MT940
- „Kontoauszug einlesen“ liest neben CSV jetzt camt.052 und camt.053 (Versionen .02 bis .08, als XML oder ZIP) und MT940, siehe Dateien für den Kontoauszug. Eine Zuordnung von Spalten braucht nur CSV, bei den anderen Dateien zählt
mappingauch beim Übernehmen per API nicht. - Neue Fehlercodes:
BankStatementCamt054für camt.054 undBankStatementZipRefusedfür ein ZIP über den Grenzen.BankStatementCamtNotYetentfällt.
05.11.2026: Kontoauszüge per API einlesen
POST /api/bankstatement/uploadnimmt eine Datei der Bank an,POST /api/bankstatement/inspectschlägt Spalten und Konto vor,POST /api/bankstatement/previewvergleicht mit den vorhandenen Umsätzen,POST /api/bankstatement/applyübernimmt genau das. Dafür gibt es die neue Berechtigungstatements:import(in der App „Kontoauszüge einlesen“). Bestehende Schlüssel erhalten sie nicht.- Ohne Vorschau geht nichts: Übernehmen verlangt eine Vorschau mit demselben Konto und derselben Zuordnung aus den letzten 60 Minuten, sonst
409 BankStatementPreviewRequired. - Umsätze nennen jetzt
source:bankaus der Bankverbindung,statementaus einem eingelesenen Kontoauszug, dazubankImportId. Bankkonten nennenconnected.
05.11.2026: Belegpostfach per API
- Neu: Mails im Belegpostfach lesen, mit der neuen Berechtigung
inbox:read(in der App „Postfach lesen“). Sie ist nicht inreadenthalten, und bestehende Schlüssel erhalten sie nicht.GET /api/email/inbox/liefert die Adresse und legt keine an,POST /api/email/inbox/item/sucht Mails ohne Text,GET /api/email/inbox/item/{id}liest eine Mail,GET /api/email/inbox/item/{id}/attachment/{aid}/previewzeigt eine Seite eines Anhangs. - Neu: Mit
inbox:write(„Postfach bearbeiten“) übernimmtPOST /api/email/inbox/item/{id}/attachment/{aid}/importeinen Anhang als Beleg,POST /api/email/inbox/item/{id}/archiveundPOST /api/email/inbox/item/{id}/unarchivelegen eine Mail ab oder holen sie zurück. Warten viele Belege auf die Erkennung, kommt429 DocumentQueueFull. Mails löschen geht nur in der App.
05.11.2026: Belege per API löschen
DELETE /api/document/{id}löscht einen Beleg wie „Löschen“ in der App, mit der neuen Berechtigungdocuments:delete(in der App „Belege löschen“). Bestehende Schlüssel erhalten das Recht nicht.GET /api/document/{id}/delete-previewsagt vorher mitread, was passiert. Weicht etwas von der Vorschau ab, wird nichts gelöscht (409). Belege mit an DATEV exportierten Buchungen löscht die API nicht, das geht nur in der App.GET /api/document/duplicatesliest Duplikat-Einträge,POST /api/document/duplicates/deleteentfernt sie. Beleg, Datei und Buchungen bleiben stehen.- Berichtigt: Ein beim Löschen stornierter Beleg behält seine
invoicePositions; die Doku sagte, sie seiennull.
05.11.2026: Zuordnungsvorschläge per API
POST /api/match/suggestionsliest mitreaddie Vorschläge der App für bis zu 20 Belege und Umsätze auf einmal, mit denselben Treffern in derselben Reihenfolge wie einzeln. Die Route hat ein eigenes Budget, siehe Limits.POST /api/match/dismissblendet mitmatching:writeeinen Vorschlag aus, wie „Vorschlag ausblenden“ in der App.DELETE /api/match/dismiss/{id}holt ihn zurück, auch eine Kombination, die ausgeblendet ist, weil ihre Zuordnung aufgehoben wurde.- Zuordnungen über die API lernen weiter keine Regel.
05.11.2026: Sammelaktionen per API
- Neu:
POST /api/document/bulk/categorysetzt eine Kategorie für bis zu 50 Belege,POST /api/match/payment/bulkmarkiert bis zu 50 Eingangsbelege als bar oder privat bezahlt, wie die Mehrfachauswahl der App. MitdryRunsiehst du vorher, was sich ändert und was mit welchem Grund bleibt, und bekommst dieversionje Beleg, die das Ausführen alsexpectedVersionsverlangt. Jeder Beleg zählt einzeln auf die Tagesgrenze. Siehe Mehrere Belege auf einmal.
05.11.2026: Vorlagen und Dauerbuchungen per API
- Neue Berechtigung
collections:write(in der App „Vorlagen und Dauerbuchungen ändern“), bestehende Schlüssel erhalten sie nicht. Eigene Buchungsvorlagen legst du mitPOST /api/document/collection/series/an, änderst sie mitPUT /api/document/collection/series/{id}und löschst sie mitDELETE /api/document/collection/series/{id}. Standardvorlagen von bimetrics lassen sich lesen und zuordnen, aber nur in der App ändern oder löschen. - Dauerbuchungen gehen genauso:
POST /api/document/collection/contract/,PUT /api/document/collection/contract/{id},DELETE /api/document/collection/contract/{id}.POST /api/document/collection/contract/previewzeigt vorher, welche Belege entstehen, sich ändern oder entfallen. - Lesen mit
read:POST /api/document/collection/contract/filter,GET /api/document/collection/contract/{id},GET /api/document/collection/contract/{id}/delete-preview,GET /api/document/collection/contract/{id}/document/,GET /api/document/collection/series/{id}undGET /api/document/collection/series/{id}/document/. - Ändern und Löschen brauchen
Idempotency-KeyundexpectedUpdatedAt. Die Regeln des App-Formulars gelten jetzt im Server für alle Wege.
04.11.2026: MCP-Version 2026-11-04
Neue Verbindungen bekommen die MCP-Version 2026-11-04. Bestehende behalten ihren Umfang, bis sie neu verbinden. Mit Schreibzugriff:
- Stornieren und Entwürfe löschen:
prepare_invoice_cancellationlegt den Storno-Entwurf an,preview_sales_documentzeigt ihn,finalize_sales_draftschreibt ihn fest.delete_sales_draftlöscht offene Entwürfe von Rechnungen, Stornorechnungen, Angeboten und Auftragsbestätigungen. - Per E-Mail senden:
preview_document_mailzeigt die Mail zu einem ausgestellten Dokument,send_document_mailsendet genau diese nach dem Ja des Nutzers. Die Tagesgrenze gilt für App, API und MCP zusammen. - Zuordnung erweitern:
extend_matchnimmt weitere Belege oder Umsätze auf, etwa die zweite Teilzahlung, wiePOST /api/match/{id}/extend.get_matchliefert dafürversions. - Firmendaten:
update_company_profileändert sie wiePATCH /api/company/.get_company_contextliefert dafürsettingsundversion. - Rechnungslayouts:
create_invoice_layout,update_invoice_layout,assign_invoice_layoutundarchive_invoice_layoutarbeiten wie der Layout-Editor, jede Änderung als Version, rückgängig mitrestore.baseVersionIdist Pflicht, ein Hinweistext brauchtconfirmed. Die Vorschaupreview_invoice_layoutgibt es nur mit Schreibzugriff. - Logo:
prepare_logo_uploadlädt ein Rechnungslogo oder App-Zeichen über einen Upload-Link hoch,fix_company_logomacht einen Vorschlag („Mach es passend“),apply_company_logo_fixübernimmt oder verwirft ihn oder holt das Original zurück,remove_company_logolöscht. Hochladen und Löschen nur mitconfirmedund dem gelesenenexpectedLogoId.
Neu zum Lesen: get_open_tasks („Zu erledigen“ und Monatsstand der Startseite), list_invoice_layouts, get_invoice_layout und get_company_logos. search_sales_documents filtert nach Art, Stand, Kunde und Rechnungsdatum, download_sales_document liefert mit format: "xml" die E-Rechnung, search_bookings und get_booking zeigen Art, Stand, DATEV-Export und Herkunft.
04.11.2026: Änderungsprotokoll nennt Schlüssel und Verbindung
- Das Änderungsprotokoll im DATEV-Export (
Aenderungsprotokoll.csv) hat am Ende die neue Spaltevia. Bei Änderungen und Uploads per API steht dort der API-Schlüssel mit Name und ID, bei Änderungen über MCP die Anwendung mit Name und Client-ID. Auch frühere Änderungen bekommen den Eintrag, soweit Schlüssel oder Verbindung noch bekannt sind. Die übrigen Spalten bleiben unverändert.
04.11.2026: Hinweis auf ein Datum vor der letzten Rechnung
- Liegt das Rechnungsdatum vor deiner letzten Rechnung, meldet
POST /api/draft/{id}/tax-casedas jetzt alsIssueDateBeforeLastInvoice, ohne zu blockieren, undPUT /api/draft/{id}/finalizenennt es im neuen Feldwarnings. Das ist erlaubt, fällt aber bei einer Betriebsprüfung auf; die App zeigt denselben Hinweis vor dem Ausstellen. Bei einer Wiederholung mit demselben Idempotency-Key fehlt das Feld. - Über MCP nennen
check_sales_draft,preview_sales_documentundfinalize_sales_draftden Hinweis ebenso, in allen Versionen. Die Werkzeugtexte und Rechte bleiben gleich.
04.11.2026: Logo per API
- Neu: Die API liest und ändert das Logo der Firma wie unter Einstellungen in der App. Lesen geht mit
read:GET /api/company/logos. Mitlayout:writelädst du das Rechnungslogo und ein eigenes App-Zeichen hoch, nutzt „Mach es passend“, übernimmst oder verwirfst den Vorschlag, holst das Original zurück und löschst ein Logo. MitexpectedLogoIdersetzt oder löscht die API nur das Logo, das du gelesen hast. Siehe Logo.
04.11.2026: Firmendaten ändern
PATCH /api/company/ändert die Firmendaten wie die Einstellungen der App, mit der neuen Berechtigungcompany:write(in der App „Firmendaten ändern“): Name, Rechtsform, Anschrift, Kontaktangaben, Geschäftsführung, Steuer- und Registerangaben, Nummernkreise, Skonto-Vorgabe, Zahlungsziel, DATEV-Nummern, Art der Umsätze und Rechnungsabgrenzung. Siehe Firmendaten ändern. Bestehende Schlüssel erhalten das Recht nicht.GET /api/company/liefert dafür zusätzlichsettingsundversion. Haben sich die Firmendaten seit dem Lesen geändert, antwortetPATCHmit409 CompanyVersionConflict. Kontenrahmen, Versteuerung und Bankverbindung bleiben in der App (400 CompanyFieldNotChangeable). Firmentexte, die auf Rechnungen stehen, nehmen keine Bankdaten auf (400 CompanyTextBankDetails).
04.11.2026: Per E-Mail senden
POST /api/document-mail/sendverschickt ausgestellte Rechnungen, Stornorechnungen, Rechnungskorrekturen, Angebote, Auftragsbestätigungen und Mahnungen wie „Per E-Mail senden“ in der App, mit der neuen Berechtigungmail:send(in der App „E-Mails senden“). Den Vorschlag der App mit Empfänger, Betreff und Text liefertPOST /api/document-mail/previewmitsales:read. Siehe Per E-Mail senden.- Je Firma gehen höchstens 20 Empfänger am Tag raus, in der Testphase 3, für App und API zusammen (siehe Limits). Bestehende Schlüssel erhalten das Recht nicht.
04.11.2026: Rechnungslayouts per API
- Neu: Die API liest und ändert Rechnungslayouts wie der Layout-Editor der App, mit denselben Prüfungen. Lesen geht mit
sales:read:GET /api/layouts, die erlaubten Werte mitGET /api/layouts/catalog, Versionen, Vorschau und Miniaturen. Ändern geht mit dem neuen Rechtlayout:write(„Layouts und Logo ändern“), das du beim Anlegen eines Schlüssels auswählst:PATCH /api/layouts/{id}, anlegen, kopieren, je Belegart zuweisen, archivieren und frühere Versionen wiederherstellen. Siehe Layouts.
04.11.2026: Hinweistext ohne Links
- Im Hinweis-Baustein des Rechnungslayouts lehnt bimetrics jetzt auch Links und Mailadressen ab, wie bisher Bankdaten und Zahlungsstand:
400 LayoutInvalidChangemitlayout_note_linkincontext.code. Gespeicherte Hinweise bleiben und blockieren keine anderen Änderungen.
04.11.2026: Stornierte Monate festgeschriebener Buchungen
- Storniert eine Änderung festgeschriebene Buchungen, nennt die Antwort jetzt die Monate in
reversedFinalizedMonths(YYYY-MM): beiPATCH /api/document/{id}, beim Zuordnen, Aufheben und Erweitern einer Zuordnung. bimetrics storniert wie bisher im ursprünglichen Monat und bucht mit den geänderten Werten neu, auch bei nachts festgeschriebenen Buchungen. Genannt werden Monate, in denen sich Datum, Leistungszeitraum, Konto, Steuerkennzeichen oder Betrag ändern, nicht reine Änderungen von Buchungstext oder Zuordnung. Hast du die Umsatzsteuer-Voranmeldung für einen dieser Monate oder, bei geändertem Datum, für den neuen Monat schon abgegeben, musst du sie womöglich berichtigen. Bei einer Wiederholung mit demselben Idempotency-Key fehlt das Feld. An DATEV exportierte Buchungen bleiben für API-Schlüssel gesperrt. - Über MCP nennen
update_document,create_matchunddelete_matchdie Monate ebenso, in allen Versionen ab 2026-10-05; der nächste Schritt im Ergebnis weist auf die Umsatzsteuer-Voranmeldung hin. Ab Version 2026-10-16 warntpreview_document_changevorher (finalizedBookingsReversed), undget_documentmeldet mitfinalizedauch die nächtliche Festschreibung; ob Buchungen an DATEV exportiert sind, sagt das neue Feldexported. Es gibt keine neuen Rechte.
04.11.2026: Fälligkeit in den MCP-Werkzeugtexten
- Über MCP nennen
copy_sales_documentundcreate_sales_draftdie Fälligkeit jetzt richtig, in allen Versionen: Eine aus einem Angebot umgewandelte Rechnung ist nach dem Zahlungsziel der Firma fällig, ohne Zahlungsziel nach 14 Tagen. Ein neuer Rechnungsentwurf ist nach dem Zahlungsziel fällig, ohne Zahlungsziel hat er keine Fälligkeit. Geändert hat sich nur der Text, bimetrics rechnet wie bisher.
02.11.2026: Offene Entwürfe per API löschen
DELETE /api/draft/{id}löscht mitinvoices:drafteinen offenen Entwurf einer Rechnung, Stornorechnung, eines Angebots oder einer Auftragsbestätigung, wie „Löschen“ in der App. Im Anfrageinhalt steht das geleseneexpectedUpdatedAt. Ausgestellte Belege bleiben geschützt (409 DraftFinalized), Entwürfe von Rechnungskorrekturen löscht nur die App (403). Bisher war die Route für API-Schlüssel gesperrt.
02.11.2026: „Zu erledigen“ lesen
- Neu zum Lesen, mit
read:GET /api/home/tasksliefert dieselben Aufgaben wie die Startseite der App unter „Zu erledigen“: Belege prüfen, Zahlungen ohne Beleg, überfällige Rechnungen, nicht zugestellte Mails, ablaufende Bankfreigaben und Mails im Postfach, je Art mit Anzahl, dazu den Monatsstand der Belege und Zahlungen. Die Zahlen sind dieselben wie in den Listen der App.
01.11.2026: Die API liest, was MCP liest
- Neu zum Lesen, mit
read:GET /api/company/(Firma mit Kontenrahmen, Versteuerung und Nummernkreisen),GET /api/category/(Kategorien),POST /api/document/collection/series/filter(Buchungsvorlagen fürdocumentSeriesIds) undGET /api/bankaccount/connections(Stand der Bankzugänge). Es sind dieselben Angaben wie über MCP inget_company_context,list_categories,list_document_templatesundlist_bank_accounts. GET /api/match/payment/privatesagt, wie die Firma privat bezahlte Belege bucht und was sie dem Gesellschafter noch schuldet. Wie die Erfassung nur mit eingeschalteter Zahlungserfassung, sonst403 ManualPaymentUnavailable.POST /api/match/{id}/extenderweitert eine Zuordnung um weitere Belege oder Umsätze, etwa eine zweite Teilzahlung, mitmatching:writeund denexpectedVersionsausdelete-preview.POST /api/draft/legt mitinvoiceKind: "SalesProposal"und ohnetypeCodeAngebote an, wie über MCP.PUT /api/draft/{id}/finalizestellt sie aus, die Antwort nennt das Angebot insalesProposal.PUT /api/contact/{id}ändert Kontakte nach den Regeln des Kontaktformulars, wie über MCP: Bankverbindung,customerKind, USt-IdNr., Land, Name und Anschrift auch bei verwendeten Kontakten. Die Kundennummer nur, solange der Kontakt in keinem Beleg steht (409 CustomerNumberInUse). Bisher kam dafür400 InvalidContactWriteoder409 ContactChangeRequiresApp.
01.11.2026: Vorlagen und Rücknahmen wie in der App
POST /api/match/lehnt eine Vorlage ausdocumentSeriesIds, die die Firma in ihren Listen nicht sieht, mit409 DocumentTemplateUnavailableab. Das betrifft „Gesellschafter-Verrechnung“, solange die Zahlungserfassung aus ist, und mit ihr „Privatentnahme“ und „Privateinlage“ bei GmbH und UG. Zugeordnet und gebucht wird dann nichts. Über MCP gilt das fürcreate_match.POST /api/match/payment/reversebrauchtreversedOnnicht mehr. Ohne Datum bucht bimetrics die Gegenbuchung auf den Zahltag, solange dessen Buchung offen ist, sonst auf heute nach deutscher Zeit, wie es auch die App vorschlägt. Über MCP gilt das fürreverse_document_payment.
01.11.2026: KI-Assistenten und API in der Testphase
- API-Schlüssel und MCP-Verbindungen stehen auch in der kostenlosen Testphase bereit, mit Tagesgrenzen für Abfragen, Änderungen und Festschreibversuche. Für Tarife ändert sich kein Wert.
- Neue Verbindungen nennen die Version 2026-11-01. Sie hat dieselben Werkzeuge wie 2026-10-23, mit eingeschalteter Zahlungserfassung dazu die drei Werkzeuge für Zahlungen (siehe unten);
get_company_contextnennt in der Testphase zusätzlichtrial,prepare_document_uploaddie 100 Belege. Bestehende Verbindungen behalten ihren Umfang. - Ein Upload über die 100 Belege der Testphase antwortet mit
402 LimitReached, nennt den Grund indetailund speichert nichts (siehe Beleg-Upload). - Ein API-Schlüssel richtet in der Testphase keine ausstellende Serie ein:
generationMode: "issue"antwortet mit403 APIKeyPermissionDenied. - Nach dem Ende der Testphase antworten Schlüssel mit
403 APIUnavailable, Werkzeugaufrufe mit einem Hinweis. In der App bleiben Schlüssel und Verbindungen sichtbar und lassen sich widerrufen.
01.11.2026: Privat bezahlt
Alles hier gilt nur mit eingeschalteter Zahlungserfassung (manualPaymentsEnabled). Sie ist noch aus.
POST /api/match/paymentnimmtmethod: "private"an: Ein Gesellschafter oder der Inhaber hat einen Eingangsbeleg privat bezahlt. Optional nenntpaidBy, wer bezahlt hat; der Name steht im Buchungstext. Das Konto wählt der Server nach Rechtsform und Kontenrahmen: GmbH und UG 1665 bzw. 3640, Einzelunternehmen, GbR und OHG die Privateinlage 1890 bzw. 2180. Ohne Rechtsform antwortet die API mit409 PrivatePaymentNeedsLegalForm, bei anderen Rechtsformen mit409 PrivatePaymentUnavailable(siehe Zahlungen zuordnen und erfassen).- Erfasste Zahlungen haben neu
paidBy. Neue Zahlungsbuchungen haben deutsche Buchungstexte, etwa „Bar bezahlt RE-0042“ oder „Privat bezahlt von Erika Beispiel RE-0042“, ihre Rücknahmen „Rücknahme …“. Ältere Buchungen behalten ihren Text. POST /api/match/paymentantwortete bisher in jedem Fall mit500. Jetzt bucht der Aufruf, ohne eingeschaltete Zahlungserfassung kommt403 ManualPaymentUnavailable.- Über MCP gibt es ab der Version 2026-11-01
get_document_payment,record_document_paymentundreverse_document_payment: Zahlungsstand lesen, bar, privat oder über einen anderen Weg bezahlt erfassen und wieder zurücknehmen, über dieselben Prüfungen wie App und API.
31.10.2026: Rechnung nur mit Fälligkeit oder Zahlungsbedingung
PUT /api/draft/{id}/finalizelehnt eine Rechnung mit positivem Zahlbetrag ohnedueDateund ohne Skonto mit422 InvoiceValidationFailedab, inrulesstehtBR-CO-25. Die Norm EN 16931 verlangt eines von beiden. Der Entwurf bleibt erhalten. Über MCP gilt das fürfinalize_sales_draft.POST /api/draft/{id}/tax-casemeldet den Fall vorher als blockierendes Problem mitcodeInvoiceValidationFailedundfielddueDate, über MCP ebensocheck_sales_draftundpreview_sales_document.- Rechnungen ohne Zahlbetrag, Rechnungen mit negativer Summe und Rechnungskorrekturen brauchen keine Fälligkeit. Serien setzen sie bei jedem Lauf aus
dueDays. Der Storno einer negativen Rechnung ohne Fälligkeit ist am Tag des Stornos fällig.
27.10.2026: Rücknahmen bei an DATEV exportierten Belegen
POST /api/match/correction-settlement/reverselehnt die Rücknahme einer Erstattung oder Verrechnung mit409 FinalizedBookingsLockedab, wenn einer der beteiligten Belege Buchungen hat, die schon an DATEV exportiert sind. Über MCP gilt das fürrecord_correction_settlementmitreverse. Zurücknehmen lässt sich die Erfassung dann in der App.- Das Erfassen lehnen API und MCP in diesem Fall schon ab. Was nur nachts festgeschrieben, aber nicht exportiert ist, nimmst du weiter über API und MCP zurück.
POST /api/match/payment/reversebleibt unverändert, auch nach einem Export: Für erfasste Zahlungen ist die API der einzige Weg zur Rücknahme.
26.10.2026: Höchstens 200 offene Belege je Firma
- Eine Firma kann höchstens 200 Belege gleichzeitig in der Verarbeitung haben, über API, App und MCP zusammen. Ein Upload darüber antwortet mit
429 DocumentQueueFullundRetry-After, ohne etwas zu speichern. Wiederhole ihn nach der Wartezeit mit derselbenX-Upload-Request-Id(siehe Limits). - Über MCP gilt dasselbe für den
PUTauf den Upload-Link vonprepare_document_upload. Schick die Datei nach der Wartezeit an denselben Link; ist er nach 15 Minuten abgelaufen, hol mitprepare_document_uploadeinen neuen. Das steht jetzt auch in der Beschreibung des Werkzeugs. context.availablenennt, wie viele Belege gerade noch passen. Belege, deren Verarbeitung auf den nächsten Tag verschoben ist, zählen nicht mit. Belege aus dem Mail-Postfach zählen mit, werden aber nie abgelehnt.
25.10.2026: Name des Bankkontos
- Bankkonten haben neu
displayName: den Namen, unter dem bimetrics das Konto zeigt. Hat jemand das Konto in der App umbenannt, ist es dieser Name. Sonst heißen Konten bei PayPal, Stripe und Wise „PayPal-Konto“, „Stripe-Konto“ und „Wise-Konto“, die übrigen wie inproductName, ohne Bezeichnung „Bankkonto“. Eine andere Währung als Euro steht dahinter, etwa „PayPal-Konto USD“.productNamebleibt, wie die Bank es liefert. - Das Feld steht in
GET /api/bankaccount/{id},POST /api/bankaccount/filterund am Bankkonto der Umsätze, über MCP inlist_bank_accountsundget_bank_account. Werkzeugnamen und Rechte bleiben gleich.
24.10.2026: Nächtliche Festschreibung
- bimetrics schreibt jede Nacht die offenen Buchungen fest, deren Buchungsdatum bis zum Ende des vorvorigen Monats reicht, am 1. November also bis zum 30. September. Buchungen, deren Beleg, Umsatz, Zuordnung oder Zahlung vor höchstens 30 Tagen erfasst wurde, und Buchungen zu Belegen oder Umsätzen mit einem Buchungsfehler warten auf eine spätere Nacht. Die vorläufige Buchung eines nicht zugeordneten Umsatzes bleibt offen, bis der Umsatz zugeordnet ist; die Buchungen der Zuordnung warten dann 30 Tage. Nachts festgeschrieben werden nur Buchungen von Unternehmen mit aktivem Tarif oder laufender Testphase; der DATEV-Export schreibt wie bisher alle exportierten Buchungen fest.
- Buchungen haben neu
finalizedBy:exportfür den DATEV-Export,autofür die nächtliche Festschreibung. Festgeschrieben heißt damit nicht mehr exportiert; ob eine Buchung exportiert ist, steht inexport.statusistchanged_after_export, wenn die Buchung exportiert ist und ihr Storno noch nicht. PATCH /api/document/{id},POST /api/match/undDELETE /api/match/{id}sperren nur noch Buchungen, die schon an DATEV exportiert sind, ebensoupdate_document,create_matchunddelete_matchüber MCP. Andere festgeschriebene Buchungen storniert bimetrics wie in der App und bucht neu.POST /api/match/payment,POST /api/match/correction-settlement/refundundPOST /api/match/correction-settlement/offsetfügen nur Buchungen hinzu und sperren ebenfalls nur noch bei Buchungen, die schon an DATEV exportiert sind.disabledReasonfinalizedheißt dort „exportiert“.
23.10.2026: Neue Freigabeseite (MCP-Version 2026-10-23)
- Neue Verbindungen nennen die Version 2026-10-23. Sie hat dieselben Werkzeuge wie 2026-10-16 und dieselbe Anlage aus dem Rechtspaket 2026-10-10-v1; neu ist nur die Freigabeseite.
- Statt des Häkchens Schreibzugriff erlauben steht dort der Schalter Ändern wie in der App, an, wo Ändern möglich ist. Ein einziges Unternehmen ist vorausgewählt.
- Sind für ein Unternehmen schon zehn Verbindungen aktiv, antwortet die Freigabe mit
400und{"code":"McpConnectionLimit","companyId":"…"}.companyIdnennt eines der gewählten Unternehmen. - Bestehende Verbindungen behalten ihren Umfang.
23.10.2026: Netto, Steuer und Steuersatz je Buchung
POST /api/accounting/booking/filterundGET /api/accounting/booking/{id}liefern je Buchung neutaxRate, den Steuersatz in Prozent, sowienetAmountundtaxAmount, den Netto- und den Steueranteil vonamount. Alle drei sind Dezimalzahlen als String. Bei Reverse Charge isttaxAmount0, weil DATEV die Steuer dort über den BU-Schlüssel bucht.
22.10.2026: Versteuerung vor der ersten Rechnung
PUT /api/draft/{id}/finalizeschließt Rechnungen und Rechnungskorrekturen nur noch ab, wenn die Versteuerung der Firma bestätigt ist und ihre Steuernummer vorliegt; bei Regelbesteuerung genügt die USt-IdNr. Sonst antwortet die API mit422und dem CodeSellerTaxStatusUnconfirmedbzw.SellerTaxIdRequired,context.fieldnennt die Angabe. Beides ergänzt du in der App.- Bei Firmen, die vor dem 22.10.2026 angelegt wurden, gilt die Versteuerung als bestätigt. Stornos sind nicht betroffen.
POST /api/draft/{id}/tax-casemeldet beides vorab als blockierendes Problem.
22.10.2026: Nächste Mahnungsnummer in der Vorschau
POST /api/reminder/{id}/previewnennt bei Entwürfen neunextNumber, die Nummer, die das Ausstellen jetzt vergeben würde. Reserviert ist sie nicht.
21.10.2026: XRechnung
POST /api/draft/undPUT /api/draft/{id}nehmeneinvoiceProfilean:EN16931(Standard, ZUGFeRD) oderXRECHNUNGfür eine XRechnung 3.0 (CII). Dazu kommenbuyerReference(Käuferreferenz, bei Behörden die Leitweg-ID),orderReference(Bestellnummer) undsupplierNumber(Lieferantennummer). Die XML lädst du nach dem Abschließen mitGET /api/draft/{id}/einvoice-xmlherunter (siehe Ausgangsrechnungen).- Fehlt einer XRechnung eine Pflichtangabe, meldet die Prüfung des Entwurfs sie als blockierend (
xrechnung_…), undPUT /api/draft/{id}/finalizeantwortet mit422 XRechnungDataRequired;context.fieldnennt die Angabe. - Leitest du mit
POST /api/draft/{id}/deriveeine Rechnung aus einem Angebot oder einer Auftragsbestätigung ab, wird sie zur XRechnung, wenn der Kontakt eine gültige Leitweg-ID hat. - Kontakte haben neu
paymentInfo.supplierNumber(Lieferantennummer). Eine neue oder geänderte Leitweg-ID (paymentInfo.leitwegId) wird auf Format und Prüfziffern geprüft; eine ungültige lehnt die API mit400 InvalidLeitwegIdab. - MCP: Ab Version 2026-10-09 legen
create_sales_draftundupdate_sales_draftmit Schreibzugriff auch XRechnungen an und setzen die drei Referenzen;get_sales_documentliefert sie mit.update_contactpflegt ab Version 2026-10-05 auch die Lieferantennummer. Werkzeugnamen und Rechte bleiben gleich.
17.10.2026: BU-Schlüssel, Storno-Verweis und Zahlungen
- Buchungen aus
POST /api/accounting/booking/filterundGET /api/accounting/booking/{id}haben neubuKey, den BU-Schlüssel des DATEV-Exports, etwa0401.origin.reversedByIdnennt die Buchung, die diese storniert. - Forderungen aus
GET /api/receivable/undGET /api/receivable/{id}haben neulastPaymentOn, das Datum der jüngsten Zahlung, undlastPaymentTransactionId, den Bankumsatz dazu; bei einer erfassten Zahlung fehlt er. GET /api/match/correction-settlement/{correctionDocumentId}liefert inbankPaymentsdie Bankumsätze, die allein der Rechnungskorrektur zugeordnet sind, etwa eine Erstattung per Überweisung. Eine Verrechnung nennt intargetDraftIdden Entwurf der Zielrechnung.
12.10.2026: Laufende Mahnung an der Forderung
GET /api/receivable/{id}undGET /api/receivable/liefern neuactiveReminder: die ausgestellte Mahnung, deren Frist noch läuft, mit Nummer, Art, Ausstellungsdatum und Frist. Die Frist läuft bis einschließlich des Fristtags.canRemindbehält seine Bedeutung; lass eine weitere Mahnung während der Frist ausdrücklich bestätigen.receivableVersionändert sich, sobald zur Rechnung eine Mahnung ausgestellt wird, eine laufende zurückgezogen wird oder ihre Frist abläuft. Eine ältere Vorschau lehntPOST /api/reminder/{id}/issuedann mit409 ReceivablePreviewChangedab (siehe Forderungen und Mahnungen).
12.10.2026: Art, Stand und Herkunft je Buchung
POST /api/accounting/booking/filterundGET /api/accounting/booking/{id}liefern je Buchung neu die Buchungsartkind(etwapurchase_invoiceoderpayment) und den Stand gegenüber DATEVstatus(open,finalizedoderchanged_after_export).exportsagt, ob und wann die Buchung an DATEV ging,originverweist auf Beleg, Umsatz, Zuordnung, Buchungsvorlage und stornierte Buchung.- In den Buchungen eines Belegs oder Umsatzes fehlen diese Felder.
10.10.2026: Rückfrage vor dem Ändern von Mahnungs- und Korrekturentwürfen
update_payment_reminderundupdate_invoice_correctionsind ab Version 2026-10-11 als destruktiv gekennzeichnet (destructiveHint), auch in bestehenden Verbindungen. Die Anwendung kann damit nachfragen, bevor sie einen gespeicherten Entwurf ändert. Namen, Parameter und Rechte bleiben gleich.
10.10.2026: Regeln der App auch für API und MCP
PUT /api/draft/{id}/finalizeschließt Angebote und Auftragsbestätigungen nur nach den Regeln des Editors ab: Der Leistungszeitraum endet nicht vor seinem Beginn, Skonto und Steuerausnahme sind nicht eingetragen. Sonst antwortet die API mit400,context.fieldnennt das Feld (siehe Ausgangsrechnungen).PUT /api/reminder/{id}undupdate_payment_reminderbehalten ohnelayoutIddas gespeicherte Layout der Mahnung.create_recurring_invoicelegt Serienvorlagen mit den Standardwerten der App an: Einleitungs- und Fußtext, QR-Code und das Skonto aus den Firmeneinstellungen, sofern es innerhalb der Zahlungsfrist endet.update_recurring_invoicelehnt unveränderte Texte, Lieferanschrift und USt-Bestätigungen aus der App nicht mehr ab.
10.10.2026: Gekürzte IBANs in Mahnungstexten und Korrekturgründen
- Die Mahnungswerkzeuge, etwa
get_payment_reminderundsearch_payment_reminders, geben den Mahnungstext wie die Texte von Rechnungen aus: IBANs gekürzt ([IBAN DE…3000]), Zeilenumbrüche als Leerzeichen. Dasselbe gilt fürcorrectionReasonvon Rechnungskorrekturen. PDF-Vorschau und Download zeigen den Text vollständig. - Kommt
textbeiupdate_payment_reminderoderreasonbeiupdate_invoice_correctionso zurück, wie er gelesen wurde, bleibt der gespeicherte Text samt IBAN und Absätzen erhalten. Einen geänderten Text lehnen beide ab, wenn der gespeicherte eine IBAN oder Zeilenumbrüche enthält; solche Texte änderst du in bimetrics.
10.10.2026: MCP-Verbindungen ohne erneute Freigabe
- Jede Anwendung mit Grant-Typ
refresh_tokenerhält bei der Freigabeoffline_access, auch wenn sie nurmcp:readanfragt; die Token-Antwort nennt es inscope. ChatGPT bleibt damit bis zu 30 Tage verbunden, statt nach Ablauf des Access-Tokens eine neue Freigabe zu brauchen. - Beim Erneuern eines Tokens darf
resourcefehlen: Die neuen Tokens bleiben an die MCP-Adresse der Freigabe gebunden. Eine andere Adresse lehnt der Server weiterhin mitinvalid_targetab.
10.10.2026: Belege berichtigen wie in der App (MCP-Version 2026-10-16)
- Neue Verbindungen nennen die Version 2026-10-16 mit der Anlage aus dem Rechtspaket 2026-10-10-v1. Mit Schreibzugriff berichtigt
update_documentBelege wie in der App, auch Beträge, Steuerfall (vatTreatment), Belegart und Gegenpartei; Positionen lassen sich hinzufügen und entfernen. - Neu ist
preview_document_change(nur mitmcp:write). Es zeigt vor der Berichtigung die gesetzten Felder, Summen je Steuersatz, Buchungen, Buchungsfehler und den offenen Betrag der Zuordnung, ohne zu speichern. get_documentliefert dafür bis zu 100 Positionen mitindexundvatTreatment, die Gegenpartei mit Kontakt, Kundennummer und Konto, die Zahlungsbedingungen und ob der Beleg festgeschrieben ist.PATCH /api/document/{id}nimmt neue optionale Felder an:kind,counterparty,expectedTotalMinorund je Positionop,label,amountMinorundvatTreatment. Ein leerer String indueDateoderperformancePeriodToentfernt die Fälligkeit bzw. das Ende des Leistungszeitraums. Belege aus Buchungsvorlagen lassen sich jetzt berichtigen und Positionen von Eingangsbelegen auch auf 9 oder 5,5 % setzen; beides gilt auch fürupdate_documentin älteren MCP-Versionen. Festgeschriebene Belege bleiben gesperrt (siehe Belege gezielt korrigieren).
09.10.2026: Rechnungen im Dokumentkontingent
- Jede festgeschriebene Rechnung (Typ 380) wird einmal als verarbeitetes Dokument erfasst, egal ob aus der App, über die API, MCP oder eine Serie; Stornos und Korrekturen nie. Ob Rechnungen zum Kontingent zählen, hängt vom Vertrag ab:
GET /api/entitlement/nennt das inusage.invoicesCounted. - Ist das Kontingent nach einer Rechnung ausgeschöpft, enthält die Antwort von
PUT /api/draft/{id}/finalizequotaNoticemitlimit,usageundnextStep. Die Rechnung ist trotzdem ausgestellt. - Bei Verträgen ab der Fassung 2026-10-10-v1 lehnt
PUT /api/draft/{id}/finalizeweitere Rechnungen ab, sobald 110 % des Kontingents erreicht sind:402 InvoiceQuotaExceededmitcontext.limit,context.usageundcontext.nextStep. Es wird keine Nummer vergeben, der Entwurf bleibt erhalten. Stornos blockiert das Kontingent nie.
09.10.2026: Forderungen, Mahnungen, Rechnungskorrekturen und Serien (MCP-Version 2026-10-11)
- Neue Verbindungen nennen die Version 2026-10-11. Schon mit Lesefreigabe lesen sie Forderungen, Mahnungen, den Korrekturumfang ausgestellter Rechnungen, Erstattungsstände und Serienvorlagen;
download_payment_reminderlädt ausgestellte Mahnungen als PDF. - Mit Schreibzugriff erstellen sie Zahlungserinnerungen und Mahnungen und stellen sie nach der PDF-Vorschau aus, bereiten Rechnungskorrekturen vor, die wie Rechnungen nach der Vorschau ausgestellt werden, halten bereits erfolgte Erstattungen und Verrechnungen fest und richten Serien für Rechnungsentwürfe ein. Versendet, überwiesen oder automatisch ausgestellt wird dabei nichts.
- Die API bietet dieselben Abläufe:
GET /api/receivable/,POST /api/reminder/,POST /api/draft/{id}/correction,POST /api/match/correction-settlement/refundundPOST /api/recurringinvoice/(siehe Schreiboperationen).
07.10.2026: Auftragsbestätigungen und PDF-Download (MCP-Version 2026-10-10)
- Neue Verbindungen nennen die Version 2026-10-10. Auch ohne Schreibzugriff lesen sie Rechnungen, Angebote und Auftragsbestätigungen, prüfen Entwürfe, zeigen die Druckvorschau und laden mit
download_sales_documentdas PDF. - Mit Schreibzugriff erstellt
derive_sales_documentaus einem ausgestellten Angebot eine Auftragsbestätigung oder aus Angebot bzw. Auftragsbestätigung einen Rechnungsentwurf;delete_order_confirmation_draftverwirft offene AB-Entwürfe. Eine Auftragsbestätigung bucht nichts. - In der API:
POST /api/draft/{id}/deriveundGET /api/orderconfirmation/{id}.
05.10.2026: Cursor verfügbar
- Cursor verbindet sich mit dem MCP-Server über die hinterlegte Client-ID
bimetrics-cursor. Die Schritte und das Plugin-Paket stehen unter Verbinden. - bimetrics steht im Verzeichnis der Konnektoren von Claude (In Claude verbinden).
04.10.2026: ChatGPT und Codex verfügbar
- ChatGPT und Codex verbinden sich mit dem MCP-Server, beide ohne Client-ID über die automatische Einrichtung. Die Schritte stehen unter Verbinden. Cursor folgt.
04.10.2026: Upload-Links über files.bimetrics.de
- Die Upload-Links von
prepare_document_uploadlaufen überhttps://files.bimetrics.de. In Claude erlaubst du diesen Host einmalig unter claude.ai/settings/capabilities für die Code-Ausführung. Erreicht die Anwendung den Host nicht, öffnetappUrldie Belege des Unternehmens mit der Dateiauswahl, und du wählst den Beleg in bimetrics selbst aus (siehe Belege per Claude hochladen).
04.10.2026: Belege hochladen, Suche und Monatsabschluss (MCP-Version 2026-10-09)
- Neue Verbindungen nennen die Version 2026-10-09 mit der Anlage aus dem Rechtspaket 2026-10-09-v1. Verbindungen älterer Versionen behalten ihren Umfang, bis sie neu verbunden werden; die Anwendung erwähnt das Neu-Verbinden einmal, wenn du nach einer neuen Funktion fragst.
- Neu sind
prepare_document_upload(Belege per Upload-Link hochladen, nur mitmcp:write),search,get_export_check,preview_documentundcopy_sales_document. get_document,get_transaction,search_documents,get_company_contextundlist_bank_accountsliefern neue Felder und Filter, etwa Buchungsfehler, Erkennungsstand und den Zustand der Bankverbindung.create_sales_draft,update_sales_draftundcheck_sales_draftarbeiten wie der Editor, auch an Entwürfen aus der App, mit Rabatt und Art je Position, Fußtext, Kundenreferenz, Leistungszeitraum, Skonto und § 13b/§ 4.
04.10.2026: MCP wie in der App (MCP-Version 2026-10-05)
- Neue Verbindungen nennen die Version 2026-10-05 mit der Anlage aus dem Rechtspaket 2026-10-05-v1. Verbindungen älterer Versionen behalten ihren Umfang, bis sie neu verbunden werden.
create_match,delete_matchundupdate_documentwirken sofort wie in der App, statt einen Vorschlag unter Freigaben anzulegen. Sie nehmenidempotencyKeystattrequestId; Zuordnen und Aufheben arbeiten wie in der App über die IDs, Belegkorrekturen weiter mitexpectedVersion. Werkzeuge mit spürbaren Folgen tragendestructiveHint.- Neu sind
preview_sales_document(eine Seite als Bild, so wie bimetrics sie druckt, mit Vorschau-Nachweis) undfinalize_sales_draft(Rechnungsentwurf festschreiben oder Angebot ausstellen, nur im Stand der Vorschau), beide nur mitmcp:write. Festschreiben ist endgültig, versendet wird nichts (siehe Schreibzugriff). - Jede zugelassene Anwendung erhält dieselben Werkzeuge und denselben Schreibzugriff, ob Claude, ChatGPT, Codex oder eine andere; es gibt keine Liste schreibberechtigter Anwendungen mehr. Anwendungen, die nur in Testumgebungen von nicht gelisteten Hosts kommen, bleiben lesend.
preview_sales_documentliefert immer den vollständigen Text mit allen Positionen und Zahlungsbedingungen, ein Bild nur Anwendungen mit Bildanzeige (siehe Gleicher Umfang für jede Anwendung). - Neu sind außerdem
list_document_templatesunddismiss_match_suggestion.search_documentsfiltert nach Betrag,search_transactionsnach Betrag und Richtung.create_sales_draftundupdate_sales_draftlegen auch Angebotsentwürfe an (kind,validUntil).update_contactändert alle Felder des Kontaktformulars, auch Kundennummer, Kundentyp, IBAN und BIC; Kontakte lesen dazu Kundentyp, gekürzte IBAN und BIC.get_matchnennt die aus Belegvorlagen erzeugten Belege (generatedDocumentIds).
04.10.2026: Tagesbudgets für Schreibaufrufe
- Die Schreiboperationen haben Tagesbudgets je Firma: insgesamt, für Festschreiben und Vollstorno zusammen und für neue Kontakte. Die Werte stehen unter Limits. Ist ein Budget aufgebraucht, antwortet die API mit
429 WriteBudgetExceeded,Retry-Afternennt die Sekunden bis Mitternacht UTC.
04.10.2026: MCP für Teammitglieder
- Ein Inhaber kann Teammitgliedern unter Einstellungen › Team das MCP-Recht geben (MCP: nur lesen oder MCP: lesen und schreiben). Sie verbinden ihre KI-Anwendung dann selbst, sehen und widerrufen ihre eigenen Verbindungen und bestätigen die Vorschläge aus ihren Verbindungen. Inhaber sehen alle Verbindungen und erhalten bei jeder neuen Verbindung eines Teammitglieds eine Mail (siehe Berechtigungen und Freigabe). Das gilt ab der Version 2026-10-04.
04.10.2026: MCP-Schreibzugriff vorausgewählt, vollständige Links
- Auf der Freigabeseite ist Schreibzugriff erlauben vorausgewählt, auch wenn die Anwendung nur
mcp:readanfragt. Ohne Häkchen bleibt die Verbindung lesend. Neue Verbindungen nennen die Version 2026-10-04, bestehende behalten ihre Version. - MCP-Ergebnisse mit
appPathenthalten zusätzlichappUrl, den vollständigen Link in die App; ausgenommen sindget_company_contextund Verbindungen älterer Versionen. Assistenten können ihn direkt anzeigen. Der Link nennt das Unternehmen (company), die App wechselt dorthin (siehe Tools und Vorlagen). get_sales_documentliefert für Verbindungen der Version 2026-10-04 zusätzlich Datumsangaben, Preisart, Bemerkung sowie je Position Rabatt und Betrag nach Rabatt, damit ein Assistent einen gelesenen Entwurf unverändert zurückschreiben kann. Die Suche liefert diese Felder nicht.- Ein Schreibaufruf, den bimetrics für die Anwendung oder das Unternehmen nicht zulässt, erhält ein Tool-Ergebnis mit Fehler und Grund statt
403(siehe Schreibzugriff). Nachtrag: Seit dem 04.10.2026 hängt Schreiben nicht mehr von der Anwendung ab.
03.10.2026: Rechnungen abschließen und stornieren
PUT /api/draft/{id}/finalizeverlangt für Rechnungen (Typ 380) die vollständige Anschrift von Absender und Empfänger: Straße, PLZ, Ort und Land der Firma sowie Name, Straße, PLZ, Ort und Land des Kunden. Fehlt eine Angabe, antwortet die API mit422 InvoiceAddressRequired,context.fieldistcompany.address,buyer.nameoderbuyer.address. Es wird keine Rechnungsnummer vergeben. Die EntwurfsprüfungPOST /api/draft/{id}/tax-casemeldet fehlende Anschriften und einen fehlenden Firmennamen schon vorher als blockierende Probleme (InvoiceAddressRequired,company_name_required).POST /api/draft/{id}/cancelsetzt als Referenz immer die Nummer der Originalrechnung, auch wenn das Original eine eigene Referenz wie eine Bestell- oder Angebotsnummer trug. Bisher brach der Storno dann mit422 InvoiceValidationFailedab. Kopf- und Fußtext nennen die stornierte Rechnung; Skonto und QR-Code entfallen. Die Fälligkeit bleibt nur, wenn der Storno einen Betrag fordert, etwa beim Storno einer Rechnung mit negativer Summe.- Ein Positionsrabatt (
discount) unter 0 oder über 100 ergibt beim Anlegen, Ändern und Abschließen400 BadRequestmitcontext.field, etwaitems[0].discount. Bisher wirkte ein negativer Rabatt als Aufschlag, und ein Rabatt über 100 ergab eine negative Position. Stornos übernehmen die Rabatte der Originalrechnung unverändert.
03.10.2026: MCP mit mehreren Unternehmen
- Eine MCP-Verbindung kann mehrere Unternehmen umfassen. Jedes Werkzeug nimmt das optionale Argument
company(ID oder genauer Name); neu istlist_companies. Neue Verbindungen nennen die Version 2026-10-03.
03.10.2026: Schreibzugriff
Schreibzugriff
- Sieben zusätzliche API-Berechtigungen:
contacts:read,sales:read,contacts:write,invoices:draft,invoices:finalize,matching:writeunddocuments:write. Bestehende Schlüssel erhalten keine Schreibrechte.readumfasst zusätzlich Zuordnungen, Ausgangsrechnungen und Entwürfe einschließlich ausgestelltem XML (siehe Authentifizierung). - Neue Endpunkte zum Anlegen und Ändern von Kontakten, Erstellen und Prüfen von Rechnungsentwürfen, Abschließen gespeicherter Entwürfe und Erzeugen eines Vollstornos. Das ausgestellte XML lässt sich herunterladen. Entwürfe werden nicht per API gelöscht.
- Zuordnungen lassen sich anlegen und nach einer Löschvorschau mit unveränderter Versionsmap aufheben. Belegfelder und vorhandene Positionen lassen sich gezielt korrigieren. Schreibaufrufe verwenden
Idempotency-Keyund die jeweiligen Versionsbedingungen (siehe Schreiboperationen). - Die Erfassung bereits erfolgter Bar- oder Verrechnungszahlungen bleibt standardmäßig ausgeschaltet. Eine vorhandene Zahlung lässt sich über den Rücknahme-Endpunkt durch Gegenbuchung korrigieren. Dieser Release führt keine neue Kontingentbelastung erzeugter Rechnungen ein.
Löschungen und Zuordnungen
- Die Filterrouten nehmen
includeDeletedan. Mittrueliefern sie auch gelöschte Einträge, erkennbar am neuen FelddeletedAt, dem Zeitpunkt, seit dem ein Eintrag als gelöscht gilt. NachdeletedAtlässt sich filtern und sortieren (siehe Filtern und Paginieren). Ohne das Feld liefern die Routen wie bisher nur Einträge, die nicht gelöscht sind. - Belege, die bimetrics beim Löschen behält, etwa wegen festgeschriebener Buchungen, gelten in der API als gelöscht:
POST /api/document/filterliefert sie nur noch mitincludeDeleted,GET /api/document/{id}undGET /api/document/{id}/contentantworten mit404. Bisher kamen sie ohne Kennzeichen in den Treffern. - Zuordnen, das Aufheben einer Zuordnung und ein neuer offener Betrag (
match.amountOpen) ändernupdatedAtder betroffenen Belege und Umsätze. - Der Delta-Sync gleicht Löschungen in einem zweiten Durchgang ab und gilt jetzt auch für Buchungen.
27.09.2026: Filter
- Ein Filterwert, der nicht zum Typ des Attributs passt, und ein
notohnechildrenergeben400 BadRequeststatt500. Das gilt auch für Zahlen mit Nachkommastellen bei Ganzzahl-Attributen, die bisher abgeschnitten wurden, und für Zeitpunkte in einer Schreibweise außerhalb von ISO 8601. Die Datenbank las davon manche, etwa05.06.2026als 6. Mai. notverneint seine Ausdrücke als Ganzes. Bisher lieferte einnotum einanddie Treffer einesnotum einor.
26.09.2026: Erste öffentliche Version
- Dokumentation der API unter developer.bimetrics.de mit Leitfäden und Referenz für 15 Endpunkte.
- Maschinenlesbare Beschreibung als OpenAPI 3.0 unter app.bimetrics.de/api/openapi.json.
- Fehlerantworten haben einheitlich die Felder
code,status,detailundcontext. - Eine unbekannte Filterart (
kind) undsortnach einem nicht sortierbaren Attribut ergeben400 BadRequeststatt500. POST /api/accounting/booking/groupfilterist nicht mehr mit API-Schlüsseln erreichbar. Buchungen liefernPOST /api/accounting/booking/filterundGET /api/accounting/booking/{id}.
Stabilität und Änderungen
Welche Teile der API dokumentiert sind und worauf deine Integration achten sollte.
MCP-Server
Mit dem MCP-Server von bimetrics beantwortet ein KI-Assistent Fragen zur Buchhaltung eines Unternehmens und arbeitet mit Schreibzugriff wie in der App, einschließlich Festschreiben, Stornieren und Versand von Rechnungen, nach Freigabe durch einen Inhaber oder ein berechtigtes Teammitglied.