The inventoryPurchaseOrder / inventoryPurchaseOrders queries let you fetch purchase order details, line items, supplier names, and linked inventory transfers. This read-only release works without enrolling the shop in a feature preview.
read_inventory_purchase_orders .
Readable only via the unstable preview, and the shop had to be enrolled in the physical inventory feature preview. Permissions were handled through read_inventory .
No API beta application or shop preview enrollment required.read_inventory_purchase_orders scope lets you read purchase orders. Read-only.
read_inventory_purchase_orders . However, reading the InventoryTransfer objects behind the transfers connection also requires read_inventory_transfers as well. If you don't need transfers, you can omit that selection and scope.
This release is read-only. Mutations such as create and update are not included.
InventoryPurchaseOrder.referenceName does not exist in the public 2026-10 API. If your preview queries select it, remove it before migrating.
These public queries are not added to API versions 2026-07 and earlier.
| Your app | Required action | Key point |
|---|---|---|
| Want to start reading purchase orders | Add scope read_inventory_purchase_orders request it |
No API beta application or shop preview enrollment required |
| Existing preview integration Was reading via read_inventory |
Action required read_inventory_purchase_orders obtain it |
Including unstable,,read_inventory alone can no longer read purchase orders. If you use it for other inventory resources, read_inventory keep it |
| Purchase order scopes already granted | No scope changes needed | read_inventory_purchase_orders or write_inventory_purchase_orders(which includes read access) is sufficient. Check your queries against the field names and types in the stable release. |
| Apps that don't read purchase orders | No action needed | — |
read_inventory_purchase_orders : add this scope. If you need transfers, also add read_inventory_transfers . Keep any other scopes you need.
Deploy the config change and complete the scope approval flow on existing installs.Changing the request alone doesn't grant the scopes; confirm with.currentAppInstallation.accessScopes .
/admin/api/2026-10/graphql.json : point your queries at this version. If you integrate before October 1, 2026, 2026-10 is a release candidate, so use it for testing only.
On a store with purchase orders and linked inventory transfers, confirm there are no schema validation errors or ACCESS_DENIED errors.
Example for a Shopify CLI app that needs both purchase orders and their linked inventory transfers.
[access_scopes]
scopes = "read_inventory_purchase_orders,read_inventory_transfers"
Example that fetches the first 5 purchase orders, each with up to 5 line items and linked transfers.
query PurchaseOrders {
inventoryPurchaseOrders(first: 5) {
nodes {
id
name
status
origin {
supplierName
}
lineItems(first: 5) {
nodes {
id
title
}
}
transfers(first: 5) {
nodes {
id
name
}
}
}
}
}
Paginate each connection to fetch the remaining records. If you don't need transfers, omit that selection and the extra scope.
Preview integrations, including those on unstable, can't read purchase orders withread_inventory alone.Existing integrations left unchanged may hit ACCESS_DENIED, so obtainread_inventory_purchase_orders first.
InventoryPurchaseOrder.referenceName isn't in the stable API. Preview queries that still include it will fail schema validation, so remove it before switching to 2026-10.
To read the InventoryTransfer records linked from a purchase order, you also need read_inventory_transfers as well. If you don't need them, leave that selection out and keep your scopes minimal.
After you deploy the config, the scope is granted only once existing installs complete the scope approval flow.currentAppInstallation.accessScopes to confirm what's actually been granted.
It's available only in 2026-10 and later (it isn't added to 2026-07 or earlier). Before October 1, 2026, 2026-10 is a release candidate, so don't use it in production. This release isread-only and includes no mutations, so you can't build workflows that create or update purchase orders with this API alone.
inventoryPurchaseOrders , aggregate bystatus and origin.supplierName , and display the results as a list.read_inventory_purchase_orders . If you don't display transfers, you don't need read_inventory_transfers .lineItems , then post them to your internal systems.transfers connection to fetch purchase orders and their linked InventoryTransfer records in a single query.read_inventory_purchase_orders , plus read_inventory_transfers are both required. Set up purchase orders with linked transfers in a development store and confirm that no ACCESS_DENIED errors occur.