2019-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.
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
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 PaginationPagination
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.
Anchor to Delivery ProfilesDelivery 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.
Anchor to InventoryInventory
Deprecation for legacy inventory behavior is now extended to all apps. To learn more, refer to Migrating to support multiple locations.
Anchor to Developer previewDeveloper 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.
Anchor to REST Admin API changesREST Admin API changes
Below are all the changes introduced in the 2019-10 release candidate of the REST Admin API.
Anchor to Cursor-based paginationCursor-based pagination
Anchor to BreakingBreaking
Page-based pagination has been replaced by cursor-based pagination across the remaining REST endpoints.
Anchor to All REST API endpointsAll REST API endpoints
- You can't use both
order
andsince_id
. Usingsince_id
requires ordering byid asc
and the ordering is done automatically.
Anchor to AbandonedCheckoutsAbandoned Checkouts
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/checkouts.json
.
Anchor to ArticlesArticles
- 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.
Anchor to BlogsBlogs
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/blogs.json
.
Anchor to CommentsComments
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/comments.json
.
Anchor to CustomCollectionsCustom Collections
-
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.
Anchor to CustomerAddressesCustomer Addresses
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/customers/#{customer_id}/addresses.json
.
Anchor to CustomersCustomers
- 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
.
Anchor to DiscountCodes (Price Rules)Discount Codes (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
.
Anchor to Disputes (Shopify Payments)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.
Anchor to DraftOrdersDraft Orders
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/draft_orders.json
.
Anchor to FulfillmentsFulfillments
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/orders/#{order_id}/fulfillments.json
.
Anchor to GiftCardsGift Cards
- 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
.
Anchor to InventoryItemsInventory Items
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/inventory_items.json
.
Anchor to InventoryLevelsInventory Levels
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/inventory_levels.json
.
Anchor to LocationLevelsLocation Levels
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/locations/#{location_id}/inventory_levels.json
.
Anchor to MarketingEventsMarketing Events
- 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.
Anchor to OrdersOrders
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/orders.json
.
Anchor to OrderRisksOrder Risks
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/orders/#{order_id}/risks.json
.
Anchor to PagesPages
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/pages.json
.
Anchor to Payouts (Shopify Payments)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.
Anchor to PriceRulesPrice Rules
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/product_listings/product_ids.json
.
Anchor to ProductIdsProduct Ids
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/product_listings/product_ids.json
.
Anchor to ProductVariantsProduct Variants
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/products/#{product_id}/variants.json
.
Anchor to RedirectsRedirects
- 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.
Anchor to RefundsRefunds
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/orders/#{order_id}/refunds.json
.
Anchor to ReportsReports
- 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
.
Anchor to SmartCollectionsSmart Collections
- 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.
Anchor to TenderTransactionsTender Transactions
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/tender_transactions.json
.
Anchor to Transactions (Shopify Payments)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.
Anchor to WebhooksWebhooks
- Removed the
page
filter, and replaced page-based pagination with cursor-based pagination forGET /admin/api/2019-10/webhooks.json
.
Anchor to InventoryInventory
Anchor to BreakingBreaking
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 fulfillments -
location_id
andrestock_type
are required when creating refunds
Anchor to 3D Secure support3D Secure support
The checkout payment flow now supports customer authentication with 3D Secure. To learn more, refer to Authenticating payments with 3D Secure.
Anchor to CheckoutCheckout
- Added the
next_action
property for authenticating payments with 3D Secure.
Anchor to PaymentPayment
- Added the
next_action
property for authenticating payments with 3D Secure.
Anchor to Changes to webhooksChanges 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.
Anchor to GraphQL Admin API changesGraph QL Admin API changes
Below are all the changes introduced in the 2019-10 version of the GraphQL Admin API.
Anchor to Delivery profilesDelivery profiles
Anchor to BreakingBreaking
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 removedNew 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
Anchor to InventoryInventory
Anchor to BreakingBreaking
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
Anchor to Bulk operationsBulk 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 QueryRootNew mutations
-
bulkOperationCancel mutation was added
-
bulkOperationRunQuery mutation was added
Anchor to Translated content for resourcesTranslated 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
Anchor to Private metafieldsPrivate 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
Anchor to Shipping linesShipping 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
Anchor to Minor non-breaking changesMinor 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
Anchor to Storefront API changesStorefront API changes
Below are all the changes introduced in the 2019-10 version of the Storefront API.
Anchor to 3D Secure support3D 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
Anchor to Minor non-breaking changesMinor 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
Anchor to Corresponding Buy SDK versionsCorresponding 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 |