Changelog

Follow up on the latest improvements andΒ updates.

RSS

🐝 What's new in LedgerBee
Highlights
Aiia bank connection on its own page
Aiia now has its own page under System β†’ Integrations. Connecting opens Aiia in the same tab and brings you back to that page inside the normal app, not a separate tab. You tick the accounts to link and choose each account's ledger on the same row, and one save does both. Accounts that are already linked are marked and can't be linked twice. Amounts and dates follow the app's own formats. A "Manage access at Aiia" button opens Aiia's own page where you can manage your consent.
BankIntegration.dk status page
The BankIntegration.dk page is now a full status page. It shows whether the connection is active, how many accounts are syncing and when the last sync ran. The accounts you've added are listed with their ledger and last sync, and you can switch each one off and on from its row. The add-account form is now on the page and takes up to 10 accounts at once. Each account is checked separately, so accepted accounts are added even if another is refused. A refused row stays in the form with the bank's answer, and an account that's already in your books is flagged before anything is sent. The side drawer for adding a single account is gone.
Payment reminder history in Hivey
You can now ask Hivey whether an invoice received payment reminders, including invoices that are already paid. Hivey lists each reminder with its date, whether it was an automatic step or one sent by hand, and any fee, interest or pay-by date. It also shows whether each reminder was delivered, opened or bounced, where the reminder flow stands today and when the next reminder is due. You can ask by invoice number or by customer.
✨ Improvements
  • The Connect Bank Account menu on the Bank Accounts page now lists every bank you can use, even before you've connected one, and each entry opens that bank's own page.
  • The connection-lost alert now names the bank and covers all five banks. Its Reconnect button opens that bank's page, and accounts you've switched off are no longer reported as having a lost connection.
  • In the bank marketplace, each bank has one consistent button, Connect or Configure, and the onboarding "After go-live" step lists all five banks.
  • Bank setup wording is more consistent in English and Danish, for example "Accounts to sync" and "Reconnect or sync more accounts".
  • Cancel now sits on the far left of confirmation dialogs, forms and drawer footers. View-only drawers and several setup drawers say "Cancel" instead of "Close" or "Done".
  • Editing a discount that open documents use now asks for confirmation first, and Cancel keeps the drawer open with nothing lost. The discount's Active and Requires a code switches save on change but ask first, and Cancel puts the switch back.
  • The product detail drawer stays open on the saved values after you save, and a refused save takes you to the Details tab where the error is shown.
  • The price index drawer stays open after you schedule an index, with a fresh form ready for the next one.
  • Errors on purchase order lines now wrap inside the table cell, and the "..." menu in a drawer runs its command only after the menu has closed. The payment-link drawer now opens once the provider picker has finished closing, and screen readers announce the field label on select fields without search.
  • Hivey now answers "where do I find this?" with the menu path the app shows, in your language, for example "Regnskab > Kassekladde". The path is a link that opens the page.
  • Toggle buttons, fields, checkboxes, radio buttons and switches have clearer selected, hover and focus states, including on dark panels. Cards in the customer portal now look the same as in the main web app.
πŸ› Bug fixes
  • A customer payment entered in the inbox booking panel before the customer is picked now balances once the receivables line gets its account, so it can be saved instead of showing "Unbalanced".
  • Picking a different customer on a payment linked to invoices now clears the earlier customer's invoice lines, and re-picking the same customer keeps them.
πŸ”§ For developers & integrators
πŸ”Œ MCP tools
  • get_invoice_reminders
    (new): an agent can ask which payment reminders an invoice, or a customer's invoices, received, when each went out, its delivery status, fees, interest and pay-by date, and where the reminder flow stands and when the next reminder is due.
🐝 What's new in LedgerBee
Highlights
AI assistants can correct and reconcile your books
A connected AI assistant can now fix mistakes the way a bookkeeper would. It can reverse a booked entry, reverse and correct it in one step, or reclassify it, and it can preview the result first. Reversals stay linked to the original entry. A second reversal of the same entry is refused, and reversing a payment frees the invoice it had settled. Assistants can also settle and unsettle open items, link bank lines and credit notes to the entries you choose, and create or undo bank reconciliations. They can compare bank and ledger, find duplicate bank postings, and read card and tax account statements and payroll runs. Drafts that mirror a posted entry, book a payment in the wrong direction or lack a payables or receivables line are now refused with a pointer to the right action.
Ask Hivey about your bill payments
Hivey can now tell you whether a bill payment has been sent. It says where each one stands: sent to the bank, still being processed by the bank, not yet sent, or completed. Ask for "my bill payments" and a compact payments table appears beside the answer. It has the same search, account filter, sorting, paging and export as the Payments page, and clicking a row opens the payment. Access follows the Payments page's permissions and licence rules.
Client tags for advisor firms
Advisor firms can create their own client tags and put them on clients from the clients overview. You can tag one client at a time or select several at once, including tracked clients who have no books on LedgerBee. Tags show as removable chips in a new Tags column, and you can filter the overview to clients carrying any of the selected tags. A dialog lets you create, rename and delete tags, and deleting a tag that clients carry asks you to confirm and says how many clients will lose it. Tags are private to each firm and don't affect health signals, close checklists or financial figures.
✨ Improvements
  • Hivey now says whether each bank line's money came in or went out, so transfers out are no longer described as coming from the counterparty. Bank-line lists show whether each line is reconciled, and a line flagged without a reconciliation behind it is no longer counted as matched.
  • Hivey can also say which bank accounts can be used to send payments, and whether each is linked to a ledger account.
  • The Bill payments page has a new "Address incomplete" toggle next to "All Payments". It lists unsent cross-border payments whose recipient address is missing a part the bank requires from 15 November 2026, and shows how many there are. It only appears when at least one such payment exists.
πŸ› Bug fixes
  • Connecting to skat.dk on the Tax & VAT page now works for companies whose VAT reporting frequency changed during the year. The VAT periods and the Register VAT step now appear, and if Skat's answer still can't be read, the page shows a clear message in English and Danish.
  • The cash-flow forecast now includes overdue customer invoices and supplier bills in the current month. Partial payments reduce the open amount, and overdue credit notes reduce expected receipts.
  • When the company moves money from its main bank account to its own card account, Hivey now suggests booking it to the card account instead of an expense account.
  • The trial balance split by a dimension, such as Department, now shows draft entries, scheduled revenue recognition and planned depreciation under the dimension value they will carry once booked, instead of under Unassigned.
  • A card purchase and its receipt are now booked once, whichever arrives first. A receipt forwarded after the cardholder uploaded it in Pliant is filed on the card charge, and a receipt that arrives before its charge is attached when the charge syncs.
  • When a receipt is approved for a supplier the company doesn't have yet, the supplier is created from the receipt details, and the approver sees this step before approving.
  • With card-receipt auto-booking on and supplier auto-booking off, a receipt that would create a new supplier now waits for a person instead of being booked unattended.
  • The rows-per-page picker on the Bill payments page now changes how many payments are listed (15, 25, 50 or 100), and your choice is remembered after a reload.
  • A bank line that pays an invoice together with its reminder interest or fee is now proposed as one match, and approving it marks both the invoice and the reminder fee as paid.
πŸ”§ For developers & integrators
πŸ”Œ MCP tools
  • reverse_journal_entry
    (new): can I reverse, batch-reverse, reverse-and-correct or reclassify a booked entry, and what would a reversal look like first?
  • get_journal_entry
    (changed): with
    include=['corrections']
    it now lists the entries that correct it.
  • create_draft_journal_entry
    (changed): it now refuses drafts that mirror a posted entry, book a payment in the wrong direction, or lack a payables or receivables line, and returns a reason code.
  • list_open_entries
    (new): which open items are available to settle?
  • get_open_entry
    (changed): with
    include=['allocations']
    it also shows how an open item has been allocated.
  • settle_open_entries
    (new): can these open items be settled against each other?
  • unsettle_entries
    (new): can an earlier settlement be undone?
  • link_credit_note
    (new): can a credit note be linked to the invoice it corrects?
  • link_bank_transaction
    (new): can a bank line be linked to a ledger entry I choose?
  • unlink_bank_transaction
    (new): can a wrong bank line link be removed?
  • create_ledger_account
    (new): can a new chart-of-accounts entry be created?
  • update_ledger_account
    (new): can an existing chart-of-accounts entry be changed?
  • settle_vat_period
    (new): can a VAT period be settled?
  • list_bank_accounts
    (changed): with
    view='tie_out'
    it compares bank and ledger per period. Each row also gains
    canSendPayments
    and
    hasLedgerAccount
    (
    null
    without the accounts-read scope).
  • find_duplicate_bank_postings
    (new): which bank postings look like duplicates?
  • get_ledger_account
    (changed): movements now carry bank ids.
  • get_card_account_statement
    (new): what does the statement for a company card account show, including top-ups?
  • get_tax_account_statement
    (new): what is the balance of a tax account? SKAT provides balance only.
  • list_payroll_runs
    (changed): it now includes Salary.dk runs with posting lines, and refuses clearly when no payroll system is connected.
  • get_bank_transaction
    (changed):
    direction
    (
    INCOMING
    ,
    OUTGOING
    or
    null
    ) is now derived from the amount's sign, and
    isReconciled
    now requires a reconciliation behind the flag.
  • list_bank_transactions
    (changed): each row gains
    direction
    and
    isReconciled
    , and the
    matched
    filter now requires a reconciliation behind the flag.
  • list_bank_payments
    (new): which bill payments exist, with their status and payment date, filtered by search, bank account, status and payment-date range? Payments made outside LedgerBee are not included.
