tools/call over
POST /dinero/mcp. The connector is connected through OAuth (Visma Connect; see
Forbind Dinero).
Endpoint:
https://mcp.consile.ai/dinero/mcp. Dinero is its own named connector
with only its own tools. Tool names are namespaced dinero__<tool> in
Claude/ChatGPT; the bare names are used here for readability.Shared conventions
organizationId
Dinero auth is user-based, so almost every tool requires anorganizationId.
Get the integer id (and the isPro flag) from list_organizations; there is no
single “selected organisation” stored.
The Dinero organisation id from
list_organizations. Required on every
org-scoped tool (noted per tool below where it is the only argument).Pagination
List tools come in two shapes. Tools backed by a Dinero collection endpoint return an envelope; tools that slice a bare array return a flat page.0-based page index.
Rows per page.
Filters & dates
On supported list tools, return only records changed at/after this timestamp. Use
it for incremental pulls.
Free-text filter values cannot contain a single quote (
') — Dinero’s filter
syntax wraps the value in single quotes with no escape, so such a clause is
rejected with a friendly error. Date ranges (startDate/endDate,
from/to) must be passed as a pair.Read-via-POST calculators
Two tools (calculate_invoice_totals, preview_invoice_reminder) issue a POST to
a Dinero …/fetch endpoint. They are read-only: they compute a result for a
prospective input and persist nothing upstream.
Organisations & reference
| Tool | Description | Key arguments | Returns |
|---|---|---|---|
list_organizations | Dinero organisations the connected user can reach, with the id every other tool needs and the isPro flag. | (none) | { count, organizations[] } (id, name, vatNumber, countryKey, isPro, …) |
validate_connection | Connectivity/credential health check; lists reachable orgs (works without Pro). | (none) | { connected, organizationCount, organizations[] } |
list_accounting_years | The org’s accounting years with fromDate/toDate and the year name used by the report tools. | organizationId | { count, years[] } |
list_countries | Country keys Dinero accepts on contacts (account-global). | search? (client-side) | { count, countries[] } |
list_vat_types | The org’s VAT types/codes, to interpret vatCode on accounts and entries. | organizationId | { count, vatTypes[] } |
get_sales_settings | Default invoicing settings (default account, payment terms, reminder fee/interest, default template). | organizationId | sales-settings object |
Bookkeeping & accounting
The four report tools are Dinero’s only balance source. They take no date range — balances are whole-year totals keyed by the accounting-yearname (from
list_accounting_years). They share the same arguments.
Accounting year name as Dinero returns it (e.g.
"2025"), from
list_accounting_years.| Tool | Description | Key arguments | Returns |
|---|---|---|---|
list_chart_of_accounts | Entry accounts with VAT code and category. Rows carry no balance — use the report tools. | organizationId, category?, accountNumberFrom?, accountNumberTo?, includeHidden?, page, pageSize | { items, totalCount, page, pageSize, hasMore } |
list_deposit_accounts | Deposit (bank/Stripe/MobilePay) accounts incl. default flag. | organizationId, includeHidden?, includeBankDetails? | { count, accounts[] } |
get_saldo_balance_report | Saldobalance: per-account year totals for all accounts (P&L + balance sheet). The workhorse for balance questions. | report args | { accountingYear, count, rows[] } (accountNumber, accountName, amount) |
get_result_report | Resultatopgørelse (P&L): income/expense accounts with year totals. | report args | { accountingYear, count, rows[] } |
get_balance_report | Balance sheet: asset & liability accounts at booked position. | report args | { accountingYear, count, rows[] } |
get_primo_balance_report | Opening (primo) balances per account. | report args | { accountingYear, count, rows[] } |
get_account_balance | Year-total balance for specific account number(s) (fetches the saldo report, returns only those rows). | organizationId, accountingYear, accountNumbers (1–20 ints) | { accountingYear, accounts[], notFound[] } |
list_entries | Posted bookkeeping entries for a date range within one accounting year. The discovery path for purchase/manual voucher guids. | organizationId, fromDate, toDate, includePrimo?, accountNumber?, voucherType?, page, pageSize | { items, totalCount, page, pageSize, hasMore } |
list_entry_changes | Entries added in a window of ≤31 days (filters on added date) — incremental follow-up to list_entries. | organizationId, changesFrom, changesTo (≤31 days later), includePrimo?, page, pageSize | { items, totalCount, page, pageSize, hasMore } |
Contacts
Dinero keeps one merged customer/supplier register. The debtor/creditor split is only onget_contact, never on the list.
| Tool | Description | Key arguments | Returns |
|---|---|---|---|
list_contacts | Search/list the merged contact register. | organizationId, name?, email?, phone?, vatNumber?, eanNumber?, externalReference?, isPerson?, changesSince?, deletedFilter?, page, pageSize | { items, pagination } |
get_contact | Full single contact incl. isDebitor/isCreditor, SE/P numbers, preferred language/currency. | organizationId, contactGuid | contact object |
list_contact_notes | Notes on a contact (full text, author, timestamps). | organizationId, contactGuid, deletedOnly?, page, pageSize | { items, pagination } |
get_contact_state_of_account | Kontoudtog: summed income/expenses + dated entries with a running balance. hideClosed=true = open-items view (“what does this customer owe?”). | organizationId, contactGuid, from?, to?, hideClosed?, maxEntries? (1–500) | { contactGuid, income, expenses, entryCount, truncated, entries[] } |
download_contact_state_of_account_pdf | The kontoudtog as a PDF (base64). | organizationId, contactGuid, from?, to?, hideClosed? | { contactGuid, fileName, mimeType, base64 } |
Invoices & reminders
| Tool | Description | Key arguments | Returns |
|---|---|---|---|
list_invoices | List/search invoices. status is a 5-value filter (Draft/Booked/Paid/OverPaid/Overdue). Drafts ignore the date filter. | organizationId, status?, startDate?/endDate?, freeTextSearch?, contactGuid?, externalReference?, descriptionContains?, changesSince?, deletedOnly?, sort?, sortOrder?, page, pageSize | { items, pagination } |
list_invoices_overdue | Outstanding receivables: invoices past payment date. | organizationId, includeNotYetDue?, page, pageSize | { items, pagination } |
get_invoice | Full single invoice: product lines, totals/VAT, FIK code, mailout status. | organizationId, invoiceGuid | invoice object |
download_invoice_pdf | Invoice PDF (base64). PDFs exist only for booked invoices. | organizationId, invoiceGuid | { invoiceGuid, fileName, mimeType, base64 } |
list_invoice_payments | Payments on an invoice + paid/remaining amounts. | organizationId, invoiceGuid | payments object |
calculate_invoice_totals | Read-via-POST calculator: compute totals/VAT/payment date for a prospective set of lines. Persists nothing. | organizationId, productLines[], contactGuid?, date?, currency?, … | computed totals object |
list_invoice_mailouts | Delivery/engagement history for an invoice (received/opened/bounced, download count). | organizationId, invoiceGuid, includeSms?, changesSince? | { count, mailouts[] } |
list_invoice_reminders | All reminders (rykkere, max 3) for one booked invoice: fee, interest, accumulated fees. | organizationId, invoiceGuid, changesSince? | { count, reminders[] } |
get_invoice_reminder | One reminder with full fee/interest breakdown incl. Danish legal text. | organizationId, invoiceGuid, reminderId | reminder object |
download_invoice_reminder_pdf | A reminder as PDF (base64). | organizationId, invoiceGuid, reminderId | { …, fileName, mimeType, base64 } |
get_next_invoice_reminder | Preview the next reminder Dinero would generate for an overdue invoice. Persists nothing. | organizationId, invoiceGuid | reminder preview object |
preview_invoice_reminder | Read-via-POST calculator: reminder preview for a chosen date + fee/interest toggles. Persists nothing. | organizationId, invoiceGuid, date, withFee, withInterestFee, withCompensationFee, withDebtCollectionWarning | reminder preview object |
Sales: credit notes & trade offers
| Tool | Description | Key arguments | Returns |
|---|---|---|---|
list_sales | All sales vouchers in one feed — invoices AND credit notes (type tells them apart). | organizationId + same filter surface as list_invoices | { items, pagination } |
list_credit_notes | List sales credit notes (kreditnotaer). | same filter surface as list_sales | { items, pagination } |
get_credit_note | Full single credit note incl. creditNoteFor (the credited invoice guid). | organizationId, creditNoteGuid | credit note object |
download_credit_note_pdf | Booked credit note as PDF (base64). | organizationId, creditNoteGuid | { creditNoteGuid, fileName, mimeType, base64 } |
list_credit_note_payments | Payments/settlement of a booked credit note. | organizationId, creditNoteGuid | payments object |
list_credit_note_mailouts | Delivery history for a credit note. | organizationId, creditNoteGuid, changesSince? | { count, mailouts[] } |
list_trade_offers | List/search trade offers (tilbud). No server-side status filter — status filters the returned page client-side. | organizationId, status?, contactNameContains?, descriptionContains?, externalReference?, currency?, number?, date?, freeTextSearch?, changesSince?, deletedOnly?, sort?, sortOrder?, page, pageSize | { items, pagination } |
get_trade_offer | Full single trade offer: lines, totals, status, history timeline, generatedVouchers. | organizationId, tradeOfferGuid | trade offer object |
download_trade_offer_pdf | A trade offer as PDF (base64). | organizationId, tradeOfferGuid | { tradeOfferGuid, fileName, mimeType, base64 } |
list_trade_offer_mailouts | Delivery log for a trade offer. | organizationId, tradeOfferGuid, includeSms?, changesSince? | { count, mailouts[] } |
Purchases, products & files
Dinero has no list endpoint for purchase vouchers, purchase credit notes or manual vouchers — they are fetched by guid. Discover guids vialist_entries
(with a voucherType filter), get_purchase_vouchers_by_file, or known references.
| Tool | Description | Key arguments | Returns |
|---|---|---|---|
get_purchase_voucher | One purchase voucher (køb) by guid: status, dates, contact, lines, totals, attached fileGuid. | organizationId, voucherGuid | voucher object |
get_purchase_voucher_payments | Payments on a credit purchase voucher / purchase credit note. | organizationId, voucherGuid | { count, payments[] } |
get_purchase_vouchers_by_file | Reverse lookup: fileGuid → guid(s) of purchase voucher(s) referencing it. | organizationId, fileGuid | { fileGuid, voucherGuids[] } |
get_purchase_credit_note | One purchase credit note by guid. | organizationId, creditNoteGuid | voucher object |
get_manual_voucher | One manual voucher (kassekladde) by guid: lines, balancing accounts/VAT, FX, booking metadata. | organizationId, voucherGuid | manual voucher object |
list_products | The product register (varekartotek) with prices, units, account mapping. | organizationId, search?, productNumber?, externalReference?, changesSince?, deletedOnly?, page, pageSize | { items, pagination } |
get_product | One product by guid (incl. the comment field the list omits). | organizationId, productGuid | product object |
list_files | The file archive (uploaded receipts/docs): name, extension, size, upload date/user, linked vouchers. | organizationId, extensions?, uploadedAfter?, uploadedBefore?, fileStatus?, page, pageSize | { count, hasMore, files[] } |
download_file | Download an archive file (receipt image/PDF) as base64. Capped at 6 MB. | organizationId, fileGuid | { fileGuid, base64 } |
list_document_attachments | Attachments bound to a sales document (invoice/trade offer/credit note). | organizationId, documentGuid | { documentGuid, count, attachments[] } |
Code examples
Error contract:
401 → reconnect required (AccessTokenExpiredError); 403 →
no Dinero Pro or no access to that org (DineroProRequiredError); 429 → rate
limit (≈100 requests/min/org; retried once, then DineroRateLimitError); 480
→ a deprecated Dinero endpoint. 4xx responses are never retried. See
Errors & limits.