Frequently Asked Questions

In the 2022-04 release, we deprecate a number of legacy Fulfillment API endpoints that interact with fulfillments at the order level. The Fulfillment Order API was introduced in the 2020-01 API version to replace these legacy endpoints. To help you in your migration, we’ve put together answers to questions you may have about how to use Fulfillment Orders, how it differs from Fulfillments and why it creates a better fulfillment and order management experience for merchants.

Why is Shopify deprecating some endpoints on the Fulfillment API?
While using Fulfillment and Order resources to fulfill orders was once considered standard, this legacy behavior is no longer compatible with modern workflows. This holds apps back from a better, more accurate, way to fulfill and manage orders and makes it difficult for merchants to have visibility and control over their inventory and fulfillment. Fulfillment Orders API helps apps model the entire fulfillment process more accurately into its sub-pieces and unlocks access to new features like local delivery & pickup, fulfillment holds, subscriptions and more. The Fulfillment API will still exist and will still be used for some actions.

Does Fulfillment Orders do more than the Fulfillments APIs does today?

Yes! Using Fulfillment Orders allows your app to do more than using the Fulfillment API alone does today! In fact, the Fulfillment Orders API models the end-to-end fulfillment process into its sub-pieces, so fulfillment data can sync more accurately between Shopify and an order management app or a 3PL. The Fulfillment Order API tracks the lifecycle of fulfillment work, including open, in-progress, closed, canceled or incomplete, so merchants have a more granular and complete view of their order data in Shopify. It also represents the exact items that need to be fulfilled in a location for a given order, improving the accuracy of order fulfillment.

What fields and endpoints are being deprecated with this release?

You will still be able to see the fulfillment relationship at the order level, however apps will not be able to fulfill orders unless using Fulfillment Orders. To provide more detail, here are the endpoints/mutations that are going away.

REST

GraphQL

When should apps start using Fulfillment Orders?

Some of the Fulfillment API endpoints are being deprecated in the Shopify 2022-04 release. Apps will have until the 2023-06-30 date to start using Fulfillment Orders. The original 2023-03-31 deadline of 2022-04 API version was postponed to 2023-06-30with this public notice. Please follow the migration guide or visit our community forums to ask questions.

How do I move to Fulfillment Orders?

To help you seamlessly migrate, we’ve crafted a migration guide that walks you through the process of moving to Fulfillment Orders. If you’re wondering what it might look like once updated, take a look at our sample application detailing how fulfillment and order management is done before and after Fulfillment Orders.

How will current installs be impacted by moving to Fulfillment Orders?

If merchants using your app have already granted read_fulfillments or write_fulfillments, rest easy, as they will not have to agree to new permissions. Instead, you can request granular access scopes for an individual shop installation. Refer to our migration guide for more details.

How can Fulfillment Orders help to fulfill orders with sales channels?

If a merchant is selling a product on a third party marketplace or sales channel, your app will get the most up to date information on the status of the order and help you to accurately fulfill orders at the right time. Previously, legacy fulfillment services would automatically create pending fulfillments for the fulfillment service when fulfillment is requested. As merchants expand their business to capture orders on various sales channels, this has created issues in cases where orders should not be fulfilled immediately and instead placed on a temporary hold until payment is captured. With Fulfillment Orders, apps no longer need to rely on webhooks to update fulfillment fields. Instead, Shopify will create successful fulfillments in place of pending fulfillments for the fulfillment service when a fulfilled order is imported.

How can Fulfillment Orders help to manage inventory across multiple locations?

Fulfillment orders are always an accurate representation of where an item should be fulfilled from. Shopify now allows variants to be stocked at third-party locations and merchant managed locations at the same time, yet the fulfillment_service on variants is no longer an accurate representation of the service that is exclusively responsible for fulfillment. Your app must use the “assigned location ID” on any open fulfillment orders to understand definitively who is responsible for fulfilling any given order.

@Shopify_77 will there be a new webhook topic to get the fulfillment orders data?

Woohoo anyone here?

@Shopify_77 the migration docs are very incomplete (please add something about tracking - right now, it is misleading and makes us think we can’t use the tracking endpoints - particularly when paired with the deprecation message in the fulfillment api resource documentation) and the example repository is using tons of deprecated APIs.