🐝 What's new in LedgerBee
Highlights
Bank connection expiry warnings
LedgerBee now warns you 14 days before a bank connection's consent runs out, so you can reconnect before any bank lines go missing. The people who already get "Bank connection lost" notices receive one email and in-app notice per expiring account. The Bank accounts page shows an amber banner with a "Reconnect now" button, and affected accounts show their expiry date in the table. Once you reconnect, the warning clears and the new expiry date takes over. Aiia connections show an approximate date, and Nordea connections get no warning.
Planned depreciation on the trial balance
The trial balance and the period trial balance have a new "Include planned depreciation" switch, separate from "Include unposted". With it on, depreciation still scheduled on active fixed assets is added to the figures, dated on each month end. You can see how the books will look once depreciation is booked, and nothing is booked. Charges that can't be posted, such as those in a closed period, are listed in the warnings banner. The account card, exports and emails follow the same switch, and an exported file's top line says whether it includes drafts, planned depreciation or both.
Purchase invoice one click from every fixed asset
Each fixed asset now shows the invoice behind its cost and the journal entry it is booked on, and the invoice opens in one click. Assets added by hand can have an invoice attached later, and every attach or change is recorded in the asset's history. Assets also warn you when the entry puts less on the asset account than the asset's cost, or when the invoice names a different supplier. An invoice that an asset relies on can't be deleted until another one is attached.
Ask a supplier about their statement
When you check a supplier statement in the inbox, a new button lets you ask the supplier about every line that needs their action. It covers invoices you never received, amounts that differ, and open entries missing from the statement. The lines are grouped by question and all ticked by default, and you can untick any of them. Pick the recipient and language, and the request goes out as one email. The send is recorded on the supplier, on the statement and in Email history.
✨ Improvements
  • Hivey can now propose attaching a forwarded card receipt to its card charge. Nothing is booked until a person approves, and a rejected upload sends the receipt back to the inbox. A new switch, "Receipts for card charges" (off by default), lets Hivey approve these proposals automatically within your amount ceiling.
  • Hivey can answer whether an invoice is paid, for both sales invoices and supplier bills. It shows the payments, credit notes and settlements recorded against the invoice and any unmatched bank lines that could pay it. An invoice number is also found by its trailing digits.
  • Booked entries search now requires every word you type to match, and it finds entries by amount, for example
    1.250,00
    also finds a credit note of -1.250,00. Foreign-currency entries are found by either amount, and the exports follow the search.
  • You can now create a depreciation profile from the new-asset drawer. The new profile is selected automatically, and anything you've already typed is kept.
  • Trial balance and report rows now say what moved them: "Draft", "Recognition" or "Planned depreciation". When several sources moved one row, it shows the first label plus a count. The help-center articles now explain both report switches.
  • Firm admins can create their own API clients under Firm settings β†’ Connected apps & API, with scopes, an IP whitelist and rotatable secrets. Connected apps can now be renamed and have their scopes narrowed, and renaming no longer signs out the app's existing access.
  • Supplier search now finds a supplier by phone number, however it is formatted, in the list and in its exports.
  • Hivey now names the page you're on in your own language, matching the menu and tab names you see. Each Hivey answer has a thumbs up and thumbs down with an optional comment. MRR forecasts now draw as their own "Projected MRR" line.
πŸ› Bug fixes
  • Hivey suggestions on the bank reconciliation page now show for every bank account, and Refresh shows a spinner until the page has reloaded.
  • Importing a large budget now completes and saves every cell.
  • Emailing an account card now sends the same file as its download, including drafts marked "Kladde" and planned depreciation marked "Afskrivning (planlagt)".
  • The booking panel for an invoice from a new supplier now shows the creditor line and reads Balanced, without the red "not balanced" banner.
  • Create Supplier now keeps a foreign VAT number's country prefix and uses the invoice's currency.
  • Invoice VAT rates that the printed figures confirm are no longer flagged as doubtful.
  • Purchases from Danish suppliers under domestic reverse charge are now booked on the ordinary Danish cost account instead of the EU goods account, and keep their reverse-charge VAT code.
  • The inbox booking panel now pre-fills the goods reverse-charge code for foreign goods invoices.
  • Invoices with mixed VAT treatments now open split by their own lines, and "Split into lines" starts from the invoice's lines.
  • The booking panel warns when the VAT the entry deducts differs from the VAT printed on the invoice.
  • A supplier invoice split across three or more accounts for a new supplier now saves with its payables line and books as balanced.
  • Foreign payments missing parts of the recipient's address can now be sent until 15 November 2026. A failed payment can be resolved as "never sent" even when no bank line matches it.
  • Unsent foreign payments with an incomplete address now show an "Address incomplete" label.
  • Paying a bill that already has a payment now explains that you need to cancel or resolve the existing payment first.
  • Booking a line from the bank Suggestions tab no longer ends on "Something went wrong". The line leaves the list straight away, and ticking bank lines responds faster.
  • Subscription plan descriptions can now hold up to 2,000 characters, so an agreement's terms can be pasted in and saved as written.
  • Entering a mistyped password while setting up single sign-on now shows an inline "Invalid credentials" message under the field and leaves you signed in.
πŸ”§ For developers & integrators
⚠️ Breaking changes
  • POST /v1/subscriptions/plans
    : the interval-discount
    description
    is now limited to 255 characters. A longer value is refused with a 400 validation error.
πŸ”Œ MCP tools
  • get_invoice_payment_status
    : new. An agent can ask whether a sales invoice or supplier bill is paid, given an invoice number, an invoice id, or a customer or supplier. The tool returns each invoice's open amount, paid date, recorded payments and settlements, and any unmatched bank lines that could pay it.
  • list_counterparties
    : changed. Its description now says that supplier search covers phone numbers, and no longer says phone is skipped. Arguments and results are unchanged.
πŸ”— API & webhooks
  • POST /v1/subscriptions/plans
    : the plan
    description
    field now accepts up to 2,000 characters. A longer value returns a 400 validation error.
  • Firm-owned API clients can now sign in with client credentials and call the advisor public API as the firm. Their tokens carry the firm and no company.
