Finance — API and MCP
Overview
This area exposes 83 operations. Each of them is at the same time an MCP tool.
This area is behind the module switch module.accounting. With the module off, these operations answer 404.
Operations
| Method | Path | Purpose | Permission | Parameters | |||
|---|---|---|---|---|---|---|---|
GET | /api/v1/accounting/account-rules | Collection of FinanceAccountRule | accounting.account_rule.view | page, direction, active, brandId | |||
POST | /api/v1/accounting/account-rules | Create a FinanceAccountRule | accounting.account_rule.manage | + body | |||
DELETE | /api/v1/accounting/account-rules/{ulid} | Delete a FinanceAccountRule | accounting.account_rule.manage | ulid | |||
GET | /api/v1/accounting/account-rules/{ulid} | Read one FinanceAccountRule | accounting.account_rule.view | ulid | |||
PATCH | /api/v1/accounting/account-rules/{ulid} | Update a FinanceAccountRule | accounting.account_rule.manage | ulid, + body | |||
GET | /api/v1/accounting/bank-accounts | Collection of FinanceBankAccount | accounting.bank_account.view | page, active, brandId | |||
POST | /api/v1/accounting/bank-accounts | Create a FinanceBankAccount | accounting.bank_account.manage | + body | |||
DELETE | /api/v1/accounting/bank-accounts/{ulid} | Delete a FinanceBankAccount | accounting.bank_account.manage | ulid | |||
GET | /api/v1/accounting/bank-accounts/{ulid} | Read one FinanceBankAccount | accounting.bank_account.view | ulid | |||
PATCH | /api/v1/accounting/bank-accounts/{ulid} | Update a FinanceBankAccount | accounting.bank_account.manage | ulid, + body | |||
POST | /api/v1/accounting/bank-accounts/{ulid}/import | Kontoauszug einlesen — Liest einen Kontoauszug in dieses Bankkonto ein (format camt053\ | mt940\ | csv\ | auto, Inhalt base64). Derselbe Auszug ein zweites Mal erzeugt keine Dubletten, sondern zählt sie unter duplicates. Ein Auszug, dessen Kontokennung nicht zu diesem Konto gehört oder dessen Salden nicht aufgehen, wird mit 422 abgewiesen — ohne eine einzige gebuchte Zeile. | accounting.transaction.manage | ulid, + body |
GET | /api/v1/accounting/bank-connection-accounts | Collection of FinanceBankConnectionAccount | accounting.bank_connection.view | page, connectionUlid, linked | |||
PATCH | /api/v1/accounting/bank-connection-accounts/{ulid} | Update a FinanceBankConnectionAccount | accounting.bank_connection.manage | ulid, + body | |||
GET | /api/v1/accounting/bank-connection-providers | Collection of FinanceBankConnectionProvider | accounting.bank_connection.view | — | |||
GET | /api/v1/accounting/bank-connection-providers/{providerKey} | Read one FinanceBankConnectionProvider | accounting.bank_connection.view | providerKey | |||
GET | /api/v1/accounting/bank-connections | Collection of FinanceBankConnection | accounting.bank_connection.view | page, status, providerKey, brandId | |||
POST | /api/v1/accounting/bank-connections | Create a FinanceBankConnection | accounting.bank_connection.manage | + body | |||
DELETE | /api/v1/accounting/bank-connections/{ulid} | Delete a FinanceBankConnection | accounting.bank_connection.manage | ulid | |||
GET | /api/v1/accounting/bank-connections/{ulid} | Read one FinanceBankConnection | accounting.bank_connection.view | ulid | |||
POST | /api/v1/accounting/bank-connections/{ulid}/begin | Bank-Zustimmung starten oder erneuern — Startet beim Aggregator Zustimmung bzw. starke Kundenauthentifizierung. Ändert keine Kontodaten — es entsteht nichts Neues (200). | accounting.bank_connection.manage | ulid, + body | |||
POST | /api/v1/accounting/bank-connections/{ulid}/refresh | Zustand und Kontenliste neu holen — Holt Status und Kontenliste beim Anbieter neu und schreibt sie an der Verknüpfung fort. Vorbedingung: eine gültige Einwilligung. | accounting.bank_connection.manage | ulid, + body | |||
POST | /api/v1/accounting/bank-connections/{ulid}/sync | Sync bank connection — Sync bank connection. Dedicated action endpoint — not a standard CRUD create. | accounting.bank_connection.sync | ulid, + body | |||
GET | /api/v1/accounting/bank-transactions | Collection of FinanceBankTransaction | accounting.transaction.view | page, accountUlid, status, from, to, q | |||
POST | /api/v1/accounting/bank-transactions | Create a FinanceBankTransaction | accounting.transaction.manage | + body | |||
POST | /api/v1/accounting/bank-transactions/auto-match | Create a FinanceBankTransaction | accounting.transaction.manage | + body | |||
GET | /api/v1/accounting/bank-transactions/{ulid} | Read one FinanceBankTransaction | accounting.transaction.view | ulid | |||
POST | /api/v1/accounting/bank-transactions/{ulid}/ignore | Kontoumsatz als „nicht zuzuordnen" beiseitelegen — Setzt den Umsatz von unmatched auf ignored (Body optional {note}). Er verschwindet damit aus dem Zahlungsabgleich und aus jedem Auto-Match-Lauf — offene Rechnungen bleiben offen. Nur aus unmatched möglich (sonst 409); reversibel über /unignore. | accounting.transaction.manage | ulid, + body | |||
POST | /api/v1/accounting/bank-transactions/{ulid}/match | Umsatz einer Rechnung zuordnen — Ordnet den Bankumsatz Ausgangsrechnungen oder einer Eingangsrechnung zu und schreibt die Zahlung fort. ENDGÜLTIG — eine Rücknahme gibt es nicht (GoBD). | accounting.transaction.manage | ulid, + body | |||
POST | /api/v1/accounting/bank-transactions/{ulid}/unignore | Ignoriert-Markierung zurücknehmen — Nimmt die Ignoriert-Markierung zurück; der Umsatz erscheint wieder im offenen Abgleich. | accounting.transaction.manage | ulid, + body | |||
GET | /api/v1/accounting/cash-books | Collection of FinanceCashBook | accounting.cash_book.view | page, active, brandId | |||
POST | /api/v1/accounting/cash-books | Create a FinanceCashBook | accounting.cash_book.manage | + body | |||
GET | /api/v1/accounting/cash-books/{ulid} | Read one FinanceCashBook | accounting.cash_book.view | ulid | |||
PATCH | /api/v1/accounting/cash-books/{ulid} | Update a FinanceCashBook | accounting.cash_book.manage | ulid, + body | |||
POST | /api/v1/accounting/cash-books/{ulid}/close | Kassenbuch bis zu einem Tag festschreiben — Schreibt den Zeitraum bis through (Default heute) unwiderruflich fest: danach ist in diesem Buch KEINE Buchung mehr auf oder vor diesem Tag möglich. Ein bereits abgeschlossener oder späterer Tag: 409, ein Datum in der Zukunft: 422. Die Antwort trägt den festgeschriebenen Bestand. | accounting.cash_book.manage | ulid, + body | |||
GET | /api/v1/accounting/cash-books/{ulid}/entries | Collection of FinanceCashEntry | accounting.cash_book.view | ulid, page, from, to | |||
POST | /api/v1/accounting/cash-books/{ulid}/entries | Kassenzeile buchen — Bucht eine Zeile in das Kassenbuch. Gebuchte Zeilen sind unveränderlich (§ 146 AO) — eine Korrektur läuft ausschließlich über eine Storno-Gegenbuchung. | accounting.cash_book.manage | ulid, + body | |||
POST | /api/v1/accounting/cash-books/{ulid}/entries/{entryUlid}/reverse | Kassenzeile stornieren (Gegenbuchung) — Legt eine NEUE Zeile mit umgekehrtem Vorzeichen an und verändert den Kassenbestand. Die Ursprungszeile bleibt unangetastet stehen (§146 AO) — beide gehen in den DATEV-Export. Es gibt kein Zurücknehmen der Stornierung. Body optional {reason}. | accounting.cash_book.manage | ulid, entryUlid, + body | |||
GET | /api/v1/accounting/chart-of-accounts | Read one FinanceChartOfAccounts | accounting.ledger_account.view | — | |||
POST | /api/v1/accounting/chart-of-accounts | Create a FinanceChartOfAccounts | accounting.ledger_account.manage | + body | |||
GET | /api/v1/accounting/cost-centers | Collection of FinanceCostCenter | accounting.cost_center.view | page, kind, active, brandId, q | |||
POST | /api/v1/accounting/cost-centers | Create a FinanceCostCenter | accounting.cost_center.manage | + body | |||
DELETE | /api/v1/accounting/cost-centers/{ulid} | Delete a FinanceCostCenter | accounting.cost_center.manage | ulid | |||
GET | /api/v1/accounting/cost-centers/{ulid} | Read one FinanceCostCenter | accounting.cost_center.view | ulid | |||
PATCH | /api/v1/accounting/cost-centers/{ulid} | Update a FinanceCostCenter | accounting.cost_center.manage | ulid, + body | |||
GET | /api/v1/accounting/direct-debit-returns | Collection of FinanceDirectDebitReturn | accounting.direct_debit_return.view | page, invoiceUlid, sepaMandateUlid, reasonCategory, brandId | |||
POST | /api/v1/accounting/direct-debit-returns | Create a FinanceDirectDebitReturn | accounting.direct_debit_return.manage | + body | |||
GET | /api/v1/accounting/document-extractions | Collection of FinanceDocumentExtraction | accounting.incoming_invoice.view | page, status, source, brandId | |||
POST | /api/v1/accounting/document-extractions | Create a FinanceDocumentExtraction | accounting.incoming_invoice.manage | + body | |||
GET | /api/v1/accounting/document-extractions/{ulid} | Read one FinanceDocumentExtraction | accounting.incoming_invoice.view | ulid | |||
PATCH | /api/v1/accounting/document-extractions/{ulid} | Update a FinanceDocumentExtraction | accounting.incoming_invoice.manage | ulid, + body | |||
POST | /api/v1/accounting/document-extractions/{ulid}/confirm | Belegerkennung bestätigen — Übernimmt den bestätigten Vorschlag als Eingangsrechnung im ENTWURF. Korrekturen vorher per PATCH am Vorschlag. | accounting.incoming_invoice.manage | ulid, + body | |||
POST | /api/v1/accounting/document-extractions/{ulid}/discard | Beleg-Vorschlag verwerfen — Setzt den Extraktions-Vorschlag endgültig auf discarded (Body optional {notes}). Es entsteht KEINE Eingangsrechnung, und der Vorschlag lässt sich danach nicht mehr bestätigen — der Beleg muss neu eingelesen werden. Nur aus pending möglich (sonst 409). | accounting.incoming_invoice.manage | ulid, + body | |||
GET | /api/v1/accounting/export/file | Read one FinanceDatevExport | accounting.export.run | from, to, scope, format | |||
GET | /api/v1/accounting/export/preview | Read one FinanceDatevExport | accounting.export.run | from, to, scope | |||
GET | /api/v1/accounting/incoming-invoices | Collection of FinanceIncomingInvoice | accounting.incoming_invoice.view | page, statusId, q, from, to, brandId, matchStatusId | |||
POST | /api/v1/accounting/incoming-invoices | Create a FinanceIncomingInvoice | accounting.incoming_invoice.manage | + body | |||
POST | /api/v1/accounting/incoming-invoices/import-e-invoice | Create a FinanceEInvoiceImport | accounting.incoming_invoice.manage | + body | |||
DELETE | /api/v1/accounting/incoming-invoices/{ulid} | Delete a FinanceIncomingInvoice | accounting.incoming_invoice.manage | ulid | |||
GET | /api/v1/accounting/incoming-invoices/{ulid} | Read one FinanceIncomingInvoice | accounting.incoming_invoice.view | ulid | |||
PATCH | /api/v1/accounting/incoming-invoices/{ulid} | Update a FinanceIncomingInvoice | accounting.incoming_invoice.manage | ulid, + body | |||
POST | /api/v1/accounting/incoming-invoices/{ulid}/approve | Approve incoming invoice — Approve incoming invoice. Dedicated action endpoint — not a standard CRUD create. | accounting.incoming_invoice.approve | ulid, + body | |||
POST | /api/v1/accounting/incoming-invoices/{ulid}/mark-paid | Mark incoming invoice as paid — Mark incoming invoice as paid. Dedicated action endpoint — not a standard CRUD create. | accounting.incoming_invoice.manage | ulid, + body | |||
GET | /api/v1/accounting/incoming-invoices/{ulid}/match | Read one FinanceIncomingInvoiceMatch | accounting.incoming_invoice.view | ulid | |||
POST | /api/v1/accounting/incoming-invoices/{ulid}/match | Drei-Wege-Abgleich festhalten — Hält das Urteil des Abgleichs Bestellung/Wareneingang/Rechnung am Beleg fest und gibt die Rechnung frei, wenn sie in Toleranz liegt und die Auto-Freigabe eingeschaltet ist — deshalb das Freigabe-Recht. | accounting.incoming_invoice.approve | ulid, + body | |||
GET | /api/v1/accounting/ledger-accounts | Collection of FinanceLedgerAccount | accounting.ledger_account.view | page, type, active, brandId, q | |||
POST | /api/v1/accounting/ledger-accounts | Create a FinanceLedgerAccount | accounting.ledger_account.manage | + body | |||
DELETE | /api/v1/accounting/ledger-accounts/{ulid} | Delete a FinanceLedgerAccount | accounting.ledger_account.manage | ulid | |||
GET | /api/v1/accounting/ledger-accounts/{ulid} | Read one FinanceLedgerAccount | accounting.ledger_account.view | ulid | |||
PATCH | /api/v1/accounting/ledger-accounts/{ulid} | Update a FinanceLedgerAccount | accounting.ledger_account.manage | ulid, + body | |||
GET | /api/v1/accounting/payment-proposal | Read one FinancePaymentProposal | accounting.payment_run.view | bankAccountUlid, executionDate, horizonDays, type | |||
GET | /api/v1/accounting/payment-runs | Collection of FinancePaymentRun | accounting.payment_run.view | page, statusId, bankAccountUlid, brandId | |||
POST | /api/v1/accounting/payment-runs | Create a FinancePaymentRun | accounting.payment_run.manage | + body | |||
GET | /api/v1/accounting/payment-runs/{ulid} | Read one FinancePaymentRun | accounting.payment_run.view | ulid | |||
POST | /api/v1/accounting/payment-runs/{ulid}/cancel | Cancel payment run — Cancel payment run. Dedicated action endpoint — not a standard CRUD create. | accounting.payment_run.manage | ulid, + body | |||
POST | /api/v1/accounting/payment-runs/{ulid}/execute | Zahllauf als ausgeführt vermerken — Vermerkt den Zahllauf als ausgeführt. Ab hier ist das Geld unterwegs: der Lauf lässt sich nicht mehr verwerfen. | accounting.payment_run.execute | ulid, + body | |||
POST | /api/v1/accounting/payment-runs/{ulid}/export | SEPA-Datei zum Zahllauf erzeugen — Erzeugt die SEPA-Bankdatei zum Zahllauf zum Einreichen bei der Bank. Verlangt das Ausführungsrecht. | accounting.payment_run.execute | ulid, + body | |||
GET | /api/v1/accounting/payment-runs/{ulid}/file | Read one FinancePaymentRun | accounting.payment_run.execute | ulid | |||
POST | /api/v1/accounting/payment-runs/{ulid}/prenotify | SEPA-Vorabankündigung versenden — Kündigt die Lastschriften dieses Laufs beim Kunden an — ausdrücklich und schon auf dem ENTWURF. Ab diesem Zeitpunkt läuft die Vorabankündigungs-Frist (accounting.sepa.prenotification_days, ab Werk 14 Kalendertage), die der Export prüft. Idempotent: eine bereits zugestellte Ankündigung wird nicht wiederholt. | accounting.payment_run.manage | ulid, + body | |||
GET | /api/v1/accounting/sepa-mandates | Collection of FinanceSepaMandate | accounting.sepa_mandate.view | page, status, expired, customerId, brandId | |||
POST | /api/v1/accounting/sepa-mandates | Create a FinanceSepaMandate | accounting.sepa_mandate.manage | + body | |||
GET | /api/v1/accounting/sepa-mandates/{ulid} | Read one FinanceSepaMandate | accounting.sepa_mandate.view | ulid | |||
PATCH | /api/v1/accounting/sepa-mandates/{ulid} | Update a FinanceSepaMandate | accounting.sepa_mandate.manage | ulid, + body | |||
POST | /api/v1/accounting/sepa-mandates/{ulid}/revoke | Lastschriftmandat widerrufen — Entzieht die Einzugsermächtigung: das Mandat geht auf revoked und wird in KEINEN Lastschrift-Lauf mehr aufgenommen — offene Rechnungen dieses Kunden bleiben unbezahlt stehen. Der Datensatz bleibt als Nachweis erhalten (kein DELETE). Body optional {notes}. | accounting.sepa_mandate.manage | ulid, + body |
Purpose texts that do not follow the standard pattern are taken verbatim from the interface description in the code.