> 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>
  <caption>The API version release date and the date that the version is no longer supported</caption>
  <thead>
    <tr>
      <th scope="col">Release date</th>
      <th scope="col">Date version is no longer supported</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td scope="row">October 1, 2023</td>
      <td scope="row">October 1, 2024</td>
   </tr>
  </tbody>
 </table>

**What's new in 2023-10**

The following features were added in version 2023-10 of Shopify's APIs:

Highlights from the GraphQL and REST Admin API changes:

- We've added the `compareAtPriceRange` field to `Product`, which returns the minimum and maximum compare-at prices across a product's variants
- You can now identify the variant that was used to model a bundle after it was purchased by querying the `productvariantid` field of `LineItemGroup`.
- We've added `STAFF` to the `OrderCancelReason` GraphQL type, as a reason for canceling orders due to staff error.
- Apps can now change the name and address of fulfillment service locations.
- More flexible primary markets for multi-country stores
- We've added a `cancellation` field to the GraphQL Admin API's `Order` object. Query this field for more details about an order's cancelation, such as any staff-provided notes on why the order was cancelled on a POS app.

Highlights from the Storefront API changes:

- Cart line items are now ordered in reverse chronological order based on when they were added.

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


### More flexible primary markets

As of API version 2023-10, primary markets can be customized in three new ways:

- Transactions can be set to any supported currency, regardless of a shop's currency.
- Countries can be set independently of the primary market's currency. For example, it's possible to combine Canada and USD.
- Price lists can be created, allowing for fixed prices and percentage adjustments for the primary market.

Apps might need to be updated if they previously assumed that the primary market's currency and country were the same.

### Deprecated fields on the Customer object

As of API version 2023-10, the following fields on the [`Customer`](/docs/api/admin-graphql/latest/objects/Customer) object have been deprecated:
- `averageOrderAmount`
- `averageOrderAmountV2`

### Deprecated property on the UsageCharge resource

The [`UsageCharge`](/docs/api/admin-rest/latest/resources/usagecharge) resource's `billing_on` property has been deprecated.

### Fulfillment service location name and address

Apps can change the name and address of their fulfillment service locations using the GraphQL Admin API's [`LocationEdit`](/docs/api/admin-graphql/latest/mutations/locationEdit) mutation.

The mutation returns a new user error with the `CANNOT_MODIFY_ONLINE_ORDER_FULFILLMENT_FOR_FS_LOCATION` code if apps attempt to update the `fulfillsOnlineOrders` field for a fulfillment service location. This field can only be modified on manual locations.

In API version 2023-10, apps require the `write_fulfillments` access scope to edit a fulfillment service's location. Otherwise, the following error is returned:
`Access denied for locationEdit field. Required access: write_fulfillments access scope is required to edit the location associated with a fulfillment service.`

### Deprecated field on the ShopResourceLimits object

The `skuResourceLimits` field on the GraphQL Admin API's [`ShopResourceLimits`](/docs/api/admin-graphql/latest/objects/ShopResourceLimits) object is deprecated.

We're no longer enforcing a limit of SKUs at the shop level. Instead, use `maxProductVariants` to determine the limit of variants at the product level.


### MetafieldDefinitionUpdate mutation: access input type changed

The `access` field on the GraphQL Admin API's [`MetafieldDefinitionUpdateInput`](docs/api/admin-graphql/latest/input-objects/MetafieldDefinitionUpdateInput#top) input object has changed from type `MetafieldAccessInput ` to type `MetafieldAccessUpdateInput`. This is part of a broader API change to introduce support for explicit access grants. Refer to [the changelog](https://shopify.dev/changelog/introducing-explicit-access-grants-for-app-owned-metafields) for details.

### Simplified metafield interactions with default namespaces

The `namespace` field on the GraphQL Admin and Storefront APIs is now optional when you create, update, or query metafields and metafield definitions.

We've updated all relevant mutations and queries to accommodate this change. When an app interacts with metafields, the default namespace is the [app-reserved namespace](/docs/apps/build/custom-data/ownership#reserved-prefixes).