- Company endpoints refuse firm tokens with
403 PUBLIC_API_HOLDER_MISMATCH
.
- Token exchange for a firm client signs the firm's id and name.
- An inactive firm gets
invalid_client
at token exchange. Requests with a firm token, including already-issued tokens, get
firm_inactive
once the firm is switched off.
- An advisor token with a user but no grant gets
invalid_token
. A grant token whose user is no longer active gets
consenting_user_inactive
.
- The
advisor-*
scopes can be held only by firm clients. Company clients and company grants refuse them.
🐝 What's new in LedgerBee
Highlights
Hivey shows your Bank accounts and Trial balance
Ask Hivey which bank accounts you have, or for a trial balance, and the answer now shows the same list or report you would see on the page. You get the page's columns, filters, search and downloads. Bank account numbers and IBANs are never shown in the chat. Hivey can also adjust an open trial balance for you, for example "include the unposted drafts too". You can open the result on the page with the same filters.
A calmer bank reconciliation page
Suggestions, journal entries and bank lines now sit in tables that hold still, with fixed column widths and no sideways scrolling. Opening an entry or a bank line shows its details in a drawer without leaving the page. For companies that Hivey reconciles, the Suggestions tab lists Hivey's proposals with their status (Ready, Needs review or Blocked). You can approve, review or reject them right there. The page also has a new "Last and this month" date preset.
Budgets in Excel
Export a budget to Excel, edit it offline and upload the same file back. Before anything changes, you see a before-and-after preview of every figure and a plain-language list of any rows that can't be used. Nothing is saved until you confirm. A history of past uploads shows who published each one and when, and you can download each file again.
Choose a subscription's discounts
New subscriptions show the customer's applicable discounts in a prefilled Discounts card in the setup wizard, and you decide whether to keep them. Invoice previews list each discount with a subtotal after discounts. When you edit products, you can add or remove discounts and change their end dates. Limited-period discounts start counting from the first billable period after a free trial.
✨ Improvements
  • Lists that Hivey shows (customers, journal drafts, trial balance, invoices) now open on the same columns the chat was showing, instead of your saved column layout.
  • Hivey's answer tables, labels and charts now use the language of the reply. Charts name months and quarters the way your books do and show values on small bar charts. Asking which overdue customers to call returns a ranked call list.
  • Forwarded card receipts whose merchant name reads differently on the card statement can now be matched automatically to their Pliant card charge.
  • On bank lines, Request documents is now a split button with Upload document or Pick from inbox. Hivey proposals can be reviewed in place, with the reasons they aren't ready and the entry lines they would book.
  • Companies can connect a Cloudflare account from the supplier's "Document auto fetch" tab. Cloudflare invoices for new charges then arrive in the inbox automatically.
  • Buyers checking out through a partner's integration can use a discount code, and the checkout shows the discounted first-period price.
  • Subscriptions imported from Fenerum are no longer billed by LedgerBee while Fenerum may still bill them. LedgerBee takes over from where Fenerum's last paid period ends. A billing sources panel shows who bills each customer.
  • Company admins can choose the billing day for subscriptions taken over from Fenerum: keep each one's day, start a new period on the takeover day, or use a fixed day of the month.
  • The Fenerum cutover panel shows Fenerum's cut-off date, subscriptions still held after it, and a "Days nobody bills" list so those days can be invoiced by hand.
  • Subscriptions can carry discounts for a set number of billing periods. Edits to a discount that live subscriptions use must be explicitly accepted, and the affected subscriptions are listed.
  • Operators can set how many billing periods a discount lasts. The duration shows on the discount detail, in the discount list and in the subscription discount picker.
  • Partners running their own checkout can choose whether the buyer pays each period in advance or in arrears. The quote states the billing direction and the date of the first invoice.
  • Quotes and order confirmations have a search box. Export and Send by email now follow the search and filters, and converting a document carries its description over.
  • Buyers can type a discount code at portal checkout. They see what it takes off the first period, when the regular price starts, and the total including VAT.
  • Signed-in buyers can try a discount code on the plans page. Each plan card shows its first-period price with the code applied.
  • A returning customer can use their own discount code in a partner-hosted checkout.
  • Hivey can filter the list you have open, turn to the next page and point at matching rows when you ask. It only acts on the page you asked from.
  • Sticky notes on the home page now have titles. The tool dock has a Notes entry, and notes can float as separate sticky notes. The mouse wheel now scrolls the home page instead of zooming it.
  • Customer search finds a customer by phone number, in the Customers list and its export. Spaces and dashes are ignored.
πŸ› Bug fixes
  • Bank reconciliation shows each amount in its own currency, with currency labels on foreign accounts. A transfer with an exchange rate of 0 now gets a message about the rate.
  • Forwarded receipts are matched to the right employee's card charge only when the forwarding address is verified as coming from that employee.
  • Overdue ageing, report figures, subscription revenue and cash-flow forecasts no longer add up different currencies as if they were one.
  • The Suggestions tab on bank reconciliation lists suggestions for every open bank line, not only those on the current page.
  • Journal entries can no longer be booked on a sub-heading account.
  • An import that brings in most rows now finishes as "Import Partially Successful" instead of a red "Import Failed".
  • Customer imports now require a customer group and a country, and rows missing either are marked invalid in the preview.
  • A prorated cancellation after a mid-period seat change now settles correctly, with one credit note per billing period.
  • The customer portal invoice lines show each discount on its own row under its own name. The timeline no longer lists discounts that have been switched off.
  • The receipt sent when a trial ends now shows the monthly amount after the customer's discount.
  • Cancelling with a full refund now covers everything that was billed, once. Each credited invoice gets its own credit note.
  • Cancelling with a refund while the current invoice is still an unsent draft now cuts or deletes the draft instead of issuing a credit note.
  • Checkout now handles a visitor with an unrelated or stale portal session as a new anonymous buyer, so their checkout and code prices proceed normally.
  • Discount codes now tell the buyer clearly what they did, plan by plan. Codes that don't cover the chosen plan are refused, and a free first period is described correctly.
  • A card checkout on a subscription billed in arrears now goes live as soon as it is confirmed. Nothing is charged at signup, and the first invoice is charged to the saved card.
  • Customers can be deleted in parallel within a company.
  • Customers can send invoices in a new numbering series, export account cards of any size, and sign in through their identity provider without interruptions being shown as errors.
  • Hivey gives a clear answer when a lookup fails or when you ask it to write data such as a credit note.
  • The home page and dashboard widgets show loading skeletons instead of briefly flashing "No data available".
  • Hivey's help answers now come from articles about the question asked, and say so when the documentation doesn't cover it.
πŸ”§ For developers & integrators
⚠️ Breaking changes
  • Public API journal entry booking now returns
    400
    with
    JOURNAL_ENTRY_ACCOUNT_CANNOT_BE_HEADING_OR_TOTAL
    for the account or split lines, and
    JOURNAL_ENTRY_CONTRA_ACCOUNT_CANNOT_BE_HEADING_OR_TOTAL
    for the contra account, when the account is a sub-heading (
    HEADING_BREAK
    ). These bookings used to succeed.
  • POST /v2/draft-journal-entries/{id}/book
    now files the entry under the draft's own journal category instead of the company default. If that category doesn't allow the journal type, booking fails with
    400 JOURNAL_CATEGORY_TYPE_NOT_ALLOWED
    (
    details.journalType
    ,
    details.allowedJournalTypes
    ) and the draft is kept.
  • GET /v1/accounts
    now returns accounts in account-number order by default (previously public account ID). Use
    sortBy=publicAccountId
    to restore the old order. Unknown query parameters now return
    400 VALIDATION_FAILED
    .
  • Discount edit endpoints now refuse edits to a discount used by live subscriptions with
    409 DISCOUNT_IN_USE_ON_SUBSCRIPTIONS
    unless
    applyToSubscriptions
    is sent. Accepting requires the
    subscriptions-write
    scope.
  • POST /v1/subscriptions/{id}/product-changes
    now refuses a
    null
    discount field with
    400
    .
πŸ”Œ MCP tools
  • get_overdue_invoices
    (changed):
    rows[].openAmountBase
    is now nullable. It is
    null
    for foreign-currency invoices with no company-currency amount, and
    totalOpenAmountBase
    leaves those out. A new
    missingBaseCurrencyAmountCount
    reports how many were left out, and
    orderBy: "amount"
    sorts by
    openAmountBase
    with null amounts last. An agent can ask how much is overdue in the company's currency and how many invoices were excluded.
  • get_journal_entry
    (changed): now returns
    journalCategoryId
    (null when none). An agent can ask which journal category an entry sits in.
  • list_journal_entries
    (changed): now returns
    journalCategoryId
    on each entry. An agent can ask which category each listed entry belongs to.
πŸ”— API & webhooks
  • Journal categories:
- Draft and journal-entry responses (
GET /v2/draft-journal-entries
,
GET /v2/draft-journal-entries/{id}
, the
PATCH
response, journal-entry GET/list, and v2 single and batch POST responses) now include
journalCategoryId
.
-
GET /v2/draft-journal-entries
accepts a
journalCategoryId
filter.
  • GET /v1/accounts
    :
- The list now includes
vatCodeId
on every account (the default VAT code or
null
).
- It accepts
sortBy
(
accountNumber
default,
publicAccountId
,
name
) and
sortOrder
(
ASC
default,
DESC
).
  • POST /v1/checkout/quote
    and
    POST /v1/subscriptions
    accept an optional
    discountCode
    . The quote returns a
    discount
    block. On subscriptions the code applies to the subscription only, not its add-ons.
  • The checkout vouch mint accepts a discount code and answers
    DISCOUNT_NOT_APPLICABLE
    with reason
    codeUnknown
    for an unknown code.
  • Requests that name a code spend a per-API-key code-attempt budget of 600 per minute. Requests without a code spend none.
  • Discounts on subscriptions:
-
GET /v1/subscriptions/{id}
gains
discounts
(terms in the subscription's currency, end date,
targetsNoProduct
).
-
POST /v1/subscriptions
accepts
discountIds
.
-
POST /v1/subscriptions/{id}/product-changes
accepts
discountIds
and
discountEndDates
. Omitting
discountIds
keeps the current set and
[]
removes all.
- Discount edits return
subscriptionChanges
. A key without
subscriptions-read
gets an empty
subscriptions
list.
-
DISCOUNT_TARGETS_NO_PRODUCT
is a new notice code on plan replacement previews and responses.
- The 409 codes
PRODUCT_HAS_DISCOUNT_ASSIGNMENT
and
DISCOUNT_PRODUCT_IN_SUBSCRIPTION
no longer occur.
  • Billing direction:
