Orders that are created through third-party marketplaces, like Facebook or Google, use [Shopify Payments](https://help.shopify.com/manual/payments/shopify-payments) as the payment processor. This guide describes a high-level, recommended workflow for using the GraphQL Admin API to track orders placed through third-party marketplaces. > Caution: > If you maintain a third-party app or Shopify Flow workflow that relies on [`Order`](/docs/api/admin-graphql/latest/objects/Order) and [`Fulfillment`](/docs/api/admin-graphql/latest/objects/Fulfillment) API objects for order automation, then you should review and implement the recommendations in this guide to make sure that your apps and workflows continue to work as expected. ## Requirements - Your app can make authenticated requests to the [GraphQL Admin API](/docs/api/admin-graphql). - Your store has existing [orders](/docs/api/admin-graphql/latest/objects/Order) that are unfulfilled. If you need to make changes to an unfulfilled item, then you can [edit an order](/docs/apps/build/orders-fulfillment/order-management-apps/edit-orders). - You're familiar with the [API objects](/docs/apps/build/orders-fulfillment/order-management-apps#api-objects-and-relationships) that pertain to fulfillment orders. - You've met Shopify's [protected customer data requirements](/docs/apps/launch/protected-customer-data). ## How it works Orders that are placed through third-party marketplaces and orders placed from other channels go through different workflows. The following diagram illustrates the differences between the workflows: ### Orders placed through third-party marketplaces The following workflow considerations apply for orders that are placed through third-party marketplaces: - **Orders aren't created with automatically captured transactions**. Merchants have to fulfill 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 customer cancellation, payment authorization, and fraud and risk analysis. From the time that a payment is authorized until it's 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 ### Orders placed through other channels For orders placed through other channels, transactions are automatically captured before the order is fulfilled. Merchants or third-party fulfillment services can also immediately act on orders to begin the fulfillment process. To learn more about fulfillment workflows for orders placed through other channels, refer to the following guides: - [Manage fulfillments as an order management app](/docs/apps/build/orders-fulfillment/order-management-apps/build-fulfillment-solutions) - [Manage fulfillments as a fulfillment service app](/docs/apps/build/orders-fulfillment/fulfillment-service-apps/build-for-fulfillment-services) ## Step 1: Migrate your app to use fulfillment orders In Shopify, the [`FulfillmentOrder`](/docs/api/admin-graphql/latest/objects/FulfillmentOrder) object models an end-to-end fulfillment process and is available in the GraphQL Admin API. The `FulfillmentOrder` object enables fulfillment data to sync accurately between Shopify and apps. > Deprecated: > By API version 2023-07, all apps should be using the [`FulfillmentOrder`](/docs/api/admin-graphql/latests/objects/FulfillmentOrder) object to manage fulfillments. > Apps using the following GraphQL Admin API objects to fulfill orders are using a legacy workflow that is no longer supported as of API version 2022-07: > > - [`Order`](/docs/api/admin-graphql/latest/objects/Order) > - [`Fulfillment`](/docs/api/admin-graphql/latest/objects/Fulfillment) To learn how to migrate your app, refer to [Migrate to fulfillment orders](/docs/apps/build/orders-fulfillment/migrate-to-fulfillment-orders). ## Step 2: Determine the source channel of an order You can use the [`DraftOrderInput`](/docs/api/admin-graphql/latest/input-objects/DraftOrderInput) input object to determine the source channel of an order. > Note: > For an order to be correctly attributed to a channel, you must [register the channels](https://forms.gle/koDici5wXhXAdhe17) that your app is managing. After that, or if your app already has its channels registered, you can refer to the list of `source_name` values in the [Partner Dashboard](https://partners.shopify.com/), on the app's Marketplace extension. ### Identify orders processed with Shopify Payments or Facebook Payments To identify an order that was processed with Shopify Payments or Facebook Payments, you can retrieve the order using the [GraphQL Admin API](/docs/api/admin-graphql/latest/queries/order#section-examples) and review the information in specific response fields. The following table lists the response fields and values that you can review when you retrieve an order:
Field | Shopify Payments value | Facebook Payments value |
---|---|---|
displayFulfillmentStatus |
ON_HOLD | UNFULFILLED |
displayFinancialStatus |
AUTHORIZED | PAID |
paymentGatewayNames |
["shopify_payments"] | ["instagram"] |
Object | Field | Value | Webhooks |
---|---|---|---|
Order | displayFinancialStatus |
AUTHORIZED or PAID | orders/updated |
FulfillmentOrder | status |
OPEN | fulfillment_orders/
fulfillment_orders/
fulfillment_orders/ (API version 2023-01 and higher) |