Please check out the thread in Discord about this - lots of folks are concerned and confused.

5 Likes

Same here. The documentation and the migration guide are both not clear about how to actually fulfill orders using the FulfillmentOrders API. We still have to use the Fulfillment API to create a fulfillment.

Yes, there are new fulfillment order webhooks coming. You can find a list here: https://shopify.dev/apps/fulfillment/order-management-apps/manage-fulfillments#webhooks

That is correct, you still use the fulfillment API to create a fulfillment. The fulfillment order indicates the items to be fulfilled from a location. The fulfillment represents the actual physical shipment with a tracking number.

Some additional examples have been added. https://shopify.dev/apps/fulfillment/order-management-apps/manage-fulfillments#create-a-fulfillment

Hi @RobZone , We are moving our API to the new endpoints but we have not find a way to fulfill two items from same order from diferent locations, that was very easy in old endpoint as you could send location_id on fulfillment request, but now the entire FulfillmentOrder has only one location attached, you cannot send location_id on Fulfillment request and there is no REST or GraphQL Endpoint to create a new FulfillmentOrder for an existing order. Please help us to complete the migration before deadline.

Normally such an order would have multiple fulfillment orders. A fulfillment order is created for each location with the item in stock. This situation should not be common unless inventory is not in sync with Shopify. It is a valid use case and we are looking into it. In the meantime, you can create a fulfillment for the items in the first location, then move the fulfillment order to the second location to create a second fulfillment.

1 Like

I create an order with an item in several locations and only one FulfillmentOrder gets created. About your solution is possible to move a FulfillmentOrder that has Fulfillments already created?

@develop_5 Yes, you can move a fulfillment order after you have created a fulfillment. I think we should work through your specific use case via a support request instead of this community topic.

1 Like

@RobZone thanks for your clarification I could solve the use case and now I think we´re ready to implement in code, but just checked the flow using CURL and I solved our issue with how to generate two tracking codes from two different locations for one order, in case anyone is looking for something similar the key is to call move.json endpoint and it returns you a new FufillmentOrder on field moved_fulfillment_order.

Thanks a lot!

1 Like

Question, I have a legacy PRIVATE app, using shopify_api gem version 9.51. Can I stay on that version and use the new FulfillmentOrder endpoint, or do I need to move to the new(er) versions of the Gem ?

If I have to move to anything past 9.51 a lot of the legacy code will break, and have to be rewritten. So it is important to know if I must go to the later versions. [Example, the configuration to set the Shopify connection changes significantly, as does pagination, resources are no longer ActiveSupport wrapped but just Httparty JSON resources, etc.].

Any guidance on the required gem version will be very helpful.

I took a quick look at the 9.5.1 code. It does support fulfillment orders, but it was built for API version 2020-01, which was out of date two years ago. It might work, but it is unsupported.

Hi @RobZone

To be clear

This endpoint is being retired

/orders/{order_id}/fulfillments.json

we need to configure the new POST endpoint below, but the description says “fulfilment order as incomplete”, should is say “fulfilment order as complete” or is fulfilment order complete a different end point?

POST /admin/api/2023-01/fulfillment_orders/{fulfillment_order_id}/close.json
Description- Marks a fulfillment order as incomplete

The text is correct, if a fulfillment service cannot satisfy the request even though they accepted it, they call this endpoint to indicate that the order will not be fulfilled.

Marks an in progress fulfillment order as incomplete, indicating the fulfillment service is unable to ship any remaining items and intends to close the fulfillment order.

If the fulfillment has been satisfied, the fulfillment service should create a fulfillment and indicate the tracking number if applicable.

Thank you @RobZone

So which one of these POST API end points do we use to fulfill a satisfied order in the new

FulfillmentOrder API’s below?

None of them. You use use this endpoint to create a fulfillment for a fulfillment order: https://shopify.dev/api/admin-rest/2023-01/resources/fulfillment#post-fulfillments

1 Like

Thank you very much, this helps quite a bit in evaluating what I have to do.

1 Like