2020-10 release notes
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
checksum
property. 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
merchantEditable
field 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/delete
webhook 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.
Breaking changes
Anchor link to section titled "Breaking 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.
Tax field data
Anchor link to section titled "Tax field data"As of version 2020-10, you can no longer create or update any tax field data using the Country or Province resources.
Include risk analysis header
Anchor link to section titled "Include 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.
Type filter parameter
Anchor link to section titled "Type filter parameter"We've deprecated the type
filter parameter on CodeDiscountQuery
. Use discount_type
instead. For more information about deprecated fields, refer to QueryRoot.
Deprecated fields in Refund and RefundLineItem objects
Anchor link to section titled "Deprecated fields in Refund and RefundLineItem objects"We've deprecated the following fields in the GraphQL Admin API:
restocked
field in theRefund
object. UseRefundLineItem.restockType
instead.refundType
field in theRefundLineItem
object. UseRefundLineItem.restockType
instead.
GraphQL Admin API changes
Anchor link to section titled "GraphQL Admin API changes"Below are all the changes currently introduced in the 2020-10 version of the GraphQL Admin API.
Type filter parameter
We've deprecated the type
filter parameter on CodeDiscountQuery
. Use discount_type
instead. For more information about deprecated fields, refer to QueryRoot.
Deprecated fields in Refund and RefundLineItem objects
We've deprecated the following fields in the GraphQL Admin API:
restocked
field in theRefund
object. UseRefundLineItem.restockType
instead.refundType
field in theRefundLineItem
object. UseRefundLineItem.restockType
instead.
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
discountRedeemCodeSavedSearches
field was added to typeQueryRoot
asyncUsageCount
field was added to typeDiscountAutomaticBasic
asyncUsageCount
field was added to typeDiscountAutomaticBxgy
hasTimelineComment
field was added to typeDiscountCodeBasic
shareableUrls
field was added to typeDiscountCodeBasic
totalSales
field was added to typeDiscountCodeBasic
asyncUsageCount
field was added to typeDiscountRedeemCode
id
field was added to typeDiscountRedeemCode
targetItemImage
field was added to typeDiscountShareableUrl
targetType
field was added to typeDiscountShareableUrl
title
field was added to typeDiscountShareableUrl
url
field was added to typeDiscountShareableUrl
hasTimelineComment
field was added to typeDiscountCodeBxgy
shareableUrls
field was added to typeDiscountCodeBxgy
totalSales
field was added to typeDiscountCodeBxgy
hasTimelineComment
field was added to typeDiscountCodeFreeShipping
maximumShippingPrice
field was added to typeDiscountCodeFreeShipping
shareableUrls
field was added to typeDiscountCodeFreeShipping
totalSales
field was added to typeDiscountCodeFreeShipping
New mutations
discountCodeBulkActivate
was addeddiscountCodeBulkDeactivate
was addeddiscountCodeBulkDelete
was addeddiscountCodeRedeemCodeBulkDelete
was added
New arguments
after
argument was added to fielddiscountRedeemCodeSavedSearches
in typeQueryRoot
before
argument was added to fielddiscountRedeemCodeSavedSearches
in typeQueryRoot
first
argument was added to fielddiscountRedeemCodeSavedSearches
in typeQueryRoot
last
argument was added to fielddiscountRedeemCodeSavedSearches
in typeQueryRoot
query
argument was added to fielddiscountRedeemCodeSavedSearches
in typeQueryRoot
reverse
argument was added to fielddiscountRedeemCodeSavedSearches
in typeQueryRoot
sortKey
argument was added to fielddiscountRedeemCodeSavedSearches
in typeQueryRoot
ids
argument was added to mutationdiscountCodeBulkActivate
savedSearchId
argument was added to mutationdiscountCodeBulkActivate
search
argument was added to mutationdiscountCodeBulkActivate
ids
argument was added to mutationdiscountCodeBulkDeactivate
savedSearchId
argument was added to mutationdiscountCodeBulkDeactivate
search
argument was added to mutationdiscountCodeBulkDeactivate
ids
argument was added to mutationdiscountCodeBulkDelete
savedSearchId
argument was added to mutationdiscountCodeBulkDelete
search
argument was added to mutationdiscountCodeBulkDelete
discountId
argument was added to mutationdiscountCodeRedeemCodeBulkDelete
ids
argument was added to mutationdiscountCodeRedeemCodeBulkDelete
savedSearchId
argument was added to mutationdiscountCodeRedeemCodeBulkDelete
search
argument was added to mutationdiscountCodeRedeemCodeBulkDelete
query
argument was added to fieldcodes
in typeDiscountCodeBasic
savedSearchId
argument was added to fieldcodes
in typeDiscountCodeBasic
sortKey
argument was added to fieldcodes
in typeDiscountCodeBasic
query
argument was added to fieldcodes
in typeDiscountCodeBxgy
savedSearchId
argument was added to fieldcodes
in typeDiscountCodeBxgy
sortKey
argument was added to fieldcodes
in typeDiscountCodeBxgy
query
argument was added to fieldcodes
in typeDiscountCodeFreeShipping
savedSearchId
argument was added to fieldcodes
in typeDiscountCodeFreeShipping
sortKey
argument was added to fieldcodes
in typeDiscountCodeFreeShipping
New and updated types
DiscountShareableUrl
type was addedDiscountCodeBulkActivatePayload
type was addedDiscountCodeBulkDeactivatePayload
type was addedDiscountShareableUrlTargetType
type was addedDiscountCodeBulkDeletePayload
type was addedDiscountCodeRedeemCodeBulkDeletePayload
type was addedDISCOUNT_CODE
was added to enumResourceType
DISCOUNT_REDEEM_CODE
was added to enumSearchResultType
COLLECTION
was added to enumDiscountShareableUrlTargetType
HOME
was added to enumDiscountShareableUrlTargetType
PRODUCT
was added to enumDiscountShareableUrlTargetType
INCLUSION
was added to enumDiscountErrorCode
job
field was added to typeDiscountCodeBulkActivatePayload
userErrors
field was added to typeDiscountCodeBulkActivatePayload
job
field was added to typeDiscountCodeBulkDeactivatePayload
userErrors
field was added to typeDiscountCodeBulkDeactivatePayload
job
field was added to typeDiscountCodeBulkDeletePayload
userErrors
field was added to typeDiscountCodeBulkDeletePayload
job
field was added to typeDiscountCodeRedeemCodeBulkDeletePayload
userErrors
field was added to typeDiscountCodeRedeemCodeBulkDeletePayload
maximumShippingPrice
field was added to typeDiscountCodeFreeShippingInput
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
currentCartDiscountAmountSet
was added to objectOrder
currentSubtotalLineItemsQuantity
was added to objectOrder
currentSubtotalPriceSet
was added to objectOrder
currentTaxLines
was added to objectOrder
currentTotalDiscountsSet
was added to objectOrder
currentTotalPriceSet
was added to objectOrder
currentTotalTaxSet
was added to objectOrder
currentTotalWeight
was added to objectOrder
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.
Orders associated to refunds
You can now query the order that is associated to a refund.
New field
order
field was added to object Refund
Shipping lines on existing orders
You can now query a list of line items that contain shipping costs on existing orders.
New connection
shippingLines
was added to objectOrder
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
OrderEditAddLineItemDiscount
was addedOrderEditRemoveLineItemDiscount
was added
Updated mutation
allowDuplicates
argument was added toOrderEditAddVariant
New types
OrderEditRemoveLineItemDiscountPayload
was addedCalculatedDiscountApplication
object was addedCalculatedDiscountAllocation
object was addedOrderStagedChangeAddLineItemDiscount
object was addedOrderEditDiscountInput
input object was addedDiscountApplicationLevel
enum was added
New field
CalculatedDiscountAllocation
field was added to object typeCalculatedLineItem
New connection
CalculatedDiscountApplication
was added to object typeCalculatedOrder
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
DeliveryMethod
type was addedDeliveryMethodType
type was addeddeliveryMethod
field was added to typeFulfillmentOrder
id
field was added to typeDeliveryMethod
methodType
field was added to typeDeliveryMethod
LOCAL
enum value was added to typeDeliveryMethodType
NONE
enum value was added to typeDeliveryMethodType
PICK_UP
enum value was added to typeDeliveryMethodType
RETAIL
enum value was added to typeDeliveryMethodType
SHIPPING
enum value was added to typeDeliveryMethodType
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
ProductChangeStatus
mutation was addednewStatus
argument was added to mutationProductDuplicate
New fields
status
field was added to objectProduct
status
field was added to input objectProductInput
New and updated types
ResourcePublicationV2
object was addedProductStatus
enum was addedResourcePublicationsV2
connection was added to typePublishable
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 our Manage variant media with the GraphQL Admin API tutorial.
New and updated mutations
ProductVariantAppendMediaInput
input object was addedProductVariantDetachMediaInput
input object was addedmediaSrc
input field was added toProductVariantInput
New and updated types
ProductVariantAppendMediaInput
input object was addedProductVariantDetachMediaInput
input object was addedmediaSrc
input field was added toProductVariantInput
media
connection was added to object typeProductVariant
New error codes
BLANK
was added to enumMediaUserError
MEDIA_DOES_NOT_EXIST_ON_PRODUCT
was added to enumMediaUserError
TOO_MANY_MEDIA_PER_INPUT_PAIR
was added to enumMediaUserError
MAXIMUM_VARIANT_MEDIA_PAIRS_EXCEEDED
was added to enumMediaUserError
INVALID_MEDIA_TYPE
was added to enumMediaUserError
PRODUCT_VARIANT_SPECIFIED_MULTIPLE_TIMES
was added to enumMediaUserError
PRODUCT_VARIANT_DOES_NOT_EXIST_ON_PRODUCT
was added to enumMediaUserError
NON_READY_MEDIA
was added to enumMediaUserError
PRODUCT_VARIANT_ALREADY_HAS_MEDIA
was added to enumMediaUserError
MEDIA_IS_NOT_ATTACHED_TO_VARIANT
was added to enumMediaUserError
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
ShopPolicyUpdate
was added
New types
ShopPolicy
object type was addedShopPolicyInput
input object was addedShopPolicyType
enum was addedShopPolicyUserError
was added
New field
shopPolicies
was added to objectshop
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
ProductPriceRangeV2
type was addedpriceRangeV2
field was added to typeProduct
International domains
Use the GraphQL Admin API to query if a shop is eligible to enable international domains.
New field
internationalDomains
was added to typeShopFeatures
Marketing activity
Use the GraphQL Admin API to create a new marketing activity.
New mutation
marketingActivityCreate
was added
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_ERROR
was added to enumMediaErrorCode
VIDEO_INVALID_FILETYPE_ERROR
was added to enumMediaErrorCode
VIDEO_MIN_WIDTH_ERROR
was added to enumMediaErrorCode
VIDEO_MAX_WIDTH_ERROR
was added to enumMediaErrorCode
VIDEO_MIN_HEIGHT_ERROR
was added to enumMediaErrorCode
VIDEO_MAX_HEIGHT_ERROR
was added to enumMediaErrorCode
VIDEO_MIN_DURATION_ERROR
was added to enumMediaErrorCode
VIDEO_MAX_DURATION_ERROR
was added to enumMediaErrorCode
MODEL3D_THUMBNAIL_GENERATION_ERROR
was added to enumMediaErrorCode
MODEL3D_GLB_TO_USDZ_CONVERSION_ERROR1
was added to enumMediaErrorCode
MODEL3D_GLB_OUTPUT_CREATION_ERROR
was added to enumMediaErrorCode
UNSUPPORTED_IMAGE_FILE_TYPE
was added to enumMediaErrorCode
INVALID_IMAGE_FILE_SIZE
was added to enumMediaErrorCode
New field
mimeType
was added to object MediaImage
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
CustomerJourneySummary
was added
Delivery profiles event webhooks
You can now subscribe to delivery profiles event webhooks.
New topics
PROFILES_CREATE
value was added to enumWebhookSubscriptionTopic
PROFILES_UPDATE
value was added to enumWebhookSubscriptionTopic
PROFILES_DELETE
value was added to enumWebhookSubscriptionTopic
GraphQL Storefront API changes
Anchor link to section titled "GraphQL Storefront API changes"Below are all the changes currently introduced in the 2020-10 version of the GraphQL Storefront API.
Query a shop's shipping policy
You can now query a shop's shipping policy using the shippingPolicy
field.
New field
shippingPolicy
was added to objectShop
REST Admin API changes
Anchor link to section titled "REST Admin API changes"Below are all the changes currently introduced in the 2020-10 version of the REST Admin API.
Include 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.
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
status
property added to Product
resource
New query parameter
status
parameter added to Product
resource
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.
Asset checksums
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
logs
was added to DiscountCode batch endpoint
Buy X Get Y discounts
Delivery profiles event webhooks
You can now subscribe to delivery profiles event webhooks.
New topics
profiles/create
topic was added to webhook resourceprofiles/update
topic was added to webhook resourceprofiles/delete
topic was added to webhook resource