Fulfilment Holds - Shopify 'On hold' status

 
Currently when an order is placed with a Purchase Option associated to it the product is placed into a payment pending and fulfilment On hold status, the below outlines what that hold status is and how to handle processing fulfillments for products once payment is captured successfully.

What are fulfilment holds?

When an order is placed that contains a presale or crowdfunding line item, that line item will show in the Shopify admin as being “on hold”.
notion image

How are fulfilment holds represented in the Shopify API?

The fulfillable_quantity attribute for a line item that’s on hold is 0, both in the order JSON payload that’s send by an order/create webhook from Shopify and when retrieved from Shopify via the Shopify REST API.
When using the Shopify GraphQL API to retrieve order information, the fulfillableQuantity attribute on the LineItem will also be 0 (although the use of fulfillableQuantity is deprecated in favour of remainingQuantity on the corresponding FulfillmentOrderLineItem object).

How do I know when to fulfil a held line item?

As part of its Presale and Crowdfunding functionality, Submarine orchestrates the capture of payment for presale or crowdfunded items, as well as the release of the “on hold” status for relevant line items.
Unfortunately, Shopify does not currently fire any specific webhooks when a line item is released in this manner, and there is no data within the existing orders/updated webhook sufficient to detect the release of a line item.
Happily, an equivalent trigger is provided by the Shopify Flow workflow builder — the “Order ready to fulfill” event.
notion image
This Flow trigger will fire whenever a line item inside an order is ready to be fulfilled — this will be immediately on the creation of the order for line items that aren’t placed on hold (for example, a regular in-stock line item), and also upon the release of an on hold line item.
Third-party integrators who need to be notified when line items are paid and ready to be fulfilled can therefore create a Shopify Flow workflow on the relevant store that sends a simple HTTP request to their own endpoint, notifying them of the order and line items that are available for fulfilment.
Depending on requirements, the payload provided in this HTTP request could be extremely simple (an Order ID and list of Line Item IDs), prompting the retrieval of full order and line item information via Shopify’s REST or GraphQL APIs, or it could be a fully-fledged payload containing all up to date order information.
Shown below is a screenshot displaying an example HTTP request payload configuration that sends a simple JSON payload containing an Order ID and a list of the Line Item IDs that are available for fulfilment through to https://webhook.example.com.
notion image