Developer Changelog / Feature preview

Physical inventory feature preview
Warehouse "bins" become addressable via API

Three primitives — bins (shelves and racks), counts (per-bin inventory count sets), and purchase orders (reading purchase order data) — are shipping early in the unstable version of the GraphQL Admin API. They can only be called once the feature preview is enabled on a development store.

On this page
  1. Understand it in 30 seconds: what shipped
  2. The three primitives (bins / counts / purchase orders)
  3. Data model diagram: how Location and Bin relate
  4. How to enable it (3 steps)
  5. What you can do / what the post doesn't say
  6. 5 points developers should know
  7. 3 practical use cases
  8. A one-line summary you can use in a pitch

1Understand it in 30 seconds: what shipped

Until now, Shopify's inventory APIs stopped at "inventory quantities per location."
This feature preview goes one level deeper —— to the unit merchants actually use when organizing a stockroom, namely bins/per-bin counts/purchase orders become available as API primitives.

Shipping in unstable

It exists only in the unstable version of the GraphQL Admin API.still under active development, so the point is that you can send feedback on the schema and behavior before it reaches a stable version.

Enable it on a development store

Turn on "Physical inventory feature preview" on a development store (or an existing store) and build and test against that.

Stores without it are rejected

Calls from a store that hasn't enabled the preview return an access error . This is not a feature that works uniformly across every store.

2The three primitives

The post explicitly lists the following three under "What's included."

Bins

Bins: named storage locations inside a location

Named storage placesinside a location— like a "shelf" or a "rack". You can create and update them, andread the on-hand quantity held by each bin.

Counts

Stocktaking: set on-hand per bin

inventoryCountCreate With the mutation, youset the on-hand quantity of a specific inventory item in a specific bin. It is not an increment or decrement — it declares "this is the actual count on that shelf."

Purchase orders

Purchase orders: read-only

Purchase order data can be read read via the GraphQL Admin API. What is explicitly listed as retrievable is the purchase order itself / its line items / its supplier.

Watch out for the asymmetry. The article documents "create, update, read" for bins, "set (create)" for counts, and for purchase orders "read" only. Creating or updating purchase orders is not mentioned.

3Data structure diagram: how Location and Bin relate

Location (the unit that already exists) Bin"A-01" shelf / rack on-hand 12 Bin"A-02" shelf / rack on-hand 7 Bin"B-01" on-hand 31 A bin is a named storage place "inside" a location read GraphQL Admin API version: unstable bins : create / update / read inventoryCountCreate purchase orders : read Only works on stores with the preview turned on Preview-enabled store development store + feature preview ON → call succeeds Store without the preview feature preview OFF → access error
How bins are integrated with existing location inventory— no concrete examples or details appear in the article body; it points you to the "Physical inventory feature preview guide" instead. In other words, how on-hand at the location level and on-hand at the bin level are reconciledcannot be determined from this article alone (not documented). Be sure to check the guide for that.

4How to enable it (3 steps)

1

Set up a development store

Create a new development store, or use an existing one.

2

Turn on the feature preview

Enable "Physical inventory feature preview" on that store.

3
unstable

Point your app at unstable

Configure your app so thatall physical inventory queries / mutations are called against the unstable version.

Step 3 is the key one."only the physical inventory queries/mutations on unstable"You will need that split, so thinking ahead about how it coexists with your existing stable-version client will save you trouble later.

5What you can do / what the post doesn't say

ItemWhat the post saysWhat we can infer
bins Stated explicitly Create, update, and read on-hand Bin master data can be built and synced from an external system
counts Stated explicitly inventoryCountCreate sets the on-hand quantity for items in a bin Stocktake results can be written back
purchase orders Stated explicitly (read only) PO itself / line items / supplier You can read incoming shipments. Writing isnot stated
API version unstable only The timing of the stable release isnot stated. Assume breaking changes
Target stores Preview-enabled stores only; stores without it get an access error Whether it can be used on production stores isnot stated(the guidance assumes a development store)
Integrating bins with existing location inventory Only says to refer to the guide In the post itself,not stated. Check the guide
Bin hierarchy, capacity, and supported plans not stated

