How do I run online and in-store POS sales from one system?
- Type
- Applies to
- Medusa v2.x
- Updated
Short answer
Medusa runs online and in-store sales from one backend by giving each store's point of sale its own sales channel and stock location. A POS app places orders as draft orders through the Admin API, sharing products, customers, promotions and returns with the web store. Agilo's open-source POS Starter provides a ready app; terminals and offline mode need custom work.
How Medusa runs online and in-store sales from one backend
Medusa runs a web store and physical stores from one backend by treating each store's point of sale (POS) as its own sales channel. A POS is the app staff use to ring up in-store sales. Products, customers, promotions and orders live in one Medusa application, and the POS app talks to it over the Admin API, the same way the storefront uses the Store API.
Medusa's POS recipe describes the pattern: create a sales channel for the online store and another for the POS, link each to its stock locations, and place in-store orders as draft orders. Orders from every channel then show up together in the Medusa Admin.
Which POS capabilities does Medusa provide?
Medusa provides the backend for a POS; it doesn't ship a POS app itself. The table maps common POS terms to Medusa. Native means Medusa core, Starter means an open-source starter app, and Custom means you build it.
How endless aisle works with Medusa
Endless aisle means a customer buys an item in the store that isn't on the shelf, and it ships to them from a warehouse. In Medusa, you link the POS sales channel to both the store's location and the warehouse locations. Staff then see warehouse stock in the POS when they sell an item the store doesn't have on the shelf.
The POS recipe describes this case: when a product is out of stock in the store but available in a warehouse, the customer buys it in-store and it is delivered to their address. Staff can choose the fulfilling location when they create the fulfillment in the Medusa Admin.
Shared inventory between the website and the store
Shared inventory in Medusa is controlled by which stock locations each sales channel can use. If the website channel is linked to the warehouses only, online orders never consume store stock. If you link the store location to the website channel too, the store's shelves count toward online availability, which supports in-store pickup through the location's pickup options.
Each order reserves stock at a location and deducts it on fulfillment, so the same counts are used by every channel. See inventory concepts and manage locations.
Example: Tekla's POS on Medusa
Tekla moved into physical retail in April 2023 with a Copenhagen store and an iOS POS app built by Agilo on top of the Medusa backend that already ran its online sales. According to Medusa's case study, the app supports endless aisle, customer lookup, barcode scanning, draft orders, returns and exchanges, and Stripe Terminal payments.
Agilo created a sales channel for the Copenhagen store and linked the store's stock location to it, so store stock wasn't used for online orders. Distribution center stock was also made available to the store for endless aisle. Agilo later released the Medusa POS Starter, an Expo and React Native app built on the Admin API. Its README says integrated payment processing and full offline mode are not yet supported.
When Medusa is not the right choice for POS
Medusa is a weaker fit if you need a finished POS with hardware, terminals and offline mode on day one and have no developers. A packaged POS from your commerce platform or your payment provider is faster in that case. Medusa fits when you want online and store channels on one backend you control, and can build or adapt the POS app.
Common questions
Does Medusa include a POS app?
No. Medusa provides the backend and APIs for a POS. Agilo's MIT-licensed Medusa POS Starter is an Expo and React Native app that connects to the Medusa Admin API and can be used as a starting point.
Can customers buy in store and get delivery from a warehouse with Medusa?
Yes. Link the POS sales channel to warehouse stock locations as well as the store's location, and staff can sell warehouse stock and fulfill it from the warehouse. Medusa's POS recipe calls this an endless aisle experience.
Can I take card payments in store with Medusa?
Yes, through a payment module provider for your terminal vendor, such as Stripe Terminal, which Tekla used. Medusa doesn't ship a terminal integration in core, and the POS Starter's README says terminal payments are still in development.
Can in-store purchases be returned online with Medusa?
Yes. Orders from every sales channel live in the same Order Module, so returns, exchanges and claims work the same way for in-store and online orders.