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