6Five points engineers should keep in mind

unstable

1. unstable = build on the assumption that the schema will move

It is explicitly described as "under active development." Field names, arguments, and return values can change, so it is safer to puta thin adapter layer in your appin between, rather than wiring your domain model directly to the shape of the API.

2. access error is a per-store branching condition

Calls from stores without the preview enabled return an access error. If your app is distributed to multiple stores, a design thatdetermines at runtime whether the store can use the physical inventory features and switches the UI accordinglyis required.

3. count is a "set" operation, not an "adjust"

inventoryCountCreate is described as "setting the on-hand of a specific item in a specific bin". Since it is not a delta-based API,accumulate scan results and send the final value— client-side aggregation is required.

R/W R

4. Design purchase orders as read-only

The post only lists read.For now you cannot build a design that assumes purchase orders are created and updated on the Shopify side. Keep the master record for purchase orders in your external systems (ERP / WMS) and simply read it from Shopify.

5. The real point of this preview is that you can give feedback right now

The post explicitly frames the goal as being able to give feedbackbeforeit reaches stable — feedback on the schema and the behavior. If something is missing for Japanese 3PL / warehouse operations (location naming conventions, lots and expiration dates, bin-to-bin moves), thentesting it and sending feedback before the stable schema is locked in is the highest-leverage move. Conversely, it is too early to build production systems around the current schema.

7Three use cases you can put to work

USE CASE 1

A PoC that encodes your warehouse bin layout in Shopify

Problem
Inventory is only visible per location; which bin an item sits in exists only in on-site spreadsheets or the WMS. Someone has to cross-reference them every time a picking instruction goes out.
Approach
Enable the preview on a development store and build an API integration that creates and updates your existing bin master (bin numbers, rack names) as bins. Take it as far as reading each bin's on-hand and visualizing it.
Impact
You can test whether Shopify can be the source of truth for inventory against real data structures, without waiting for the stable release. The PoC results feed straight back as feedback.
Technical notes
bins are the only fully specified primitive, with create / update / read all documented. But how bins integrate with existing location inventory is not covered in the post (see the guide), so nail that down first.
USE CASE 2

Build a handheld stocktaking app with per-bin count entry

Problem
Stocktaking only supports entering totals per location, so when a discrepancy shows up you cannot trace which bin it came from. Investigating the cause takes time every single time.
Approach
Select a bin → scan the items → commit the counted quantity with inventoryCountCreate at the bin level: implement that stocktaking flow, keeping a per-bin history of committed counts.
Impact
You can narrow the source of a discrepancy down to the bin level. Stocktaking can be split up and run in parallel, which shortens the time to close.
Technical notes
counts is a "set the on-hand" operation. Calling it on every scan breaks under last-write-wins, so design it toaggregate per bin on the device and send a single call. Offline queuing also needs consideration.
PO Bin supplier
USE CASE 3

Inbound shipment dashboard: read purchase order data and show it to the floor

Problem
"What is arriving, when, from which supplier, and how much" lives only with the purchasing team, so the warehouse can't prepare until the day the shipment lands.
The move
Read purchase orders through the GraphQL Admin API and build an inbound schedule view that combines PO, line items, and supplier. Display it matched against the receiving bin.
Impact
The warehouse can plan receiving space and staffing in advance. Inbound trends by supplier are visible from the same data.
Technical notes
Only read is documented, sowriting back status updates or receiving inspections is out of scope. If you do need writes, that requirement is exactly what's worth sending back to Shopify as feedback.

8A one-line summary you can use in proposals

"Shopify inventory can finally be touched from the API at the 'shelf' level below location— this is an early release.
bins support create, update, and read; counts set actual quantities per shelf; purchase orders are read-only.
It's still unstable and assumes you enable it on a development store, sothis is a PoC and feedback phase, not production adoption."