-
POST /v1/checkout/quote
and
POST /v1/checkout/session
accept an optional
billingDirection
(
advance
or
arrears
).
- Both responses add
billingDirection
and
firstInvoiceDate
.
- The session pins the direction.
POST /v1/checkout/confirm
refuses a request carrying
billingDirection
with
400
, and other invalid values return
400 SHARED_VALIDATION_FAILED
.
  • GET /v1/products
    list items now include a
    prices
    array, matching
    GET /v1/products/{id}
    . List items don't include
    entitlements
    .
  • GET /v1/portal/plans
    ,
    GET /v1/portal/plans/{planId}
    and
    POST /v1/portal/plans/resolve
    accept an optional
    discountCode
    . Cards gain a
    discount
    object (
    firstPeriodNetMinor
    ,
    firstPeriodAmountOffMinor
    ,
    endsAt
    and related fields), or
    discount: null
    for non-subscription cards. Calls carrying a code spend a shared code-attempt budget of 30.
  • Partner checkout sessions with
    buyer.existingCustomerId
    now accept that customer's own discount code. Confirming as a different customer is refused with
    403
    .
  • firstPeriodChargeable
    on
    GET /v1/checkout/session/:id
    is now
    false
    for checkouts billed in arrears, where it used to be
    true
    . Those subscriptions are active right after confirm, with the card saved and nothing charged.
  • DELETE /api/v2/draft-journal-entries/{id}/attachments/{documentId}
    now moves the document to the bin by default. Send
    detach=true
    to return it to the inbox.
  • DELETE /api/v2/draft-journal-entries/{id}
    now moves the draft's documents to the bin by default. Send
    detachDocuments=true
    to return them to the inbox. Documents still used by another draft or a booked entry are not binned.
  • GET /api/v1/customers?search=
    now also matches the customer's phone number, ignoring spaces and dashes.
🐝 What's new in LedgerBee
Highlights
Connect Salary and get payroll as drafts
You can now connect Salary from the LedgerBee marketplace by pasting an API key from Salary. Finished payroll vouchers dated from the day you connect arrive as draft journal entries. They sync every hour, or when you choose "Sync now". Salary departments appear as a "Department" dimension, and each draft line carries its department. Vouchers that can't be booked yet are held rather than lost. The Salary integration page lists the reason for each one, such as an unmapped account or a voucher that doesn't balance, and held vouchers are retried on every sync. Disconnecting stops future syncs and keeps your existing drafts.
Verify supplier statements line by line
Each line of a supplier's account statement in the inbox can now be marked as verified, one at a time or in bulk. The mark records who verified the line and when. The summary shows progress such as "3 of 9 lines verified", and the statement reads "Statement verified" once every line is done. If a listed bill changes after you verified it, only that line is flagged, with an option to verify it again. The statement table also has search, filters for verification state and outcome, and tooltips that explain each outcome.
A clearer Nordea account list
The Nordea bank page now shows accounts in a table. A header checkbox ticks every listed account, and each currency group has its own checkbox. Search and "Show synced only" sit in the toolbar. A newly ticked account must have a ledger account before you can save, and the save bar tells you which one is missing. An account you relink after unlinking it gets its previous ledger account back.
Ask Hivey about your products
Hivey can now tell you how many products you have, split into one-off and subscription products, using the same counts as the Products page. It can show the Products table in the chat, with the page's own columns, filters, paging and export. Asked what sold most this year, it ranks invoiced revenue per product or product group with a chart. Sales without a product are shown as "Unallocated". When a page already shows the answer, Hivey now links to it instead of declining.
✨ Improvements
  • Supplier and customer drawers now check a VAT number against its country's rules. A valid number shows a green check, and a likely typo shows a yellow note. Saving is never blocked. Prefixes such as BTW, MVA, TVA or VAT are ignored when reading the country.
  • Chart of Accounts search now also finds accounts by their group name. Every typed word must match the number, name or group, in any order.
  • Hivey now shows the Booked entries page's own list when you ask about booked entries. You can sort, filter and page through it, and the download matches the page's export. The Booked entries Columns menu also gains Description and Counterpart, hidden by default.
  • Search on the Booked entries journal-entries tab now matches an entry's own text and its counterparty's name, rather than every voucher posted to a matching account.
  • The "Ready for approval" drawer now shows each Hivey proposal's details on the row, including document, supplier, amount and a hover preview. It also has a pinned total per currency and a link that opens the proposal in Hivey.
  • A firm's ReviBot page and Integrations card now show Connected only while the firm has a live connection to ReviBot itself. Items in the delivery log now show which connected app delivered them.
  • Newly sent invoices carry a FIK payment code that includes the invoice number, so a bank statement shows which invoice a payment settles. Codes already issued are unchanged.
  • Search on Sales β†’ Invoices and Sales β†’ Credit notes now matches every typed word in any order, across number, customer, description and amount.
  • Partners building their own customer portal can now take a card for a subscription. Allowing Stripe on a subscription opens the card window, and the saved card is used for automatic charging. The checkout, portal SSO and portal provisioning permissions can now be chosen when you create or edit an API key.
πŸ› Bug fixes
  • A customer payment on an invoice split across several receivable accounts, without a stated split, is now refused when you click Book, rather than failing after the approver has decided.
  • After importing invoices, quotes or order confirmations, each number series now continues from its own highest imported number.
  • Booking a foreign-currency entry with a small rounding difference now asks you to choose a rounding account on the spot, saves that choice for your company, and books the entry balanced.
  • Product VAT in the invoice form now matches the account's current VAT setup straight away after a chart import or VAT code edit. Quote and order-confirmation PDFs with discounted lines show a VAT breakdown that matches the document total.
  • Companies moving from Fenerum that also connect Stripe no longer get duplicate customers and products. Uncertain matches are listed on the Stripe Import tab, where you choose to link or create.
  • Hivey's revenue figure now counts only the chart's turnover accounts, and invoiced-revenue charts leave out unsent drafts. Manual bank accounts no longer show a 0,00 balance. Net credits are labelled as such.
  • Excel and CSV imports of customers, suppliers and products now refuse a row with an unreadable value instead of saving it with the value left out.
  • Excel and CSV imports now refuse a mistyped number such as
    12,x
    or
    1,234,56
    instead of saving a shortened value, and the message names the value.
  • A manual journal entry for a customer or supplier payment with no invoice, no bank line and no clear direction is now refused with a clear message instead of booking a false advance.
  • Hivey now writes payments out with their minus sign, matching the table beneath the answer.
  • Hivey's chat answers now use the right balance date, answer "was this supplier paid?" consistently, show correct top-debtor rankings, and follow your own number format.
  • Changing a subscription's plan now keeps the department or other dimension already set on each line.
  • A cancellation refund or mid-cycle settlement now credits only what was actually charged for each product, even if a draft invoice line was removed or reduced.
  • Topping up a Pliant card account now opens with the company's registered address and the country from the account's IBAN, so only the amount needs typing.
  • Opening or editing a product price that no longer exists now reads "Product price not found." instead of "Product not found."
  • Hivey's answers no longer repeat every row of the table they show. They give the count and total and name at most three rows.
  • Deleting several customers at the same time now completes successfully.
πŸ”§ For developers & integrators
⚠️ Breaking changes
  • Booking a customer-payment draft through the public API that covers an invoice owed across several receivable accounts, with no stated split, on a company with approvals now returns 400
    JOURNAL_ENTRY_RECEIVABLE_SPLIT_REQUIRED
    . Before, it returned
    DRAFT_APPROVAL_REQUIRED
    and stored an approval request. The exact endpoint path isn't stated.
  • The OAuth code exchange now fails when the grant has neither a company nor a firm. Before, it returned a token with no holder.
  • GET
    ,
    PATCH
    and
    DELETE /v1/product-prices/:id
    ,
    POST /v1/product-prices/:id/activate
    and
    POST /v1/product-prices/:id/set-default
    now return the error code
    PRODUCT_PRICE_NOT_FOUND
    for a missing or cross-company price. Before, they returned
    PRODUCT_NOT_FOUND
    . The error
    details
    are now
    { id, appCompanyId }
    .
