๐Ÿ 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.