### Deprecated metafield.id

The metafield(id) query is no longer supported.

Query metafields using the `HasMetafields` connection of metafield owners. If necessary, you can still query by ID using the Node interface.

### Primary markets support multiple domains

The following changes have been introduced to the Markets API:

- A new `Market.webPresences` connection has been added
- The pre-existing `Market.webPresence` field now returns the primary domain web presence for a primary market with more than one web presence.
- The `marketWebPresenceCreate` mutation now enables you to add web presences to the primary market.
- The required `marketId` argument has been removed from the `marketWebPresenceUpdate` and `marketWebPresenceDelete` mutations. Use the new, required `webPresenceId`` argument instead.

### App Revenue Attribution Record API Depreciated

The App Revenue Attribution API has been removed.

`appRevenueAttributionRecordCreate` and `appRevenueAttributionRecordDelete` are no longer supported in this and future API versions.

This change removes tracking for external app revenue attributions that occur outside of the Billing API. You can now [use Google Analytics](https://www.shopify.com/partners/blog/google-analytics-app-install-event?shpxid=f10f5b0c-B636-4F96-63AB-61F65339867D) to track app installations that are driven by Shopify App Store Ads. Link these metrics to external app revenue, to calculate ad-related metrics such as ad-related return on ad spend.

### Removal of Shop.shopifyPaymentsAccount

We're removing the deprecated `Shop.shopifyPaymentsAccount` field. Use the `shopifyPaymentsAccount` query instead.

### Changes to Subscription Billing Attempt creation behavior

The [`SubscriptionBillingAttemptCreate`](/docs/api/admin-graphql/latest/mutations/subscriptionBillingAttemptCreate) mutation now limits the creation of Billing Attempts based on the Fraud Analysis result on the Subscription Contract’s [Origin Order](/docs/api/admin-graphql/latest/objects/SubscriptionContract#field-subscriptioncontract-originorder).

We've added the `CONTRACT_UNDER_REVIEW` error code to the GraphQL Admin API's [`BillingAttemptUserErrorCode`](/docs/api/admin-graphql/latest/enums/BillingAttemptUserErrorCode) enum. This new error code is returned when a Billing Attempt creation is prevented. In previous API versions, this action returned the `INVALID` error code.

## GraphQL Admin API changes

The following are all the changes introduced in the 2023-10 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>New error code added for `MetafieldDefinitionUpdate`</h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, we&#39;ve added the <code class="text-highlight text-highlight--grey">METAOBJECT_DEFINITION_CHANGED</code> error code to the <code class="text-highlight text-highlight--grey">MetafieldDefinitionUpdateUserErrorCode</code> enum. This new error code is returned if you attempt to update a <code class="text-highlight text-highlight--grey">metaobject_reference</code> metafield definition so that it references a different metaobject definition. Previously, this action would result in an  <code class="text-highlight text-highlight--grey">INTERNAL_SERVER_ERROR</code>.</p>
<p>Learn more about <a href="/docs/api/admin-graphql/latest/enums/MetafieldDefinitionUpdateUserErrorCode#value-metaobjectdefinitionchanged"><code class="text-highlight text-highlight--grey">METAOBJECT_DEFINITION_CHANGED</code></a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>More order information on the `FulfillmentOrder` object</h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, we&#39;ve added the following fields to the <code class="text-highlight text-highlight--grey">FulfillmentOrder</code> object:
- <code class="text-highlight text-highlight--grey">orderId</code>
- <code class="text-highlight text-highlight--grey">orderName</code>
- <code class="text-highlight text-highlight--grey">orderProcessedAt</code>
- <code class="text-highlight text-highlight--grey">channelId</code></p>
<p>With this change, the order information that&#39;s required to fulfill an order is accessible on the <code class="text-highlight text-highlight--grey">fulfillmentOrder</code> object with any of the <code class="text-highlight text-highlight--grey">fulfillment_orders</code> access scopes.  The same data is available using <code class="text-highlight text-highlight--grey">fulfillmentOrder.order</code>, but this requires the <code class="text-highlight text-highlight--grey">read_orders</code> access scope.</p>
<p>Learn more about <a href="/docs/api/admin-graphql/latest/objects/FulfillmentOrder"><code class="text-highlight text-highlight--grey">FulfillmentOrder</code></a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>serviceCode is available on the DeliveryMethod API</h3>
  </div>
  <div class="accordion-content">
    <p>As of the API version 2023-10, you can use the <code class="text-highlight text-highlight--grey">DeliveryMethod</code> object to get the value of the <code class="text-highlight text-highlight--grey">serviceCode</code> chosen for the related <code class="text-highlight text-highlight--grey">FulfillmentOrder</code>. The <code class="text-highlight text-highlight--grey">DeliveryMethod</code> object is now accessible through any of the fulfillment order scopes.</p>
<p>Learn more about <a href="/docs/api/admin-graphql/latest/objects/DeliveryMethod"><code class="text-highlight text-highlight--grey">DeliveryMethod</code></a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Making the primary market more flexible <span id="primary-market-flexibility" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, you can customize the primary market in three new ways:</p>
<ul>
<li>The currency can be set to any currency independent of the merchant&#39;s shop currency.</li>
<li>The country can be set independently of the primary market&#39;s currency, such that combinations like Canada and USD are now possible.</li>
<li>Price lists can be created, allowing you to set fixed prices and percentage adjustments for the primary market.</li>
</ul>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Automatic free shipping discount</h3>
  </div>
  <div class="accordion-content">
    <p>You can now offer automatic free shipping discounts using the <a href="/docs/api/admin-graphql/latest/mutations/discountAutomaticFreeShippingUpdate"><code class="text-highlight text-highlight--grey">discountAutomaticFreeshippingUpdate</code></a> and <a href="https://shopify.dev/docs/api/admin-graphql/latest/mutations/discountAutomaticFreeShippingCreate"><code class="text-highlight text-highlight--grey">discountAutomaticFreeshippingCreate</code></a> mutations.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>New webhook topic added for publication delete events</h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, a new webhook topic <code class="text-highlight text-highlight--grey">PUBLICATIONS_DELETE</code> is added. This webhook fires whenever a publication is deleted and requires the <code class="text-highlight text-highlight--grey">read_publications</code> scope.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>New `CustomerAccountsV2` field on the `Shop` object</h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, you can query the <a href="/docs/api/admin-graphql/latest/objects/Shop#field-shop-customeraccountsv2"><code class="text-highlight text-highlight--grey">CustomerAccountsV2</code></a> field on the <code class="text-highlight text-highlight--grey">Shop</code> object to get information about the shop&#39;s customer accounts settings. <code class="text-highlight text-highlight--grey">CustomerAccountsV2</code> enables you to adapt your app&#39;s behaviour to a merchant&#39;s customer accounts settings.</p>
<p>Learn more about <a href="/docs/api/admin-graphql/latest/objects/CustomerAccountsV2"><code class="text-highlight text-highlight--grey">CustomerAccountsV2</code></a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>averageOrderAmount fields  removed from the Customer object <span id="customer-averageorderamount-fields" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, the following <code class="text-highlight text-highlight--grey">Customer</code> fields have been deprecated:
- <code class="text-highlight text-highlight--grey">averageOrderAmount</code>
- <code class="text-highlight text-highlight--grey">averageOrderAmountV2</code>.</p>
<p>Learn more about the <a href="/docs/api/admin-graphql/latest/objects/Customer"><code class="text-highlight text-highlight--grey">Customer</code></a> object.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>`url` available on `MediaImage.originalSource`</h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, the <code class="text-highlight text-highlight--grey">url</code> field is available on the <code class="text-highlight text-highlight--grey">MediaImage</code> object&#39;s <a href="/docs/api/admin-graphql/latest/objects/mediaimage#field-mediaimage-originalsource"><code class="text-highlight text-highlight--grey">originalSource</code></a> field.</p>
<p>This will be a signed URL that&#39;s valid only for a short period of time. The URL provides access to the uncompressed image that was originally uploaded.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Fulfillment constraints built on Shopify Functions</h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, you can use the Fulfillment Constraints API for a higher degree of customization when you defined fulfillment and delivery strategies. With this API, checkout won’t return any shipping rates if the configured constraints can’t be met.</p>
<p>For example, you can specify that certain products must be fulfilled from a specific location, based on buyer information, cart information, or metafields.</p>
<p>Learn more about <a href="/docs/api/functions/reference/fulfillment-constraints">Fulfillment constraints</a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Apps can now change the name and address of their fulfillment service locations <span id="fulfillment-service-locations" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, apps can change the name and address of their fulfillment service locations using the <a href="/docs/api/admin-graphql/latest/mutations/locationedit"><code class="text-highlight text-highlight--grey">LocationEdit</code></a> mutation.</p>
<p>When a fulfillment service is created, Shopify also creates a new location and associates this with the new fulfillment service. The location inherits its name from the fulfillment service.</p>
<p>Apps can now update the name and address of this location. For example, when a fulfillment service is created, it inherits the country of the shop. If the fulfillment service is located in a different country from the shop, then apps can update the location to accurately reflect the fulfillment service&#39;s address.</p>
<div class="heading-wrapper heading-wrapper-3"><h3 id="breaking-changes">Breaking changes</h3><a class="article-anchor-link" href="#breaking-changes"><span class="visuallyhidden">Anchor link to section titled "Breaking changes"</span></a></div><div class="heading-wrapper heading-wrapper-4"><h4 id="new-user-error-when-editing-locations">New user error when editing locations</h4><a class="article-anchor-link" href="#new-user-error-when-editing-locations"><span class="visuallyhidden">Anchor link to section titled "New user error when editing locations"</span></a></div>
<p>The <code class="text-highlight text-highlight--grey">LocationEdit</code> mutation will return a new user error with the <code class="text-highlight text-highlight--grey">CANNOT_MODIFY_ONLINE_ORDER_FULFILLMENT_FOR_FS_LOCATION</code> code when you try to update the <code class="text-highlight text-highlight--grey">fulfillsOnlineOrders</code> field for a fulfillment service location. This field can only be modified on manual locations. Fulfillment service locations are always enabled to fulfill online orders.</p>
<div class="heading-wrapper heading-wrapper-4"><h4 id="new-authorization-check-when-attempting-to-edit-a-fulfillment-service-location">New authorization check when attempting to edit a fulfillment service location</h4><a class="article-anchor-link" href="#new-authorization-check-when-attempting-to-edit-a-fulfillment-service-location"><span class="visuallyhidden">Anchor link to section titled "New authorization check when attempting to edit a fulfillment service location"</span></a></div>
<p>In API version 2023-10, attempting to edit the location belonging to a fulfillment service without having the <code class="text-highlight text-highlight--grey">write_fulfillments</code> access scope returns the following access denied error:</p>
<blockquote>
<p>Access denied for locationEdit field. Required access: <code class="text-highlight text-highlight--grey">write_fulfillments</code> access scope is required to edit the location associated with a fulfillment service.</p>
</blockquote>
<p>Earlier API versions returned a user error with the <code class="text-highlight text-highlight--grey">NOT_FOUND</code> code.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Breaking changes to ShopResourceLimits API: Deprecate "skuResourceLimits" <span id="sku-resource-limits" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>As of GraphQL Admin API version 2023-10, we&#39;re deprecating the &quot;skuResourceLimits&quot; field from the <code class="text-highlight text-highlight--grey">ShopResourceLimits</code> query object. We&#39;re no longer enforcing a limit of SKUs at a shop level. Instead, please use &quot;maxProductVariants&quot; to determine the limit of variants at a product level.</p>
<p>Learn more about <a href="/docs/api/admin-graphql/latest/objects/ShopResourceLimits"><code class="text-highlight text-highlight--grey">ShopResourceLimits</code></a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Access input type changed on `metafieldDefinitionUpdate` mutation <span id="metafield-update" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, we&#39;re changing the input field type of <code class="text-highlight text-highlight--grey">MetafieldDefinitionUpdateInput.access</code> from <code class="text-highlight text-highlight--grey">MetafieldAccessInput</code> to <code class="text-highlight text-highlight--grey">MetafieldAccessUpdateInput</code>. This change is part of a broader API change to introduce support for explicit access grants.</p>
<aside class="note">
  <h4>Note</h4>
  <p>
This change affects a small number of apps. You aren&#39;t likely affected unless you&#39;re defining a variable of type <code class="text-highlight text-highlight--grey">MetafieldAccessInput</code> for the access property in a <code class="text-highlight text-highlight--grey">MetafieldDefinitionUpdate</code> mutation.</p>
</aside>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Simplify metafield interaction with default namespaces <span id="metafield-interaction" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, the GraphQL Admin and Storefront APIs have made the namespace field optional when creating, updating, or querying metafields and metafield definitions. We&#39;ve updated all relevant mutations and queries to accommodate this change.</p>
<p>Learn more about the <a href="/docs/api/admin-graphql/latest/queries/metafield">GraphQL Admin API</a> and <a href="/docs/api/storefront">Storefront API</a> documentation for Metafields.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Deprecation of `metafield(id)` query <span id="metafield-id-query" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, the <code class="text-highlight text-highlight--grey">metafield(id)</code> query is no longer supported. Metafields should be queried using the <code class="text-highlight text-highlight--grey">HasMetafields</code> connection of metafield owners. If necessary, metafields can be queried by ID using the <code class="text-highlight text-highlight--grey">Node</code> interface.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Renderable and online store capabilities for metaobjects</h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, we&#39;re introducing new metaobject capabilities to enable SEO attributes and make entries renderable in the online store. These capabilities make it possible to render landing pages from metaobject entries.</p>
<p>Both capabilities can be enabled and configured independently when creating and updating a metaobject definition.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Multiple domains on primary markets <span id="multiple-domains" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, you can have multiple domains on the primary market. The following changes have been introduced to the Markets API:</p>
<ul>
<li>New <code class="text-highlight text-highlight--grey">Market.webPresences</code> connection has been added</li>
<li>Pre-existing <code class="text-highlight text-highlight--grey">Market.webPresence</code> field will return the primary domain web presence for a primary market with multiple web presences</li>
<li><code class="text-highlight text-highlight--grey">marketWebPresenceCreate</code> mutation will now allow adding additional web presences to the primary market</li>
<li>The required <code class="text-highlight text-highlight--grey">marketId</code> argument has been removed from the <code class="text-highlight text-highlight--grey">marketWebPresenceUpdate</code> and <code class="text-highlight text-highlight--grey">marketWebPresenceDelete</code> mutations. The new required <code class="text-highlight text-highlight--grey">webPresenceId</code> argument should be used instead</li>
</ul>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Staff error as an order cancel reason</h3>
  </div>
  <div class="accordion-content">
    <p>As of 2023-10, we have added <code class="text-highlight text-highlight--grey">STAFF</code> to the <code class="text-highlight text-highlight--grey">OrderCancelReason</code> GraphQL type to serve as a reason for canceling orders due to staff errors.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>New field to query order cancellations</h3>
  </div>
  <div class="accordion-content">
    <p>As of 2023-10, we&#39;ve added a new field <code class="text-highlight text-highlight--grey">cancellation</code> to <code class="text-highlight text-highlight--grey">Order</code> graphQL object. This field can provide additional details about the order cancellation, such as staff provided notes on why the order was cancelled. This data is currently available for some orders cancelled on Point of Sale app.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Order Routing Location Rule API — Developer Preview</h3>
  </div>
  <div class="accordion-content">
    <p>The Order Routing Location Rule API is now available in a developer preview. You can use this new Shopify Functions API to write custom order routing rules that determine how to best fulfill and ship orders, based on the needs of the merchant.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>New compare-at price range field on Product API</h3>
  </div>
  <div class="accordion-content">
    <p>As of version 2023-10 of the GrapqhQL Admin API, we&#39;ve added the <code class="text-highlight text-highlight--grey">compareAtPriceRange</code> field to <code class="text-highlight text-highlight--grey">Product</code>  which will return the minimum and maximum compare-at prices across a product&#39;s variants.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Manage Quantity Price Breaks for B2B Customers</h3>
  </div>
  <div class="accordion-content">
    <p>As of the <code class="text-highlight text-highlight--grey">2023-10</code> version of the Admin GraphQL API, you can view the <code class="text-highlight text-highlight--grey">quantityPriceBreaks</code> for a product variant on <code class="text-highlight text-highlight--grey">priceListPrice</code> and <code class="text-highlight text-highlight--grey">productVariantContextualPricing</code>. Additionally, you will be able to use the <code class="text-highlight text-highlight--grey">quantityPricingByVariantUpdate</code> mutation to manage quantity price breaks, quantity rules, and fixed prices for multiple variants.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>App Revenue Attribution Record API Depreciated <span id="app-revenue-attribution" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>As of <strong>October 2023</strong>, the App Revenue Attribution API has been removed.</p>
<p><code class="text-highlight text-highlight--grey">appRevenueAttributionRecordCreate</code> and <code class="text-highlight text-highlight--grey">appRevenueAttributionRecordDelete</code> are no longer supported in this and future API versions.</p>
<p>This change removes tracking for external app revenue attributions that occur outside of the Billing API. Partners can now use <a rel="external noreferrer noopener" target="_blank" href="https://www.shopify.com/partners/blog/google-analytics-app-install-event">Google Analytics to track Shopify App Store Ads installs</a> - which can be linked to external app revenue to calculate ad related return on ad spend and other ads related metrics.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Removing `Shop.shopifyPaymentsAccount` on Admin API <span id="shopify-payments-account" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>As of <code class="text-highlight text-highlight--grey">2023-10</code>, we&#39;re removing the deprecated <code class="text-highlight text-highlight--grey">Shop.shopifyPaymentsAccount</code> field. Use the <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/shopifyPaymentsAccount">shopifyPaymentsAccount</a> query instead.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Shopify Protect protection status on Admin API</h3>
  </div>
  <div class="accordion-content">
    <p>As of the latest <code class="text-highlight text-highlight--grey">unstable</code> version and upcoming <code class="text-highlight text-highlight--grey">2023-10</code> version of the Admin GraphQL API, you can use the <code class="text-highlight text-highlight--grey">shopifyProtect</code> field of <code class="text-highlight text-highlight--grey">Order</code> to view the protection status of Shop Pay orders. The protection status is established asynchronously from the <code class="text-highlight text-highlight--grey">orders/create</code> webhook so you can also listen to the <code class="text-highlight text-highlight--grey">orders/shopify_protect_eligibility_changed</code> webhook to know when the protection status is created or updated.</p>
<p>By providing a clear view of an order’s protection status, we&#39;re empowering developers to make more informed decisions. For instance, fraud protection apps can avoid redundant costs for merchants when a Shop Pay order is already protected.</p>
<p>Learn more about Shopify Protect’s protection status on <a href="https://shopify.dev/docs/api/admin-graphql/unstable/objects/Order#field-order-shopifyprotect">Shopify.dev</a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Changes to subscription billing attempt creation behavior <span id="subscription-billing-attempt" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-graphql/latest/mutations/subscriptionBillingAttemptCreate"><code class="text-highlight text-highlight--grey">SubscriptionBillingAttemptCreate</code></a> mutation now limits the creation of billing attempts based on the <a rel="external noreferrer noopener" target="_blank" href="https://help.shopify.com/en/manual/orders/fraud-analysis">fraud analysis</a> result on the subscription contract’s <a href="/docs/api/admin-graphql/latest/objects/SubscriptionContract#field-subscriptioncontract-originorder">origin order</a>.</p>
<p>As of API version 2023-10, we&#39;ve added the <code class="text-highlight text-highlight--grey">CONTRACT_UNDER_REVIEW</code> error code to the <code class="text-highlight text-highlight--grey">BillingAttemptUserErrorCode</code> enum. This new error code is returned in the case where Billing Attempt creation is prevented. In previous API versions, this action will return the <code class="text-highlight text-highlight--grey">INVALID</code> error code.</p>
<p>Learn more about <a href="/docs/apps/build/purchase-options/subscriptions/contracts/build-a-subscription-contract#step-4-create-a-billing-attempt">subscription contracts and billing attempts</a>.</p>
  </div>
</div>
  </div>
</div>


## GraphQL Storefront API changes

<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>Simplify metafield interaction with default namespaces <span id="metafield-default-namespaces" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, the GraphQL Admin and Storefront APIs have made the namespace field optional when creating, updating, or querying metafields and metafield definitions. We&#39;ve updated all relevant mutations and queries to accommodate this change. When an app interacts with metafields, the default namespace is the <a href="/docs/apps/build/custom-data/ownership#reserved-prefixes">app-reserved namespace</a>.</p>
<p>This update does not affect API calls that explicitly specify a namespace. However, it simplifies the process of interacting with namespaces by removing the need to provide a namespace field when the default is suitable. As a result, Apps can now create and query Metafields without the requirement of specifying a namespace.</p>
<p>Learn more in the <a href="https://shopify.dev/docs/api/admin-graphql/latest/queries/metafield">Admin API</a> and <a href="https://shopify.dev/docs/api/storefront">Storefront API</a> documentation for Metafields.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Renderable and Online Store capabilities for metaobjects</h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, we&#39;re introducing new metaobject capabilities to enable SEO attributes and make entries renderable in the online store. These capabilities make it possible to render landing pages from metaobject entries.</p>
<p>The renderable capability enables setting SEO metadata attributes on your metaobjects. These attributes are accessible in Liquid and via the Storefront API.</p>
<p>The Online Store capability makes your metaobjects render as web pages in the Online Store by assigning a theme template and defining a URL.</p>
<p>Both capabilities can be enabled and configured independently when creating and updating a metaobject definition.</p>
<p>Learn more about the <code class="text-highlight text-highlight--grey">renderable</code> and <code class="text-highlight text-highlight--grey">onlineStore</code> capabilities on <a href="https://shopify.dev/docs/apps/custom-data/metaobjects/capabilities">Shopify.dev</a></p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Staff error as Order cancel reason</h3>
  </div>
  <div class="accordion-content">
    <p>As of 2023-10, we have added <code class="text-highlight text-highlight--grey">STAFF</code> to the <code class="text-highlight text-highlight--grey">OrderCancelReason</code> GraphQL type to serve as a reason for canceling orders due to staff errors.</p>
<p>Learn more about <code class="text-highlight text-highlight--grey">OrderCancelReason</code> on <a href="https://shopify.dev/docs/api/admin-graphql/latest/enums/OrderCancelReason">Shopify.dev</a>.</p>
  </div>
</div>
  </div>
</div>


## REST Admin API changes

<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>Removal of UsageCharge billing_on field on Admin REST API <span id="usagecharge-billing-on-field" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, the <code class="text-highlight text-highlight--grey">UsageCharge</code> resource&#39;s <code class="text-highlight text-highlight--grey">billing_on</code> property is deprecated.</p>
<p>Learn more about the <a href="/docs/api/admin-rest/latest/resources/usagecharge"><code class="text-highlight text-highlight--grey">UsageCharge</code></a> resource.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Staff error as an order cancel reason</h3>
  </div>
  <div class="accordion-content">
    <p>As of API version 2023-10, we&#39;ve added <code class="text-highlight text-highlight--grey">STAFF</code> to the <code class="text-highlight text-highlight--grey">OrderCancelReason</code> GraphQL type to serve as a reason for canceling orders due to staff errors.</p>
<p>Learn more about <a href="/docs/api/admin-graphql/latest/OrderCancelReason"><code class="text-highlight text-highlight--grey">OrderCancelReason</code></a>.</p>
  </div>
</div>
  </div>
</div>