Updated Deadline: Aug 1st -- [Deprecation] Important changes to ProductVariant, Refund and Fulfillment APIs

Ryan
Shopify Staff
492 42 113

UPDATE JAN 2: 

https://ecommerce.shopify.com/c/api-announcements/t/deadline-reminder-important-changes-to-productva...

UPDATE SEP 14 

Hey Devs!

We've recently shipped a new change to help with identifying calls that we consider deprecated.  We've added a new header to return on these calls:

X-Shopify-API-Deprecated-Reason

If you receive one of these headers in your response, this means Shopify considers that a deprecated call.  This is an effort to allow these calls to be machine readable, and loggable, in order to assist developers in identifying the areas that need to be updated.

Examples of calls that will return this header:

  • Creating a fulfillment without a location
  • Creating a product with variants that have "inventory_quantity"
  • Creating a new variant on a product that has "inventory_quantity"
  • Updating a variant with "inventory_quantity_adjustment"
  • Updating a variant with "inventory_quantity"

 

Happy Coding!

 

UPDATE JUNE 28: 

Hey Devs,

Just want to let you know that we are extending the deprecation deadline from July 1st to August 1st.  There will be a new post tomorrow with more details, but we just wanted to get it out there to maybe relieve some of the stress you are feeling headed into the weekend.

Most, if not all of your questions will be answered in the post tomorrow so try to save any queries for that!

Cheers All!

Ryan

 

Hey Devs,

Shopify is preparing to release multi-location inventory features to all merchants this summer. All apps that create fulfillments or manage inventory will need to be updated by July 1st, 2018, to remain functional on shops that track inventory across multiple locations.

Key dates

July 1st, 2018

  • Apps will no longer be able to create fulfillments without specifying a location
  • Apps will no longer be able to set inventory on the Product/Variant APIs

Migrating to support multi-location fulfillments

Shopify fulfillments are currently “location unaware”, meaning that when an app creates a fulfillment and fulfills an order, Shopify decrements the inventory with no concept of which location that inventory should be decremented from. In order to support merchants with inventory allocated across multiple locations, apps will need to include a location_id when creating fulfillments.

For details on how to migrate your apps to support multi-location, see our Multi-Location Fulfillment Migration Guide.

Migrating to support multi-location inventory

Currently inventory is set and adjusted on the product variant and is not tracked by any particular location. In anticipation of multi-location inventory, Shopify has released a new Inventory API, which includes two new endpoints: Inventory Item and Inventory Level. The Inventory API will allows apps to effectively manage inventory quantities across multiple locations.

For details on how to migrate your apps to support multi-location inventory, see our Multi-Location Inventory Migration Guide.

We’ll keep you up to date as we continue to make improvements to our platform’s multi-location fulfillment and inventory management capabilities, so you can continue to build the best apps to help extend these new features.

If you have any questions about this change, please read our detailed FAQ or contact deprecations@shopify.com.

 

Thanks,

Shopify Apps Team

Ryan | Shopify 
 - Was my reply helpful? Click Like to let me know! 
 - Was your question answered? Mark it as an Accepted Solution
 - To learn more visit the Shopify Help Center or the Shopify Blog

Replies 149 (149)
Ryan
Shopify Staff
492 42 113

No problem Jonathan!  We fully realize that this is tough, it is easily the largest change Shopify has ever made to our APIs so we are right here with you to help the transition!

Ryan | Shopify 
 - Was my reply helpful? Click Like to let me know! 
 - Was your question answered? Mark it as an Accepted Solution
 - To learn more visit the Shopify Help Center or the Shopify Blog

Naren1
Shopify Partner
44 0 30

Ryan

inventory_quantity on Variant API docs shows as deprecated. See attached screenshot

1. Can you confirm that "reading" inventory_quantity via Variant API is NOT deprecated?

2. Please clarify whether there are any plans to deprecate "reading" inventory_quantity via Variant API and the deprecation timeline in that case. 

If the API documentation can be updated to make this clear it would clear the confusion.

Thanks!

 

 

ClementG
Shopify Partner
659 0 136

Will read_inventory and read_locations be backfilled for existing installations that already have the read_product scope?

Ryan
Shopify Staff
492 42 113

1. Can you confirm that "reading" inventory_quantity via Variant API is NOTdeprecated?

2. Please clarify whether there are any plans to deprecate "reading" inventory_quantity via Variant API and the deprecation timeline in that case. 

On the variant, inventory_quantity is being moved to read-only and there is no plan to remove that functionality.  This should only be used if you want an aggregate count of inventory at all locations, as it will not provide location specific details.

Will read_inventory and read_locations be backfilled for existing installations that already have the read_product scope?

We are handling these requests at deprecations@shopify.com.  If you would like us to backfill any permissions required for multi-location support to your existing installs, email us with the app details, and the permissions you want applied.  We'll confirm the details and respond before the backfill goes out so you know the date.

 

Ryan

 

Ryan | Shopify 
 - Was my reply helpful? Click Like to let me know! 
 - Was your question answered? Mark it as an Accepted Solution
 - To learn more visit the Shopify Help Center or the Shopify Blog

Loren_D1
Shopify Partner
9 0 2

Ryan, can you provide an example of using the GraphQL to retreive all of the available inventory for a given product?  I'm trying to get the available quantity for all of the variants associated with a given product, and can't find the correct syntax to query this.  The query below works for just the Product, but I need to get all of the variant inventories below that level. 

query {
  product(id: "gid://shopify/Product/94810538000") {
   variants {
    inventoryItems {
     inventoryLevels (first:10) {
        edges {
          node {
            location {
              name
                     }
           available
               }
              }
                                }
                   }
                   }
  }
  }

 

Ryan
Shopify Staff
492 42 113

Hi Loren, you're looking for something like this, +/- the info you need or don't need 

{
  product(id: "gid://shopify/Product/94810538000") {
    id
    variants (first:10) {
      edges {
        node {
          id
          inventoryItem {
            id
            inventoryLevels (first:6) {
              edges {
                node {
                  id
                  available
                  location {
                    id
                    name
                    address {
                      address1
                      address2
                      city
                      country
                      zip
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

 

Ryan | Shopify 
 - Was my reply helpful? Click Like to let me know! 
 - Was your question answered? Mark it as an Accepted Solution
 - To learn more visit the Shopify Help Center or the Shopify Blog

Loren_D1
Shopify Partner
9 0 2

Thanks - that works perfectly.  But how'd you generate that so fast?

 

Ryan
Shopify Staff
492 42 113

Practice!

Ryan | Shopify 
 - Was my reply helpful? Click Like to let me know! 
 - Was your question answered? Mark it as an Accepted Solution
 - To learn more visit the Shopify Help Center or the Shopify Blog

Mark_Lau
Shopify Partner
4 0 0

Hi Ryan,

For the fulfillment service API, how will i know which location_id i need to use for each line item? 

Right now my company uses a private app to do all our fulfillments and we have about 600 different fufillment service. 

Some of our order's come with a origin_location attached with the line item but some order's do not have it. how will i be able to fufill the line item if it does not come with an origin_location?

thanks.