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