Your Shopify Inventory Buckets Changed on 5 August 2026
On 5 August 2026 Shopify ran a one-time migration that moved inventory holds for draft orders, transfers and shipments out of the reserved state and into committed. Your sellable quantity did not change. Nothing needed fixing, and Shopify says as much. But if anything you rely on reads inventory by bucket rather than by total, the numbers it reports moved that day, and no alert was raised anywhere.
What Shopify actually changed
The changelog entry describes "a one-time data migration that applies only to active draft orders and open transfers/shipments" at the time it ran. Shopify is direct about the impact on code: "No code changes are required to keep existing queries working; only the values shift between the two states."
That is accurate and it is also the entire trap. A query that still runs and still returns a number is the hardest kind of change to notice.
The state model, briefly
Shopify tracks inventory across several named quantities: incoming, on_hand, available, committed, reserved, damaged, safety_stock and quality_control.
The Help Center defines on hand as all units at a location, and the relationship is on hand equals committed plus unavailable plus available. Available is the inventory you can actually sell. Committed covers units that are part of a placed order but not yet fulfilled. Unavailable covers units reserved for draft orders, held by apps, or set aside as damaged, quality control or safety stock.
Both committed and unavailable sit outside available. That is why this migration did not change what you can sell. Units moved from one non-sellable bucket to another non-sellable bucket.
What did not change, so you can stop worrying about it
- Available quantity. Unaffected. Draft order holds reduced available before and reduce it now.
- On hand. Unaffected. The units never left the location.
- Overselling risk. No new exposure created by this migration.
- Your queries. They still run and still return numbers.
What did change, and who should care
If you or an app queries InventoryLevel.quantities(names: ["reserved"]) to detect draft order holds, that is now the wrong bucket. Shopify's guidance is direct: read committed instead going forward.
The stores that should check are the ones with an ops layer sitting on top of Shopify. A B2B business running quotes as draft orders and reporting on committed stock against those quotes. An ERP or inventory tool that reconciles Shopify against a warehouse system. A purchasing spreadsheet fed by an export that breaks stock into buckets. A dashboard someone built two years ago that nobody has opened the code of since.
For a straightforward D2C store with no draft orders and no integrations, this is genuinely nothing. Read the next section, confirm it does not apply, and get on with your day.
The part worth checking carefully
Here are two facts from Shopify's own documentation, and they are worth putting side by side.
First, holds for draft orders and transfers now live in committed. Second, Shopify's inventory management documentation states that "You can't use the Admin API to adjust or move inventory quantities in the committed state." The states an app can adjust are available, damaged, quality_control, reserved and safety_stock.
So the bucket these holds moved into is one that apps cannot write to, having moved out of one they could. Shopify's changelog says applications will not break, and we are not going to contradict Shopify's own statement about its own platform. What we will say is that if your integration ever wrote to reserved as part of managing draft order or transfer holds, that specific path deserves a real test rather than an assumption. Reading is clearly fine. Writing is the thing to verify.
A twenty minute check
You do not need a project for this. You need someone to run four checks.
- Search your integration code for the string reserved. If there are no hits, you are done.
- Look at any inventory report that shows buckets separately. Compare a snapshot from before 5 August with today. Reserved dropping toward zero while committed rises is the expected pattern, not a bug.
- Check draft order workflows. If you quote through draft orders, confirm your stock view still reflects what you expect.
- Ask your ERP or 3PL vendor directly. One email. They either handled it or they have not looked.
If nothing in your stack reads inventory by bucket, close the tab. That is a legitimate outcome here and most stores will land on it.
If you run B2B on draft orders
This is the group most likely to notice something. Wholesale operations in India commonly run on draft orders, because a quote goes out, the buyer takes a week to confirm, and the stock needs holding in the meantime. That hold was the reserved bucket. It is now the committed bucket.
Two practical consequences. Any report you show internally that splits confirmed orders from outstanding quotes by reading committed against reserved will now lump them together, because both land in committed. And if your sales team judges how much stock is genuinely spoken for by looking at one of these numbers, the number they trust changed meaning last week without moving on screen.
The fix is not technical. It is deciding how you want to distinguish a quote from a confirmed order now that the inventory state no longer does it for you, which usually means tagging draft orders properly and reporting from the draft orders themselves rather than inferring intent from stock buckets.
Build the check that catches the next one
The specific fix here is small. The useful thing to take away is a habit. Any store running integrations should have one reconciliation report that compares what Shopify says about stock with what the other system says, run on a schedule, with a threshold that flags a gap.
Most stores discover a change like this through a customer complaint or a purchasing mistake. A weekly reconciliation catches it in days, costs almost nothing to build once, and pays for itself the first time a sync quietly stops. It sits alongside the reporting basics we cover in the analytics worth setting up.
Why this keeps happening
This is the third platform change in a few months where the honest summary is that nothing breaks and something silently differs. Scripts stopped executing on 30 June. Additional Scripts stops firing on the Thank you page on 26 August. Now inventory buckets have been rearranged.
The pattern for merchants is the same each time. The failure is not loud, so it is found late, usually by someone reconciling numbers that no longer agree. If you are running integrations you did not build, a quarterly read of the developer changelog is cheaper than the reconciliation. Our list of signs a store has outgrown its setup covers when that stops being a job you can absorb internally.
What is the difference between committed and reserved in Shopify?
Committed covers units that belong to a placed order that has not been fulfilled yet. Reserved is an unavailable state covering units held for draft orders or set aside by apps. Both sit outside available, so neither is sellable, and since 5 August 2026 draft order and transfer holds are counted as committed.
Did this change my available inventory?
No. On hand equals committed plus unavailable plus available, and this migration moved units between committed and unavailable. Available is untouched, so your sellable quantity and your overselling exposure are the same as they were on 4 August.
Do I need to change my code?
Not to keep queries running. Shopify states no code changes are required and only the values shift. You do need a change if your logic reads reserved specifically to detect draft order or transfer holds, in which case read committed instead.
How do I know whether my store is affected?
Two conditions have to both be true. You use draft orders, transfers or shipments, and something in your stack reads inventory quantities by bucket rather than just available. Most D2C stores fail the second test and are unaffected.
Can apps still adjust these quantities?
Apps can adjust available, damaged, quality control, reserved and safety stock. Shopify's documentation states the Admin API cannot adjust or move quantities in the committed state. If your integration wrote to reserved for draft order holds, test that path specifically rather than assuming it carried over.
Get your inventory integration checked
Free check. Email hello@exactwhy.com with subject "Inventory states" and tell us what your stock data connects to, whether that is an ERP, a 3PL, a marketplace sync or a spreadsheet. We tell you within 4 hours whether this migration touches you. For most stores the honest answer is no, and we will give you that answer rather than a proposal.
Paid integration work, Rs 60,000 to Rs 2.5 lakh. We audit how your systems read Shopify inventory, fix bucket-level logic, and put reconciliation checks in place so the next silent change surfaces quickly. Scoping follows our usual approach to custom development work.
Ongoing Shopify development, Rs 40,000 to Rs 1.5 lakh a month. Including a standing review of platform changes against what your store actually runs.
The cost of this one is not the migration. It is a purchasing decision made in September against a stock report that started counting differently in August, and nobody noticing until the stock arrives.