I’m building a pre-order app and need clarification on SellingPlanReserve.ON_FULFILLMENT behavior.
Setup: SellingPlan gid://shopify/SellingPlan/692584972654 with inventoryPolicy.reserve: ON_FULFILLMENT (verified via GraphQL
on pre-order-stg.myshopify.com).
For order #1054 (qty=2), Available decreased by 2 (and Committed increased by 2) at the moment I clicked “Release hold” — not
when I clicked “Mark as fulfilled”. On hand only changed at Mark-as-fulfilled.
The SellingPlanReserve docs state “Reserve inventory when order is fulfilled,” which merchants reasonably read as the
Mark-as-fulfilled action. Is committing at Release-hold the intended behavior? If yes, could the docs clarify that “fulfilled”
means “fulfillment order leaves On hold,” not “order is shipped”? Also: is there a supported way to defer Available →
Committed until Mark-as-fulfilled?
Hi @Nmh11! Your observation lines up with how the API describes this. ON_FULFILLMENT does not mean wait until the merchant clicks Mark as fulfilled.
The SellingPlanReserve enum only has ON_SALE and ON_FULFILLMENT, and SellingPlanInventoryPolicyInput.reserve must be one of those two values. I checked the live Admin API schema as well, and there is not another reserve value for committing inventory when the shipment is marked fulfilled. The best read is that ON_FULFILLMENT maps to the fulfillment order becoming ready to fulfill. ON_HOLD blocks the fulfillment process until the hold is released, while FulfillmentOrderStatus.OPEN is ready for fulfillment.
That is consistent with the Available -> Committed movement at Release hold. Committed inventory is defined as units that are part of a placed order but are not yet fulfilled, and Available excludes inventory committed to orders. The later On hand change fits the distinction between inventory being committed to an order and the fulfillment being completed, but I would not treat that as a separate selling plan reserve mode.
I agree the wording in the reserve docs is easy to read as meaning the merchant’s Mark as fulfilled action. That is useful docs feedback, but with the current selling plan inventory policy values I would not expect a supported way to defer Available -> Committed until that final action.