Product Update: Overhaul of Fulfillment Backend

This week we pushed out a major refactoring to our fulfillment backend. These changes will benefit our Shopify merchants using an external fulfillment service like Amazon, Shipwire or Wegistix.

The problem

One of the problems every SAAS provider is facing nowadays is a high dependency on external services. Shopify connects to a lot of external services like payment gateways, fulfillment providers, carrier shipping rate providers, asset hosts and many more. If an external server ever goes down then Shopify is of course unable to process your request.

For fulfillments this caused problems in two ways:

  1. If the external server doesn't respond to our request we would immediately retry the fulfillment up to three times. If a server ever goes down it usually takes a few minutes for it to get back up, meaning our retries would be sent when there's a high chance the request won't arrive.
  2. The request might time out and we never receive a response to let us know that the fulfillment has been received. But on the fulfillment service side the request is accepted it's just that it took too long to provide a response to Shopify so we weren't notified that this fulfillment arrived.

The Solution

We addressed the problem by processing all fulfillment requests to external services in a dedicated background job. That means that whenever you click the fulfill button within Shopify, the page will immediately respond letting you know that the fulfilment request for these line items has been sent out to the third party server. You can continue to send more fulfillment requests without waiting for the service to respond.
If a fulfillment service is unavailable or a request times out, then we will continue to send this request in increasing time intervals up to 48 hours, and we will always use the same order number when retrying these fulfillments to ensure that the fulfillment provider doesn't send out the order twice.
For shop owners this means that immediately after hitting the fulfill button your line items will show up as pending meaning they are currently being sent off.
For App developers using the API, this means that when you initially create a fulfillment request it will have a status of pending if the line items use an external fulfillment service. You can use an orders/fulfilled web hook if you need to check whether the fulfillment request has successfully arrived at the third party server.



  • Evan Robinson
    Evan Robinson
    July 25 2011, 02:33PM

    Big thanks to Dennis for pushing out a thoughtful solution to the problem of unexpected issues during fulfillment requests.

    As always, Shipwire appreciates Shopify’s thought partnership and willingness to take action to improve the merchant experience, especially when it comes to shipping.

  • Andrew Moore
    Andrew Moore
    August 08 2011, 02:25PM

    I’d love to see you support for fulfillment.

  • Jimmy
    September 22 2011, 04:22PM

    Thanks Dennis!

    I cant wait to see some more shopify apps that offer order fulfillment services. I tested FulfillRite Fulfillment services beta app and i know that Shipwire will probably have one up shortly too.

    good luck everyone!

  • jessie
    October 28 2011, 07:35PM

    Does this mean that the fulfillment process is a manual one? Does this mean that I have to click a FUFILL button eery time someone orders? If so, where is this located? Thank you in advance for your feedback.

  • Michael
    September 08 2012, 03:06AM

    That restricts shopify to small businesses. Shopify needs to find a solution that solves the original problem automatically. I was just about to purchase it until I found out about that.

  • shawn
    December 19 2013, 11:33AM

    Has this problem been addressed? Does the fulfillment notification work in “test mode”? Doesn’t seem to be working for me either way. Is there a way to “batch” orders to .csv file automatically or is this a manual onesie twosie deal?

Leave a comment ...

Start your free 14-day trial of Shopify