πŸ”— API & webhooks
  • The OAuth token response now includes an optional
    holder
    object with
    kind
    (
    advisor
    or
    company
    ),
    id
    and
    name
    . It is returned on the authorization-code exchange and on every refresh, including a replayed refresh within the 30-second window. It is absent for
    client_credentials
    grants. Apps that ignore it are unaffected.
  • POST /v1/subscriptions
    and
    PATCH /v1/subscriptions
    accept
    allowedPaymentProviders
    (for example
    ["STRIPE"]
    ).
    PATCH
    refuses two card providers with 400
    INVOICE_MULTIPLE_CARD_PROVIDERS
    . The subscription detail, create and update responses return
    allowedPaymentProviders
    , but the list item does not.
  • POST /v1/checkout/subscriptions/{id}/card-window
    now opens on API-created subscriptions that allow Stripe. Before, it refused with
    SUBSCRIPTION_MANAGE_PROVIDER_NOT_ALLOWED
    .
  • The checkout, portal SSO and portal provisioning permissions can now be selected on API keys. Portal SSO and portal provisioning require the Customer Portal license. Legacy OAuth clients still can't be given these permissions.
  • The public reclassify and preview routes now return 400
    JOURNAL_ENTRY_RECLASSIFY_TARGET_ACCOUNT_CURRENCY_MISMATCH
    , with
    details.ledgerCurrency
    and
    details.targetAccountCurrency
    , when a booked line is moved to an account in a different currency. Before, they returned 500
    INTERNAL_UNKNOWN_ERROR
    . A target account with a blank currency returns 400
    JOURNAL_ENTRY_RECLASSIFY_INVALID_ACCOUNT
    . Same-currency moves are unchanged.
  • Public journal-entry bookings and the salary API now refuse a foreign-currency rounding difference on a rounding account kept in a non-base currency. They return
    JOURNAL_ENTRY_ROUNDING_ACCOUNT_NOT_IN_BASE_CURRENCY
    instead of an uncoded database error.
  • POST /v1/sales-documents/:id/project
    now includes
    appCompanyId
    in the
    details
    of
    PROJECT_SALES_DOCUMENT_NOT_FOUND
    .
  • The Salary department dimension and its values are now visible through the public dimension endpoints. The exact endpoint and field names aren't stated.
🐝 What's new in LedgerBee
Highlights
One period and one grouping for the whole dashboard
The dashboard toolbar now has a single grouping menu (per widget, day, week, month, quarter or year) next to the period presets and a custom date range. Every dated chart re-groups together, and widgets keep their own grouping only if you lock their settings. Quarter and year presets follow your accounting year, so a July–June company sees "This quarter" as July–September. Months with no postings show as zero, unfinished periods are drawn lighter, and each chart says what it is based on.
VAT tasks for every unfiled quarter
If your company uses Tasks, each VAT period that has ended without a return on record now becomes a task for your admins. Each admin is notified in the app and by email. The task shows the period, the deadline and the pre-filing checks, with the items that need attention first, and it has a button to the VAT return. Marking the return as filed closes the task. Tasks due within 14 days or overdue are highlighted with a countdown. The VAT page, performance report and cash-flow forecast now also show the correct payment deadline for each period.
Bank proposals that show what they will post
Pressing a bank line's Hivey proposal now selects the line together with the entry Hivey matched it to, ready to confirm. AI approval has a new Summary step that shows what approving will post, including a plain-language description and the posting table. After approval, the step shows what was posted. The classic bank reconciliation page has been retired in favour of the redesigned page.
Hivey shows your real Invoices list
When you ask Hivey about invoices, such as which are overdue or which haven't been sent, the answer now shows the Invoices page's own list. It has the same columns, filters, sorting, paging and export, plus an "Open in Invoices" link. Asking Hivey to narrow the list updates it in place.
✨ Improvements
  • Hivey now shows the Journal's own drafts list when you ask about draft entries. Each draft shows its status, the page's filters, sorting and export work in the list, and Hivey can change an open list in place.
  • Searching Customers and Suppliers now matches every word you type, in any order, across name, number, VAT number, email and group name. Counts, "Select all", exports and the email preview follow the search, and "Selected rows only" exports only the ticked rows.
  • Hivey now shows the Subscriptions page's own list in its answers, with the same columns, filters, paging and export, plus an "Open in Subscriptions" link.
  • The Invoices page has a new "Overdue only" switch and "Sending" filter chips (All, Not sent yet, Being sent, Sent). The Customer and Total columns can now be sorted. Filter choices are kept in the page link, so shared links open the same list.
  • Meter details now show the aggregation method with an explanation. A new Edit button opens the meter editor from the details drawer, and the usage report builder's cURL and JSON options now display in full.
  • Dashboard widgets can now sit on the home page next to your notes. Add them from the right-click menu, by dragging in a Hivey chart, or from a widget's header. You can move, resize, lock and edit them. Breakdown widgets also gained Sort by and Order options.
  • The "For you" card on the home page can now be dragged to another spot, locked, layered, hidden and restored from the right-click menu.
πŸ› Bug fixes
  • Draft invoices, credit notes, quotes and order confirmations imported from e-conomic now keep e-conomic's VAT and totals, and the import page warns where LedgerBee's rounding would differ.
  • Imported foreign-currency account balances now show the correct amount in the account's own currency.
  • PDF document previews now open in Safari 18 and older browsers, and if a preview fails, only the preview area shows the error.
  • Approved chains finish booking and move out of the Pending list into Finalized once booking completes.
  • Dashboard tables grouped by day now name each row by its full date, and period chips use named months consistently.
  • Connecting a bank through Aiia now works when the bank also holds a card account.
  • VAT on invoices, credit notes, quotes and order confirmations is now calculated once per VAT rate, so line VAT adds up exactly to the document's VAT. Credits return exactly the VAT originally charged.
  • A VAT rate you set on an invoice product line, including 0%, is now kept.
  • Changing a subscription's plan, running billing while a new subscription is being created, moving bank lines to journal together, and opening any page all complete normally.
  • Invoice and credit note drafts with VAT on a 0% line now show a clear warning and block Send until fixed, instead of failing with a generic error.
  • E-invoices for documents with a whole-document discount now state the same VAT as the invoice, its PDF and its journal entry.
  • Sending an invoice or credit note with VAT on a sales account without a VAT code is now refused up front with a clear explanation.
  • The Pliant corporate card application now asks for the correct fields and lists the missing required ones when Submit is disabled.
  • Uploading a new company logo no longer removes the customer portal's logo or favicon.
  • Doughnut, polar area, bubble and waterfall widgets now show their full date range in the period chip.
  • Text in the home page chat can now be selected and copied.
πŸ”§ For developers & integrators
⚠️ Breaking changes
  • GET /api/v1/customers
    : a request that already sends
    search
    now receives the paginated object (with
    nextCursor
    ) instead of the full array. Any search with at least one word returns the paginated shape.
πŸ”— API & webhooks
  • GET /v1/journal-entries
    gains the
    excludeReversed
    query parameter.
    true
    omits each linked reversal pair,
    false
    or an empty value leaves the filter off, and any other value returns 400.
  • Journal entry responses gain
    reversedByEntryId
    (on the reversed entry) and
    reversalOfEntryId
    (on the reversal). Both are
    null
    otherwise, and reversals imported from e-conomic are not linked.
  • Reversal requests can now return
    409 JOURNAL_ENTRY_REVERSAL_IN_PROGRESS
    while the first reversal is still posting, and
    400 JOURNAL_ENTRY_ALREADY_REVERSED
    after it has posted.
  • New
    DELETE /v1/customers/{customerId}
    (scope
    customers-write
    ) returns 200 with
    { id, customerNumber, result }
    , where
    result
    is
    DELETED
    or
    DEACTIVATED
    . Customers with bookings, invoices or subscriptions are deactivated. It can return 400
    CUSTOMER_CANNOT_DELETE_PARENT_CHILD_NO_DELIVERY
    (with
    details.childCustomerId
    ) or 404
    CUSTOMER_NOT_FOUND
    .
  • New
    DELETE /v1/suppliers/{supplierId}
    (scope
    suppliers-write
    ) returns 204. It can return 400
    SUPPLIER_HAS_REFERENCES
    (with
    details.journalEntryCount
    and
    details.draftCount
    ) or 404
    SUPPLIER_NOT_FOUND
    .
  • New attachment endpoints for journal entries and drafts:
-
POST /api/v1/journal-entries/{id}/attachments
(multipart, scope
journal-entries-write
)
-
DELETE /api/v1/journal-entries/{id}/attachments/{documentId}
(scope
journal-entries-write
)
-
GET /api/v2/draft-journal-entries/{id}/attachments
(scope
journal-entries-read
)
-
POST /api/v2/draft-journal-entries/{id}/attachments
(multipart, scope
journal-entries-write
)
-
DELETE /api/v2/draft-journal-entries/{id}/attachments/{documentId}
(scope
journal-entries-write
)
  • Attachments accept PDF, JPEG or PNG up to 10 MB. Unsupported or disguised files return a coded 400, and files over 10 MB return 413. Repeated uploads with the same idempotency key return the original response.
  • GET /api/v1/customers
    gains these query parameters:
