> For the complete documentation index, see [llms.txt](https://docs.flowretail.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.flowretail.com/docs/july-2026.md).

# July 2026

## Monthly summary / tl;dr

* **Store budgets** — set a monthly sales and profit budget per store, spread it across the days of the month, and follow up with a new budget-versus-actual report.
* **VAT margin scheme for used goods** — VAT on second-hand items is calculated on the profit margin instead of the full sales price, with the correct legal notice on receipts and invoices in every country.
* **Customer numbers** — every new customer gets a running number that works across all your stores, and can be found by searching for it in the till.
* **Customer consent self-service** — send customers a link so they can review and update their own consents without asking staff.
* **Several external IDs per order and receipt**, replacing the single external order and voucher number — and searching for an order by one of them is back to a few milliseconds.
* **Turnover reports can count ordered instead of settled revenue**, so confirmed but unpaid orders are included.
* **GTIN/EAN** **scan of products before deliver-out** can now be required per organization, so staff verify the correct goods are handed over to the customer.
* **Correct alphabetical sorting** in every list — Æ Ø Å (and Å Ä Ö) finally sort where they belong.
* **Thermal printing is always native ESC/POS** now – the old HTML print path is, poff, gone.
* Around **300 broken translations** repaired across all languages.
* A long run of payment, refund, prepayment, purchase order and Omnium fixes.

***

**Developer / working with the API?** See [For developers](#for-developers) at the bottom for a more technical update 🤓

***

## 2026-07-29

### Added

* **Store budgets** — set a monthly sales budget (ex VAT) per store, with an optional profit budget, and distribute it across the days of the month. The new **budget report** compares budgeted and actual sales and profit per month and per day, using the same figures as the turnover report.
* **VAT margin scheme for used goods** — a product can be marked as sold under the margin scheme, and VAT on those lines is then calculated on the profit margin (sales price minus purchase price) instead of the full sales price, using the product's normal VAT rate. A zero or negative margin gives no VAT, and a line without a cost price falls back to ordinary VAT. The rule follows the sale onto the order line, and onto the credit line on a return, so order history keeps the treatment that applied at the time even if the product is changed later.
* **Used goods on receipts, invoices and order printouts** — margin-scheme lines are left out of the per-rate VAT breakdown (VAT is still included in the total), and any order containing at least one used item prints the legal notice required in that country (nb/nn `mval. § 16-11`, da `momslovens §§ 69–71`, sv `ML 9 a kap.`, fi `AVL 79 a §`, de `§ 25a UStG`). Mixed orders show VAT rows for the new goods only, and the invoice header's "Mva" and "Avg. pliktig" figures match the breakdown table. Applies to receipts, invoices, order printouts and thermal receipts in every language.
* **Customer numbers** — every new customer is assigned a running number from a series shared across all your stores. The number is shown on the customer and can be searched for in the till, by the full number or part of it. New tenants get the series when they are set up, and existing tenants get one automatically, starting at 100000. Existing customers keep no number — numbers are assigned to customers created from now on. The series name and range can be adjusted under number series settings.
* **Customer consent self-service** — send a customer a link by SMS or email so they can review and update their own consents without staff assistance. Issuing a new link invalidates the previous one, customers can ask for a fresh link themselves from a public form, and the page is shown in your language.
* **Several external IDs per order and receipt** — an order or receipt can now carry more than one external ID, each with its own label, and the ones marked as externally visible are printed on receipts, offers and PDFs. Existing external order and voucher numbers are carried over automatically.
* **Turnover reports can count ordered revenue** — turnover can now be reported on the order date, including orders that are confirmed but not yet paid, instead of only on fully settled orders by settlement date. Settled remains the default, and the choice applies to every turnover report: stores, product groups, products, orders, sellers, and the product turnover report.
* **Require a GTIN scan before deliver-out** — a new organization setting makes the till scan each item's barcode before a deliver-out can be completed, so staff verify that the right goods are handed to the customer. Stores inherit the setting from their organization.
* **Required customer fields per customer type** — you can now set required fields separately for persons, companies and B2B customers, departments and customer contacts. Companies, departments and contacts follow the person rules unless you set their own, and the customer name is always required. Customer contacts also gained address, postal code and city, so address requirements can be enforced on contacts alongside email and mobile.
* **Ad-hoc SMS from the order view and the customer view** — send a one-off SMS to a customer via Omnium. The message is stored in Omnium, so Flow and the webshop share one complete message log, and the message history now shows Omnium messages for customers as well as for orders.
* **Nets terminal payments now say what is happening** — "Payment started, present card" or "Refund started, present card" appears as soon as the request reaches the terminal, so staff can see that the payment is under way before the terminal responds.
* **Who received the goods** — a receivement now shows the user who actually received the goods, instead of whoever last touched the record.
* **Product search by partial SKU** — typing the start of a SKU such as `09.000` now returns every product whose SKU begins with that sequence, not only an exact match.

### Improved

* **Searching for an order by external order number, voucher number or external ID is fast again** — a few milliseconds instead of the two seconds and more it took on large tenants. Applies both to order search and to the order list.
* **Names now sort in the correct alphabetical order** for your language across brands, suppliers, categories, product groups, stores, users, payment methods and many other lists. Norwegian Æ Ø Å and Swedish and Finnish Å Ä Ö sort at the end of the alphabet where they belong, and capitalisation no longer affects the order.
* **Thermal receipts and exchange notes always print as native ESC/POS.** Tenants that used to print through the older image-based path now get the same output as everyone else.
* **The printed pickup label** uses clearer Norwegian labels (Produkt, Varekode, Antall, Eksternt ordrenr., Kjøpt) and a tidier layout, with a consistent product font and less empty space under the barcode.
* **Bank terminal details on the receipt PDF** use a smaller font and tighter line spacing. No'one reads it anyways.

### Fixed

* **Refunding a prepayment on a zero-total order** now offers the prepayment method alongside cash, so a remaining prepayment balance can be refunded.
* **Registering a prepayment** no longer fails when the order has more units on order than in stock. Stock and serial number checks are skipped for prepayments, since nothing is delivered, and still run at actual settlement.
* **Store credit used as a prepayment** is now drawn when the prepayment is registered instead of at final settlement, so the balance drops immediately and the prepayment receipt shows the correct remaining amount.
* **Partial refunds on orders paid with several card captures** — a deposit followed by a final payment — no longer fail with "Can only have one complete settlement with this settlement code".
* **A cancelled payment no longer dictates the refund method.** When a payment is cancelled and the customer pays with something else, the "refund to same method" rule now points at the method actually used.
* **A payment can no longer be deleted from a fully settled receipt.** The attempt is rejected with a clear message explaining that the goods must be credited instead.
* **Verifone card receipts no longer print twice.**
* **Printing an exchange note on a partially settled order** now covers the lines that are paid, instead of being blocked by the unpaid ones.
* **Completing a receivement** records the logged-in user on every line, also when the goods are received by updating an existing receivement rather than creating one.
* **Purchase order status no longer stalls** when a receivement is confirmed. The purchase order reaches complete once the remaining open receivements are closed.
* **Purchase order message history works again in the till.** Every attempt to open it had been failing since April.
* **The open items report** now lists invoices that still have an outstanding balance when the order has a credit note that was never settled as an invoice credit. Those invoices were missing from the report even though the order screen showed them as unpaid.
* **The open items report** also shows the correct outstanding amount for orders paid with more than one method. An order split between a card or cash payment and an invoice reported the whole order total as unpaid — 400 kr instead of the 300 kr invoice portion. The amount column still shows the full order total.
* **Around 300 broken translations** are repaired: placeholders that came out as `<no value>` (such as the Norwegian insufficient-stock error), messages missing details like the order number or SKU, and untranslated Dintero and sales summary texts. All languages now match the English messages.
* **Number series can no longer hand out the same number twice** when several users create records at the same moment. The purchase, RMA[^1], customer ledger and new customer number series are now unique and gap-free.
* **Duplicate checks on email are now case-insensitive** for both customers and contacts.
* **Duplicate checks on person customers** now correctly block a single matching email or phone number, and creating a contact without an email is no longer blocked by other contacts without one.
* **The logo no longer gets clipped on thermal receipts.** Images too wide for the printer are scaled down to fit.
* **The external info label** on receipts, offers and PDFs now reads "Information", translated per language, instead of "Note" / "Merknad" / "Anteckning", so it is clearer that the text comes from the product's external info value.
* **Orders imported from Omnium** keep the name and address that came with the order. The customer's saved address is used only when the order carries none of its own.
* **Imported orders keep their original price.** An order imported from an external source such as SAP records the imported item price as the original price on each line, so later price reductions on those lines count as discounts.
* **Omnium customer and order sync no longer crash** when the extension is set up without parameters, and incoming order sync no longer crashes when an existing order cannot be fetched from Omnium — the job is logged as an error and not retried.
* **Omnium warehouse sync recovers from failed batches.** A failing stock update is split and retried in smaller chunks, so valid items still reach Omnium and only the rejected products are reported as errors.
* **PayEx gift cards** no longer fail when the card's token has no expiry date.
* **Two** **invoice amounts below 100** no longer come out wrong.
* **Sorting users by last accessed** now puts users who have never logged in (shown as 1970-01-01) last when sorting newest first and first when sorting oldest first, instead of always at the top.

### Removed

* **HTML printing of thermal receipts and exchange notes.** Both are now produced as native ESC/POS only.

## 2026-07-08

### Fixed

* **Products hidden from search can be opened again when the app looks them up directly** — turning off "show in search" no longer keeps a product out of direct lookups as well.

## 2026-07-02

### Fixed

* **The sales-order permission covers registering an in-store payment of an invoice**, not adding payments directly to a settlement. Corrects the change published on 29 June.
* **Client**: the **"Register invoice payment"** button now appears in the order details dialog for users who have permission to register invoice payments.

***

## For developers

API and integration changes released in July.

### Added

* Store budgets: `/stores/{storeUid}/budgets/{budgetYear}` for the monthly budget and its daily distribution, and `/reports/budget` for budget versus actual per month and per day.
* All turnover endpoints accept `reportBasis`: `settled` (default — range on `settled_at`, only fully settled orders: COMPLETE, settleState COMPLETE, with voucher) or `ordered` (range on `order_date`, includes COMPLETE and CONFIRMED). Applies to stores, product groups, products, orders, sellers and the product turnover report.
* Products carry `usesVatMarginScheme` on create, update and response. Order items carry it too, copied from the product when the line is created and from the original line on credit.
* Customer responses include `customerNumber`, assigned from a tenant-level number series (existing tenants get one by migration, starting at 100000; existing customers are not backfilled). Searchable exact or partial. The series is maintained through the existing number series endpoints.
* Orders and receipts carry `externalIds` (`key`, `label`, `value`, `visibility`); entries with `visibility: EXTERNAL` are printed on receipts, offers and PDFs. `externalOrderNumber` and `externalVoucherNumber` are migrated to the new tables and remain for backward compatibility. Omnium sync and order search use the new model.
* Tenant settings: `requiredCustomerFields` (person), `requiredCompanyFields` (company and B2B), `requiredCompanyDepartmentFields` (department) and `requiredContactFields` (customer contact). The last three inherit from the person settings when not set explicitly; customer name is required regardless.
* Customer contacts: `address`, `postalCode` and `city` on create, update and response.
* Organizations: `appSettings.requireGtinScanBeforeDeliverOut`, read/write via `PUT /organizations/{uid}`. Stores expose the same field read-only, inherited from their organization.
* `POST .../purchase-orders/{purchaseOrderUid}/email` sends the purchase order as a PDF attachment to one or more recipients. `GET .../purchase-orders/{purchaseOrderUid}/download` returns the PDF as base64-encoded JSON by default, and as a binary PDF stream with `Accept: application/pdf`.
* `GET /tenants/{tenantUid}/orders/{orderUid}/receipts` lists all order receipts for an order across stores, including post-settlement task status per receipt.
* `POST .../pricelists/{pricelistUid}/prices/search` accepts optional `fromDate` and `toDate`; only prices whose validity period overlaps the range are returned. Either may be omitted, and leaving both out keeps the existing behaviour.
* `POST …/orders/{orderUid}/omnium-sms` and `POST …/customers/{customerUid}/omnium-sms` send ad-hoc SMS through the Omnium messaging API. Notification search now merges Omnium messages for customers as well as for orders.
* Receivement responses include `receivedBy` (user UID and display name) on the header, so clients no longer have to fall back to `lastModifiedBy`.
* Product group responses include `hasChildren`.
* Order item and addon responses include `orderItemReference`, so clients can prompt for a reference when adding accessories without fetching each product.
* `OrderLinkTypeResponseENUM` gained `AUTO_ADDED`, returned on the main product line when an auto-added accessory (for example a deposit cup) is linked to it.
* `GET /account/invite` includes `tenant.languageCode`, so the invite confirmation page can render in the tenant's language.
* Omnium order sync sends `flow.orderline.createdAt` on each order line.
* Product search supports prefix matching on SKU.

### Changed

* Order search and the order list no longer match the deprecated `externalOrderNumber` and `externalVoucherNumber` columns. Both now query only the external ID table that those values were migrated to.

### Fixed

* Zero-total orders can now be settled through the API with an external or foreign-currency payment method, the same way as cash. Integrations only — the POS still offers cash for zero-total orders.
* `ORDER_DELIVERED` webhooks fired twice per delivery, from both the order-heading and the order-receipt delivery-state update. The webhook now fires only from the order-heading path.
* Invite endpoints return distinct errors for a bad token — `410 ErrInviteTokenExpired`, `400 ErrInviteTokenInvalid`, `409 ErrInviteTokenUsed` — instead of a generic `500`.
* Notification search accepts requests filtering by `purchaseOrderUid` or `receivementUid` without a `storeUid`; the purchase order or receivement is resolved within the tenant instead. Every such request had been answered with a `400` since the client stopped sending a store in April. Behaviour with `storeUid` is unchanged.
* Product search with `exactMatch: true` and a list of `productUids` returns products even when "show in search" is disabled — that path now skips the visibility and `NO_SEARCH` filters, matching SKU-based exact match.

### Deprecated and removed

* `POST .../purchase-orders/{purchaseOrderUid}/receipt` is deprecated in favour of the new `email` and `download` endpoints.
* The `Accept: text/html` response on order receipt PDF download is removed, along with the HTML-to-ESC/POS conversion path and the `bong-receipt.html` and `exchange-note-receipt.html` templates.
* Flowbox responses no longer include `version` and `lastConnected`. Both existed in the schema but were never populated — always an empty string and a zero timestamp.

[^1]: RMA (Return Merchandise Authorization) — a formal authorization for a customer to return or exchange goods, tracked as its own order type.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.flowretail.com/docs/july-2026.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
