2020-10 release notes
We're no longer publishing API release notes. Instead, you can find the latest updates on Shopify APIs in our developer changelog. You can filter updates by area. For example, you can filter API updates by the API name and version, such as GraphQL Admin API changes in version 2025-04.
We're no longer publishing API release notes. Instead, you can find the latest updates on Shopify APIs in our developer changelog. You can filter updates by area. For example, you can filter API updates by the API name and version, such as GraphQL Admin API changes in version 2025-04.
| Release date | Date version is no longer supported |
|---|---|
| October 1, 2020 | October 1, 2021 |
The 2020-10 release contains many changes to improve the experience of the Shopify API. This release includes the addition of checksums to the assets API, improvements to order editing, support for bulk operations when managing discounts, the addition of shipping lines and delivery methods to orders and fulfillment orders, and improvements to product management and filtering.
This release also includes an entirely new API that allows apps to read and manage shop Legal Policies.
What’s new in 2020-10
The following features were added in version 2020-10 of Shopify's APIs:
- The Asset resource now includes a
checksumproperty. This property dramatically improves the performance of Theme Kit. - Apps can now edit orders that they created. To determine if your app can edit an order on Shopify, you can query the
merchantEditablefield on the Order object. - Apps can now add discounts to line items while editing orders.
- The Discounts API has received several upgrades in this version. It's now possible to retrieve usage counts for automatic discounts and perform bulk mutations to enable, disable, or delete large numbers of discounts codes with a single request.
- The Order object now includes
shippingLines, a list of line items that contains the shipping costs. - Fulfillment Orders now include a
DeliveryMethodType, which specifies how an order was delivered. Possible values includeLOCAL,NONE,PICK_UP,RETAIL, orSHIPPING. - Delivery profiles now have support for
profiles/create,profiles/update, andprofiles/deletewebhook topics. - The Product resource now supports a variety of statuses to manage and filter products:
draft,active, andarchived. - Apps can now read and write policies that merchants have configured for their store, such as their refund or privacy policies.
Anchor to Breaking changesBreaking changes
These changes require special attention. If your app uses these API resources, and you don’t adjust your usage of the resources according to the following instructions, then your app might break when you update to this API version.
Anchor to Tax field dataTax field data
As of version 2020-10, you can no longer create or update any tax field data using the Country or Province resources.
Anchor to Include risk analysis headerInclude risk analysis header
We've deprecated the include-risk-analysis header that includes order risks and risk analysis objects in the Order payload.
The existence of this deprecated header was not previously documented. The REST Admin API and GraphQL Admin API are not affected by this change.
If you request the header using an API version earlier than 2020-10, then the header will still be returned.
Anchor to Type filter parameterType filter parameter
We've deprecated the type filter parameter on CodeDiscountQuery. Use discount_type instead. For more information about deprecated fields, refer to QueryRoot.
Anchor to Deprecated fields in Refund and RefundLineItem objectsDeprecated fields in Refund and Refund Line Item objects
We've deprecated the following fields in the GraphQL Admin API:
restockedfield in theRefundobject. UseRefundLineItem.restockTypeinstead.refundTypefield in theRefundLineItemobject. UseRefundLineItem.restockTypeinstead.
Anchor to GraphQL Admin API changesGraph QL Admin API changes
Below are all the changes currently introduced in the 2020-10 version of the GraphQL Admin API.
Anchor to Type filter parameterType filter parameter
Anchor to BreakingBreaking
We've deprecated the type filter parameter on CodeDiscountQuery. Use discount_type instead. For more information about deprecated fields, refer to QueryRoot.
Anchor to Deprecated fields in Refund and RefundLineItem objectsDeprecated fields in Refund and Refund Line Item objects
Anchor to BreakingBreaking
We've deprecated the following fields in the GraphQL Admin API:
restockedfield in theRefundobject. UseRefundLineItem.restockTypeinstead.refundTypefield in theRefundLineItemobject. UseRefundLineItem.restockTypeinstead.
Anchor to Enhancements to discounts ,[object Object]Enhancements to discounts
We've added new fields, mutations, arguments, and types to extend and enhance what you can do with discounts. You can now use the GraphQL Admin API to do the following:
-
Retrieve usage counts for automatic discounts
-
Perform new ways of searching through discounts
-
Speed up the management of discounts with bulk mutations
Learn how to manage discounts using the GraphQL Admin API.
New fields
-
discountRedeemCodeSavedSearchesfield was added to typeQueryRoot -
asyncUsageCountfield was added to typeDiscountAutomaticBasic -
asyncUsageCountfield was added to typeDiscountAutomaticBxgy -
hasTimelineCommentfield was added to typeDiscountCodeBasic -
shareableUrlsfield was added to typeDiscountCodeBasic -
totalSalesfield was added to typeDiscountCodeBasic -
asyncUsageCountfield was added to typeDiscountRedeemCode -
idfield was added to typeDiscountRedeemCode -
targetItemImagefield was added to typeDiscountShareableUrl -
targetTypefield was added to typeDiscountShareableUrl -
titlefield was added to typeDiscountShareableUrl -
urlfield was added to typeDiscountShareableUrl -
hasTimelineCommentfield was added to typeDiscountCodeBxgy -
shareableUrlsfield was added to typeDiscountCodeBxgy -
totalSalesfield was added to typeDiscountCodeBxgy -
hasTimelineCommentfield was added to typeDiscountCodeFreeShipping -
maximumShippingPricefield was added to typeDiscountCodeFreeShipping -
shareableUrlsfield was added to typeDiscountCodeFreeShipping -
totalSalesfield was added to typeDiscountCodeFreeShippingNew mutations
-
discountCodeBulkActivatewas added -
discountCodeBulkDeactivatewas added -
discountCodeBulkDeletewas added -
discountCodeRedeemCodeBulkDeletewas addedNew arguments
-
afterargument was added to fielddiscountRedeemCodeSavedSearchesin typeQueryRoot -
beforeargument was added to fielddiscountRedeemCodeSavedSearchesin typeQueryRoot -
firstargument was added to fielddiscountRedeemCodeSavedSearchesin typeQueryRoot -
lastargument was added to fielddiscountRedeemCodeSavedSearchesin typeQueryRoot -
queryargument was added to fielddiscountRedeemCodeSavedSearchesin typeQueryRoot -
reverseargument was added to fielddiscountRedeemCodeSavedSearchesin typeQueryRoot -
sortKeyargument was added to fielddiscountRedeemCodeSavedSearchesin typeQueryRoot -
idsargument was added to mutationdiscountCodeBulkActivate -
savedSearchIdargument was added to mutationdiscountCodeBulkActivate -
searchargument was added to mutationdiscountCodeBulkActivate -
idsargument was added to mutationdiscountCodeBulkDeactivate -
savedSearchIdargument was added to mutationdiscountCodeBulkDeactivate -
searchargument was added to mutationdiscountCodeBulkDeactivate -
idsargument was added to mutationdiscountCodeBulkDelete -
savedSearchIdargument was added to mutationdiscountCodeBulkDelete -
searchargument was added to mutationdiscountCodeBulkDelete -
discountIdargument was added to mutationdiscountCodeRedeemCodeBulkDelete -
idsargument was added to mutationdiscountCodeRedeemCodeBulkDelete -
savedSearchIdargument was added to mutationdiscountCodeRedeemCodeBulkDelete -
searchargument was added to mutationdiscountCodeRedeemCodeBulkDelete -
queryargument was added to fieldcodesin typeDiscountCodeBasic -
savedSearchIdargument was added to fieldcodesin typeDiscountCodeBasic -
sortKeyargument was added to fieldcodesin typeDiscountCodeBasic -
queryargument was added to fieldcodesin typeDiscountCodeBxgy -
savedSearchIdargument was added to fieldcodesin typeDiscountCodeBxgy -
sortKeyargument was added to fieldcodesin typeDiscountCodeBxgy -
queryargument was added to fieldcodesin typeDiscountCodeFreeShipping -
savedSearchIdargument was added to fieldcodesin typeDiscountCodeFreeShipping -
sortKeyargument was added to fieldcodesin typeDiscountCodeFreeShippingNew and updated types
-
DiscountShareableUrltype was added -
DiscountCodeBulkActivatePayloadtype was added -
DiscountCodeBulkDeactivatePayloadtype was added -
DiscountShareableUrlTargetTypetype was added -
DiscountCodeBulkDeletePayloadtype was added -
DiscountCodeRedeemCodeBulkDeletePayloadtype was added -
DISCOUNT_CODEwas added to enumResourceType -
DISCOUNT_REDEEM_CODEwas added to enumSearchResultType -
COLLECTIONwas added to enumDiscountShareableUrlTargetType -
HOMEwas added to enumDiscountShareableUrlTargetType -
PRODUCTwas added to enumDiscountShareableUrlTargetType -
INCLUSIONwas added to enumDiscountErrorCode -
jobfield was added to typeDiscountCodeBulkActivatePayload -
userErrorsfield was added to typeDiscountCodeBulkActivatePayload -
jobfield was added to typeDiscountCodeBulkDeactivatePayload -
userErrorsfield was added to typeDiscountCodeBulkDeactivatePayload -
jobfield was added to typeDiscountCodeBulkDeletePayload -
userErrorsfield was added to typeDiscountCodeBulkDeletePayload -
jobfield was added to typeDiscountCodeRedeemCodeBulkDeletePayload -
userErrorsfield was added to typeDiscountCodeRedeemCodeBulkDeletePayload -
maximumShippingPricefield was added to typeDiscountCodeFreeShippingInput
Anchor to Current representations of order values ,[object Object]Current representations of order values
We added new fields to the Order object that
capture the current representation of order values. Previously, apps could only use fields such as totalPriceSet and totalTaxSet and had to manually subtract order values from returns and refunds.
New fields
currentCartDiscountAmountSetwas added to objectOrdercurrentSubtotalLineItemsQuantitywas added to objectOrdercurrentSubtotalPriceSetwas added to objectOrdercurrentTaxLineswas added to objectOrdercurrentTotalDiscountsSetwas added to objectOrdercurrentTotalPriceSetwas added to objectOrdercurrentTotalTaxSetwas added to objectOrdercurrentTotalWeightwas added to objectOrder
Anchor to Editing orders ,[object Object]Editing orders
Apps can now edit orders they created. Previously, apps could only edit orders created through a Shopify channel (for example, POS, online store, or draft orders).
To determine if your app can edit an order on Shopify, you can query the merchantEditable field on the Order object. If the return value of this field is true, your app can edit the order.
We also added a new merchantEditableErrors field to the Order object. If your app can't edit an order, then you can use this field to determine the reason why.
Anchor to Orders associated to refunds ,[object Object]Orders associated to refunds
You can now query the order that is associated to a refund.
New field
orderfield was added to object Refund
Anchor to Shipping lines on existing orders ,[object Object]Shipping lines on existing orders
You can now query a list of line items that contain shipping costs on existing orders.
New connection
shippingLineswas added to objectOrder
Anchor to Add discounts to items while editing orders ,[object Object]Add discounts to items while editing orders
You can now add discounts while editing orders. The following are use cases for adding discounts during order editing:
-
Build out post-purchase discount workflows to entice buyers into adding upgrades, complementary products, or subscriptions to their existing orders.
-
Offer items for free to first-time buyers.
-
Discount items after purchase if a buyer forgets to use their discount code at checkout.
To learn how to use the GraphQL Admin API to add discounts during order editing, refer to our Edit existing orders.
New mutations
-
OrderEditAddLineItemDiscountwas added -
OrderEditRemoveLineItemDiscountwas addedUpdated mutation
-
allowDuplicatesargument was added toOrderEditAddVariantNew types
-
OrderEditRemoveLineItemDiscountPayloadwas added -
CalculatedDiscountApplicationobject was added -
CalculatedDiscountAllocationobject was added -
OrderStagedChangeAddLineItemDiscountobject was added -
OrderEditDiscountInputinput object was added -
DiscountApplicationLevelenum was addedNew field
-
CalculatedDiscountAllocationfield was added to object typeCalculatedLineItemNew connection
-
CalculatedDiscountApplicationwas added to object typeCalculatedOrder
Anchor to Delivery method on fulfillment orders ,[object Object]Delivery method on fulfillment orders
You can now query the delivery method on fulfillment orders. A fulfillment order delivery method can help you figure out how the line items represented by the fulfillment order should be delivered, or if they need to be picked up in-store.
New and updated types
DeliveryMethodtype was addedDeliveryMethodTypetype was addeddeliveryMethodfield was added to typeFulfillmentOrderidfield was added to typeDeliveryMethodmethodTypefield was added to typeDeliveryMethodLOCALenum value was added to typeDeliveryMethodTypeNONEenum value was added to typeDeliveryMethodTypePICK_UPenum value was added to typeDeliveryMethodTypeRETAILenum value was added to typeDeliveryMethodTypeSHIPPINGenum value was added to typeDeliveryMethodType
Anchor to Product status ,[object Object]Product status
Use the GraphQL Admin API to identify, filter, and manage products based on their current product status.
Each product can have one of the following statuses:
-
draft: The product isn't ready to sell and is unavailable to customers on sales channels and apps. -
active: The product is ready to sell and can be made available to customers on the online store, sales channels, and apps. By default, existing products are set toactive. -
archived: The product is no longer being sold and isn't available to customers on sales channels and apps.To learn how to use product statuses, refer to the ProductStatus enum.
New and updated mutations
-
ProductChangeStatusmutation was added -
newStatusargument was added to mutationProductDuplicateNew fields
-
statusfield was added to objectProduct -
statusfield was added to input objectProductInputNew and updated types
-
ResourcePublicationV2object was added -
ProductStatusenum was added -
ResourcePublicationsV2connection was added to typePublishable
Anchor to Add a media image to a product variant ,[object Object]Add a media image to a product variant
You can now use the GraphQL Admin API to add a media image to a product variant. To learn how to add a media image to a product variant, refer to Managing media for products and collections.
New and updated mutations
-
ProductVariantAppendMediaInputinput object was added -
ProductVariantDetachMediaInputinput object was added -
mediaSrcinput field was added toProductVariantInputNew and updated types
-
ProductVariantAppendMediaInputinput object was added -
ProductVariantDetachMediaInputinput object was added -
mediaSrcinput field was added toProductVariantInput -
mediaconnection was added to object typeProductVariantNew error codes
-
BLANKwas added to enumMediaUserError -
MEDIA_DOES_NOT_EXIST_ON_PRODUCTwas added to enumMediaUserError -
TOO_MANY_MEDIA_PER_INPUT_PAIRwas added to enumMediaUserError -
MAXIMUM_VARIANT_MEDIA_PAIRS_EXCEEDEDwas added to enumMediaUserError -
INVALID_MEDIA_TYPEwas added to enumMediaUserError -
PRODUCT_VARIANT_SPECIFIED_MULTIPLE_TIMESwas added to enumMediaUserError -
PRODUCT_VARIANT_DOES_NOT_EXIST_ON_PRODUCTwas added to enumMediaUserError -
NON_READY_MEDIAwas added to enumMediaUserError -
PRODUCT_VARIANT_ALREADY_HAS_MEDIAwas added to enumMediaUserError -
MEDIA_IS_NOT_ATTACHED_TO_VARIANTwas added to enumMediaUserError
Anchor to Update text content of legal policies,[object Object]Update text content of legal policies
Use the GraphQL Admin API to update the text content of legal policies associated with a shop. Policies are specified by policy type.
New mutation
-
ShopPolicyUpdatewas addedNew types
-
ShopPolicyobject type was added -
ShopPolicyInputinput object was added -
ShopPolicyTypeenum was added -
ShopPolicyUserErrorwas addedNew field
-
shopPolicieswas added to objectshop
Anchor to Product price range ,[object Object]Product price range
Use the GraphQL Admin API to query the price range of a product (the lowest and highest priced variants).
New and updated types
ProductPriceRangeV2type was addedpriceRangeV2field was added to typeProduct
Anchor to International domains ,[object Object]International domains
Use the GraphQL Admin API to query if a shop is eligible to enable international domains.
New field
internationalDomainswas added to typeShopFeatures
Anchor to Marketing activity ,[object Object]Marketing activity
Use the GraphQL Admin API to create a new marketing activity.
New mutation
marketingActivityCreatewas added
Anchor to New error codes and field for media objects ,[object Object]New error codes and field for media objects
We've added new error codes to better represent the different types of errors that can occur when creating media objects. We also added a new field to the MediaImage object.
New error codes
-
VIDEO_METADATA_READING_ERRORwas added to enumMediaErrorCode -
VIDEO_INVALID_FILETYPE_ERRORwas added to enumMediaErrorCode -
VIDEO_MIN_WIDTH_ERRORwas added to enumMediaErrorCode -
VIDEO_MAX_WIDTH_ERRORwas added to enumMediaErrorCode -
VIDEO_MIN_HEIGHT_ERRORwas added to enumMediaErrorCode -
VIDEO_MAX_HEIGHT_ERRORwas added to enumMediaErrorCode -
VIDEO_MIN_DURATION_ERRORwas added to enumMediaErrorCode -
VIDEO_MAX_DURATION_ERRORwas added to enumMediaErrorCode -
MODEL3D_THUMBNAIL_GENERATION_ERRORwas added to enumMediaErrorCode -
MODEL3D_GLB_TO_USDZ_CONVERSION_ERROR1was added to enumMediaErrorCode -
MODEL3D_GLB_OUTPUT_CREATION_ERRORwas added to enumMediaErrorCode -
UNSUPPORTED_IMAGE_FILE_TYPEwas added to enumMediaErrorCode -
INVALID_IMAGE_FILE_SIZEwas added to enumMediaErrorCodeNew field
mimeTypewas added to objectMediaImage
Anchor to Query a customer's activity,[object Object]Query a customer's activity
You can now use the GraphQL Admin API to query a customer's activity on a shop's online store.
New type
CustomerJourneySummarywas added
Anchor to Delivery profiles event webhooks,[object Object]Delivery profiles event webhooks
You can now subscribe to delivery profiles event webhooks.
New topics
PROFILES_CREATEvalue was added to enumWebhookSubscriptionTopicPROFILES_UPDATEvalue was added to enumWebhookSubscriptionTopicPROFILES_DELETEvalue was added to enumWebhookSubscriptionTopic
Anchor to GraphQL Storefront API changesGraph QL Storefront API changes
Below are all the changes currently introduced in the 2020-10 version of the GraphQL Storefront API.
Anchor to Query a shop's shipping policy ,[object Object]Query a shop's shipping policy
You can now query a shop's shipping policy using the shippingPolicy field.
New field
shippingPolicywas added to objectShop
Anchor to REST Admin API changesREST Admin API changes
Below are all the changes currently introduced in the 2020-10 version of the REST Admin API.
Anchor to Tax field dataTax field data
Anchor to BreakingBreaking
You can no longer change tax field data using the Country or Province resources.
Anchor to Include risk analysis headerInclude risk analysis header
Anchor to BreakingBreaking
We've deprecated the include-risk-analysis header that includes order risks and risk analysis objects in the Order payload.
The existence of this deprecated header was not previously documented. The REST Admin API and GraphQL Admin API are not affected by this change.
If you request the header using an API version earlier than 2020-10, then the header will still be returned.
Anchor to Product status ,[object Object]Product status
Use the Product resource to identify, filter, and manage products based on their current product status.
Each product can have one of the following statuses:
-
draft: The product isn't ready to sell and is unavailable to customers on sales channels and apps. -
active: The product is ready to sell and can be made available to customers on the online store, sales channels, and apps. By default, existing products are set toactive. -
archived: The product is no longer being sold and isn't available to customers on sales channels and apps.To learn how to use product statuses, refer to the Product resource.
New property
statusproperty added toProductresourceNew query parameter
statusparameter added toProductresource
Anchor to Refund duties,[object Object]Refund duties
Use the Refund resource to add refund duties to your request body. This capability provides parity with the GraphQL Admin API.
The refund_duties object includes two fields: duty_id and refund_type. You can specify how you want the duty refunded by setting one of the following values on refund_type:
FULL: Refunds all the duties associated with a duty ID.PROPORTIONAL: Refunds duties in proportion to the line item quantity that you want to refund.
Anchor to Asset checksums,[object Object]Asset checksums
We've added a new checksum property to the Asset resource.
The checksum property provides the MD5 representation of the content, which consists of a string of 32 hexadecimal digits. This property might be null if you haven't updated an asset recently.
Anchor to Logs for batch discount code creation jobs,[object Object]Logs for batch discount code creation jobs
We've added better reporting and feedback for batch discount code creation jobs. The new logs property specifies when no discount codes were created because the provided data was invalid.
New property
logswas added to DiscountCode batch endpoint
Anchor to Buy X Get Y discounts,[object Object]Buy X Get Y discounts
Use the PriceRule resource to specify the minimum purchase amount required to be entitled to a Buy X Get Y discount.
New properties
prerequisite_to_entitlement_purchasewas added to PriceRuleprerequisite_amountwas added to PriceRule
Anchor to Delivery profiles event webhooks,[object Object]Delivery profiles event webhooks
You can now subscribe to delivery profiles event webhooks.
New topics
profiles/createtopic was added to webhook resourceprofiles/updatetopic was added to webhook resourceprofiles/deletetopic was added to webhook resource