-
search
: multi-word, all words must match.
-
vatNumber
: matches with or without the DK prefix and common separators.
-
email
: case- and whitespace-insensitive exact match.
-
isActive
:
true
or
false
. Any other value returns 400
SHARED_VALIDATION_FAILED
.
  • A
    nextCursor
    replayed under different search or filters returns
    PAGINATION_INVALID_CURSOR
    . Phone numbers are not searched.
🐝 What's new in LedgerBee
Highlights
Supplier statements checked against your books
When you open a supplier statement in the inbox, each line now shows whether your books hold it. The outcomes are Paid, Still owed, Never received, or Received, not booked. Open bills that the supplier left off the statement are listed separately as "Not on the statement". The check is judged as of the statement's date.
Large tables and charts open beside the Hivey chat
Big tables and charts in Hivey now show a one-line summary with an Open button. Opening one shows it in a panel next to the conversation, so you can keep chatting while it stays in view. You can step between several results from the same conversation. You can also ask Hivey to change an open customer, supplier, invoice, trial balance or VAT readiness table in place, for example "only the overdue ones". Hivey can also read a chart you have open and build a new one from it, for example "show me the same for Q1".
Discount codes on invoices, quotes and order confirmations
Discounts that require a code can now be applied to invoices, quotes and order confirmations. The preview shows each code as applied, or refused with the reason, and one refused code doesn't block a valid one. Saved documents name the code on the discount. Codes carry over when you copy an invoice or convert a quote.
A home page you can pan, zoom and stick notes on
The home page is now a canvas with a dotted grid. You can pan and zoom it, and you can add private rich-text sticky notes with images and files. Your view can be saved so the page opens where you left it. Notes can be exported as a zip with a PDF and all attached files.
✨ Improvements
  • Hivey now shows the same Customers or Suppliers list you see on those pages, with filters, export and row click. A "Live" chip appears once you change a filter, sort or page.
  • Documents Hivey cannot book now arrive as a drafted journal entry with the document's lines. You can finish and book it, send it to the inbox, or reject it.
  • The Hivey approval panel is now the same for every company: steps on the left, the selected step in the middle and the source document on the right.
  • The Hivey approval Source card now shows more bank line detail, such as payment message, counterparty account, foreign amount and FIK reference. Reject replaces "Send back to inbox", and the journal entry form shows its own checks.
  • Hivey can build dashboard charts split by your own dimensions (Location, Department, Project) for MRR, MRR movement, Commitment and Invoiced revenue. If the dimension is unclear, it asks which one you mean.
  • Hivey can draw overdue customer and supplier balances as charts. Dashboard widgets built by Hivey now have a download menu (CSV, Excel, PDF).
  • Users with the payments permission now see the failed bank payment banner. Users without it no longer trigger a failed-payment request on every page load.
  • Subscription defaults are regrouped, and each default has its own visibility choice. Settings β€Ί Automation gains "Portal access by default", and new customers start with the company's payment terms. Quarterly and yearly prices show their monthly equivalent, and price search by name or nickname works better.
  • The discount admin now follows the look of the rest of the app, with an empty state, an "Active" switch, a clearer create/edit form and confirmation before deleting a code.
  • Product and group deletes now say what will happen. A product that can't be deleted explains why, and deleting a group lists the discounts assigned to it. Bulk actions clear the selection when done.
  • Discounts in invoice and quote forms read more clearly. Line totals show the net amount with the gross struck through, and the discount picker and change notices are clearer.
  • Companies with the Corporate Cards license now find Corporate Cards in the left menu before Pliant is connected. The page shows setup, pending or rejected application status, and the onboarding guide.
  • The floating and docked Hivey chats now use one compact header row. "Move to home page" is the first item in the placement menu.
  • The chat-side panel can be moved and resized. The Home tab always opens the Hivey home screen.
  • The home page can save and reset where it opens. The note export is now a zip, and notes are added by right-clicking the grid.
πŸ› Bug fixes
  • When the e-conomic connection has expired during onboarding, a "Reconnect e-conomic" button now appears, and a failed connection check explains the problem and offers a retry.
  • Lists sorted by number now follow the company's number sequences, with drafts first and numbers in true numeric order.
  • Edited imports of files with several kinds of records now go through, and values that can't be read stay in the preview beside their error.
  • Purchases from a Danish-registered supplier with a foreign VAT number now appear in Rubrik A of the VAT return.
  • The EU sales file from "Download for SKAT" now follows SKAT's required layout and can be uploaded to TastSelv. It is offered as CSV only.
  • Hivey now returns the count, total, chase order and reminder status for long overdue-invoice lists.
  • Hivey gives DKK totals for foreign-currency invoices, looks up supplier invoices by number, and reports overdue VAT returns and suggested VAT codes. It also flags claims that may be time-barred.
  • Hivey states the measurement date and the total alongside overdue amounts, and understands follow-ups like "nr. 1" after a ranking.
  • Hivey's customer and supplier balances now match the figure on the customer's or supplier's page.
  • Hivey now names the permission an administrator would need to grant when a figure is unavailable because of missing access.
  • Hivey is less likely to set aside a document because the classifier named an account number that doesn't exist or can't be posted to.
  • When a Pleo login or a bank connection expires, you now get one notification asking you to reconnect, and syncing resumes after you reconnect.
  • Receipts for imported invoices now show the correct VAT, and paid and remaining amounts are right for fully paid company-currency invoices.
  • Accounts on the Debtors and Creditors ageing lists whose balance is zero now show as Open while they still have unmatched items.
  • Customer and supplier payments now pre-fill the invoice's remaining open balance, not its full amount.
  • Assigning a plan or creating a custom subscription now requires a recurring product in every phase, and the message explains how to fix it.
  • The subscription drawer now shows the real next invoice date instead of today's date.
πŸ”§ For developers & integrators
⚠️ Breaking changes
  • MCP
    create_dashboard
    now refuses an unknown dimension id and any widget setting the editor forbids. It returns the error codes
    WIDGET_DIMENSION_NOT_FOUND
    and
    WIDGET_SETTING_INVALID
    . Such widgets could previously be saved.
πŸ”Œ MCP tools
  • get_counterparty
    (changed): An agent can now ask for a customer's or supplier's balance as the customer or supplier page reads it, via
    include: ['balance']
    and an optional
    asOfDate
    . A value that is not an id is refused with
    UNKNOWN_COUNTERPARTY
    , which points to
    list_counterparties
    . The balance requires the
    journal-entries-read
    scope.
  • list_dimensions
    (new): An agent can ask which bookkeeping dimensions the company can group charts by. It resolves a dimension name to one match, or returns all dimensions when the name matches none or several. It requires the new
    dimensions-read
    scope.
  • create_dashboard
    (changed): It now validates every widget, and widget grouping accepts
    primaryDimension: 'dimension'
    with
    dimensionCategoryId
    .
πŸ”— API & webhooks
  • POST /invoices
    and
    PATCH /invoices
    accept a new
    discountCodes
    field (array of code strings). Code text over 128 characters is refused by request validation. Applied discounts in responses carry a new
    code
    field when a code applied them.
  • POST /api/v1/quotes
    and
    POST /api/v1/order-confirmations
    (create, update and preview) accept
    discountCodes
    . A line that names its price only by
    priceId
    now receives a line-scope discount code instead of being refused with
    notAssigned
    . Converting a quote as-quoted with the code restated is no longer refused with
    codeInactive
    .
