> Note: > We're no longer publishing API release notes. Instead, you can find the latest updates on Shopify APIs in our [developer changelog](https://shopify.dev/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. <table> <tr> <th>Release date</th> <th>Date version is no longer supported</th> </tr> <tr> <td>July 2, 2020</td> <td>July 2, 2021</td> </tr> </table> The 2020-07 release contains changes to support AWS EventBridge integration, annual billing through the Shopify Billing API, and better errors in GraphQL. This release also offers more flexible explicit discounts, exposes tips on orders, and extends locale-specific support for collecting additional information at checkout. **What’s new in 2020-07** The following features were added in version 2020-07 of Shopify's APIs. - Apps now support integration with Amazon EventBridge to receive Shopify webhooks using an event bus. As a result, [Webhooks]/api/admin/rest/reference/events/webhook) now support ARN addresses. - Shopify's [Billing API](/docs/apps/launch/billing) now offers annual billing in GraphQL. - Access errors in GraphQL now reference the denied resource, rather than returning a generic `access denied` error. - The CPF/CNPJ can now be collected at checkout for merchants in Brazil. This information is exposed through the API using a new [`localizationExtensions` connection](/docs/apps/build/markets/add-locally-required-order-data). - The total tip amount received on an order is now available via `Order.totalTipReceived`. - The API now offers [additional data on domains](/docs/api/admin-graphql/latest/objects/shop) associated with a given shop using the new `shop.domains` field and webhook events. ## 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. ### Allocation method for discounts We updated the allocation method for discounts that have set the `target_selection` as `explicit`. Previously, Shopify applied these discounts to a single line item, which corresponded to an allocation method of `one`. With this change, the allocation methods will instead include `each` and `across`. We've made this change to simplify the discount syntax, as `one` and `across` functionally both discount the final price by a set amount. ### Product variant resource The deprecated `images` value was removed from object type `ProductVariant`. ## GraphQL Admin API changes Below are all the changes currently introduced in the 2020-07 version of the GraphQL Admin API. <div class="accordion-container"> <div class="accordion-controls"> <button class="accordion-control" data-accordion-control-type="expand-all" type="button">Expand all</button> </div> <div class="accordion-content-container"> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Allocation method for explicit discounts<span id="allocation-method" class="heading-flag breaking"></span></h3> </div> <div class="accordion-content"> <p><strong>Removed field</strong></p> <p><code class="text-highlight text-highlight--grey">ONE</code> value was removed from enum <a href="/docs/api/admin-graphql/latest/enums/discountapplicationallocationmethod">DiscountApplicationAllocationMethod</a>. <code class="text-highlight text-highlight--grey">ACROSS</code> is returned in its place as the meaning is the same for explicit discounts.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Product variant update<span id="product-variant" class="heading-flag breaking"></span></h3> </div> <div class="accordion-content"> <p>The following changes were made to the <a href="/docs/api/admin-graphql/latest/objects/productvariant">ProductVariant</a> resource:</p> <p><strong>Removed field</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">images</code> value was removed from object type <code class="text-highlight text-highlight--grey">ProductVariant</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Improved access errors in GraphQL <span id="access-errors"></span></h3> </div> <div class="accordion-content"> <p>Access errors in GraphQL now reference the denied resource, rather than returning a generic <code class="text-highlight text-highlight--grey">access denied</code> error. Responses now also include extensions, which consist of an error code, link to necessary documentation, and the name of the required access scope.</p> <p>Learn more about access scopes in our <a href="/docs/api/usage/access-scopes">documentation</a>.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Localization extensions<span id="localization-extensions"></span></h3> </div> <div class="accordion-content"> <p>The <code class="text-highlight text-highlight--grey">localizationExtensions</code> field was added to the order object. For more information, refer to <a href="/docs/apps/build/markets/add-locally-required-order-data">Manage country fields using localization extensions</a>.</p> <p><strong>New fields</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">localizationExtensions</code> was added to object type <code class="text-highlight text-highlight--grey">Order</code></li> <li><code class="text-highlight text-highlight--grey">totalTipReceived</code> was added to object type <code class="text-highlight text-highlight--grey">Order</code></li> </ul> <p><strong>New types</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">LocalizationExtension</code> was added</li> <li><code class="text-highlight text-highlight--grey">LocalizationExtensionPurpose</code> enum was added</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Bulk operations<span id="bulk-operations"></span></h3> </div> <div class="accordion-content"> <p>A new field was added to the <a href="/docs/api/admin-graphql/latest/objects/bulkoperation">BulkOperation</a> resource.</p> <p><strong>New fields</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">rootObjectCount</code> was added to object type <code class="text-highlight text-highlight--grey">BulkOperation</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Customer multipass<span id="customer-multipass"></span></h3> </div> <div class="accordion-content"> <p>A new field was added to the <a href="/docs/api/admin-graphql/latest/objects/customer">Customer</a> resource.</p> <p><strong>New fields</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">multipassIdentifier</code> was added to object type <code class="text-highlight text-highlight--grey">Customer</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Draft order<span id="draft-order"></span></h3> </div> <div class="accordion-content"> <p>A new field was added to the <a href="/docs/api/admin-graphql/latest/objects/draftorder">DraftOrder</a> resource.</p> <p><strong>New fields</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">ready</code> was added to object type <code class="text-highlight text-highlight--grey">DraftOrder</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Annual billing<span id="annual-billing"></span></h3> </div> <div class="accordion-content"> <p>You can now create annual billing subscriptions for your apps. To learn more, refer to <a href="/docs/apps/launch/billing/subscription-billing/create-time-based-subscriptions">Create an annual subscription</a>.</p> <p><strong>New fields</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">interval</code> was added to input object type <code class="text-highlight text-highlight--grey">AppRecurringPricingInput</code></li> </ul> <p><strong>Updated types</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">ANNUAL</code> value was added to enum <code class="text-highlight text-highlight--grey">AppPricingInterval</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Localized domains<span id="localized-domains"></span></h3> </div> <div class="accordion-content"> <p>You can now query a shop's localized domains and subscribe to domain event webhooks.</p> <p><strong>New fields</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">localization</code> was added to object type <code class="text-highlight text-highlight--grey">Domain</code></li> <li><code class="text-highlight text-highlight--grey">domains</code> was added to object type <code class="text-highlight text-highlight--grey">Shop</code></li> </ul> <p><strong>New types</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">DomainLocalization</code> was added</li> </ul> <p><strong>Updated types</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">DOMAINS_UPDATE</code> value was added to enum <code class="text-highlight text-highlight--grey">WebhookSubscriptionTopic</code></li> <li><code class="text-highlight text-highlight--grey">DOMAINS_DESTROY</code> value was added to enum <code class="text-highlight text-highlight--grey">WebhookSubscriptionTopic</code></li> <li><code class="text-highlight text-highlight--grey">DOMAINS_CREATE</code> value was added to enum <code class="text-highlight text-highlight--grey">WebhookSubscriptionTopic</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Localization extensions<span id="localization-extensions"></span></h3> </div> <div class="accordion-content"> <p><strong>New fields</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">localizationExtensions</code> was added to object type <code class="text-highlight text-highlight--grey">Order</code></li> </ul> <p><strong>New types</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">LocalizationExtensionEdge</code> was added</li> <li><code class="text-highlight text-highlight--grey">LocalizationExtension</code> was added</li> <li><code class="text-highlight text-highlight--grey">HasLocalizationExtensions</code> was added</li> <li><code class="text-highlight text-highlight--grey">LocalizationExtensionPurpose</code> was added</li> <li><code class="text-highlight text-highlight--grey">LocalizationExtensionConnection</code> was added</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Webhook subscriptions<span id="webhook-subscriptions"></span></h3> </div> <div class="accordion-content"> <p>The <code class="text-highlight text-highlight--grey">endpoint</code> field of type <strong>WebhookSubscriptionEndpoint</strong> was added to the webhook subscription object. This replaces the <code class="text-highlight text-highlight--grey">callbackUrl</code> field. New create and update mutations were added to support EventBridge webhook subscriptions.</p> <p><strong>New fields</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">endpoint</code> was added to object type <code class="text-highlight text-highlight--grey">WebhookSubscription</code></li> </ul> <p><strong>New types</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">WebhookSubscriptionEndpoint</code> was added</li> <li><code class="text-highlight text-highlight--grey">WebhookEventBridgeEndpoint</code> was added</li> <li><code class="text-highlight text-highlight--grey">WebhookHttpEndpoint</code> was added</li> <li><code class="text-highlight text-highlight--grey">EventBridgeWebhookSubscriptionUpdatePayload</code> was added</li> <li><code class="text-highlight text-highlight--grey">EventBridgeWebhookSubscriptionInput</code> was added</li> <li><code class="text-highlight text-highlight--grey">EventBridgeWebhookSubscriptionCreatePayload</code> was added</li> <li><code class="text-highlight text-highlight--grey">ARN</code> was added</li> </ul> <p><strong>New mutations</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">EventBridgeWebhookSubscriptionCreate</code> was added</li> <li><code class="text-highlight text-highlight--grey">EventBridgeWebhookSubscriptionUpdate</code> was added</li> </ul> </div> </div> </div> </div> ## REST Admin API changes Below are all the changes currently introduced in the 2020-07 version of the REST Admin API. <div class="accordion-container"> <div class="accordion-controls"> <button class="accordion-control" data-accordion-control-type="expand-all" type="button">Expand all</button> </div> <div class="accordion-content-container"> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Allocation method for explicit discounts<span id="allocation-method" class="heading-flag breaking"></span></h3> </div> <div class="accordion-content"> <p><strong>Removed field</strong></p> <p><code class="text-highlight text-highlight--grey">one</code> value was removed from <code class="text-highlight text-highlight--grey">allocation_method</code> in the <a href="/docs/api/admin-rest/latest/resources/order">Order resource</a>. <code class="text-highlight text-highlight--grey">across</code> is returned in its place as the meaning is the same for explicit discounts.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Domain event webhooks<span id="domain-event-webhooks"></span></h3> </div> <div class="accordion-content"> <p>You can now subscribe to domain event webhooks.</p> <p><strong>New topics</strong></p> <p>The following changes have been made to the <a href="/docs/api/admin-rest/latest/resources/webhook">Webhook resource</a>.</p> <ul> <li><code class="text-highlight text-highlight--grey">domains/create</code> was added as part of accessing <a href="/docs/api/admin-graphql/latest/objects/shop">additional data on domains in the GraphQL Admin API</a>.</li> <li><code class="text-highlight text-highlight--grey">domains/update</code> was added as part of accessing <a href="/docs/api/admin-graphql/latest/objects/shop">additional data on domains in the GraphQL Admin API</a>.</li> <li><code class="text-highlight text-highlight--grey">domains/destroy</code> was added as part of accessing <a href="/docs/api/admin-graphql/latest/objects/shop">additional data on domains in the GraphQL Admin API</a>.</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Webhook subscriptions<span id="webhook-subscriptions-rest"></span></h3> </div> <div class="accordion-content"> <p>The <code class="text-highlight text-highlight--grey">Webhook</code> resource was updated to support EventBridge webhook subscriptions.</p> <p><strong>Updated properties</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">address</code> property was updated to accept a URI or an EventBridge event source ARN.</li> </ul> </div> </div> </div> </div> ## Storefront API changes Below are all the changes introduced in the 2020-07 version of the Storefront API. <div class="accordion-container"> <div class="accordion-controls"> <button class="accordion-control" data-accordion-control-type="expand-all" type="button">Expand all</button> </div> <div class="accordion-content-container"> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>New error code for checkout <span id="add-checkout-error-code" class="heading-flag breaking"></span></h3> </div> <div class="accordion-content"> <p>A new error code was added to CheckoutErrorCode.</p> <p><strong>Updated types</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">DISCOUNT_ALREADY_APPLIED</code> was added to enum <code class="text-highlight text-highlight--grey">CheckoutErrorCode</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Improved access errors in GraphQL <span id="access-errors"></span></h3> </div> <div class="accordion-content"> <p>Access errors in GraphQL now reference the denied resource, rather than returning a generic <code class="text-highlight text-highlight--grey">access denied</code> error. Responses now also include extensions, which consist of an error code, link to necessary documentation, and the name of the required access scope.</p> <p>Learn more about access scopes in our <a href="/docs/api/usage/access-scopes">documentation</a>.</p> </div> </div> </div> </div>