Skip to content

Billomat MCP Server — 145 tools

The Billomat DADL turns Billomat's API into an MCP server that Claude, GPT or any MCP-compatible agent can consume directly. One YAML file declares all 145 tools — invoice, offer, credit, confirmation, delivery, recurring, and more — and ToolMesh serves them at runtime. No Python boilerplate, no per-endpoint code, no separate MCP server process.

Below: the endpoint coverage matrix, a two-block ToolMesh setup, the full tool reference grouped by Billomat feature area.

Source: Billomat REST API

Credits: Dunkel Cloud GmbH — maintainer Updated: 2026-07-20

Which Billomat endpoints are covered?

58% (145 of ~250 endpoints)

Focus: Billomat invoicing: invoices (items, payments, comments, tags), offers (estimates, quotes), credit notes, recurring invoices, clients (contacts), articles, taxes, units, suppliers, incoming invoices.

Missing: article property values, client/supplier property values, inbox documents, activity feed, webhooks, templates CRUD (read-only here), settings write beyond read, letters, digital signature upload, postal mail (Pixelletter), encashment

Last reviewed: 2026-07-20

How do you configure the Billomat DADL?

  1. Log in to your Billomat account at https://{billomatID}.billomat.net
  2. Open Settings > Employees (Einstellungen > Mitarbeiter) and select your user
  3. Enable API access for the user — a personal API key is generated
  4. Store it as CREDENTIAL_BILLOMAT_API_KEY in .env (sent as the X-BillomatApiKey header)
  5. Note your billomatID (the subdomain in your Billomat URL) — it forms the base URL

Environment variable: CREDENTIAL_BILLOMAT_API_KEY

Authentication docs ↗

One credential is needed: CREDENTIAL_BILLOMAT_API_KEY (a person-bound API key from Settings > Employees). Replace YOUR_BILLOMAT_ID in the backends.yaml url with your account subdomain. Billomat has no OAuth scopes — the API key grants the issuing user's permissions, so restrict that user to limit API access. Optional: registering an App (Settings > Administration > Apps) yields an App-ID/App-Secret sent as separate X-AppId / X-AppSecret headers that only raise the rate limit (300 → plan quota per 15 min); adding those two credential-backed headers would need a small ToolMesh auth extension. A free developer account is available from [email protected].

How do you install the Billomat MCP server with ToolMesh?

Add to your backends.yaml:

- name: billomat
  transport: rest
  dadl: billomat.dadl
  url: "https://YOUR_BILLOMAT_ID.billomat.net/api"

Set the credential:

CREDENTIAL_BILLOMAT_API_KEY=your-token-here

What 145 tools does the Billomat DADL expose?