🐝 What's new in LedgerBee
Highlights
Hivey builds and saves dashboards
You can now ask Hivey, in plain words, to build a dashboard, add charts, change currencies or time periods, rename it or resize a chart. Hivey shows the unsaved changes in the chat, and nothing is saved until you confirm. A chart Hivey drew earlier in the chat can also be placed straight onto a dashboard.
Delete several products safely
When you delete many products at once, the dialog now shows which ones are used by quotes, order confirmations or other documents. For those, you can archive them instead. Only products that are free to remove are deleted.
Imported invoice history on the Invoices page
Invoices imported from a previous system, which have no LedgerBee invoice document, now appear on the Invoices page. A new filter switches between "With invoice document", "Booked only" and "All". Booked-only invoices carry a badge, show their payment status and link to their journal entry. Hivey's invoice answers now include them too, and link back to the filtered Invoices page.
Approval notifications clear once someone has decided
When one approver decides, the other approvers' unread approval notifications in the bell are marked as read. When an approval is sent back, resubmitted or reassigned, only the people who need to act are notified again.
✨ Improvements
  • Advisors can send a list export straight into an advisor chat without downloading and re-uploading it. The lists covered are booked entries missing a document, payments awaiting approval, debtors, creditors, customers and suppliers. Choose "Send in advisor chat" from the export menu, then CSV, Excel or PDF. The active filters carry over. An "Add a report" button next to the attachment icon attaches the same reports from inside the chat.
  • Importing customers from Fenerum now lets you choose your own prices per billing term, including usage-based and tiered prices. Subscriptions billed in arrears now bill at the end of each period. Usage subscriptions start from the Fenerum handoff date, so periods Fenerum already invoiced are not billed twice.
  • Bookkeepers with the right Accounting permissions can now close and reopen months and years, and open employee outlays, without being administrators. The settings gear in the top bar now shows for anyone who can open at least one settings page, and lists only the pages they can use. Reimbursing outlays through payroll also needs Payroll edit rights.
  • The Journal page has a new "All" tab showing drafts across all categories. Category and segment choices are kept in the address, so you can bookmark and share them. Searches in Booked Entries open directly from Hivey links, and Hivey shows journal entry results as proper tables.
  • A supplier's statement is now read line by line in the inbox. Each line shows its date, due date, reference, kind (invoice, credit note, payment, fee or opening balance), amount and running balance. Re-upload an existing statement to have its lines read.
πŸ› Bug fixes
  • Imported vouchers are now numbered within their own accounting year, so files that span a year-end get the right numbers.
  • Credit notes now keep the wording of the invoice lines they credit instead of using today's product names.
  • Lines with quantity 0 are now saved and shown as 0.
  • Invoice and credit-note lines now reopen in the order they were entered.
  • Credit lines with negative prices now reopen showing a positive price, with the credit flag kept.
  • Invoice PDFs now render correctly when no template is set.
  • Invoices with partial credit notes are no longer marked as fully credited while an amount is still owed, so they stay payable in the portal.
  • Subscription plans whose price has no amount in the plan's currency are now rejected at import instead of silently failing to bill.
  • In the chart-of-accounts upload, decimal VAT rates such as 7,5 or 5,263158 now keep their decimals.
  • In the chart-of-accounts upload, rows with a missing VAT code are now blocked instead of being silently skipped.
  • Typing in a VAT rate cell no longer loses focus when its error message disappears.
  • In the chart-of-accounts upload, opening balances such as 1234,56 now keep their decimals, and negative balances such as -500,25 can be typed.
  • A Hivey chat that was interrupted now accepts a new question within about 30 seconds, instead of making you wait several minutes.
πŸ”§ For developers & integrators
πŸ”Œ MCP tools
  • list_invoices
    (changed): an agent can now ask for a company's invoices, including imported booked-only invoices and booked-only credit notes. Credit notes come back as negative-amount rows. It gains an
    invSource
    filter, paging, sorting by customer or amount, and per-stage counts. The arguments are renamed to match the Invoices page:
    invCustomerId
    ,
    invStatus
    ,
    invPeriodFrom
    ,
    invPeriodTo
    ,
    invQ
    and
    invSource
    .
πŸ”— API & webhooks
  • POST /v2/journal-entries
    accepts optional
    documentDate
    and
    dueDate
    .
    POST /v2/draft-journal-entries
    and
    PATCH /v2/draft-journal-entries/{id}
    accept the same two fields. The document date decides the VAT period. If no due date is sent, payment terms count from the document date, or from the posting date when no document date is given. Both fields are returned on all journal entry read and list responses.
  • A new error,
    JOURNAL_ENTRY_DUE_DATE_NOT_ALLOWED
    , is returned when
    dueDate
    is sent on an entry type that is not an invoice.
    JOURNAL_ENTRY_DUE_DATE_REQUIRES_REFERENCE
    is returned when it is sent on an invoice without a reference.
  • POST /v1/credit-notes
    accepts an optional
    sourceInvoiceLineId
    on request lines, linking a credit-note line to a line on the named invoice. Linked lines inherit that invoice line's discounts. Response lines now always include
    sourceInvoiceLineId
    , which is null for unlinked lines. A line that isn't on the named invoice, or a request with no invoice named, returns
    CREDIT_NOTE_SOURCE_LINE_NOT_ON_INVOICE
    .
  • New product bulk endpoints:
-
POST /v1/products/bulk-delete-preflight
returns, per product, whether it can be deleted, any refusal codes, and the linked documents.
-
POST /v1/products/bulk-delete
returns success or error per product.
-
POST /v1/products/bulk-archive
returns success or error per product.
  • Deprecation notice for page-number paging: list endpoints, such as
    GET /api/v1/customers
    ,
    GET /api/v1/journal-entries
    and
    GET /api/v1/vendors
    , now send a dated
    Deprecation
    header. On lists with more than 10,000 matching rows, requests for page 2 and later also carry a
    Sunset
    header for 2026-12-31. From that date, such requests are refused with
    400 PAGINATION_OFFSET_TOO_DEEP
    , so switch to cursor paging before then. Smaller lists can still be paged by page number.
🐝 What's new in LedgerBee
Highlights
Split your profit and loss by dimension
Pick a dimension such as department or project, and the profit and loss shows one column per value, plus an Unassigned column. Revenue, expenses and net result are totalled for each value. CSV, Excel, PDF and emailed reports carry the same split, and split PDFs print in landscape.
Credit note numbers are given when you send
A draft credit note no longer takes a number from your series when you save it. It gets its number only when it is sent and booked, so deleted or refused drafts no longer leave gaps. Drafts show "-" in lists and "Draft" in the editor. The customer portal now shows only credit notes that have actually been sent.
Hivey checks your VAT and shows what it found
Ask Hivey to "check VAT" and it runs the VAT page's pre-filing checks. It reports whether the period is ready to file as a checklist. Click any line to see the findings behind it, such as unsent invoices, VAT code mismatches or unmatched bank lines.
Reusable discounts on invoices and quotes
Pick from saved discount records on invoice lines and whole documents, instead of typing discounts by hand. Reorder discounts by dragging, and see totals before and after saving. When the customer, date or currency changes on a draft, discounts that no longer apply are marked instead of silently dropped. Quotes warn you when a chosen discount expires before the quote does. Credit notes show the original invoice's discounts and credit the discounted amounts correctly. New invoices and credit notes now start in your company's own currency.
✨ Improvements
  • Companies whose credit notes have no prefix see a warning offering to apply the suggested CN prefix or go to settings. Creating a credit note is blocked until a prefix is set. The credit notes list is now sorted newest first.
  • Supplier account statements are recognised as their own document type, labelled "Account statement - not a bill" in the inbox. They are never booked as bills, sent to Hivey, or auto-matched to payments, but stay available for manual review.
  • Approving a payment, subscription or journal entry now responds immediately. If a follow-up step such as sending to the bank or booking the entry fails or stalls, the request shows the reason and offers Retry without a new approval. A refused journal booking shows which account and line needs fixing, and the approver is notified.
  • When a bank line is matched to a foreign-currency invoice, the exchange-difference line now inherits the invoice's dimension values. You can review and edit them before booking.
  • Depreciation and disposal postings for fixed assets now carry the dimension value the asset was purchased with, so they appear correctly in dimension reports.
  • If an e-conomic import cannot close an accounting year, the message now says which condition caused it and what to do next.
  • Discounts can target a product group or customer group, so you no longer need a separate assignment for each product and customer pair.
  • When you convert a quote whose discounts have changed, you choose whether to keep the quoted figures or use the current discounts. A dialog compares both.
  • Changing a discount now lists the open quotes, order confirmations and invoice drafts it affects. It also tells you which keep their original figures and which adopt the new ones. Opened documents show a banner with the old and new figures.
  • Discount codes: shoppers can enter a code at checkout. You can add, activate or deactivate, and delete unused codes, and require a code for a discount. Each code can be limited to one customer, a maximum number of redemptions, or an expiry date.
  • Webshops can check which discounts apply to a cart before creating an order. The check shows the reduction per line, the total reduction, which codes don't apply and why, and the remaining uses.
  • Help and support now live in the Hivey chat. Type
    /help
    for links to the knowledge base, developer docs, website, release notes and support email. The header help menu and Support page are removed.
  • Reorder the top menu by dragging, or with Space and the arrow keys. You can remove items, restore hidden ones, or ask Hivey to set up the menu around your work. Changes apply to all open tabs in that company.
  • The notifications page is now a paged table (25 per page) that you can filter by type and status. Mark-read and dismiss are one-click icon buttons on each row.
