Main issue: Need to update physical “on hand” inventory via API, not the “available” quantity (which excludes committed stock from open orders). Overwriting “available” causes overselling when orders exist.
Key updates:
Shopify added a GraphQL Admin API mutation (version 2023-01) named inventorySetOnHandQuantities that sets absolute on-hand quantities. There is no REST equivalent.
A later link to this doc was reported broken in 2025; another participant pointed to the latest docs and also referenced inventoryAdjustQuantities (related docs link), but the recommended approach remains setting on-hand via inventorySetOnHandQuantities.
Guidance/Resolution:
Do not sync “available” from external systems. Update the ERP/connector to push on-hand quantities only using inventorySetOnHandQuantities. Shopify will then handle committed and available levels correctly.
Searching for an on_order_qty field in Shopify Admin API is not applicable to this problem; use the on-hand mutation instead.
Status: Actionable solution provided (use GraphQL inventorySetOnHandQuantities and fix ERP integration). No REST API support announced. The issue persists only if the ERP continues to overwrite available stock.
Summarized with AI on December 10.
AI used: gpt-5.
It seems I can only update the ‘available’ inventory qty via the API.
I would like to update the ‘On Hand’ qty. If we have one unit of stock on order and we count 10 units in a stocktake, if we update this qty via API it will incorrectly lodge 10pc as being available (which equates to 11 onhand units).
Am I missing something simple here?
If not, does anyone have a simple solution they could suggest? I’m guessing it would require a check of on order units then subtracting that number from the available qty. . . seems a little messy and I am not sure how to do this through the API.
Although this is very similar to the response i received from Chatgpt and it isn’t very clear. In the shopify API docs I cannot find any reference to on_order_qty . . .
There is a new GraphQL mutation available as of Admin API version 2023-01 called [inventorySetOnHandQuantities] for setting inventory on-hand quantities using absolute values, which sounds like what you’re looking to do. There’s no equivalent to this new mutation in the REST Admin API.
Hello, i have the same problem in late 2025. Is there a solution yet for this? My external ERP does sync the stock at multiple times of the day and always re-sets the available quantity. At this point all open order (let’s say 50) will now added to the “on hand” Stock. This leads to dramatically overselling and hours of reaching out to costumers every few weeks. The link from the last reply does not work anymore in 2025. I am happy for any clue on this topic Best regards!
You can fix this by having your ERP push on hand stock instead of overwriting available stock. Shopify now supports this through the inventorySetOnHandQuantities mutation in the Admin GraphQL API. It lets you send the real physical quantity without touching committed inventory from open orders.
If your ERP keeps resetting available stock, you will keep overselling. The correct fix is to update the ERP connector so it uses the on hand mutation only. Once that is in place, Shopify will handle committed and available levels correctly.