Multi Source Inventory (MSI) landed in Magento 2.3 and quietly changed how every serious store should think about stock. If you sell from more than one warehouse, store or fulfilment partner - or you have ever oversold a product that showed as in stock - MSI is the subsystem you need to understand properly.
The Mental Model
MSI splits inventory into three concepts:
- Source: a physical location that holds stock - a warehouse, a shop, a dropshipper
- Stock: a sales channel (usually your website) linked to one or more sources with a priority order
- Salable quantity: what a customer can actually buy, which is not the same as what is on the shelf
The salable quantity is the key insight. It equals physical quantity minus reservations - unshipped orders. When a customer checks out, Magento creates a reservation rather than decrementing stock. The deduction only happens at shipment, when the reservation is cleared.
Why Reservations Beat Decrementing
The old model decremented stock at order placement, which broke the moment an order was cancelled, edited or paid asynchronously. Reservations make the maths explicit and auditable:
SELECT sku, SUM(quantity) AS reserved
FROM inventory_reservation
GROUP BY sku;
Every stock movement is an append-only event. You can reconstruct exactly why the salable quantity is what it is - invaluable when a client swears a product should be buyable.
Source Selection at Shipment
When you ship, the Source Selection Algorithm picks which source fulfils each item. The default algorithm follows source priority; distance-based algorithms can pick the nearest source to the delivery address. If you fulfil from multiple locations, test this logic with real orders before go-live - we have seen stores ship everything from the wrong warehouse for weeks because priority order was set by assumption.
Integration Pitfalls
MSI is where most ERP and import integrations go wrong:
- Writing to the old tables: legacy integrations updating
cataloginventory_stock_itemdirectly bypass reservations and cause exactly the overselling MSI exists to prevent. Use the MSI APIs (InventoryApi, source items) instead. - Bulk updates: use the asynchronous bulk endpoints for large stock feeds; synchronous per-SKU updates will time out on catalogs over a few thousand SKUs.
- Backorders: behaviour differs subtly per stock configuration. Decide per source whether backorders are allowed, and make sure the storefront message matches reality.
When Single-Source Is Fine
A single-warehouse merchant can run MSI in single-source mode and never think about it again - the reservation model still protects you from overselling during flash sales, which is reason enough to keep it enabled. Do not disable the MSI modules unless you have a measured reason; disabling changes stock behaviour across checkout, imports and admin grids.
MSI rewards a little upfront understanding with inventory you can trust. Map your sources, understand reservations, integrate through the APIs, and the “how did we oversell that?” incident disappears from your operations meetings.