πŸ› Bug fixes
  • Companies can now re-import invoices and postings from e-conomic when the previous year remains open.
  • Correcting a foreign-currency payment now keeps its bank line, and multi-line payment drafts keep all their lines when you pick or clear invoices.
  • Reversed journal entries now show a "Reversed" badge.
  • Correcting an entry from a closed period now starts on today's date, with an explanation, instead of failing until you choose another date.
  • Invoices, credit notes, quotes, order confirmations, purchase orders and reminder letters now show a clean contact sentence when the company has only an email or only a phone number. The sentence is omitted when both are missing.
  • Exchange rates now read the same on every screen: six decimals in tables, and the full stored precision in detail views. Same-currency rates show as 1,000000, and a missing rate shows as a dash.
  • A VAT code with no rate in an uploaded chart of accounts is now refused, with a clear message, instead of being saved as 0%. Your existing chart is left untouched.
  • Dashboard widgets created by Hivey now open in the builder with all settings exactly as made.
  • A bank payment matched to an invoice split by department now carries the department values, so department balances clear correctly.
  • Jyske Bank FIK payments now match their invoices automatically.
  • Paid invoices and credit notes with a small amount left now show in customer statements and open-items reports, marked "Paid, amount left", with only the remaining amount.
  • E-invoice line numbers now stay consistent across sends and match the order shown in the PDF.
  • Dimensions and tags now keep their type once created, so existing accounting data stays valid.
  • Invoice lines now appear in the order they were written, hand-entered line discounts are calculated and saved correctly, and previews show a clear message when a line with an amount lacks a VAT rate.
  • Invoices with fees and discounts now calculate VAT correctly, matching the preview.
  • Converting a quote now stops with a clear message, and creates nothing, when its discounts cannot be checked. You can press Convert again to retry.
  • Deleting a product or product group that is still in use now shows a clear refusal. It lists the affected documents or the number of products to move, and offers archiving.
  • Deleting a credit note while it is being sent now shows the same refusal as deleting a sent one.
  • PDF invoices and credit notes now show a per-unit discount larger than the unit price correctly.
  • Invoices from foreign-currency suppliers are now booked to real expense accounts instead of exchange-difference accounts.
  • Paying a supplier bill that arrived as an e-invoice now marks it as paid for the supplier.
  • Opening a deleted invoice now closes the editor with a clear "Invoice not found" message.
  • Surcharge fees now match across invoice previews, quotes and final invoices, and surcharge credits stay credits when a quote is converted.
  • The invoice preview in the template studio now shows the sender heading and payment terms in the same order as the PDF.
  • Delete dialogs and messages for draft invoices, quotes and order confirmations now say "draft" instead of a dash.
  • Saving an invoice with a missing or mismatched contact now shows a clear "Customer contact not found" message.
πŸ”§ For developers & integrators
⚠️ Breaking changes
  • PUT /api/v1/dimensions/:id
    no longer accepts
    isUnique
    . Sending it returns
    400 SHARED_VALIDATION_FAILED
    . Requests that omit it, including renames via
    name
    , are unaffected.
  • The public API credit note create request no longer accepts
    creditNoteNumber
    . The credit note
    number
    is now
    null
    until the credit note is sent.
  • The credit note list now includes numberless drafts. They sort after every number when descending and before every number when ascending.
  • DELETE /api/v1/discounts/:id/assignments/:assignmentId
    now returns
    200
    (with a
    warnings
    field) instead of
    204
    .
  • The default list
    limit
    for
    /invoices
    and
    /credit-notes
    increased from 10 to 25.
πŸ”Œ MCP tools
  • set_top_menu
    (new): lets an agent arrange a user's top menu of areas and pages, including hiding or pinning items.
  • check_vat_readiness
    (new): answers whether a VAT period is ready to file, as a readiness checklist.
  • list_vat_readiness_findings
    (new): answers what specific findings sit behind a VAT readiness check, such as unbooked drafts, unsent invoices, VAT code issues or unmatched bank lines.
πŸ”— API & webhooks
  • Cursor pagination:
    GET
    list endpoints for
    /journal-entries
    ,
    /draft-journal-entries
    ,
    /invoices
    ,
    /credit-notes
    ,
    /quotes
    ,
    /order-confirmations
    ,
    /customers
    ,
    /suppliers
    ,
    /vendors
    ,
    /products
    ,
    /subscriptions
    ,
    /shipments
    and
    /stock
    accept a
    cursor
    parameter. All list responses include
    nextCursor
    and
    hasMore
    . Page-number pagination still works, but requests for page 2 and beyond carry a
    Deprecation
    header. New error codes:
    PAGINATION_INVALID_CURSOR
    ,
    PAGINATION_CURSOR_SORT_NOT_SUPPORTED
    ,
    PAGINATION_OFFSET_TOO_DEEP
    ,
    PAGINATION_SORT_NOT_SUPPORTED
    .
  • Quotes and credit notes:
    lowercase customer and price IDs are now accepted when you create them.
  • Discount codes:
-
GET /v1/discounts/codes/{code}
looks up a code. It returns the code, its discount, whether it applies, and the reason if not (
codeUnknown
,
codeExpired
,
codeInactive
,
codeCustomerMismatch
,
codeMaxRedemptionsReached
,
notInGroup
,
codeRequired
).
-
GET /v1/discounts/{discountId}/codes
returns a paginated list of codes (
limit
1–100, default 25; returns
page
,
limit
,
data
,
total
,
totalPages
).
- The new API-key scope
discounts-check
restricts a key to code lookups, without access to discount listing.
- Discounts marked "Only through a code" are excluded from
GET /v1/discounts/applicable
. Applying one by ID alone is rejected with
codeRequired
.
- The quote-line error
DISCOUNT_CODE_IN_USE
is returned when you try to delete a redeemed code.
  • Cart check:
    POST /v1/discounts/check
    accepts cart lines, discount codes and discount IDs. It returns reductions per line and in total, refusals with reasons, and remaining uses per discount. It does not reserve uses; limits are rechecked when an invoice is booked.
  • Cart check rate limit:
    POST /v1/discounts/check
    and
    GET /v1/discounts/codes/{code}
    share a limit of 600 per minute per API key. Each code tried counts as one unit, so a check with 20 codes uses 20. When the budget is exhausted, both return
    429 DISCOUNT_CHECK_RATE_LIMITED
    with a
    Retry-After
    header.
  • Discount assignments:
    /v1/discounts/{id}/assignments
    accepts and returns
    productGroupId
    and
    customerGroupId
    on create, update and read. These are additive to
    productId
    and
    customerId
    . A document that references a group-targeted discount for a product or customer outside the group is refused with reason
    notInGroup
    .
  • Quote conversion:
-
POST /v1/quotes/:id/convert
and
POST /v1/order-confirmations/:id/convert
accept an optional
discountPricing
(
"asQuoted"
or
"current"
). They return a
warnings
array with
DISCOUNT_CHANGED_SINCE_QUOTE
codes.
- New endpoint
GET /v1/sales-documents/:id/discount-changes
returns the comparison data.
-
POST /v1/sales-documents/:id/convert
and
GET /v1/sales-documents/:id/discount-changes
now return
409 DISCOUNT_CHANGES_UNAVAILABLE
when the discounts cannot be read. No document is created in that case. Previously they returned
500 INTERNAL_UNKNOWN_ERROR
.
  • Discount changes:
- New endpoint
GET /api/v1/discounts/:id/open-documents
returns metadata for open documents affected by a discount.
- Responses from
PATCH /api/v1/discounts/:id
,
PUT
/
DELETE /api/v1/discounts/:id/amounts/:currency
, and
POST
/
PATCH /api/v1/discounts/:id/assignments
now include a
warnings
field.
-
GET /api/v1/invoices/:id/discount-changes
and
GET /api/v1/sales-documents/:id/discount-changes
gain a
pricedAsQuoted
field.
  • Open entries:
    GET /v1/open-entries
    rows now carry
    settledWithRemainder
    (
    true
    for paid invoices and credit notes with a true leftover amount, otherwise
    false
    ). Rows whose remainder cannot be confirmed due to set-aside e-conomic import matches also carry
    outsideTotals: true
    . Both are counted in
    totals.perCurrency
    .
  • Batch journal entries:
    error responses from
    POST /api/v2/journal-entries/batch
    now include
    entryIndex
    , the zero-based position of the rejected entry. It sits in
    details
    , or at the top level for restriction errors.
  • Product groups:
    DELETE /v1/product-groups/:id
    returns
    409
    with code
    PRODUCT_GROUP_IN_USE
    and
    details.productCount
    when the group still has products.
🐝 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.
Load More
β†’