๐Ÿ What's new in LedgerBee
Highlights
Approvers can see and edit the whole entry
Approvers now see the full journal entry they are approving and can change it. "Edit and approve" does both in one step, so the entry no longer has to be sent back and forth. The full approval history is kept across rounds, with the entry as it stood at each stage. Approval cards from Hivey now show on the Pending tab, and any missing required dimensions can be fixed right there.
Hivey chat can build any dashboard widget
You can ask the Hivey chat for any widget the dashboard builder offers, such as cash balance, overdue debtors, MRR, expenses or latest entries. The widget appears as a card, ready to add to a dashboard or to a new one. When data spans several periods, the chat now shows it as a chart first.
Split commitments and invoiced revenue by your own dimensions
The Commitment chart and the Total invoiced revenue chart on the dashboard can now be grouped by your own dimensions, such as department, location or project. Revenue that doesn't map to a dimension value appears as "Unallocated". Invoiced amounts are split the way they were booked, including credit notes.
Apply saved discounts to invoices and quotes
Invoices, quotes and order confirmations can now apply your saved discounts, on single lines or on the whole document. Each discount is checked against its products, customers, validity dates and currency. The applied discounts and the total saved are shown on the document. A quote warns you if a discount it uses ends before the quote does.
โœจ Improvements
  • E-invoices and PDFs now show the named discounts a document used, with a "Total discounted" row on PDFs. Credit notes show them as credits, and the composer preview matches.
  • Recurring bank-fee rules can store a dimension value for each dimension the fee account requires, and every fee they post carries those values. The rule editor warns when a required dimension is missing, and the rules list shows the stored values.
  • Hivey now returns customers and suppliers with the same rows, order and totals as the pages show. It reports the same validation messages for invalid filters and links result cards to the matching filtered list.
  • Quick booking of bank lines now shows which dimensions each line requires and marks the line that is missing one. "Apply all" and copy-down now include dimension values.
  • You can reject several Hivey proposals in one go. Rows leave the queue straight away, and a notice shows how many succeeded and failed. Giving a reason is optional.
  • Payments now ask for the dimensions required by the bank and customer or supplier balance accounts. Quick booking, the journal entry form and Hivey approvals mark what is missing, and booking is refused until it is filled in.
  • The approval history and the event log now show as one timeline. It includes approval comments, send-back reasons and earlier versions of the entry. Partial approvals read "Approved, waiting for the other approvers".
  • Credit notes now give back the discounts of the invoice they credit. For example, crediting 2 Widgets at 1,000 with a 10% line discount returns 900. Document discounts are spread across the credited lines and VAT rates.
  • Drafts of invoices, quotes and order confirmations now preview which discounts would apply, and what they are worth, before you save. Discounts that can't be applied are listed with the reason.
  • Subscriptions that Fenerum invoices together are now imported as a billing group and stay on one invoice. You can review the groups in the import preview and skip any you want to keep separate.
  • A discount can be limited in total and per customer. Booking an invoice that would exceed a limit is refused and the invoice stays a draft. The discount check shows how many uses remain, and a full credit note returns the uses.
  • Hivey chat is now available to all companies as a preview. The chat is clearly marked, you can send feedback from it, and requests to change data explain that writing isn't available yet.
๐Ÿ› Bug fixes
  • Foreign suppliers are now correctly attributed to their country of origin, so purchases from abroad are tracked properly in VAT returns and not treated as Danish.
  • VAT codes now use correct rates, preventing incorrect bookings from recurring in new transactions.
  • Payments to invoices across multiple accounting years are now correctly recorded as settled, and re-importing e-conomic company data preserves all settlements that haven't changed in the source system.
  • Searching Booked Entries now finds entries by supplier or customer name on all three tabs, and in the inbox's "Attach to a booked entry" drawer.
  • Small currency exchange differences on paid invoices can now be cleanly settled to an account, without reversing the payment.
  • Settling an invoice that has only a small amount left in Danish kroner no longer asks for an exchange-rate check. Settlement amounts now follow your number-format preference.
  • Import error reports now point to the correct row in your file, even with title or blank rows, and editing Excel previews during import now works.
  • Bank-line proposals now show the full booked entry and its documents, so reviewers can make better-informed reconciliation decisions.
  • Invoices whose inbox rule sets a required dimension are now booked automatically instead of being left in the inbox.
  • Paid invoices with a small amount left can now be matched against their offsetting entries when the selection nets to zero in the company's currency.
  • Deleting a product used by a quote or order confirmation now explains that it is in use and names the documents, and suggests archiving it instead.
  • Supplier invoices with US-format dates (MM/DD/YYYY) are now imported with the correct service periods and posting dates.
  • VAT rates now stay exactly as you type or import them, so 5.26% stays 5.26%.
  • Invoices from companies with no bank account on file no longer show a "Pay by bank transfer:" line.
  • Reversing an invoice now gives its redemption-limited discount use back, so the discount can be used again on the corrected invoice.
  • Hivey chat now replies in the language you write in and includes the total amount in overdue-invoice answers. It also says a widget is built when its period has no figures, and MRR charts no longer show months beyond the available data.
