GraphQL Admin API 2026-10 / Generally available

Purchase Order Read API
Apps can now read purchase orders without a preview

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.

On this page
  1. What's changing (30-second overview)
  2. How it works: scopes and data relationships
  3. What you can and can't retrieve
  4. What to do, by affected app type
  5. Steps to adopt (4 steps)
  6. Configuration and query samples
  7. 5 key points for developers
  8. 3 business use cases
  9. One-line summary for proposals

1What's changing

Until now, public apps could read purchase orders (Purchase Order) only through the unstable preview.
GraphQL Admin API From 2026-10, purchase order read queries are generally available. All you need is the dedicated scope read_inventory_purchase_orders .

Before: preview only

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 .

2026-10: Generally available

No API beta application or shop preview enrollment required.read_inventory_purchase_orders scope lets you read purchase orders. Read-only.

2How it works: scopes and data relationships

App Granted scopes + user permissions Check with accessScopes GraphQL Admin API From 2026-10 inventoryPurchaseOrder inventoryPurchaseOrders By ID / paginated list InventoryPurchaseOrder id / name / status origin.supplierName lineItems (line items) transfers (connection) Requires read_inventory_purchase_orders InventoryTransfer Linked inventory transfers Also requires read_inventory_transfers
The purchase order itself can be read with 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.

3What you can and can't retrieve

Available (2026-10 public API)

Purchase order details
By ID / list (paginated)
Line items (lineItems)
Paginated connection
Supplier snapshot
origin.supplierName
Linked inventory transfers
transfers connection

Not included / not available

Out of scope

Purchase order mutations

This release is read-only. Mutations such as create and update are not included.

Removed

referenceName field

InventoryPurchaseOrder.referenceName does not exist in the public 2026-10 API. If your preview queries select it, remove it before migrating.

Out of scope

Versions 2026-07 and earlier

These public queries are not added to API versions 2026-07 and earlier.

Existing user permissions still apply. Even with the right scopes, access can be denied if the acting user lacks permission.

4What to do, by affected app

Your appRequired actionKey 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 —

5How to update (4 steps)

1

Update the scopes you request

read_inventory_purchase_orders : add this scope. If you need transfers, also add read_inventory_transfers . Keep any other scopes you need.

2

Get the new permissions actually granted

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 .

3

Update and test your queries

/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.

4

Verify results on a development store

On a store with purchase orders and linked inventory transfers, confirm there are no schema validation errors or ACCESS_DENIED errors.

If access is denied, check both theaccess scopesandthe acting user's permissions.

6Sample config and queries

shopify.app.toml

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"
Merge these into your existing scope listrather than replacing it. If you already have the matching write scope, you don't need to request the duplicate read scope.
GraphQL

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.

75 key points for developers

1. read_inventory alone is no longer enough

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.

2. Remove referenceName before migrating

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.

3. Transfers require a separate scope

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.

4. Requesting a scope doesn't mean it's granted

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.

10/1

5. Version and read-only constraints

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.

83 practical use cases

USE CASE 1

Purchase order status dashboard by supplier

Problem
You can only check purchase orders one at a time in the admin, which makes it hard to get an overview of orders by supplier.
Approach
In a custom app, page through inventoryPurchaseOrders , aggregate bystatus and origin.supplierName , and display the results as a list.
Impact
See purchase order status by supplier and status on a single screen, with no preview sign-up required.
Tech notes
All you need is read_inventory_purchase_orders . If you don't display transfers, you don't need read_inventory_transfers .
Shopify ERP Accounting
USE CASE 2

Sync purchase order data to internal systems

Problem
Purchase order details created in Shopify are manually re-entered into internal inventory and accounting systems.
Approach
Have an integration app periodically read purchase order details and lineItems , then post them to your internal systems.
Impact
Cuts manual data entry and input errors. Because it's a public API, the integration doesn't depend on unstable.
Tech notes
It's read-only, so you can't write data back from internal systems to Shopify with this API. Specify 2026-10 and page through all line items.
PO
USE CASE 3

Track purchase orders alongside their inventory transfers

Problem
Matching which inventory transfers were created for which purchase order means cross-checking separate screens.
Approach
In the purchase order query, select the transfers connection to fetch purchase orders and their linked InventoryTransfer records in a single query.
Impact
You can list the transfers linked to each purchase order, making reconciliation easier.
Technical notes
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.

9One-line summary for proposals

"Starting with GraphQL Admin API 2026-10, you can read purchase order details, line items, supplier names, and linked inventory transfers
with no preview sign-up, using only the dedicated scope (read_inventory_purchase_orders).
Existing preview integrations can no longer read this data with read_inventory alone, so you must re-request scopes."