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](#rest-admin-api-changes) by cursor-based pagination across the remaining REST endpoints * [Perform bulk operations](#graphql-admin-api-changes) by using the GraphQL Admin API * [Manage translated content for resources](#graphql-admin-api-changes) by using the GraphQL Admin API * [Store private data about Shopify resources in private metafields](#graphql-admin-api-changes) using the GraphQL Admin API * Create checkouts that include 3D secure by using the [REST Admin API](#rest-admin-api-changes) or the [Storefront API](#storefront-api-changes) ## 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. ### Pagination Page-based pagination has been removed on all remaining REST endpoints, and has been replaced with [cursor-based pagination](/docs/api/usage/pagination-rest). To migrate, see our tutorial on [cursor-based pagination](/docs/api/usage/pagination-rest#make-a-request-for-paginated-data). For operations that need to fetch large amounts of data, use the GraphQL Admin API to [perform bulk operations](/docs/api/usage/bulk-operations/queries) rather than paginating through resources. ### 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. ### Inventory Deprecation for legacy inventory behavior is now extended to all apps. To learn more, refer to [Migrating to support multiple locations](/docs/api/admin-rest/latest/resources/location#deprecation-schedule). ## 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](/docs/api/development-stores) for your development environments. To use the new API features, [call the 2019-10 version of the API](/docs/api/usage/versioning#making-requests-to-an-api-version). ## REST Admin API changes Below are all the changes introduced in the 2019-10 release candidate of the REST Admin API.

Page-based pagination has been replaced by cursor-based pagination across the remaining REST endpoints.

  • You can't use both order and since_id. Using since_id requires ordering by id asc and the ordering is done automatically.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/checkouts.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /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 with blog_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 for GET /admin/api/2019-10/blogs.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/comments.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /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.

  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/customers/#{customer_id}/addresses.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/customers.json and GET /admin/api/2019-10/customers/search.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/price_rules/#{price_rule_id}/discount_codes.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/shopify_payments/disputes.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 for GET /admin/api/2019-10/draft_orders.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/orders/#{order_id}/fulfillments.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/gift_cards.json and GET /admin/api/2019-10/gift_cards/search.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/inventory_items.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/inventory_levels.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/locations/#{location_id}/inventory_levels.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/marketing_events.json.
  • offset is deprecated, it returns an error if a value is passed. You can use since_id instead.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/orders.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/orders/#{order_id}/risks.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/pages.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /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 for GET /admin/api/2019-10/product_listings/product_ids.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/product_listings/product_ids.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/products/#{product_id}/variants.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/redirects/#{redirect_id}.json.
  • Requests that pass a value for path and target 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 for GET /admin/api/2019-10/orders/#{order_id}/refunds.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/reports.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/script_tags.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /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.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /admin/api/2019-10/tender_transactions.json.
  • Removed the page filter, and replaced page-based pagination with cursor-based pagination for GET /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 for GET /admin/api/2019-10/webhooks.json.

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 from Product Variant
  • inventory_quantity field was removed from Product Variant
  • restock field was removed from Refund

Required fields

  • location_id is required when creating fulfillments
  • location_id and restock_type are required when creating refunds

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.

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

## GraphQL Admin API changes Below are all the changes introduced in the 2019-10 version of the GraphQL Admin API.

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 QueryRoot
  • DeliveryCarrierServiceConnection type was removed

New types

Updated types

New fields

New mutations

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 from RefundInput
  • inventoryQuantityAdjustment field was removed from ProductVariantInput
  • inventoryQuantity field was removed from ProductVariantInput

With bulk operations, you can fetch data asynchronously in bulk. To learn more, refer to Performing bulk operations with GraphQL.

New types

New fields

  • currentBulkOperation field was added to QueryRoot

New mutations

You can manage translated content for multiple languages for Shopify resources. To learn more, refer to examples for retrieving translated content.

New types

Updated types

New fields

New mutations

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

New fields

New mutations

The following missing fields that were available in the REST Admin API were added to the ShippingLine object type.

New fields

Updated types

New fields

## Storefront API changes Below are all the changes introduced in the 2019-10 version of the [Storefront API](/docs/api/storefront/reference).

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
### 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