November 2023

Check out what we have developed in Flow Retail POS this month! 🚀

New features

  • Support for Two B2B Payments! Two, a Nordic PSP (Payment Service Provider), delivering B2B Invoice capabilities to any retailer, is now fully supported in Flow Retail, as the very first POS system supporting Two! So, now you can super-easy sell products to B2B customers, and have Two buy the invoice, similar to how Klarna does it for B2C.
  • Product images in the clients! Last month we added general product images support. This month we extended the functionality by displaying product images to both the Checkout-, Backoffice- and Retail client.
  • Monthly accounting reports! This one has been a highly requested feature by accountants! We now generate (or “freeze”) a monthly report with various financial data for up to 18 months back in time, including the value of the inventory per month, various sales data, etc.
  • Search for employees! With more retailers using our platform, comes more users. We like! And so when clients get hundreds of employees using Flow Retail it becomes important to quickly search up a user, to change permissions, contact details, add access to more stores, etc. So, now the admins can search on both name, email and phone number to quickly find whoever they are looking for. 
  • Service/After-sales: Administration of it all. You can now easily create new service types (e.g “Replace battery” or “Assemble computer”) and also create service statuses (e.g “Not started on yet”, “Waiting for spare parts”, “Wont do”, etc.) – all from the Backoffice.
  • Service/After-sales: Quickly edit/update service orders. Updating a service, or changing status, who it’s assigned to or who’s the customer is done in a split second with our keyboard-first Retail client.
  • Service/After-sales: Add external service workshops! We have built support for adding external workshops or service centers. This is for all services where the product(s) needs to be fixed or handled at a different location than in any of your own stores.
  • Service/After-sales: Shipment of service orders. Never loose the sight a service again! Related to the previous feature, we have now added support for creating shipments on services. Simply create a shipment with destination details including any eventual tracking number, add the service orders you want to send off, and then keep full control of when they have been shipped, when they are in transit and of course when each of the services are safely received at its destination store (or external service center).  
  • Add product images in batch. Often, especially when migrating over to Flow Retail, you would want to add dozens of images per product in-a-go. With the new batch API endpoint for product images, you can now easily do that. As always, you will find all the technical goodies in our API documentation.
  • Warehouse history logs! “– Why does the system say we have 4x in stock on this product?” or “– Who (and when) took out 2x of this product?“. With the new warehouse history log you will be able to see every single stock movement of any product. When it happened. Who (or what integrated system) did it. What was the value before the change. With the warehouse history logs there will be no more secrets!
  • Exclusive payment method. Now, what is this you may think? Well, in Flow Retail we by default allow for any order to have as many payment methods (settlements) as you’d like. So if the customer wants to pay some of the order with credit card X, some with credit card Y, some with a gift card or two, and the rest by cash, then that is no problem at all. In contrast to this, some special payment methods, like the new Two B2B, only allows for using one (their) payment method to settle the whole order, and so we added support for letting specific payment methods be the only one on a order.
  • Add your own UIDs to any record! Don’t know what a UID is, you say? Well, all records (e.g a customer, a brand, a product, an order, heck – even an order line) has their unique identificator. The UID. So, lets say you create a brand “Nokia” (they still still exist, right?). Flow Retail then automatically create a UID for that brand. And, since we do this automatically, we need to make sure it is.. well, unique. And since we are developers we want to make sure its definitely unique at the first try, and so we generate UIDs that looks something like this: 7c5b0ce1-31a3-40e4-bda7-feadd2c8ead2. When you lets say want to import products into Flow Retail, you need to use that UID to reference it to the “Nokia” brand, which is not optimal, and so with this new feature you can create your own UIDs, for example simply “Nokia” (given you make sure its unique, which we do a second check on just to be sure). This is also extremely useful for integrating lets say an ERP system with Flow Retail, as the ERP can then use its UIDs as the UIDs in Flow Retail, reducing tons of mapping maintenance. Show us any other POS platform that offers this! 🙂
  • Deliveries and handlings on creating order. As part of integrations with e-commerce, where online orders and/or click&collect are being sent to Flow Retail, it is now possible through the API to add pre-defined Handlings (e.g “Pick-up order X and place at a location in the store) and/or pre-created Deliveries (e.g “This order should be delivered to customer X with address Y).


  • Adding contact person to sale. When adding a contact on a customer to a specific sale, we will now display that contact name on the receipts.
  • Better validation on adding customers. We say no to poor data quality, and especially customer data. We improved how we validate the various fields on a customer, to make sure it is as accurate as possible.
  • Enforcing lowercase usernames. With Flow Retail we try to be flexible in terms of how things work, but when it comes to usernames we are not flexible at all. From now on all usernames will and must be registered with lowercase characters only (we make sure you do). This is done just to make sure for all users there will never be any doubt whether to use a leading uppercase character or not.
  • Improved handling of large data queries. We are used to handle large amounts of data, but nevertheless we sometimes need to improve how we deal with them as efficiently as possible, especially through the APIs, and so we did.
  • Uploading product images through the API. You can now upload product images to products. That is, you can, through the API if you use that. We will add support for uploading product images in Backoffice very soon.  
  • Improved access control. We improved how access control is handled, with a clearer terminology on the various user levels, including some fixes to the access control itself. 
  • See the status of the peripherals connected to a Flowbox. The Flowbox, our tiny little black box that you place alongside assumably all the dust under your till, and which receipt printers, cash drawers, etc. are connected to, now sends a “heartbeat” on how things are going. This status can be checked in the Backoffice, for easy debugging in case of reports of issues in any of your stores. 
  • Better stock taking overview. With our Stock taking feature, you create the stock taking jobs in Backoffice, however the statuses of each stock taking didn’t update properly, and so we improved how it looks, to make it undoubtedly what’s going on.
  • Better sorting. When listing Stores and Tills, we now sort them by name (alphabetic) rather than by when they were created, which normally never makes sense to sort by.
  • Better delivery handling. We have improved how we determine if an order line can be delivered, depending on the settlement of it.
  • Scanning barcodes in product dropdown. We improved the dropdown on for example product search in purchase orders so that it is now possible to simply scan the barcode. Saving a few seconds here and a few seconds there makes anyone a super hero.
  • Reducing quantity at the right time in history. When settling an order, we now reduce the quantity initially reserved on the order lines after the settlement is confirmed.
  • Automatically removing contacts when deleting customer. When removing a customer which has contacts added to it, we now wipe the contacts alongside deleting the customer. No need for contacts floating around in space.
  • Added more optional choices. More options means more questions, which means more delays and more potential issues. At the same time, in some cases a few options is good afterall. For creating external workshops, for example, we made it optional to set the address and country details (even though its smart to have it). We also made it optional to add the tenant user UID in the store warehouse details report, among a few other things.
  • Default from-email on all outbound emails. To simplify things, we decided to enforce all outbound emails to be sent from We definitely do not want to enforce our own branding onto any clients, and so this is purely a technical thing, rest assured. To cover up on the branding effect we get here, we have at the same time implemented the store email address to be set as the “reply-to” email, and so when customers of yours eventually reply to that digital order receipt by mail, then the response will come to you and not us. Puh.
  • Zipping warehouse report data. Some of you might remember ZIP, a popular technique to compress data to save disk space. Well, ZIP (and hundreds of alternative compression techniques) is still fully alive and working, and we added ZIP support to compress the warehouse report data as a first, as these data can quickly become immensely large, and we dont want to waste disk space on data that you at the best will query for a few times per year.
  • Adding our new logo. And, oh, we have gotten ourself a brand new logo, and so we have swapped the old one out with the new one. The new logo contains an “F” character, simply representing “Flow Retail” (which represents data like product- and sales flowing seamlessly through the organization with the help of Flow Retail).


  • When scanning the barcode of a gift card in the Checkout client, it sometimes broke. Thats not good, and so we fixed it.
  • In Norway there is a law that states that its not allowed for a store to receive more than NOK 40.000 (USD 4.000) in cash per order. We apparently took this a few steps further, not allowing for changing a product’s price to above this amount during a sale. Not particularly smart if you want to sell more expensive products, and so we fixed that.
  • Fixed an issue when adjusting the stock on a product with serial number management. 
  • Although none of us are math professors, we are indeed pretty decent in math. Even so, in some cases even we fail on calculating stuff, this time on a special case when doing a credit/refund.
  • Crediting an order line with reserved stock just threw an error instead of simply removing the reservation. Better to handle it properly than just throwing errors out the window.
  • We fixed an issue related to returning products that had not yet been delivered, which is basically not possible in practice (and should not be in theory neither).
  • With our brand new Service system, we suddenly didn’t allow for updating or saving a store if the Service system extension wasn’t enabled. We are really proud of our Service system, however enforcing it upon all our customers is not the way to go, and so we adjusted that. 
  • The new sales voucher report simply failed if the user didn’t have a default store. Not a big deal, but nevertheless good to have sorted out.
  • When the price for a price list was cleared, we threw an exception, much similar to the hate/love Blue-Screen-(of-Death) on Windows 95 for those remembering those days. We dont like exceptions (or blue screens) and so we fixed this too.
  • Speaking of exceptions (or blue screens) – we actually fixed another exception as well, happening when querying the product receive report, related to if a product did not have serial number, which should be totally fine.
  • We fixed a glitch on the sorting of voucher reports, which could be incorrect in some scenarios.
  • Timezones! Why can’t all countries just stay in one timezone?! Anyway, we had a glitch where we used UTC 0 as default, and not your local time (most probably UTC+1). So, living in for example Norway meant you were one hour behind everyone else. Not particularly fun to be last, and so we programmatically fixed that.

    In addition to that we fixed dozens of minor issues here and there.

Next up

Check out our Roadmap to see a glimpse of whats coming next!