๐Ÿ”ง For developers & integrators
โš ๏ธ Breaking changes
  • MCP
    list_counterparties
    now requires a
    view
    parameter (
    customers
    or
    suppliers
    ). Calls without it now fail, and the unified search and supplier embedding search are removed from this tool.
  • POST /public-api/draft-journal-entries
    now validates required dimensions on payment drafts. Booking is refused if the bank or balance accounts require dimensions the payment lacks.
  • MCP
    get_saas_metrics
    now refuses a granularity given without a date range.
๐Ÿ”Œ MCP tools
  • list_counterparties
    (changed): an agent can ask for the customers or suppliers list with the same filters, validation, rows and totals as the pages (filters such as
    customersQ
    ,
    status
    ,
    country
    ,
    tags
    ,
    currency
    ,
    paymentTermsMin
    and
    paymentTermsMax
    ).
  • get_overdue_invoices
    (changed): an agent can now ask for the total overdue amount, and the scope of the
    chaseFirst
    ranking is clarified.
  • get_saas_metrics
    (changed): an agent gets MRR figures without unrequested projected months, and granularity now needs a date range.
๐Ÿ”— API & webhooks
  • POST
    and
    PUT /bank-recurring-posting-rules
    accept and return
    tagIds
    (array of dimension value IDs).
    GET /bank-recurring-posting-rules
    returns it too.
  • GET /open-entries
    accepts the query parameter
    includeSettledWithRemainder
    to list paid invoices that still have a remainder. Matching them can return the new error codes
    SETTLEMENT_SETTLED_DOCUMENT_REQUIRES_BALANCED_MATCH
    and
    SETTLEMENT_SETTLED_DOCUMENT_POSTING_DATE_NOT_AFTER_STAMP
    .
  • DELETE /api/v1/products/:productId
    and
    DELETE /v1/products/:id
    now return
    409 PRODUCT_IN_USE
    instead of a server error.
    details.documents
    lists up to ten blocking quotes or order confirmations as
    {kind, number, id}
    , and
    documentCount
    gives the total. Other foreign-key conflicts return the same 409 with an empty list.
  • GET credit note endpoints now return line-level discounts, document-level discounts spread across VAT rates and tax categories, and
    totalDiscounted
    , matching invoice reads.
  • Invoices, quotes, order confirmations and credit notes accept
    discountIds
    (array) on lines and on the document for
    POST
    and
    PUT
    .
- Single-document responses return
appliedDiscounts
per line, plus
documentDiscounts
and
totalDiscounted
. List responses omit them.
- On update, omitting
discountIds
keeps the existing discounts,
[]
clears them, and
null
is refused with 400.
- Discounts that don't apply are rejected with a coded reason, and quote saves can return
warnings
when a discount ends before the quote expires.
-
POST /v1/credit-notes/from-invoice/{invoiceId}
returns the invoice's discounts. Other credit-note creation cannot apply discounts of its own.
  • New endpoint
    POST /v1/subscriptions/{id}/product-changes
    changes a subscription's quantity or price from a chosen date, without cancelling it.
- The request takes
effectiveDate
, product lines with optional
quantity
,
price
,
description
and
customPrice
overrides, and an optional
keepOmittedLineFields
flag.
- The subscription keeps its id, and a future-dated change appears in the scheduled changes.
  • GET /v1/discounts/{discountId}/applicability
    returns the new fields
    remaining
    and
    remainingForCustomer
    , and the new reasons
    maxRedemptionsReached
    and
    maxPerCustomerReached
    .
  • GET /v1/discounts/{discountId}/applicable
    now excludes discounts whose limits are exhausted for the requesting customer.
  • Booking refusals can now return
    DISCOUNT_REDEMPTION_LIMIT_REACHED
    and
    DISCOUNT_CUSTOMER_REDEMPTION_LIMIT_REACHED
    , each with the limit value and the current count.