Third-party marketplace order and fulfillment workflow recommendations
Orders created through third-party marketplaces, like Facebook or Google, use Shopify Payments as the payment processor. The following guide explains when events are fired and what values are captured within the Order and Fulfillment records that are accessible using Shopify APIs.
Workflow detailsAnchor link to section titled "Workflow details"
Orders aren't created with an automatically-captured transaction. Merchants have to complete fulfillment on an order before the transaction is captured automatically and the order is marked as paid. Transaction capture is initiated by the third-party marketplace.
Orders can't be fulfilled immediately. They must be held until a period between 30 minutes and 24 hours has passed before they can be fulfilled. This is to account for buyer cancellation, payment authorization, and fraud and risk analysis.
From the time that payment is authorized until it is captured, merchants can't perform the following actions on an order:
Change the destination address
Edit the order
Issue refunds for custom amounts
Capture the payment manually
Order responseAnchor link to section titled "Order response"
Use the following information from the order response to identify an order processed with Shopify Payments.
For Facebook, review the differences in the order response values for orders processed using Facebook Payments and Shopify Payments.
|Field||Shopify Payments value||Facebook Payments value|
title: STANDARD (3-5 Business days)
title: FB STANDARD (3-7 Business days)
|Field||Shopify Payments value||Facebook Payments value|
Recommended workflowAnchor link to section titled "Recommended workflow"
Review the following recommendations for tracking and fulfilling orders placed through third-party marketplaces using Shopify APIs.
Use the fulfillment order APIAnchor link to section titled "Use the fulfillment order API"
Use the fulfillment order API to perform fulfillment-related work.
You should use the GraphQL
FulfillmentOrder object or the REST
FulfillmentOrder resource instead of using the
Order resource separately.
FulfillmentOrder gives you more control over how you manage fulfillments. Learn how to migrate to the FulfillmentOrder resource.
Use the fulfillment order status and the order financial status to determine if an order can be fulfilledAnchor link to section titled "Use the fulfillment order status and the order financial status to determine if an order can be fulfilled"
Use the fulfillment order status and order financial status to determine if an order should be fulfilled.
You can use the fulfillment order status on the GraphQL or REST
FulfillmentOrder resource to determine if an order can be fulfilled. A fulfillment order is ready for fulfillment when its
status is set to
open. Also each
FulfillmentOrder object includes a list of supported fulfillment order actions to determine which actions it can take. Learn how to manage orders by using fulfillment order actions.
Sales channel apps for third-party marketplaces require that an order is fulfilled before payments are automatically captured by the marketplace. To prevent expiration of authorized payment, a post-order workflow shouldn't use payment captured as the condition for fulfillment. Instead, determine if an order has payment authorization (status:
authorized) and fulfillment order open (status:
open) before fulfillment. To do this, you can use the
financial_status of the REST
Order resource, or the
displayFinancialStatus of the GraphQL
||authorized or paid|
||AUTHORIZED or PAID|
ConsiderationsAnchor link to section titled "Considerations"
You can't use
line_items#fulfillable_quantityto determine if an order is fulfillable if the fulfillment order is on hold. The value
Check the on hold status before you create a fulfillment following an
order/createwebhook. If you don't, then the API request fails.
Avoid using a predetermined value for the on-hold time period. This value differs across marketplaces.
gatewayto determine if an order is created through a channel. For example, following a migration, the
gatewayvalue of an order created on the Facebook sales channel app will change from
shopify_payments. Instead, use
source_nameto determine the source of an order.
Determine the source of an orderAnchor link to section titled "Determine the source of an order"
Because orders placed through third-party marketplaces use Shopify Payments instead of a unique payment gateway, the
gateway value doesn't reflect the channel in which the order is created. Fields such as
source_identifier aren't guaranteed across different apps.
Orders created using the API can be assigned any of the
source_name values listed in the Partner Dashboard. Use the
source_name of an order to determine its channel source. The
source_name property can be set only during order creation. It's not writeable afterwards.
Alternatively, orders can be assigned a custom string or left unspecified:
source_nameis a custom string, then the order is unattributed.
source_nameis unspecified, then new orders are assigned the value of your app's ID.
The following are Admin API resources for determining the source channel for an order:
If you're using the GraphQL Admin API, then use the
Untether fulfillment from order creation eventsAnchor link to section titled "Untether fulfillment from order creation events"
Avoid workflows that depend on the
order/paid webhook events to initiate fulfillments. Instead, use the
orders/updated or the
fulfillment_orders/ready_to_fulfill events (available in the unstable version of the API) and
FulfillmentOrder response body to determine if a fulfillment order is ready for fulfillment.
Transitioning between Facebook and Shopify Payment platformsAnchor link to section titled "Transitioning between Facebook and Shopify Payment platforms"
During the transition, apps need to support both the Facebook Payments and Shopify Payments workflows.
For the transition period, we recommend determining the post-order workflow based on the gateway. Orders created through a sales channel app on a Shopify Payments-enabled store will see transactions created in an authorized state. Orders have to complete fulfillment before payment is captured automatically by the marketplace. During the transition period, create a condition check on the payment gateways value to determine the post-order workflow.