2019-10 release notes
Release date | Date version is no longer supported |
---|---|
October 1, 2019 | October 1, 2020 |
The 2019-10 release continues to focus on improving performance by completing the transition to cursor-based pagination. You can now use cursor-based pagination across the remaining endpoints. With the GraphQL Admin API, you can now perform bulk operations to fetch large amounts of data in a single request, letting Shopify handle pagination for you.
This release also solidifies many features we showcased at Unite 2019. Private metafields and translations are available for general use with the GraphQL Admin API, and delivery profiles have received a few updates. We've also added support for 3D Secure transactions to the REST Admin API and Storefront API.
What's new in 2019-10
Below are some of the highlights of new features in version 2019-10 of Shopify's APIs:
- Page-based pagination has been replaced by cursor-based pagination across the remaining REST endpoints
- Perform bulk operations by using the GraphQL Admin API
- Manage translated content for resources by using the GraphQL Admin API
- Store private data about Shopify resources in private metafields using the GraphQL Admin API
- Create checkouts that include 3D secure by using the REST Admin API or the Storefront API
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.
Page-based pagination has been removed on all remaining REST endpoints, and has been replaced with cursor-based pagination.
To migrate, see our tutorial on cursor-based pagination.
For operations that need to fetch large amounts of data, use the GraphQL Admin API to perform bulk operations rather than paginating through resources.
Delivery Profiles
Anchor link to section titled "Delivery Profiles"The activatedCarrierServices
field isn't compatible with multiple origin shipping, and has been removed.
Use the availableCarrierServices field instead. It includes both the carrier service and applicable countries.
Deprecation for legacy inventory behavior is now extended to all apps. To learn more, refer to Migrating to support multiple locations.
Developer preview
Anchor link to section titled "Developer preview"There are no new Shopify admin features for the API changes in version 2019-10, and no developer preview. Use a development store for your development environments.
To use the new API features, call the 2019-10 version of the API.
REST Admin API changes
Anchor link to section titled "REST Admin API changes"Below are all the changes introduced in the 2019-10 release candidate of the REST Admin API.
Cursor-based pagination
Page-based pagination has been replaced by cursor-based pagination across the remaining REST endpoints.
All REST API endpoints
Anchor link to section titled "All REST API endpoints"- You can't use both
order
andsince_id
. Usingsince_id
requires ordering byid asc
and the ordering is done automatically.
AbandonedCheckouts
Anchor link to section titled "AbandonedCheckouts"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/checkouts.json
.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/blogs/#{blog_id}/articles.json
. - If
blog_id
is used and the blog doesn’t have any articles, then no result are returned. In previous version,blog_id
tried to match the filters against all articles in a shop, if the blog withblog_id
didn't have any articles. - The default sort order has changed. Now blog posts are sorted by
id desc
. Previously they were sorted by unpublished first and then published blog post sorted by the date they were published.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/blogs.json
.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/comments.json
.
CustomCollections
Anchor link to section titled "CustomCollections"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/custom_collections.json
.
Requests that pass a value for title will match only if the value is the same as the complete title. Partial matches aren't supported.
CustomerAddresses
Anchor link to section titled "CustomerAddresses"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/customers/#{customer_id}/addresses.json
.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/customers.json
andGET /admin/api/2019-10/customers/search.json
.
DiscountCodes (Price Rules)
Anchor link to section titled "DiscountCodes (Price Rules)"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/price_rules/#{price_rule_id}/discount_codes.json
.
Disputes (Shopify Payments)
Anchor link to section titled "Disputes (Shopify Payments)"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/shopify_payments/disputes.json
. - No longer accept limits over 250. Limits over 250 return an error.
DraftOrders
Anchor link to section titled "DraftOrders"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/draft_orders.json
.
Fulfillments
Anchor link to section titled "Fulfillments"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/orders/#{order_id}/fulfillments.json
.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/gift_cards.json
andGET /admin/api/2019-10/gift_cards/search.json
.
InventoryItems
Anchor link to section titled "InventoryItems"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/inventory_items.json
.
InventoryLevels
Anchor link to section titled "InventoryLevels"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/inventory_levels.json
.
LocationLevels
Anchor link to section titled "LocationLevels"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/locations/#{location_id}/inventory_levels.json
.
MarketingEvents
Anchor link to section titled "MarketingEvents"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/marketing_events.json
. offset
is deprecated, it returns an error if a value is passed. You can usesince_id
instead.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/orders.json
.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/orders/#{order_id}/risks.json
.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/pages.json
.
Payouts (Shopify Payments)
Anchor link to section titled "Payouts (Shopify Payments)"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/shopify_payments/payouts.json
. - No longer accept limits over 250. Limits over 250 return an error.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/product_listings/product_ids.json
.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/product_listings/product_ids.json
.
ProductVariants
Anchor link to section titled "ProductVariants"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/products/#{product_id}/variants.json
.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/redirects/#{redirect_id}.json
. - Requests that pass a value for
path
andtarget
will match only if the value is the same as the complete value. Partial matches aren't supported.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/orders/#{order_id}/refunds.json
.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/reports.json
.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/script_tags.json
.
SmartCollections
Anchor link to section titled "SmartCollections"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/smart_collections.json
. - Requests that pass a value for title will match only if the value is the same as the complete title. Partial matches aren't supported.
TenderTransactions
Anchor link to section titled "TenderTransactions"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/tender_transactions.json
.
Transactions (Shopify Payments)
Anchor link to section titled "Transactions (Shopify Payments)"- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/shopify_payments/balance/transactions.json
. - No longer accept limits over 250. Limits over 250 return an error.
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/webhooks.json
.
Inventory
Deprecation for legacy inventory behavior is extended to all apps. To learn more, refer to Migrating to support multiple locations.
Removed fields
inventory_quantity_adjustment
field was removed fromProduct Variant
inventory_quantity
field was removed fromProduct Variant
restock
field was removed fromRefund
Required fields
location_id
is required when creating fulfillmentslocation_id
andrestock_type
are required when creating refunds
3D Secure support
The checkout payment flow now supports customer authentication with 3D Secure. To learn more, refer to Authenticating payments with 3D Secure.
- Added the
next_action
property for authenticating payments with 3D Secure.
- Added the
next_action
property for authenticating payments with 3D Secure.
Changes to webhooks
The following changes have been made to the Webhook resource:
New properties
private_metafield_namespaces
was added. It accepts an optional array of namespaces for any private metafields that should be included with each webhook. Payloads include only the private metafields that were created through the app itself.
New topics
locales/create
was added as part of the new translation feature for the GraphQL Admin API.locales/update
was added as part of the new translation feature for the GraphQL Admin API.
GraphQL Admin API changes
Anchor link to section titled "GraphQL Admin API changes"Below are all the changes introduced in the 2019-10 version of the GraphQL Admin API.
Delivery profiles
Delivery profiles store the advanced shipping information about the delivery methods and rates that apply to specific products. To learn more, refer to Manage delivery profiles.
Removed fields and types
activatedCarrierServices
field was removed from QueryRootDeliveryCarrierServiceConnection
type was removed
New types
- MethodDefinitionSortKeys enum was added
- DeliveryLegacyModeBlockedReason enum was added
- DeliveryLegacyModeBlocked object was added
Updated types
leaveLegacyModeProfiles
input argument was added todeliveryProfileUpdate
sortKey
argument was added toDeliveryLocationGroupZone.methodDefinitions
eligible
argument was added toDeliveryLocationGroupZone.methodDefinitions
New fields
locationsAvailableForDeliveryProfilesConnection
was added toQueryRoot
legacyModeBlocked
was added toDeliverySetting
includeAllProvinces
was added toDeliveryCountryInput
New mutations
- deliveryShippingOriginAssign mutation was added
Inventory
Deprecation for legacy inventory behavior is extended to all apps. To learn more, refer to Migrating to support multiple locations.
Removed fields
restock
field was removed fromRefundInput
inventoryQuantityAdjustment
field was removed fromProductVariantInput
inventoryQuantity
field was removed fromProductVariantInput
Bulk operations
With bulk operations, you can fetch data asynchronously in bulk. To learn more, refer to Performing bulk operations with GraphQL.
New types
- BulkOperation object was added
- BulkOperationStatus object was added
- BulkOperationErrorCode enum was added
New fields
currentBulkOperation
field was added to QueryRoot
New mutations
- bulkOperationCancel mutation was added
- bulkOperationRunQuery mutation was added
Translated content for resources
You can manage translated content for multiple languages for Shopify resources. To learn more, refer to examples for retrieving translated content.
New types
- HasPublishedTranslations interface was added
- TranslationInput input object was added
- TranslationErrorCode enum was added
- TranslationUserError enum was added
- ShopLocaleInput input object was added
- TranslatableResourceType enum was added
- Translation object was added
- TranslatableContent object was added
- TranslatableResource object was added
- ShopLocale object was added
- PublishedTranslation object was added
Updated types
- Link object implements HasPublishedTranslations interface
- OnlineStoreBlog object implements HasPublishedTranslations interface
- ProductVariant object implements HasPublishedTranslations interface
- OnlineStorePage object implements HasPublishedTranslations interface
- ProductOption object implements HasPublishedTranslations interface
- LOCALES_UPDATE was added to enum WebhookSubscriptionTopic
- Product object implements HasPublishedTranslations interface
- LOCALES_CREATE was added to enum WebhookSubscriptionTopic
- Collection object implements HasPublishedTranslations interface
- OnlineStoreArticle object implements HasPublishedTranslations interface
- Shop object implements HasPublishedTranslations interface
New fields
translatableResources
was added toQueryRoot
translatableResource
was added toQueryRoot
shopLocales
was added toQueryRoot
translations
was added toShop
translations
was added toProductVariant
translations
was added toProductOption
translations
was added toProduct
translations
was added toCollection
translations
was added toLink
translations
was added toOnlineStorePage
translations
was added toOnlineStoreBlog
translations
was added toOnlineStoreArticle
New mutations
- translationsRemove was added
- translationsRegister mutation was added
- shopLocaleUpdate mutation was added
- shopLocaleEnable mutation was added
- shopLocaleDisable mutation was added
Private metafields
Private metafields are additional fields for Shopify resources. Unlike standard metafields, private metafields are visible only to the app that created them. To learn more, refer to Working with metafields using the GraphQL Admin API.
New types
- PrivateMetafield was added
- PrivateMetafieldDeleteInput was added
- PrivateMetafieldValueInput was added
- PrivateMetafieldInput was added
- PrivateMetafieldValueType was added
New fields
privateMetafields
was added toQueryRoot
privateMetafield
was added toQueryRoot
privateMetafields
was added toProductInput
privateMetafields
was added toDraftOrderInput
privateMetafields
was added toCustomerInput
privateMetafields
was added toCollectionInput
privateMetafields
was added toProductVariantInput
privateMetafields
was added toShop
privateMetafield
was added toShop
privateMetafields
was added toDraftOrder
privateMetafield
was added toDraftOrder
privateMetafields
was added toOrder
privateMetafield
was added toOrder
privateMetafields
was added toCustomer
privateMetafield
was added toCustomer
privateMetafields
was added toProductVariant
privateMetafield
was added toProductVariant
privateMetafields
was added toProduct
privateMetafield
was added toProduct
privateMetafields
was added toCollection
privateMetafield
was added toCollection
privateMetafields
was added toHasMetafields
privateMetafield
was added toHasMetafields
privateMetafields
was added toImage
privateMetafield
was added toImage
New mutations
- privateMetafieldUpsert mutation was added
- privateMetafieldDelete mutation was added
Shipping lines
The following missing fields that were available in the REST Admin API were added to the ShippingLine object type.
New fields
carrierIdentifier
was added toShippingLine
source
was added toShippingLine
requestedFulfillmentService
was added toShippingLine
phone
was added toShippingLine
id
was added toShippingLine
deliveryCategory
was added toShippingLine
code
was added toShippingLine
taxLines
was added toShippingLine
Minor non-breaking changes
Updated types
SLL
was added toCurrencyCode
TOP
was added toCurrencyCode
TJS
was added toCurrencyCode
DJF
was added toCurrencyCode
LYD
was added toCurrencyCode
IRR
was added toCurrencyCode
New fields
statusTransitionedAt
was added to object typeMarketingActivity
taxCode
was added to object typeProductVariant
Storefront API changes
Anchor link to section titled "Storefront API changes"Below are all the changes introduced in the 2019-10 version of the Storefront API.
3D Secure support
The checkout payment flow now supports customer authentication with 3D Secure. To learn more, refer to Authenticating payments with 3D Secure.
New fields
nextActionUrl
was added to Payment
Minor non-breaking changes
SLL
was added to CurrencyCodeTOP
was added to CurrencyCodeTJS
was added to CurrencyCodeDJF
was added to CurrencyCodeLYD
was added to CurrencyCodeIRR
was added to CurrencyCodeGNF
was added to CurrencyCode
Corresponding Buy SDK versions
Anchor link to section titled "Corresponding Buy SDK versions"SDK | Supported Versions |
---|---|
Mobile Buy SDK Android | 3.6.0 |
Mobile Buy SDK iOS | 3.6.1 |
Unity Buy SDK | 1.2.0 |
JS Buy SDK | 2.8.0, 2.8.1 |
Buy Button JS | N/A |