April 2026
Monthly summary / tl;dr
The Assistant app had a massive month — full return and refund flow, pre-payments, PIN protection on credit and sale, and a serious purchase order glow-up with filter chips, notes, receivement history, and an actually useful "more options" menu.
Order handling got smarter across Client and Admin — require serial numbers on completion, pick a message template, print a missing items note, email the customer when done, and create Profrakt shipping labels straight from the dialog.
New Klaviyo integration (Beta) — a tenant extension that syncs customers and consents into Klaviyo for marketing automation.
New Company Registry lookups — look up companies by organisation or VAT number through a configured provider (Power Direct first out of the gate).
New Customer Merge endpoint — finally a clean way to fold duplicate customers into one and bring their orders along.
Order Import has been straightened out: no more silent magic. What you send is what you get — required add-ons, freight, and explicit prices are now your job, not ours. We'll fail loudly and early instead of half-building an order.
Smarter customer and order search — better ranking, multi-word matching, dial-code-aware phone lookups, and a proper order date range filter.
The Payment Methods admin UI got a refresh, plus a new visibility mode (
HIDDEN_WHEN_NOT_REQUIRED) for methods that should only show up when needed for a refund.Loads of Omnium sync improvements — B2B contacts, e-invoice details, fewer accidental overwrites, retry on queued orders, and far fewer duplicate customers.
As always, a long tail of fixes — phone input no longer eats your digits, gift card CVCs no longer crash payments, package product rounding adds up properly, and cross-store transactions are now properly blocked.
2026-04-30
Added
New Company Registry tenant extension that points to the integration used for company lookups. Activate it and set the provider extension UID to the integration you want to use.
New endpoint to look up a company by organisation or VAT number through the configured company registry provider. If you leave out the country code, the tenant's country is used. If the provider rejects the request (for example an invalid identifier), you get a
400with the provider's own explanation.Tenant payment methods now support an optional receipt text (
receiptText) — the line that's printed on the receipt when that method is used.
Fixed
Order import no longer requires you to include the freight line yourself — leave it out and the system will add it for you using the freight product set on the delivery method.
Order search respects the chosen sort order again. Sorting by settled date, order date or any other field now actually applies, and orders that don't have a value for the sort field (for example orders that aren't settled yet) are listed at the end instead of jumping to the top.
The delivery service lookup no longer performs an unnecessary product search when the response has no value-added or freight services, which was causing incorrect results.
Several Omnium order integration fixes around delivery creation, state mapping, and preserving Omnium's own values when Flow has nothing to overwrite them with.
2026-04-28
Added
Pre-payment support in the Assistant app — take pre-payments on orders, use existing pre-payments during final payment, and view pre-paid amounts. Perfect for special orders and deposits.
Order status check before payment in the Assistant app — surfaces blocking errors and ignorable warnings before you start the payment flow, so you don't get stuck halfway.
Full return and refund flow in the Assistant app:
Start a return on the Sales Hub — look up a settled order by number, or create an empty return from scratch.
Return mode on open orders, marked with a "Return" badge in the order header.
Return / Sell prompt when adding a product to an order in return mode, so you don't accidentally credit something you meant to sell.
Pay button shows "Refund" with destructive styling when the order total is negative.
Serial number re-entry when crediting a serial-numbered item — scan or enter the actual serial(s) being returned.
PIN confirmation before crediting an order, when
requirePinCodeForCreditis enabled (Assistant app).PIN confirmation before creating a new sale or opening an existing order, when
requirePinCodeForSaleis enabled (Assistant app).Serialised products can now be added without a serial number — the serial can be entered later, before payment (Assistant app).
Order handling improvements (Client and Admin):
New "Require serial number on completion" switch.
New optional "Template on completion" dropdown for sending a message when the handling is completed.
Re-print pickup note on completed order handlings (Client).
Print missing items note (Client).
Notify customer by email when completing an order handling (Client).
Order and item notes are shown in the order handling open dialog (Client).
New Customer Merge endpoint:
POST /tenants/{tenantUid}/customers/{customerUid}/merge— passmergeFromCustomerUidin the body to merge the duplicate into the customer in the path. Sales orders and related data are reassigned to the surviving customer, and the duplicate is deleted. RequiresCUSTOMERpermission.Sold not delivered dialog added to the touch sale "more" dialog (Client).
Stocktaking in the Assistant app got a proper exit experience:
Progress bar on the loading screen.
Exit dialog when leaving with three clear options: submit, save progress, or discard and leave.
New Klaviyo subscription webhook for syncing subscription changes back into Flow.
Printers API: new
availablePrintActionsfield on printer resources lists what each printer is actually capable of printing —RECEIPT,EXCHANGENOTE,GIFTCARD_BARCODE,PICKUP_LABEL,PRODUCT,CUSTOMER_MEMBERSHIP_CARD. Derived from the printer's hardware type, so clients can stop sending jobs to printers that can't handle them.Printer edit modal now shows read-only "Can print" chips listing those capabilities, with an info-icon tooltip explaining where the list comes from (Admin).
Order import now fails early with a clear message if a product has a required add-on that isn't included in the request, or if the delivery method requires a freight product that isn't included. No more half-built orders.
Import templates API response now includes the field definitions, so frontends can stay in sync without hardcoding.
Improved
Order search now ranks results by relevance when you search by customer name, address, company, phone number, email, or order number. Closest matches appear first, multi-word searches like "kari anne hansen" find the right customer even when the names span first and last name, and searching by order number still lands the exact order at the top.
Order import has been tightened up significantly — no more silent magic:
No automatic add-on products, no campaign discounts, no automatic environmental fees (ARTS). What you send is what gets created.
Required add-ons must be included explicitly and linked to the main product line.
Freight products must be included when the delivery method requires one.
itemPriceandquantityOrderedare now required on each order line.Settlements are now restricted to payment methods of type external, payment gateway, invoice, or rounding. Anything else is rejected with a clear error.
If you send a status on a settlement, we keep exactly that status instead of replacing it. If you leave it out, we default to
authorizedfor payment gateway settlements andcapturedfor the rest.
Receipts with authorized settlements from external or invoice payment methods are now captured automatically when the receipt is ready for capture — same behaviour payment gateway settlements already had.
Power: the home delivery integration has been updated to the vendor's new API version, so delivery options and time slots keep working.
Raw ESCPOS is now the default for ESCPOS printing. Can be turned off via feature flag if needed.
Import templates in Admin: required-field rules now come from the backend instead of a hardcoded frontend table, so the editor stays in sync when Core changes. Fresh templates open empty with a "Suggest fields" helper (favours
skuoverproductUidwhen both are allowed), and the header shows "Valid for: Create / Update" capability badges.Serial number is no longer required to be re-entered in order deliver and order handling if it's already on the order line (Client).
Payment methods in the Assistant app are now fetched fresh per order instead of using a cached list from login — toggle a payment method setting on the backend and it takes effect immediately.
Stocktaking progress in the Assistant app is no longer auto-saved on every quantity change — it's saved explicitly via the exit dialog, which keeps device storage from filling up.
Fixed
Accounting report: rounding settlement posts now correctly accumulate both debit and credit amounts when a rounding key receives a mix of positive and negative settlements, instead of overwriting one side with zero.
Power: cancelling a home delivery that hasn't been delivered yet now surfaces a clear error if the cancellation actually failed on the supplier side, instead of cheerfully reporting success.
Gift card settlements: entering a CVC on a gift card whose brand doesn't require one is now ignored, instead of failing the payment with a CVC decryption error.
Phone number input in the Client silently dropped digits when the typed number started with the selected country's calling code (e.g. typing
4705555with Norway selected). It now keeps your digits.quantity not deliveredon a sale order item could show incorrect values if returns were linked to that line (Client and Assistant).Return dialog in the Client could crash if the store was missing return access to its default return warehouse.
Order handling count on the Assistant dashboard didn't match the order handling list filters.
Saved stocktakings no longer build up unnecessary storage on the device over time (Assistant).
Restoring a saved stocktaking now correctly picks up items added or removed since the last save (Assistant).
Quick sale product list in the product search dialog can now actually be scrolled all the way to the bottom (Assistant).
Removed
Peripheral edit modal in Admin: the deprecated
defaultLabelTemplateandloadedLabelSizefields are gone. Label template and size now live on the Printer itself, exposed via the generic printer settings array.
2026-04-23
Added
New Klaviyo tenant extension (Core and Admin):
Configure with API key and consent parameters.
Klaviyo service for connecting and syncing customer profiles.
Customer consents sync to Klaviyo subscriptions automatically.
New
ExternalIdfield on consents for mapping to external systems — exposed in the Admin create/edit modal and the consent list, and searchable.
New payment method visibility
HIDDEN_WHEN_NOT_REQUIRED— hidden by default but promoted toLISTEDwhen the method is required for a refund (viarequireRefundToSameMethod). Great for cards-on-file scenarios where you don't want the customer to see the method unless it's needed.Order search (store and tenant) now supports filtering by order date using
orderDateFromandorderDateTo— the actual business order date, not just last-modified or settled-at.Accounting configs: new
cashfloatDiff(CASHFLOAT_DIFF) account number key for booking cash register till count discrepancies.Payment extension wizard in Admin (superadmin) — a guided setup flow that adds the extension, configures its parameters, and creates the corresponding payment method, all in one go.
Delete tenant extension — superadmin-only delete button on the extension edit modal in Admin.
Stock History report in Admin — view stock movements by store, warehouse, and transaction type, with XLSX export.
Improved
User modal in Admin: the deprecated Access Level dropdown and Store Access tab are now hidden for new users. In edit mode, a "Show old access" switch reveals both (in an amber-tinted panel) for users still on the legacy access system. Cleaner for new setups, gentler for old ones.
Payment method edit modal in Admin got a proper redesign:
Split-pane layout with left navigation (General / Requirements / Settings / Mappings) replacing the old accordion.
Parameters and mappings now edit inline above the table instead of opening nested sub-dialogs.
Tighter sizing so the dialog no longer stretches awkwardly on tall screens.
Info tooltip on the Amount Input field explaining None / Autofill Remaining / Force Remaining.
Settlement print in Admin now shows "Not verified by others" instead of "-" when closed without second approval, and hides the signature/date lines for the verifier.
Product image reorder in Admin uses the batch endpoint (
POST /media/batch) instead of firing individualPUTcalls — faster and easier on the API.Count cash modal in Admin now requires a note when the counted amount differs from the expected amount (FLOW-2499).
Fixed
Customer search now finds customers by the start of a mobile number even when the digits you type happen to begin with your country's dial code — searching
477028or47477028now matches a customer stored as+47477028….EHF:
statusAton invoice status responses now reflects the stored transaction log time instead oftime.Now().Reserved quantity on a referenced order line is now only reduced when the current order line has no delivered and no reserved items.
Cross-store transactions are now properly blocked — settlements and receipts can't be created when the till or order belongs to a different store (FLOW-2551).
Customers: the VAT number duplicate check now normalizes whitespace, hyphens, and country/MVA prefixes before comparing, so
"977 04 7838"and"977047838"are recognized as the same number — preventing duplicate companies from sneaking in via creative formatting.A pile of Omnium sync fixes:
Order status updates now retry automatically when Omnium reports the order is still queued, with Sentry reporting if retries are exhausted.
Shipment status is no longer overwritten by Flow when syncing orders — Omnium keeps its own state.
Fixed a customer sync condition that was creating duplicate private customers instead of updating existing ones.
Newly created customer contacts are now synced to Omnium, and the linked company customer is also updated so the new contact appears in its contact list. Previously only contact updates were synced.
Flow no longer sets or overwrites the returned quantity on order lines when syncing — Omnium's own return tracking is preserved.
Power: use the quantity from the return when checking if the order can be refunded towards SAP.
ReturnQuantityis now sent when transferring an order line to Omnium on an invoice.
Admin fixes:
Consents: clearing the description or external id now actually persists (previously empty values were silently dropped). Whitespace-only inputs are also trimmed.
Device auto-logout: fixed the custom seconds input not working, and unified two separate implementations into one shared component.
Image upload limit reduced to 3MB to prevent Vercel payload errors (base64 encoding adds ~33% overhead over the 4.5MB limit).
Product groups table no longer reloads when opening or closing modals without changes.
Product groups edit modal no longer has layout shift — the form populates instantly from table data.
Deprecated
Order search:
fromDateTimeandtoDateTimeare deprecated. They previously drove either last-modified or settled-time depending on other filters, which was confusing. Use the explicit fields instead —createdAtFrom/createdAtTo,settledAtFrom/settledAtTo,lastModifiedAtFrom/lastModifiedAtTo, and the neworderDateFrom/orderDateTo.
2026-04-13
Added
Standalone customer contacts — contacts can now exist independently and be linked to multiple customers with roles. Includes new endpoints for create/read/update/delete, search, and customer linking. A contact at a B2B customer can now be the same person across companies.
New tenant setting
customerContactsRequiresEmail— when enabled, email is required for contacts and duplicates within the tenant are rejected (Core and Admin).B2B customer contacts are now synced to Omnium as private customers with a
"B2B"tag, linking the contact person to their private customer record. Contact updates are also synced independently.Purchase orders in the Assistant app got a well-deserved upgrade:
Status filter chips above the list for quick status switching.
"More options" menu with actions for discount, freight cost, send to email, addresses, mark as received, reservations allowed after, and message history.
Confirmed receivements filter (All / Confirmed / Not confirmed) in the list filter dialog.
Green checkmark icon next to the status badge for orders with confirmed receivements.
Notes on purchase orders and purchase order items.
Receivement history dialog on purchase order items.
Expandable supplier info section on open purchase orders showing supplier and delivery addresses, order metadata, and totals.
Closed view for purchase orders with actions and metadata.
Drag-to-reorder items in open sales orders and purchase orders (Assistant).
Click-to-copy on phone numbers, emails, and identifiers in the customer details dialog (Client).
New order handling dialog on an order (Client), with support for:
Creating Profrakt shipping labels directly from the dialog.
Requiring a serial number on order handlings.
Selecting a message template for order handlings.
Monthly Sold Not Delivered (SIU) report page in Admin, listing the auto-generated report files.
Excel download button on the Purchase and Receivement Report page in Admin.
Delivery method: dynamic options toggle — when enabled, hides the freight product and timeslots since they're provided dynamically by the delivery provider (Admin).
Organizations page in Admin now has proper pagination controls (page navigation and page size selector).
Purchase order search response is now also available as Excel (optional via the
Acceptheader).New endpoint for available payment methods for an order, using
POSTinstead of the oldGET. TheGETversion is now deprecated.New webhook for when an order item reservation is changed.
Transaction templates API now accepts
integrationTokenalongsideauthTokenandaccessTokenfor create, list, get, update, delete, and notifications-preview.Poster print request now supports a product properties field.
Improved
Order settlement responses now include store (
storeUid,storeName) and till (tillUid,tillName,tillNumber) — so you can see where each payment was actually registered.Notifications:
templateDatais now merged into template variables before rendering for both email and SMS (optional overrides; leading.stripped from keys). Server-filled values fromorderUid,customerUid, etc. still apply when a variable stays empty after merging.When RabbitMQ or the print/message path fails (timeouts, connection issues, publish failures, etc.), affected APIs now respond with
503 Service Unavailableand clearer, localized messaging — instead of treating these as ordinary client errors. Affects order print, till, printer, product, and customer flows that rely on the message queue.Invoice payment for Danish tenants now requires a customer contact when the customer has e-invoicing enabled — and is blocked outright at settlement if the contact is missing.
Company departments no longer require phone number, address, or email — validation is skipped for departments (sub-customers) of a company.
Product group name is now optional on update.
Featured payment method in touch sale (Client) — the method's requirements are now checked before opening the payment dialog, instead of failing inside it.
Default order state filter (parked, confirmed) on the order handling list has been removed (Assistant) — show me everything.
Orders filter in Admin now has a settled date range filter, and the left column has been reordered (Order Type before Settle State) with grid rows aligned across columns.
Device create modal in Admin defaults Touch Mode to "On (Optional)" and Auto Logout to "Use tenant settings" on step 2. The Auto Logout input also hides the seconds field when "Use tenant settings" or "Disabled" is selected.
Omnium sync now includes e-invoice enabled status and e-invoice address for business customers.
Omnium: Flow no longer updates the order status on Omnium orders — only shipments are updated, which is how it should have been all along.
Omnium: timeslot, delivery provider indicator, and delivery date are now updated on deliveries when changed in Omnium.
Omnium: stable shipment IDs are now prefixed with the order UID.
Fixed
Invoice settlement for Danish tenants is now blocked when the customer has e-invoicing enabled but no contact person is set on the order.
EHF credit notes could fail validation when the customer had no contact information.
Printing of exchange notes is fixed.
Poster PDF margins were overriding the template's zero-margin layout, causing only the first page to render.
Customer search matching on name, phone, and email has been improved (also added missing trigram indexes for
firstnameandlastname).Template rendering for email and SMS: empty subject when no DB template exists no longer causes a nil dereference on
templateRecord.Subject.Exchange note receipts:
ExternalNoteis now supplied on order lines, so exchange-note templates no longer fail when showing product external info.Omnium order delivery now correctly records only the new quantity instead of the cumulative total — preventing double-counted deliveries.
Omnium contact persons on business customers now correctly link to the contact's own private customer record instead of the parent company.
Tracking number on deliveries can now be updated after the fact, and timeslots can be removed by setting
fromTimeandtoTimeto empty strings.Order items: serial number and warehouse UID can now be updated on non-editable orders until the line is fully delivered (FLOW-2365).
Payment orders now support the ESCPOS/bong receipt template (same as
ORDER).Package products: fixed a rounding issue where component prices could differ from the package total.
Package products: components are now included on the receipt.
Cashback and rounding settlements are now linked to the correct receipt.
Client fixes:
When adding a company customer during payment method requirement validation, you weren't asked to add a contact when one wasn't required.
If there were any deliveries, adding or changing a customer during payment method requirement validation didn't ask the user to update the address on the deliveries.
Couldn't select a "to" date before today on reports, even if the "from" date was set earlier.
Message history for orders and purchase orders only showed messages sent from the order's store.
Selecting Invoice payment on an order with deliveries asked you to update the delivery address even when there were no customer changes.
Order deliver out dialog used the order's
storeUidto check warehouse access, not the device'sstoreUid.
Assistant fix: delete button in the order close dialog now shows a confirmation dialog before deleting.
Admin fixes:
Organizations page footer count mismatch — showed "1-10 of N" while displaying 25 items. Footer now uses the correct page size.
Organizations page: stale form data when creating a new organization right after editing an existing one — selection state now resets on modal close.
Deleting product properties with very large text could fail due to oversized delete-confirmation dialog content.
Import template validation is now operation-aware — update-only templates no longer require create-only fields (e.g.
brandUid,productGroupUid).Import templates now block saving and importing when required field mappings are missing, with translated validation tooltips and warnings.
Field validation aligned with backend requirements, with OR-group support.
Deprecated
GET /tenants/{tenantUid}/orders/{orderUid}/payment-methods(the old "available payment methods for an order" endpoint) — use the newPOSTendpoint instead.
Last updated
Was this helpful?

