BuchhaltungsButler
OCI · GHCR.IO/OHNEBEN/BUCHHALTUNGSBUTLER-MCP:1.1.2 · SCANNED SEP 20
BuchhaltungsButler API v1: alle 54 Endpunkte als 46 sicherheitskategorisierte MCP-Tools
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security0
- Malware scan not yet available for this package.Unverified
- Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 5 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability62
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 14874 tokens (~323/item across 46 items; 46 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 47 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 2 categories
Categories scored 0 because we could not verify them: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
How do I install the BuchhaltungsButler MCP server?
BuchhaltungsButler runs locally as a container image, launched with docker run --rm -i ghcr.io/ohneben/buchhaltungsbutler-mcp:1.1.2. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.
oci · ghcr.io/ohneben/buchhaltungsbutler-mcp:1.1.2
claude mcp add ohneben-buchhaltungsbutler-mcp -- docker run --rm -i ghcr.io/ohneben/buchhaltungsbutler-mcp:1.1.2
{
"mcpServers": {
"ohneben-buchhaltungsbutler-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/ohneben/buchhaltungsbutler-mcp:1.1.2"
]
}
}
} {
"servers": {
"ohneben-buchhaltungsbutler-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/ohneben/buchhaltungsbutler-mcp:1.1.2"
]
}
}
} codex mcp add ohneben-buchhaltungsbutler-mcp -- docker run --rm -i ghcr.io/ohneben/buchhaltungsbutler-mcp:1.1.2
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ohneben-buchhaltungsbutler-mcp": {
"type": "local",
"command": [
"docker",
"run",
"--rm",
"-i",
"ghcr.io/ohneben/buchhaltungsbutler-mcp:1.1.2"
],
"enabled": true
}
}
} mcp_servers:
ohneben-buchhaltungsbutler-mcp:
command: "docker"
args: ["run", "--rm", "-i", "ghcr.io/ohneben/buchhaltungsbutler-mcp:1.1.2"] {
"McpServers": {
"ohneben-buchhaltungsbutler-mcp": {
"Transport": "stdio",
"Command": "docker",
"Arguments": [
"run",
"--rm",
"-i",
"ghcr.io/ohneben/buchhaltungsbutler-mcp:1.1.2"
]
}
}
} {
"mcpServers": {
"ohneben-buchhaltungsbutler-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/ohneben/buchhaltungsbutler-mcp:1.1.2"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 14 Sept 26 39
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed oci/ghcr.io/ohneben/buchhaltungsbutler-mcp:1.1.2
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | oci |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
accounts_create Accounts: add a basic account ~286
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **add a basic account** Use to register a new bank, cash or credit-card account before importing transactions for it. Not for chart-of-accounts entries. To add a posting account number, use `postingaccounts_create`. Not idempotent: calling twice with the same name creates two accounts. Check `accounts_list` first. v1 offers no way to update or delete an account afterwards. Endpoint: POST /accounts/add
| Name | Type | Req | Description |
|---|---|---|---|
| is_revision_safe | boolean | – | If you create a basic account of type cash, you can make this revision_safe. That means, you cannot remove already saved transactions without creating a cancellation transaction. NOTE: This will only… |
| name | string | yes | The name of the basic account. |
| postingaccount_number | integer | yes | The postingaccount_number of the basic account. |
| receipt_creates_transaction | boolean | – | If a receipt assigned to this basic account should automatically create a transaction, this parameter should be true. If specified, the field will be validated. |
| type | string | yes | The type of the basic account. Accepted values: "cash", "bank/institution", "other". |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | blank |
| postingaccount_number | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
accounts_list Accounts: get all the accounts ~125
🟢 READ-ONLY: Fetches data. Makes no changes to the accounting records. **get all the accounts** Use to list the bank, cash and credit-card accounts that transactions can be booked against, e.g. to resolve an account name to the numeric `account` id the transaction tools expect. Not the chart of accounts. For posting account numbers such as 1200 or 4400, use `postingaccounts_list`. v1 offers no update or delete endpoint for accounts. An account created here can only be listed afterwards. Endpoint: POST /accounts/get
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | – | An array of accounts data |
| message | string | – | blank |
| rows | integer | – | Number of returned rows |
| success | boolean | yes | Success boolean |
No examples provided.
comments_create Comments: add comment to transaction or receipt ~238
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **add comment to transaction or receipt** Add comment to transaction or receipt. NOTE: You have to submit either a transaction_id_by_customer or a receipt_id_by_customer. Use to attach a free-text note to one receipt or one transaction, for example to record why a booking was categorised the way it was. Exactly one of `transaction_id_by_customer` or `receipt_id_by_customer` must be set. v1 offers no endpoint to read, edit or delete comments, so a comment written here can only be seen in the BuchhaltungsButler web app. Endpoint: POST /comments/add
| Name | Type | Req | Description |
|---|---|---|---|
| comment_text | string | yes | The comment text as a string between 2 and 210 characters. |
| receipt_id_by_customer | integer | – | The id_by_customer of the receipt. If specified, the field will be validated. |
| transaction_id_by_customer | integer | – | The id_by_customer of the transaction. If specified, the field will be validated. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
cost_locations_create Cost Locations: add cost location ~129
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **add cost location** Add a new cost location. Use to create a cost centre before referencing it from a posting. Not idempotent. Check `cost_locations_list` first to avoid a duplicate. Endpoint: POST /cost-locations/add
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | An alphanumeric identifier for the cost location (max 10 chars) |
| name | string | yes | The name/description of the cost location |
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | – | blank |
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
cost_locations_delete Cost Locations: delete cost location ~126
🔴 DESTRUCTIVE · deletes data: Deletes or cancels a record. Confirm with the user before calling. Receipt deletes are restorable; cost-location deletes are not. Cancelling a posting deletes it if it is not yet fixed, otherwise it books a reversal posting. **delete cost location** Delete a cost location. Use to remove a cost centre that is no longer needed. Permanent. Unlike a deleted receipt there is no restore endpoint, so confirm with the user before calling. Endpoint: POST /cost-locations/delete
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | The cost location code |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
cost_locations_list Cost Locations: get cost locations ~164
🟢 READ-ONLY: Fetches data. Makes no changes to the accounting records. **get cost locations** Get cost locations for a specified customer account. The response includes the number of returned rows and an array of cost locations data. NOTE: Each request is limited to 1000 cost locations! Use to list the cost centres available for the `cost_location` fields on the posting tools. Endpoint: POST /cost-locations/get
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | – | The code of one specific cost location. If provided, only the cost location with this code will be returned. |
| limit | integer | – | Set a limit of returned postings. NOTE: the maximum limit is 1000! |
| offset | integer | – | Set an offset for the returned postings. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | – | An array of cost locations data |
| message | string | – | blank |
| rows | integer | – | Number of returned rows |
| success | boolean | yes | Success boolean |
No examples provided.
cost_locations_update Cost Locations: update cost location ~112
🟡 WRITE · updates data: Modifies existing master data in place. **update cost location** Update a cost location's name/description. Use to rename an existing cost centre or change its number. Overwrites the fields you send. Read the current record with `cost_locations_list` first if you intend a partial change. Endpoint: POST /cost-locations/update
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | The cost location code |
| name | string | yes | The updated name/description of the cost location |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
creditors_create Settings: create creditor ~179
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **create creditor** Create a creditor account. Use to create one or more suppliers. For customers you invoice, use `debtors_create`. Takes one or many: pass an array of creditors in `creditors`. A single record is an array of one. Not idempotent: check `creditors_list` first, since a repeated call creates duplicate suppliers. v1 offers no delete endpoint, so a creditor created here can only be updated afterwards, never removed. Endpoint: POST /settings/add-batch/creditors
| Name | Type | Req | Description |
|---|---|---|---|
| creditors | array | yes | an array of creditors, each creditor has the field declaration and validation from the single add/creditor endpoint |
| Name | Type | Req | Description |
|---|---|---|---|
| creditors | array | – | – |
| errors | array | – | – |
| success | boolean | yes | Success boolean |
No examples provided.
creditors_list Settings: get creditors ~163
🟢 READ-ONLY: Fetches data. Makes no changes to the accounting records. **get creditors** Get all creditors Use to list suppliers, for example to resolve a supplier name to the `creditor` id the receipt and posting tools expect. For customers you invoice, use `debtors_list`. Supports `limit` and `offset`; the response reports the total in `rows`, so page until you have seen that many rows. v1 offers no delete endpoint for creditors, so they can only be created, listed and updated. Endpoint: POST /settings/get/creditors
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | limit of the results, default is 25 results |
| offset | integer | – | offset of the results, default is 0 |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | – | An array of creditors |
| message | string | – | blank |
| rows | integer | – | Number of returned rows |
| success | boolean | yes | Success boolean |
No examples provided.
creditors_update Settings: update creditor ~409
🟡 WRITE · updates data: Modifies existing master data in place. **update creditor** Update a creditor account. Use to change a supplier's address, bank details or payment terms. Overwrites the fields you send. Read the current record with `creditors_list` first if you intend a partial change. Endpoint: POST /settings/update/creditor
| Name | Type | Req | Description |
|---|---|---|---|
| additional_address_line | string | – | The new additional address line of the creditor account. If specified, the field will be validated. |
| bic | string | – | The new bic of the creditor account. If specified, the field will be validated. |
| city | string | – | The new city of the creditor account. If specified, the field will be validated. |
| contact_person_name | string | – | The new contact person name of the creditor account. If specified, the field will be validated. |
| country | string | – | The new country of the creditor account. If specified, the field will be validated. Valid cases are only the German version of the country name [Dänemark] OR the two digit ISO code of the country [… |
| due_in_days | integer | – | The due in days of your new debtor account. If specified, the field will be validated. |
| string | – | The email of the creditor account. If specified, the field will be validated. | |
| iban | string | – | The new iban of the creditor account. If specified, the field will be validated. |
| name | string | – | The new name of the creditor account |
| postingaccount_number | integer | yes | The postingaccount_number of the creditor account |
| sales_tax_id | string | – | The new sales tax id of the creditor account. If specified, the field will be validated. |
| street | string | – | The new street of the creditor account. If specified, the field will be validated. |
| zip | string | – | The new zip of the creditor account. If specified, the field will be validated. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | – | the updated Debitor |
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
debtors_create Settings: create debtor ~177
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **create debtor** Create a debtor account. Use to create one or more customers. For suppliers you buy from, use `creditors_create`. Takes one or many: pass an array of debtors in `debtors`. A single record is an array of one. Not idempotent: check `debtors_list` first. v1 offers no delete endpoint, so a debtor created here can only be updated afterwards, never removed. Endpoint: POST /settings/add-batch/debtors
| Name | Type | Req | Description |
|---|---|---|---|
| debtors | array | yes | an array of debtors, each debtor has the field declaration and validation from the single add/debtor endpoint |
| Name | Type | Req | Description |
|---|---|---|---|
| debtors | array | – | – |
| errors | array | – | – |
| success | boolean | yes | Success boolean |
No examples provided.
debtors_list Settings: get debitors ~148
🟢 READ-ONLY: Fetches data. Makes no changes to the accounting records. **get debitors** Get all debitors Use to list customers, for example to resolve a customer name to the `debtor` id the receipt and posting tools expect. For suppliers you buy from, use `creditors_list`. Supports `limit` and `offset`. v1 offers no delete endpoint for debtors, so they can only be created, listed and updated. Endpoint: POST /settings/get/debtors
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | limit of the results, default is 25 results |
| offset | integer | – | offset of the results, default is 0 |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | – | An array of debitors |
| message | string | – | blank |
| rows | integer | – | Number of returned rows |
| success | boolean | yes | Success boolean |
No examples provided.
debtors_update Settings: update debtor ~409
🟡 WRITE · updates data: Modifies existing master data in place. **update debtor** Update a debtor account. Use to change a customer's address, bank details or customer number. Overwrites the fields you send. Read the current record with `debtors_list` first if you intend a partial change. Endpoint: POST /settings/update/debtor
| Name | Type | Req | Description |
|---|---|---|---|
| additional_address_line | string | – | The new additional address line of the debtor account. If specified, the field will be validated. |
| bic | string | – | The new bic of the debtor account. If specified, the field will be validated. |
| city | string | – | The new city of the debtor account. If specified, the field will be validated. |
| contact_person_name | string | – | The new contact person name of the debtor account. If specified, the field will be validated. |
| country | string | – | The new country of the debtor account. If specified, the field will be validated. Valid cases are only the German version of the country name [Dänemark] OR the two digit ISO code of the country [DK… |
| customer_number | string | – | The new customer_number of the debtor account. If specified, the field will be validated. |
| string | – | The email of the debtor account. If specified, the field will be validated. | |
| iban | string | – | The new iban of the debtor account. If specified, the field will be validated. |
| name | string | – | The new name of the new debtor account |
| postingaccount_number | integer | yes | The postingaccount_number of the debtor account |
| sales_tax_id | string | – | The new sales tax id of the debtor account. If specified, the field will be validated. |
| street | string | – | The new street of the debtor account. If specified, the field will be validated. |
| zip | string | – | The new zip of the debtor account. If specified, the field will be validated. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | – | the updated Debitor |
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
invoices_create Invoices: create invoice ~1,184
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **create invoice** Add an invoice for the specified customer. Use to issue a final outgoing invoice that is booked immediately. For an invoice that should stay editable, use `invoices_create_draft`. For a structured XML invoice in XRechnung or ZUGFeRD format, use `invoices_create_e_invoice`. Not idempotent: a second call issues a second invoice with a new number. v1 offers no endpoint to list, change or cancel an invoice once created. Endpoint: POST /invoices/create
| Name | Type | Req | Description |
|---|---|---|---|
| additional_addressline | string | – | The additional address information of the recipient company. If specified, the field will be validated. |
| city | string | – | The city of the recipient company. If specified, the field will be validated. |
| company_name | string | yes | The company name of the recipient. |
| contact_person_name | string | – | The name of the contact person of the recipient company. If specified, the field will be validated. |
| correspondence | string | – | The optional correspondence to the invoice recipient. If specified, the field will be validated. |
| country | string | – | The country of the recipient company. If specified, the field will be validated. Valid cases are only the German version of the country name [Dänemark] OR the two digit ISO code of the country [DK]. |
| customer_number | string | – | The customer number of the recipient. If specified, the field will be validated. |
| date | string | yes | The date of the invoice. |
| date_of_supply | string | – | Date or period of service/delivery. NOTE: The date_of_supply will be displayed on the PDF, but when the date AND the date_of_supply is specified in the format "YYYY-MM-DD", the date_of_supply will a… |
| discount_type | string | – | The type of the discount. Can be either 'percent' or 'EUR'. If specified, the field will be validated. |
| discount_value | string | – | The value of granted discount. If specified, the field will be validated. |
| due_days | string | – | The number of days between the invoice date and the due date. If specified, the field will be validated. |
| string | – | The email for sending the invoice. If specified, the field will be validated. | |
| final_provisions | string | – | The final comment of the invoice. If specified, the field will be validated. |
| invoicenumber | string | – | The invoicenumber for the invoice. If not specified, the default BHB number will be created. If specified, the field will be validated. |
| item_amount | array | yes | An array of invoice item amounts. Usage: "item_amount" : ['10', '20'] |
| item_description | array | – | An array of invoice item description. Usage: "item_description" : ['Description Item 1', 'Description Item 2']. If specified, the field will be validated. |
| item_name | array | yes | An array of invoice items. Usage: "item_name" : ['Item 1', 'Item 2'] |
| item_single_price | array | yes | An array of invoice item single_prices. Usage: "item_single_price" : ['20', '19.99'] |
| item_unit | array | yes | An array of invoice items units. Usage: "item_unit" : ['Std.', 'Stk.'] |
| item_vat | array | yes | An array of invoice item vats. Usage: "item_vat" : ['7', '19'] Valid vat rates are floating point numbers between 0 and 100. |
| language | string | – | The language for translatable invoice labels (e.g. headings, table headers, payment terms). Can be either 'de_DE' ("Deutsch", default) or 'en_US' ("English"). If omitted, German is used. |
| payment_conditions | string | – | The payment conditions of the invoice. If specified, the field will be validated. |
| payment_reference | string | – | The payment reference id. If specified correctly, the resulting receipt of the created invoice will match with the corresponding transaction. NOTE: Currently we support Amazon order id, PayPal tran… |
| recurring_date_next | string | – | The next date of a recurring invoice. IMPORTANT: The field is required, if "recurring_interval" is specified. If specified, the field will be validated. |
| recurring_interval | string | – | An interval for recurring invoices. Can be either 'weekly', 'monthly', 'quarterly' or 'yearly'. If specified, the field will be validated. |
| show_bankdata | boolean | – | Show the the bank data on the invoice. If specified, the field will be validated. |
| show_contactdata | boolean | – | Show the contact data on the invoice. If specified, the field will be validated. |
| show_prices_type | string | yes | Can be either 'net' ("Netto") or 'gross' ("Brutto"). |
| street | string | – | The street of the recipient company. If specified, the field will be validated. |
| type | string | yes | Can be either 'invoice' ("Rechnung"), 'credit' ("Gutschrift") or 'offer' ("Angebot"). |
| zip | string | – | The zip of the recipient company. If specified, the field will be validated. |
| Name | Type | Req | Description |
|---|---|---|---|
| file_name | string | – | Filename of the created invoice |
| id_by_customer | string | – | blank |
| invoicenumber | string | – | blank |
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
invoices_create_draft Invoices: create invoice draft ~1,057
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **create invoice draft** Add an invoice draft for the specified customer. Use to prepare an invoice that a human should review and release in the BuchhaltungsButler web app. A draft is not booked and carries no invoice number. To issue a final invoice directly, use `invoices_create`. v1 offers no endpoint to list, edit or release drafts. Releasing happens in the web app. Endpoint: POST /invoices/create/draft
| Name | Type | Req | Description |
|---|---|---|---|
| additional_addressline | string | – | The additional address information of the recipient company. If specified, the field will be validated. |
| city | string | – | The city of the recipient company. If specified, the field will be validated. |
| company_name | string | yes | The company name of the recipient. |
| contact_person_name | string | – | The name of the contact person of the recipient company. If specified, the field will be validated. |
| correspondence | string | – | The optional correspondence to the invoice recipient. If specified, the field will be validated. |
| country | string | – | The country of the recipient company. If specified, the field will be validated. Valid cases are only the German version of the country name [Dänemark] OR the two digit ISO code of the country [DK]. |
| customer_number | string | – | The customer number of the recipient. If specified, the field will be validated. |
| date | string | yes | The date of the invoice. |
| date_of_supply | string | – | Date or period of service/delivery. NOTE: The date_of_supply will be displayed on the PDF, but when the date AND the date_of_supply is specified in the format "YYYY-MM-DD", the date_of_supply will a… |
| discount_type | string | – | The type of the discount. Can be either 'percent' or 'EUR'. If specified, the field will be validated. |
| discount_value | string | – | The value of granted discount. If specified, the field will be validated. |
| string | – | The email for sending the invoice. If specified, the field will be validated. | |
| final_provisions | string | – | The final comment of the invoice. If specified, the field will be validated. |
| item_amount | array | yes | An array of invoice item amounts. Usage: "item_amount" : ['10', '20'] |
| item_description | array | – | An array of invoice item description. Usage: "item_description" : ['Description Item 1', 'Description Item 2']. If specified, the field will be validated. |
| item_name | array | yes | An array of invoice items. Usage: "item_name" : ['Item 1', 'Item 2'] |
| item_single_price | array | yes | An array of invoice item single_prices. Usage: "item_single_price" : ['20', '19.99'] |
| item_unit | array | yes | An array of invoice items units. Usage: "item_unit" : ['Std.', 'Stk.'] |
| item_vat | array | yes | An array of invoice item vats. Usage: "item_vat" : ['7', '19'] Valid vat rates are floating point numbers between 0 and 100. |
| language | string | – | The language for translatable invoice labels (e.g. headings, table headers, payment terms). Can be either 'de_DE' ("Deutsch", default) or 'en_US' ("English"). If omitted, German is used. |
| payment_conditions | string | – | The payment conditions of the invoice. If specified, the field will be validated. |
| recurring_date_next | string | – | The next date of a recurring invoice. IMPORTANT: The field is required, if "recurring_interval" is specified. If specified, the field will be validated. |
| recurring_interval | string | – | An interval for recurring invoices. Can be either 'weekly', 'monthly', 'quarterly' or 'yearly'. If specified, the field will be validated. |
| show_bankdata | boolean | – | Show the the bank data on the invoice. If specified, the field will be validated. |
| show_contactdata | boolean | – | Show the contact data on the invoice. If specified, the field will be validated. |
| show_prices_type | string | yes | Can be either 'net' ("Netto") or 'gross' ("Brutto"). |
| street | string | – | The street of the recipient company. If specified, the field will be validated. |
| type | string | yes | Can be either 'invoice' ("Rechnung"), 'credit' ("Gutschrift") or 'offer' ("Angebot"). |
| zip | string | – | The zip of the recipient company. If specified, the field will be validated. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
invoices_create_e_invoice Invoices: create e-invoice ~1,320
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **create e-invoice** Add an e-invoice for the specified customer. Use when the recipient requires a structured electronic invoice, for example a German public-sector customer expecting XRechnung. For an ordinary PDF invoice, use `invoices_create`. Not idempotent. v1 offers no endpoint to list or cancel an e-invoice once created. Endpoint: POST /invoices/create/e-invoice
| Name | Type | Req | Description |
|---|---|---|---|
| additional_addressline | string | – | The additional address information of the recipient company. If specified, the field will be validated. |
| city | string | yes | The city of the recipient company. If specified, the field will be validated. |
| company_name | string | yes | The company name of the recipient. |
| contact_person_name | string | – | The name of the contact person of the recipient company. If specified, the field will be validated. |
| correspondence | string | – | The optional correspondence to the invoice recipient. If specified, the field will be validated. |
| country | string | yes | The country of the recipient company. If specified, the field will be validated. Valid cases are only the German version of the country name [Dänemark] OR the two digit ISO code of the country [DK]. |
| customer_number | string | – | The customer number of the recipient. If specified, the field will be validated. |
| date | string | yes | The date of the invoice. |
| date_of_supply | string | – | Date or period of service/delivery. NOTE: The date_of_supply will be displayed on the PDF, but when the date AND the date_of_supply is specified in the format "YYYY-MM-DD", the date_of_supply will a… |
| discount_type | string | – | The type of the discount. Can be either 'percent' or 'EUR'. If specified, the field will be validated. |
| discount_value | string | – | The value of granted discount. If specified, the field will be validated. |
| due_days | string | – | The number of days between the invoice date and the due date. If not specified due date will be set to invoice date (due_days = 0). |
| e_invoice_id | string | yes | Buyer reference (default: 0). If you do not have a reference, please enter "0". A valid is mandatory for e-invoices to public contracting authorities and is provided by the recipient. |
| string | yes | The email for sending the invoice. If specified, the field will be validated. | |
| final_provisions | string | – | The final comment of the invoice. If specified, the field will be validated. |
| invoicenumber | string | – | The invoicenumber for the invoice. If not specified, the default BHB number will be created. If specified, the field will be validated. |
| item_amount | array | yes | An array of invoice item amounts. Usage: "item_amount" : ['10', '20'] |
| item_description | array | – | An array of invoice item description. Usage: "item_description" : ['Description Item 1', 'Description Item 2']. If specified, the field will be validated. |
| item_name | array | yes | An array of invoice items. Usage: "item_name" : ['Item 1', 'Item 2'] |
| item_single_price | array | yes | An array of invoice item single_prices. Usage: "item_single_price" : ['20', '19.99'] |
| item_tax_amount | array | yes | Only required if corresponding item_tax_type = 'S' (VAT). An array of invoice item vats. Usage: "item_tax_amount" : ['7', '19'] Valid vat rates are floating point numbers between 0 and 100. |
| item_tax_type | array | yes | An array of invoice item tax types. Usage: "item_vat" : ['S', 'E'] Valid tax types are the following: S - VAT (standard rate) Z - 0% VAT AE - Reverse Charge (§13b) K - EU Supply (Intra-community su… |
| item_unit | array | yes | An array of invoice items units. Usage: "item_unit" : ['Std.', 'Stk.'] |
| language | string | – | The language for translatable invoice labels (e.g. headings, table headers, payment terms). Can be either 'de_DE' ("Deutsch", default) or 'en_US' ("English"). If omitted, German is used. |
| payment_conditions | string | – | The payment conditions of the invoice. If specified, the field will be validated. |
| payment_reference | string | – | The payment reference id. If specified correctly, the resulting receipt of the created invoice will match with the corresponding transaction. NOTE: Currently we support Amazon order id, PayPal tran… |
| recurring_date_next | string | – | The next date of a recurring invoice. IMPORTANT: The field is required, if "recurring_interval" is specified. If specified, the field will be validated. |
| recurring_interval | string | – | An interval for recurring invoices. Can be either 'weekly', 'monthly', 'quarterly' or 'yearly'. If specified, the field will be validated. |
| show_bankdata | boolean | – | Show the the bank data on the invoice. If specified, the field will be validated. |
| show_contactdata | boolean | – | Show the contact data on the invoice. If specified, the field will be validated. |
| show_prices_type | string | yes | Can be either 'net' ("Netto") or 'gross' ("Brutto"). |
| street | string | yes | The street of the recipient company. If specified, the field will be validated. |
| type | string | yes | Can be either 'invoice' ("Rechnung"), 'credit' ("Gutschrift") or 'offer' ("Angebot"). |
| zip | string | yes | The zip of the recipient company. If specified, the field will be validated. |
| Name | Type | Req | Description |
|---|---|---|---|
| file_name | string | – | Filename of the created invoice |
| id_by_customer | string | – | blank |
| invoicenumber | string | – | blank |
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
postingaccounts_create Settings: add postingaccount ~188
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **add postingaccount** Create a postingaccount. Use to add an account number to the chart of accounts that the standard chart does not cover. To register a bank or cash account, use `accounts_create`. Not idempotent. v1 offers no delete endpoint, so a posting account created here can only be updated afterwards. Endpoint: POST /settings/add/postingaccount
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | The name of your new postingaccount. |
| parent_postingaccount_number | integer | yes | The parent postingaccount number of your new postingaccount.This is the postingaccount from which your individually created postingaccount inherits their properties. |
| postingaccount_number | integer | yes | The postingaccount number of your new postingaccount. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | blank |
| parent_postingaccount_number | string | – | blank |
| postingaccount_number | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
postingaccounts_list Settings: get postingaccounts ~339
🟢 READ-ONLY: Fetches data. Makes no changes to the accounting records. **get postingaccounts** Get all postingaccounts Use to list the chart of accounts, for example to find the posting account number for office supplies before booking. Not bank accounts. For the bank, cash and credit-card accounts transactions belong to, use `accounts_list`. Supports `limit` and `offset`; a full SKR chart runs to several hundred rows, so page until `rows` is covered or filter instead. v1 offers no delete endpoint for posting accounts. Endpoint: POST /settings/get/postingaccounts
| Name | Type | Req | Description |
|---|---|---|---|
| exclude_accounts | boolean | – | exclude all base accounts (e.g. bank accounts) from result. If specified, the field will be validated. |
| exclude_creditors | boolean | – | exclude all creditor postingaccounts from result. If specified, the field will be validated. |
| exclude_debtors | boolean | – | exclude all debtor postingaccounts from result. If specified, the field will be validated. |
| exclude_postingaccounts | boolean | – | exclude all postingaccounts from result. If specified, the field will be validated. |
| limit | integer | – | limit of the results, default is 1000 results. If specified, the field will be validated. |
| offset | integer | – | offset of the results, default is 0. If specified, the field will be validated. |
| order | string | – | the order of the results.The following options are valid:postingaccount_number ASC | DESCname ASC | DESCtype ASC | DESC. If specified, the field will be validated. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | – | An array of postingaccounts data |
| message | string | – | blank |
| rows | integer | – | Number of returned rows |
| success | boolean | yes | Success boolean |
No examples provided.
postingaccounts_update Settings: update postingaccount ~116
🟡 WRITE · updates data: Modifies existing master data in place. **update postingaccount** Update a postingaccount. Use to rename a posting account or change its properties. Overwrites the fields you send. Read the current record with `postingaccounts_list` first if you intend a partial change. Endpoint: POST /settings/update/postingaccount
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | The new name of the postingaccount to update. |
| postingaccount_number | integer | yes | The postingaccount number of the postingaccount to update. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | – | the updated postingaccount |
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
postings_assign_receipt_to_free Postings: assign receipt to free posting ~148
🟡 WRITE · links/unlinks records: Creates or removes an assignment between records (e.g. receipt ↔ transaction). Reversible. **assign receipt to free posting** Assign a receipt to a free posting. Use to attach a receipt to a free posting that was booked without one, so the entry has its supporting document. To link a receipt to a bank transaction rather than a posting, use `transactions_assign_receipts`. Endpoint: POST /postings/assign/receipt-to-free-posting
| Name | Type | Req | Description |
|---|---|---|---|
| posting_id_by_customer | integer | yes | The id_by_customer of the posting. |
| receipt_id_by_customer | integer | yes | The id_by_customer of the receipt. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
postings_cancel Postings: cancel posting ~219
🔴 DESTRUCTIVE · deletes data: Deletes or cancels a record. Confirm with the user before calling. Receipt deletes are restorable; cost-location deletes are not. Cancelling a posting deletes it if it is not yet fixed, otherwise it books a reversal posting. **cancel posting** Cancel a specified posting. Postings that are not fixed are deleted, fixed postings are cancelled by creating a reversal posting. Use to take a booking out of the books entirely. This is stronger than the `postings_unconfirm_*` tools: those keep the posting and only clear its confirmation, this one removes or reverses it. Prefer unconfirming when the goal is to edit and rebook. The effect depends on the posting: one that is not yet fixed is deleted outright, a fixed one stays and is offset by a reversal posting, which leaves two visible entries in the journal. Confirm with the user before calling. Endpoint: POST /postings/cancel
| Name | Type | Req | Description |
|---|---|---|---|
| posting_id_by_customer | integer | yes | The id_by_customer of the posting. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | Success message |
| success | boolean | yes | Success boolean |
No examples provided.
postings_create_for_receipt Postings: add receipt posting ~293
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **add receipt posting** Add postings for a specified receipt. Important: Receipt postings are only available if creditor or debtor posting is activated! IMPORTANT: If you add postings to a receipt with foreign currency, you have to get that receipt (/receipts/get/id_by_customer) and find the calculated amount before performing this request. Use to book one or more receipts that already exist in BuchhaltungsButler, splitting each across posting accounts, VAT rates and cost centres. For a journal entry with no receipt behind it, use `postings_create_free`. Takes one or many: pass an array of receipts in `receipts`. A single record is an array of one. The per-receipt arrays (`postingaccounts`, `amounts`, `vats`, `postingtexts`) are positional: index 0 of each describes the same split line, so they must all have the same length. Not idempotent. Reversible with `postings_unconfirm_for_receipt` while the posting is not fixed. Endpoint: POST /postings/add-batch/receipts
| Name | Type | Req | Description |
|---|---|---|---|
| receipts | array | yes | an array of receipt postings, each receipt posting has the same field declaration and validation as the postings/add/receipt endpoint |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | – |
| receipts | array | – | – |
| success | boolean | yes | Success boolean |
No examples provided.
postings_create_for_transaction Postings: add transaction posting ~200
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **add transaction posting** Add postings for a specified transaction. Use to book one or more bank transactions, splitting each across posting accounts, VAT rates and cost centres. For a journal entry with no bank transaction behind it, use `postings_create_free`. Takes one or many: pass an array of transactions in `transactions`. A single record is an array of one. The per-transaction arrays are positional and must all have the same length. Not idempotent. Reversible with `postings_unconfirm_for_transaction` while the posting is not fixed. Endpoint: POST /postings/add-batch/transactions
| Name | Type | Req | Description |
|---|---|---|---|
| transactions | array | yes | an array of transaction postings, each transaction posting has the same field declaration and validation as the postings/add/transaction endpoint |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | – |
| success | boolean | yes | Success boolean |
| transactions | array | – | – |
No examples provided.
postings_create_free Postings: add free posting ~251
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **add free posting** Add a free posting. Use to book a debit/credit pair that is not tied to an existing receipt or bank transaction, such as a manual accrual or a correction. If the booking documents a receipt, use `postings_create_for_receipt`. If it settles a bank transaction, use `postings_create_for_transaction`. Takes one or many: pass an array of free postings in `free_postings`. A single record is an array of one. A "free" posting is BuchhaltungsButler's term for a standalone journal entry: you name both sides yourself via `postingaccount_debit` and `postingaccount_credit`. Not idempotent, so a repeated call books the amount twice. A receipt can be attached afterwards with `postings_assign_receipt_to_free`. Endpoint: POST /postings/add-batch/free
| Name | Type | Req | Description |
|---|---|---|---|
| free_postings | array | yes | an array of free postings, each free posting has the same field declaration and validation as the postings/add/free endpoint |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | – |
| free_postings | array | – | – |
| success | boolean | yes | Success boolean |
No examples provided.
postings_list Postings: get postings ~620
🟢 READ-ONLY: Fetches data. Makes no changes to the accounting records. **get postings** Get postings for a specified customer account. The response includes the number of returned rows and an array of postings data. NOTE: Each request is limited to 1000 postings! Use to read the booking journal, filtered by date range or posting account. Supports `limit` and `offset`. Ask for a bounded date range rather than paging through a whole financial year. Endpoint: POST /postings/get
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | A comma separated list of accounts. Use the following options: all, all financial accounts, free booking and any of your available accounts as numeric value. The default is "all" |
| cost_location | string | – | Set a specific cost location code. If specified, only postings to this cost location are returned |
| date_from | string | yes | The postings issuing date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). All postings with issuing date including and after given value will be returned. If specified, the field will be validated. An e… |
| date_last_action_from | string | – | A date in format 'YYYY-MM-DD'. All postings that were created or modified in status (confirmed, fixed) on or after this date will be returned. If specified, the field will be validated. An empty str… |
| date_last_action_to | string | – | A date in format 'YYYY-MM-DD'. All postings that were created or modified in status (confirmed, fixed) on or before this date will be returned. If specified, the field will be validated. An empty st… |
| date_to | string | yes | The postings issuing date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). All postings with issuing date including and before given value will be returned. If specified, the field will be validated. An… |
| limit | integer | – | Set a limit of returned postings. NOTE: the maximum limit is 1000! |
| offset | integer | – | Set an offset for the returned postings. |
| order | string | – | Possible values are "default", "date ASC", "date DESC", "date_last_action ASC", "date_last_action DESC", "id_by_customer ASC", "id_by_customer DESC". The default order is ascending by date as… |
| posting_status | string | – | Set the status of the posting. You have the following options: all, fixed, unfixed The default is "all" |
| postingaccount | string | – | A comma separated list of postingaccounts. Use the following options: all, all postingaccounts, all debtors, all creditors and any of your available postingaccounts as numeric value. The default is… |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | – | An array of postings data |
| message | string | – | blank |
| rows | integer | – | Number of returned rows |
| success | boolean | yes | Success boolean |
No examples provided.
postings_unconfirm_for_receipt Postings: unconfirm receipt posting ~147
🟡 WRITE · reverts state: Reverts a prior state change (un-confirm a posting, restore a deleted receipt). Reversible. **unconfirm receipt posting** Remove postings for a specified receipt by unconfirming them. This will only work if the postings are not fixed. Use to send a receipt posting back to the unconfirmed state so it can be corrected. This keeps the posting and only clears its confirmation. To remove the posting itself, use `postings_cancel`. Only works while the posting is not fixed. Endpoint: POST /postings/unconfirm/receipt
| Name | Type | Req | Description |
|---|---|---|---|
| receipt_id_by_customer | integer | yes | The id_by_customer of the receipt. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | Success message |
| success | boolean | yes | Success boolean |
No examples provided.
postings_unconfirm_for_transaction Postings: unconfirm transaction posting ~146
🟡 WRITE · reverts state: Reverts a prior state change (un-confirm a posting, restore a deleted receipt). Reversible. **unconfirm transaction posting** Remove postings for a specified transaction by unconfirming them. This will only work if the postings are not fixed. Use to send a transaction posting back to the unconfirmed state so it can be corrected. This keeps the posting and only clears its confirmation. To remove the posting itself, use `postings_cancel`. Only works while the posting is not fixed. Endpoint: POST /postings/unconfirm/transaction
| Name | Type | Req | Description |
|---|---|---|---|
| transaction_id_by_customer | integer | yes | The id_by_customer of the transaction. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | Success message |
| success | boolean | yes | Success boolean |
No examples provided.
postings_unconfirm_free Postings: unconfirm free posting ~153
🟡 WRITE · reverts state: Reverts a prior state change (un-confirm a posting, restore a deleted receipt). Reversible. **unconfirm free posting** Remove a specified free posting by unconfirming it. This will only work if the posting is not fixed. Use to send a free posting back to the unconfirmed state so it can be corrected. This keeps the posting and only clears its confirmation. To remove the posting itself, use `postings_cancel`. Only works while the posting is not fixed. Fixed postings can no longer be unconfirmed. Endpoint: POST /postings/unconfirm/free
| Name | Type | Req | Description |
|---|---|---|---|
| posting_id_by_customer | integer | yes | The id_by_customer of the free posting. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | – | Success message |
| success | boolean | yes | Success boolean |
No examples provided.
receipts_create Receipts: add a receipt ~226
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **add a receipt** Add a receipt into the specified customer account. NOTE: Use this endpoint, to add a receipt without a file! Use to record receipts that have no file attached, for example when the document lives in another system. If you have the actual PDF or image, use `receipts_upload` instead so BuchhaltungsButler can read the document and pre-fill its data. Takes one or many: pass an array of receipts in `receipts`. A single record is an array of one. Not idempotent: a repeated call creates duplicate receipts. The response reports per-item success, so a partial failure leaves the successful entries in place. Endpoint: POST /receipts/addBatch
| Name | Type | Req | Description |
|---|---|---|---|
| receipts | array | yes | list of receipts maximum of 50 receipts are allowed A receipt has the same fields like the /receipts/add endpoint has, same applies for error messages |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | array | – | – |
| receipts | array | – | – |
| success | boolean | yes | is the request successful or faulty |
No examples provided.
receipts_delete Receipts: delete receipt by id_by_customer ~148
🔴 DESTRUCTIVE · deletes data: Deletes or cancels a record. Confirm with the user before calling. Receipt deletes are restorable; cost-location deletes are not. Cancelling a posting deletes it if it is not yet fixed, otherwise it books a reversal posting. **delete receipt by id_by_customer** Mark a receipt as deleted for a specified customer account by id_by_customer. You can get the "id_by_customer" by using the "/receipts/get method" first. Use to remove a receipt that was filed by mistake. Recoverable: `receipts_restore` brings the receipt back. Confirm with the user before calling. Endpoint: POST /receipts/delete/id_by_customer
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| id_by_customer | string | – | blank |
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
receipts_get_by_id Receipts: get receipt by id_by_customer ~212
🟢 READ-ONLY: Fetches data. Makes no changes to the accounting records. **get receipt by id_by_customer** Get a single receipt for a specified customer account by id_by_customer. You can get the "id_by_customer" by using the "/receipts/get method" first. The response includes an array of receipt data. Use to fetch a single receipt whose id you already have. To search or page through receipts, use `receipts_list`. `id_by_customer` is the per-customer counter shown in the BuchhaltungsButler UI, not a global database id. Endpoint: POST /receipts/get/id_by_customer
| Name | Type | Req | Description |
|---|---|---|---|
| get_file | boolean | – | If true, the file will be included as a base64 encoded string (e_invoice_type = 0 -> standard pdf file, e_invoice_type = 1 -> ZUGFeRD pdf file, e_invoice_type = 2 -> xRechnung xml file). If specified… |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | – | An array of receipt data |
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
receipts_list Receipts: get receipts ~753
🟢 READ-ONLY: Fetches data. Makes no changes to the accounting records. **get receipts** Get receipts for a specified customer account. The response includes the number of returned rows and an array of receipts data. Use to search receipts by direction, date range or payment status. To fetch one known receipt, use `receipts_get_by_id`. `list_direction` is required and selects inbound or outbound receipts. Supports `limit` and `offset`; the response reports the total in `rows`. Endpoint: POST /receipts/get
| Name | Type | Req | Description |
|---|---|---|---|
| counterparty | string | – | The counterparty of the receipt, i.e. the invoicing party for type 'inbound' or the recipient for type 'outbound' (e.g. 'Peter Maier'). If specified, the field will be validated. |
| date_from | string | – | The receipt's issuing date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). All receipts with issuing date including and after given value will be returned. If specified, the field will be validated. An… |
| date_since_last_modified | string | – | A date and time in format 'YYYY-MM-DD HH:MM:SS' (e.g. '2017-04-26 13:45:00'). If only 'YYYY-MM-DD' is specified, the time defaults to '23:59:59'. All receipts whose date_updated value is later than t… |
| date_to | string | – | The receipt's issuing date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). All receipts with issuing date including and before given value will be returned. If specified, the field will be validated. An… |
| deleted | boolean | – | If true, only deleted receipts will be returned. If specified, the field will be validated. |
| due_date | string | – | The receipt's issuing due date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). All receipts with the same due date given value will be returned. If specified, the field will be validated. An empty strin… |
| include_offers | boolean | – | If true, offers will be included. If specified, the field will be validated. |
| invoicenumber | string | – | The invoicenumber for the invoice. If specified, the receipts with the same invoicenumber will be retrieved. |
| limit | integer | – | A limit of returned data. If no limit is given, the default will be 500. Also the maximum limit is 500. If specified, the field will be validated. |
| list_direction | string | yes | Can be either 'inbound' ("Eingangsbelege") or 'outbound' ("Ausgangsbelege"). |
| offset | integer | – | The offset for paging returned data. If no offset is given, the default will be 0. If specified, the field will be validated. |
| order | object | – | Possible fields are: date amount invoicenumber (invoice_number) invoicingparty (counterparty) Allowed values are 'ASC' and 'DESC' Example: {"date": "ASC"} {"date": "ASC", "amount": "DESC"} |
| payment_status | string | – | Can be either 'paid' ("bezahlt") or 'unpaid' ("unbezahlt"). If specified, the field will be validated. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | – | An array of receipts data |
| message | string | – | blank |
| rows | integer | – | Number of returned rows |
| success | boolean | yes | Success boolean |
No examples provided.
receipts_list_assigned_transactions Receipts: get all transactions assigned to a specific receipt ~174
🟢 READ-ONLY: Fetches data. Makes no changes to the accounting records. **get all transactions assigned to a specific receipt** Get all transactions assigned to a specific receipt for a specified customer account by id_by_customer. You can get the "id_by_customer" by using the "/receipts/get method" first. Use to see which bank transactions are linked to a given receipt, for example to check whether an invoice has been matched to a payment. For the opposite direction, use `transactions_list_assigned_receipts`. Endpoint: POST /receipts/assigned-transactions/get
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed_only | boolean | – | If true, only confirmed assignments will be returned. If specified, the field will be validated. |
| receipt_id_by_customer | integer | yes | The id_by_customer of the receipt. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | – | An array of transactions data |
| message | string | – | blank |
| rows | integer | – | Number of returned rows |
| success | boolean | yes | Success boolean |
No examples provided.
receipts_restore Receipts: restore deleted receipt by id_by_customer ~109
🟡 WRITE · reverts state: Reverts a prior state change (un-confirm a posting, restore a deleted receipt). Reversible. **restore deleted receipt by id_by_customer** Restore a marked as deleted receipt for a specified customer account by id_by_customer. You can get the "id_by_customer" by using the "/receipts/get method" first. Use to bring back a receipt that was deleted with `receipts_delete`. Endpoint: POST /receipts/restore/id_by_customer
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| id_by_customer | string | – | blank |
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
receipts_upload Receipts: upload receipt ~1,069
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **upload receipt** Upload a receipt into the specified customer account. The receipt will be processed by the BuchhaltungsButler technology. The response includes the filename (without extension) of the receipt as it is stored. Note: max 10 requests per minute Use to send the actual receipt file. BuchhaltungsButler runs document recognition on it and returns the stored filename. To record a receipt without a file, use `receipts_create`. Rate limited to 10 requests per minute. Not idempotent, so uploading the same file twice creates two receipts. Endpoint: POST /receipts/upload
| Name | Type | Req | Description |
|---|---|---|---|
| account | integer | – | If the receipt shall directly be assigned to a payment account, you can specify its posting account number (e.g. '1200'). If specified, the account must exist as a payment account for the customer.… |
| amount | number | – | The total amount of the receipt, can be negative to indicate a reversed payment (e.g. -12.30). If specified, the field will be validated. '0.00' is not considered a valid receipt amount. NOTE: Thi… |
| counterparty | string | – | The counterparty of the receipt, i.e. the invoicing party for type 'invoice inbound' or the recipient for type 'invoice outbound' (e.g. 'Peter Maier'). If specified, the field will be validated. An… |
| creditor_debtor | integer | – | If the receipt shall directly be assigned to a creditor (for type 'invoice inbound') or debtor (for type 'invoice outbound') account, you can specify its posting account number (e.g. '70001'). If sp… |
| currency | string | – | Has to be 'EUR' if specified. If specified, the field will be validated. An empty string is not considered a valid currency. NOTE: This parameter will be ignored when you upload an e-invoice! |
| date | string | – | The receipt's issuing date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). If specified, the field will be validated. An empty string is not considered a valid date. NOTE: This parameter will be ignor… |
| date_delivery | string | – | The delivery date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). NOTE: Due to the DATEV compatibility, we cannot accept a delivery date that is after the receipt date! If specified, it will be validat… |
| date_payment_due | string | – | The payment due date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). NOTE: This parameter will be ignored when you upload an e-invoice! |
| file | string | yes | The receipt file as real file upload or as base64 encoded string. Accepted file types are: application/pdf, text/xml, application/xml, image/jpeg, image/png, image/bmp, image/tiff |
| file_name | string | – | The name of the file. NOTE: This is required for files sent as base64 encoded string and will be ignored for files sent as real upload. |
| invoice_number | string | – | The invoice number (e.g. '1231XU23') with a maximum length of 60 characters - may also be an empty string. NOTE: This parameter will be ignored when you upload an e-invoice! |
| link_to_receipt_id_by_customer | integer | – | Has to be a valid id_by_customer of another receipt. If specified, both receipts will be assigned to a transaction if one of them is assigned manually. |
| payment_reference | string | – | The payment reference id. If specified correctly, the uploaded receipt will match with the corresponding transaction. Currently we support Amazon order id, PayPal transaction id and Stripe transact… |
| type | string | yes | Can be 'invoice inbound' ("Eingangsrechnung"), 'invoice outbound' ("Ausgangsrechnung"), 'credit inbound' ("Eingangsgutschrift § 14 UStG"), 'credit outbound' ("Ausgangsgutschrift § 14 UStG"). |
| vat_rate | number | – | The receipt's vat rate (e.g. 19.00 or 0) - may also be an empty string to indicate a non-available or multiple vat rates. NOTE: This parameter will be ignored when you upload an e-invoice! |
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string | – | Internal filename after upload without extension |
| id_by_customer | string | – | blank |
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
reports_create_bwa Reports: create bwa report ~288
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **create bwa report** Triggers the creation of a BWA report ("Betriebswirtschaftliche Auswertung"). The report is generated asynchronously in the background. The response contains the id_by_customer of the created report, which may be used to retrieve it once the generation has been finished. A new report may only be requested once the generation of a previously requested report of the same type has been finished. Use to request a BWA (Betriebswirtschaftliche Auswertung, the German management report). Step one of two. This only triggers generation. To read the finished report, call `reports_get_bwa` afterwards. Runs asynchronously and returns an id, not the report. A new BWA can only be requested once the previous one has finished, and it replaces the previous one. Endpoint: POST /reports/create/bwa
| Name | Type | Req | Description |
|---|---|---|---|
| date_from | string | yes | The first day of the period the report is created for, in format 'YYYY-MM-DD' (e.g. '2026-01-01'). |
| date_to | string | yes | The last day of the period the report is created for, in format 'YYYY-MM-DD' (e.g. '2026-03-31'). |
| Name | Type | Req | Description |
|---|---|---|---|
| id_by_customer | string | – | The id_by_customer of the created report |
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
reports_create_sums Reports: create sums report ~448
🟡 WRITE · creates data: Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent: calling twice may create duplicates. **create sums report** Triggers the creation of a sums report ("Summen- und Saldenliste"). The report is always created for all of the customer's postingaccounts. The report is generated asynchronously in the background. The response contains the id_by_customer of the created report, which may be used to retrieve it once the generation has been finished. A new report may only be requested once the generation of a previously requested report of the same type has been finished. Use to request a sums and balances report (Summen- und Saldenliste). Step one of two. To read the finished report, call `reports_get_sums` afterwards. Runs asynchronously and returns an id. A new report may only be requested once the previous one has finished, and it replaces the previous one. Endpoint: POST /reports/create/sums
| Name | Type | Req | Description |
|---|---|---|---|
| archive_export | boolean | – | If true, a zip archive containing the csv file and the postingaccount ledgers ("Kontenblätter") will be created for the report additionally. If specified, the field will be validated. |
| base | string | – | The date the postings are taken into account by. Can be either 'date' ("Buchungsdatum") or 'date_delivery_else_date' ("Buchungs- und Leistungsdatum"). If specified, the field will be validated. |
| date_from | string | yes | The first day of the period the report is created for, in format 'YYYY-MM-DD' (e.g. '2026-01-01'). |
| date_to | string | yes | The last day of the period the report is created for, in format 'YYYY-MM-DD' (e.g. '2026-03-31'). |
| file_csv | boolean | – | If true, a csv file will be created for the report additionally. If specified, the field will be validated. |
| file_pdf | boolean | – | If true, a pdf file will be created for the report additionally. If specified, the field will be validated. |
| Name | Type | Req | Description |
|---|---|---|---|
| id_by_customer | string | – | The id_by_customer of the created report |
| message | string | – | blank |
| success | boolean | yes | Success boolean |
No examples provided.
reports_get_bwa Reports: get bwa report ~206
🟢 READ-ONLY: Fetches data. Makes no changes to the accounting records. **get bwa report** Returns a previously created BWA report ("Betriebswirtschaftliche Auswertung"). Reports are generated asynchronously, so a report is only available once its generation has been finished. Note that creating a new report of the same type replaces the previously created one. Use to read a BWA that `reports_create_bwa` has finished generating. Step two of two. Returns nothing useful until generation has finished. If the report is not ready, wait and retry rather than requesting a new one, since a new request replaces the pending one. Endpoint: POST /reports/get/bwa
| Name | Type | Req | Description |
|---|---|---|---|
| get_files | boolean | – | If true, the report's files will be included as base64 encoded strings. If specified, the field will be validated. |
| report_id_by_customer | integer | yes | The id_by_customer of the report, as returned when the report was created |
| Name | Type | Req | Description |
|---|---|---|---|
| files | object | – | Only contained if get_files has been specified. Provides the keys 'csv' and 'pdf', each holding the base64 encoded content of the report's file, or null if the file is not available – because i… |
| message | string | – | blank |
| report | object | – | The report's data, containing the keys 'integrityError', 'standardChart', 'usedCostLocations', 'usedPostingaccountsNumbers', 'postingsRecordsCount', 'uncompletedPostingsCount', 'groups' and 'totals'.… |
| success | boolean | yes | Success boolean |
No examples provided.
reports_get_sums Reports: get sums report ~191
🟢 READ-ONLY: Fetches data. Makes no changes to the accounting records. **get sums report** Returns a previously created sums report ("Summen- und Saldenliste"). Reports are generated asynchronously, so a report is only available once its generation has been finished. Note that creating a new report of the same type replaces the previously created one. Use to read a sums and balances report that `reports_create_sums` has finished generating. Step two of two. For the individual bookings behind one posting account, use `reports_get_sums_ledger`. Endpoint: POST /reports/get/sums
| Name | Type | Req | Description |
|---|---|---|---|
| get_files | boolean | – | If true, the report's files will be included as base64 encoded strings. If specified, the field will be validated. |
| report_id_by_customer | integer | yes | The id_by_customer of the report, as returned when the report was created |
| Name | Type | Req | Description |
|---|---|---|---|
| files | object | – | Only contained if get_files has been specified. Provides the keys 'csv', 'pdf' and 'csv_archive', each holding the base64 encoded content of the report's file, or null if the file is not available &n… |
| message | string | – | blank |
| report | object | – | The report's data, containing the keys 'integrityError', 'countPostingsWithDateVatEffectiveNotConsideredInReport' and 'sums'. The sums are keyed by postingaccount number, and every entry provides th… |
| success | boolean | yes | Success boolean |
No examples provided.
What is the BuchhaltungsButler MCP server?
BuchhaltungsButler is an MCP server listed in the public MCP registry as io.github.ohneben/buchhaltungsbutler-mcp. BuchhaltungsButler API v1: alle 54 Endpunkte als 46 sicherheitskategorisierte MCP-Tools. This page covers its container image (ghcr.io/ohneben/buchhaltungsbutler-mcp:1.1.2).
Is the BuchhaltungsButler MCP server safe to use?
BuchhaltungsButler scores 39 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the BuchhaltungsButler MCP server expose?
BuchhaltungsButler exposes 46 tools: accounts_list, cost_locations_list, creditors_list, debtors_list, postingaccounts_list, and 41 more. Their descriptions and schemas cost roughly 14,657 tokens of context every time the server is loaded.
Is the BuchhaltungsButler MCP server still maintained?
BuchhaltungsButler is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the BuchhaltungsButler MCP server under?
BuchhaltungsButler declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.