GET list_clients List clients (customers). Filter with name, client_number, email, country_code, note, tags, invoice_id, creditor_identifier. Returns an array of client objects (values are strings).
GET get_client Retrieve a single client by numeric ID
POST create_client Create a client. Wrap fields under the `client` key.
PUT update_client Update a client. Wrap changed fields under the `client` key (same fields as create_client).
DELETE delete_client Permanently delete a client. Fails if the client still has documents.
GET list_contacts List contacts for one client. client_id is REQUIRED — contacts are always scoped to a single client. Returns an array of contact objects.
GET get_contact Retrieve a single contact by ID
POST create_contact Create a contact for a client. Empty fields inherit the client's value.
PUT update_contact Update a contact (same fields as create_contact).
DELETE delete_contact Delete a contact
GET list_articles List catalog articles (products/services). Filter with article_number, title, description, currency_code, unit_id, supplier_id. Returns an array.
GET get_article Retrieve a single article by ID
POST create_article Create a catalog article.
PUT update_article Update an article (same fields as create_article).
DELETE delete_article Delete an article from the catalog
GET list_invoices List invoices. Filters: client_id, contact_id, invoice_number, status (DRAFT/OPEN/OVERDUE/PAID/CANCELED — comma-separated OR), payment_type, from, to (YYYY-MM-DD), label, intro, note, tags, article_id. group_by (client/status/day/week/month/year) returns aggregated sums instead. Returns an array of invoice objects (all values are strings).
GET get_invoice Retrieve a single invoice by ID (includes combined taxes and totals)
POST create_invoice Create an invoice (always DRAFT). Line items may be embedded. Call complete_invoice afterwards to assign a number and render the PDF.
PUT update_invoice Update an invoice. Only DRAFT invoices can be edited. Items are managed via invoice-items, not here.
DELETE delete_invoice Delete an invoice with all its documents (PDFs), items and comments. Irreversible.
PUT complete_invoice Complete a DRAFT invoice: assigns the final invoice number, renders the PDF and moves the status to OPEN (or OVERDUE/PAID). Optional template_id.
POST email_invoice Send the invoice to the client by e-mail. SIDE EFFECT: sends a real e-mail. recipients must contain at least one of to/cc/bcc.
PUT cancel_invoice Cancel a completed invoice (status -> CANCELED)
PUT uncancel_invoice Undo the cancellation of an invoice
GET get_invoice_pdf Get the invoice PDF metadata and content. Returns { base64file, filename, mimetype, filesize } — decode base64file to obtain the PDF bytes.
GET list_invoice_items List line items of an invoice. invoice_id is required. Returns an array ordered by position.
GET get_invoice_item Retrieve a single invoice line item by ID
POST create_invoice_item Add a line item to an existing invoice (DRAFT only).
PUT update_invoice_item Update an invoice line item (same fields as create_invoice_item, without invoice_id).
DELETE delete_invoice_item Delete an invoice line item
GET list_invoice_payments List payments booked against invoices. Filters: invoice_id, from, to, type (payment type, comma-OR), user_id. Returns an array.
GET get_invoice_payment Retrieve a single invoice payment by ID
POST create_invoice_payment Book a payment for an invoice (invoice must be OPEN or OVERDUE). Set mark_invoice_as_paid to also flip the invoice to PAID.
DELETE delete_invoice_payment Delete an invoice payment
GET list_invoice_comments List comments/activity-log entries of an invoice. invoice_id required. Returns an array.
POST create_invoice_comment Add a comment to an invoice's activity log.
DELETE delete_invoice_comment Delete an invoice comment
GET list_invoice_tags List tags of an invoice. invoice_id required. Returns an array.
POST create_invoice_tag Attach a tag to an invoice.
DELETE delete_invoice_tag Remove a tag from an invoice
GET list_recurrings List recurring invoice templates. Filters: client_id, contact_id, name, payment_type, cycle. Returns an array of recurring objects.
GET get_recurring Retrieve a single recurring invoice template by ID
POST create_recurring Create a recurring invoice template that auto-generates invoices on a cycle.
PUT update_recurring Update a recurring invoice template (same fields as create_recurring).
DELETE delete_recurring Delete a recurring invoice template
GET list_recurring_items List line items of a recurring template. recurring_id required. Returns an array.
GET get_recurring_item Retrieve a single recurring line item by ID
POST create_recurring_item Add a line item to a recurring template.
PUT update_recurring_item Update a recurring line item (same fields as create_recurring_item, without recurring_id).
DELETE delete_recurring_item Delete a recurring line item
GET list_offers List estimates (offers/quotes). Filters: client_id, contact_id, offer_number, status (DRAFT/OPEN/WON/LOST/CANCELED/CLEARED — comma-OR), from, to, label, intro, note, tags, article_id. Returns an array.
GET get_offer Retrieve a single estimate by ID
POST create_offer Create an estimate/offer (always DRAFT). Complete it to assign a number and render the PDF.
PUT update_offer Update an estimate (DRAFT only; same fields as create_offer).
DELETE delete_offer Delete an estimate with all items and comments
PUT complete_offer Complete a DRAFT estimate: assigns the number, renders the PDF, moves status to OPEN. Optional template_id.
POST email_offer Send the estimate to the client by e-mail. SIDE EFFECT: sends a real e-mail.
PUT cancel_offer Cancel an estimate (status -> CANCELED)
PUT uncancel_offer Undo the cancellation of an estimate
GET get_offer_pdf Get the estimate PDF: { base64file, filename, mimetype, filesize } — decode base64file.
GET list_offer_items List line items of an estimate. offer_id required. Returns an array.
GET get_offer_item Retrieve a single estimate line item by ID
POST create_offer_item Add a line item to an estimate.
PUT update_offer_item Update an estimate line item (same fields as create_offer_item, without offer_id).
DELETE delete_offer_item Delete an estimate line item
GET list_confirmations List order confirmations. Filters: client_id, contact_id, confirmation_number, status (DRAFT/OPEN/CANCELED/CLEARED), from, to, label, intro, note, tags, article_id. Returns an array.
GET get_confirmation Retrieve a single order confirmation by ID
POST create_confirmation Create an order confirmation (always DRAFT).
PUT update_confirmation Update an order confirmation (DRAFT only; same fields as create_confirmation).
DELETE delete_confirmation Delete an order confirmation with all items and comments
PUT complete_confirmation Complete a DRAFT confirmation: assigns the number, renders the PDF, moves status to OPEN.
POST email_confirmation Send the order confirmation by e-mail. SIDE EFFECT: sends a real e-mail.
PUT cancel_confirmation Cancel an order confirmation (status -> CANCELED)
GET get_confirmation_pdf Get the confirmation PDF: { base64file, filename, mimetype, filesize } — decode base64file.
GET list_confirmation_items List line items of an order confirmation. confirmation_id required. Returns an array.
GET get_confirmation_item Retrieve a single confirmation line item by ID
POST create_confirmation_item Add a line item to an order confirmation.
PUT update_confirmation_item Update a confirmation line item (same fields as create_confirmation_item, without confirmation_id).
DELETE delete_confirmation_item Delete a confirmation line item
GET list_credit_notes List credit notes. Filters: client_id, contact_id, credit_note_number, status (DRAFT/OPEN/PAID/CANCELED), from, to, label, intro, note, tags, article_id, invoice_id. Returns an array.
GET get_credit_note Retrieve a single credit note by ID
POST create_credit_note Create a credit note (always DRAFT). Optionally reference a source invoice via invoice_id.
PUT update_credit_note Update a credit note (DRAFT only; same fields as create_credit_note).
DELETE delete_credit_note Delete a credit note with all items and comments
PUT complete_credit_note Complete a DRAFT credit note: assigns the number, renders the PDF, moves status to OPEN.
POST email_credit_note Send the credit note by e-mail. SIDE EFFECT: sends a real e-mail.
GET get_credit_note_pdf Get the credit note PDF: { base64file, filename, mimetype, filesize } — decode base64file.
GET list_credit_note_items List line items of a credit note. credit_note_id required. Returns an array.
GET get_credit_note_item Retrieve a single credit note line item by ID
POST create_credit_note_item Add a line item to a credit note.
PUT update_credit_note_item Update a credit note line item (same fields as create_credit_note_item, without credit_note_id).
DELETE delete_credit_note_item Delete a credit note line item
GET list_delivery_notes List delivery notes. Filters: client_id, contact_id, delivery_note_number, status (DRAFT/OPEN/CANCELED), from, to, label, intro, note, tags, article_id, invoice_id. Returns an array.
GET get_delivery_note Retrieve a single delivery note by ID
POST create_delivery_note Create a delivery note (always DRAFT). Often created from an invoice via invoice_id.
PUT update_delivery_note Update a delivery note (DRAFT only; same fields as create_delivery_note).
DELETE delete_delivery_note Delete a delivery note with all items and comments
PUT complete_delivery_note Complete a DRAFT delivery note: assigns the number, renders the PDF, moves status to OPEN.
POST email_delivery_note Send the delivery note by e-mail. SIDE EFFECT: sends a real e-mail.
GET get_delivery_note_pdf Get the delivery note PDF: { base64file, filename, mimetype, filesize } — decode base64file.
GET list_delivery_note_items List line items of a delivery note. delivery_note_id required. Returns an array.
GET get_delivery_note_item Retrieve a single delivery note line item by ID
POST create_delivery_note_item Add a line item to a delivery note.
PUT update_delivery_note_item Update a delivery note line item (same fields as create_delivery_note_item, without delivery_note_id).
DELETE delete_delivery_note_item Delete a delivery note line item
GET list_reminders List dunning reminders for overdue invoices. Filters: client_id, contact_id, invoice_id, invoice_number, status (DRAFT/OPEN/CANCELED), from, to, label, intro, note. Returns an array.
GET get_reminder Retrieve a single dunning reminder by ID
POST create_reminder Create a dunning reminder for an overdue invoice (always DRAFT). The reminder level escalates automatically based on prior reminders.
PUT update_reminder Update a dunning reminder (DRAFT only; same fields as create_reminder).
DELETE delete_reminder Delete a dunning reminder
PUT complete_reminder Complete a DRAFT reminder: assigns the number, renders the PDF, moves status to OPEN.
POST email_reminder Send the dunning reminder by e-mail. SIDE EFFECT: sends a real e-mail.
GET get_reminder_pdf Get the reminder PDF: { base64file, filename, mimetype, filesize } — decode base64file.
GET list_suppliers List suppliers. Filters: name, supplier_number, email, country_code, note, tags. Returns an array.
GET get_supplier Retrieve a single supplier by ID
POST create_supplier Create a supplier (vendor for incoming invoices).
PUT update_supplier Update a supplier (same fields as create_supplier).
DELETE delete_supplier Delete a supplier
GET list_incomings List incoming invoices (expenses / supplier bills). Filters: supplier_id, number, status (paid/unpaid/overdue), from, to, tags. Returns an array.
GET get_incoming Retrieve a single incoming invoice by ID
POST create_incoming Record an incoming invoice (expense) from a supplier.
PUT update_incoming Update an incoming invoice (same fields as create_incoming).
DELETE delete_incoming Delete an incoming invoice
GET list_incoming_payments List payments made against incoming invoices. Filter with incoming_id. Returns an array.
POST create_incoming_payment Book a payment against an incoming invoice.
DELETE delete_incoming_payment Delete an incoming payment
GET list_taxes List configured tax rates. Returns an array of tax objects (name, rate, is_default).
GET get_tax Retrieve a single tax rate by ID
POST create_tax Create a tax rate.
PUT update_tax Update a tax rate (same fields as create_tax).
DELETE delete_tax Delete a tax rate
GET list_units List units of measure (e.g. hour, piece). Returns an array of unit objects.
GET get_unit Retrieve a single unit by ID
POST create_unit Create a unit of measure.
PUT update_unit Rename a unit of measure.
DELETE delete_unit Delete a unit of measure
GET list_templates List document (PDF) templates. Filter with type (INVOICE, OFFER, ...). Returns an array.
GET get_template Retrieve a single document template by ID
GET list_email_templates List e-mail templates used by the email_* actions. Returns an array.
GET get_email_template Retrieve a single e-mail template by ID
GET get_settings Retrieve the account settings (default number ranges, texts, due days, currency, tax defaults, etc.).
GET list_users List employees/users of the account. Returns an array of user objects.
GET get_user Retrieve a single user by ID
GET list_countries List countries with their tax/currency configuration. Returns an array.
GET list_currencies List configured currencies. Returns an array.