> 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">April 1, 2024</td>
      <td scope="row">April 1, 2025</td>
   </tr>
  </tbody>
</table>

## Highlights

Here are some highlights of version 2024-04 of Shopify's APIs:

### Deprecations: Storefront API and REST Admin API

This release deprecates the following parts of Shopify's APIs:

- [Storefront API](#storefront-api-changes): `Checkout` mutations, queries, and types
- [REST Admin API](#rest-admin-api-changes): `Checkout` resource

These items will sunset on April 1, 2025 (API version 2025-04). Before then, migrate your apps to:

- [Cart API](/docs/storefronts/headless/building-with-the-storefront-api/cart/manage). To learn more, read [Migrate to the Storefront Cart API](/docs/storefronts/headless/building-with-the-storefront-api/cart/migrate-to-cart-api).
- [Checkout Sheet Kit](/docs/storefronts/headless/mobile-apps/checkout-sheet-kit). This library enables one-page checkout for iOS, Android, and React Native apps.

For more information, refer to [Deprecation of Checkout APIs](/changelog/deprecation-of-checkout-apis).

### GraphQL Admin API

The [GraphQL Admin API](#graphql-admin-api-changes) now includes new product types that support up to 2048 variants, increasing per-product variant support from our historical maximum of 100. As part of these changes, GraphQL types and REST resources for managing product variants and options are deprecated.

All public apps that are built on existing GraphQL product APIs or REST product APIs must migrate to the [new GraphQL product APIs](/docs/apps/build/graphql/migrate/new-product-model) by February 1, 2025.

Custom apps that are built using the existing GraphQL product APIs must [migrate](/docs/apps/build/graphql/migrate/new-product-model) to the new GraphQL product APIs by April 1, 2025.

Custom apps that are built on REST will also need to [migrate](/docs/apps/build/graphql/migrate/new-product-model) if they need to support more than 100 variants.

Custom apps that don't need to support more than 100 variants can continue to use the deprecated REST product APIs. However, please note the following:

- Developers should expect that the GraphQL API will be the only supported API over the long term and will be made aware of these timelines as they become available.

- The deprecated REST product APIs are in maintenance mode. All new features and support will be built only for the new GraphQL product APIs.

- Any merchant using custom apps that are built with these deprecated APIs will not be able to increase their variant limit past 100.


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


### Checkout API Deprecation

We've deprecated the Checkout APIs. For more information, refer to [Deprecation of Checkout APIs](/changelog/deprecation-of-checkout-apis). 

### Count field unification

Fields that returned a count of resources are removed and replaced with new count fields that have consistent API design and improved features. Count fields are now standalone fields with a common naming pattern and their own arguments instead of being a field under a connection type.

### Inventory mutations and fields removal

The following fields and mutations are removed:

- `InventoryLevel.available`
- `InventoryLevel.incoming`
- `InventoryLevel.deactivationAlertHtml`
- `Mutation.InventoryAdjustQuantity`
- `Mutation.InventoryBulkAdjustQuantityAtLocation`

Replace `InventoryLevel.available` and `InventoryLevel.incoming` with `InventoryLevel.quantities`.

Replace `InventoryLevel.deactivationAlertHtml` with `InventoryLevel.deactivationAlert`.

Replace `Mutation.InventoryAdjustQuantity` and `Mutation.InventoryBulkAdjustQuantityAtLocation` with `Mutation.InventoryAdjustQuantities` or `Mutation.InventoryMoveQuantities`.

### Locale fields on `MarketWebPresence`

The following fields on the `MarketWebPresence` object no longer return locale strings and instead make use of the `ShopLocale` type:

- `defaultLocale`
- `alternateLocales`

Update your API calls using `MarketWebPresence.defaultLocale` or `MarketWebPresence.alternateLocales` to use the `ShopLocale` type.

### Fulfillment request validation

We now validate that there are no duplicate fulfillment orders in requests to create a fulfillment.

**GraphQL Admin API**

You can no longer have have multiples of the same `fulfillmentOrderId` in a single request to the [`fulfillmentCreateV2`](/docs/api/admin-graphql/2024-04/mutations/fulfillmentCreateV2) mutation.

Instead, you must combine any payload with the same `fulfillmentOrderId` into one group.

**REST Admin API**

You can no longer have multiples of the same `fulfillment_order_id` within the `line_items_by_fulfillment_order` parameter, for POST calls to the REST Admin API that [create a fulfillment for one or many fulfillment orders](/docs/api/admin-rest/2024-01/resources/fulfillment#post-fulfillments).

Instead, you must combine any payload with the same `fulfillment_order_id` into one group.

### `OrderTransaction.receipt` deprecation

The `OrderTransaction.receipt` field has been removed, and is replaced by `receiptJson`.

### Payment and billing error codes and mapping

Payment error codes and mappings have changed. For detailed information on the changes, refer to the [changelog](https://shopify.dev/changelog/new-error-codes-and-updated-error-code-mapping-for-payment-and-billing).

### Sunset of `productDuplicateAsync` mutation, GraphQL Admin API

We've removed the `productDuplicateAsync` mutation, which has been deprecated since version 2023-07, from the GraphQL Admin API.

Use the [`productDuplicateAsyncV2`](/docs/api/admin-graphql/2024-04/mutations/productDuplicateAsyncV2) mutation instead.

## Customer Account API

Version 2024-04 of the Customer Account API introduces the following 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>Company and CompanyLocation metafields</h3>
  </div>
  <div class="accordion-content">
    <p>You now have read access to metafields on <a href="/docs/api/customer/2024-04/objects/Company"><code class="text-highlight text-highlight--grey">Company</code></a> and <a href="/docs/api/customer/2024-04/objects/CompanyLocation"><code class="text-highlight text-highlight--grey">CompanyLocation</code></a> objects on the Customer Account API.</p>
<p>Learn more about the <a href="/docs/api/customer/2024-04/objects/Metafield"><code class="text-highlight text-highlight--grey">Metafield</code></a> object on the Customer Account API.</p>
  </div>
</div>
  </div>
</div>


## GraphQL Admin API changes

Version 2024-04 of the GraphQL Admin API introduces the following 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>Additional information for delivery methods</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-graphql/2024-04/objects/DeliveryMethodAdditionalInformation"><code class="text-highlight text-highlight--grey">DeliveryMethodAdditionalInformation</code></a> object has been added, which supports additional information on delivery methods to assist during the delivery process.</p>
<p>The <a href="/docs/api/admin-graphql/2024-04/objects/DeliveryMethod#field-deliverymethod-additionalinformation"><code class="text-highlight text-highlight--grey">additionalInformation</code></a> field is added to the <code class="text-highlight text-highlight--grey">deliveryMethod</code> object, which enables additional information to be read when performing a delivery.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Charge custom amounts</h3>
  </div>
  <div class="accordion-content">
    <ul>
<li>The <a href="/docs/api/admin-graphql/2024-04/mutations/orderCreateMandatePayment#argument-amount"><code class="text-highlight text-highlight--grey">amount</code></a> argument has been added to the <code class="text-highlight text-highlight--grey">orderCreateMandatePayment</code> mutation.</li>
</ul>
<p>Use this argument to specify custom amounts to be charged from a vaulted card for Shopify Plus merchants.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Checkout header and footer customization</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-graphql/2024-04/objects/CheckoutBranding"><code class="text-highlight text-highlight--grey">CheckoutBranding</code></a> object now enables you to customize the header and footer that displays at <strong>Checkout</strong> and <strong>Thank you</strong> pages to represent a merchant&#39;s brand. In the object and mutation, header and footer customizations are available on the <a href="/docs/api/admin-graphql/2024-04/objects/CheckoutBranding#field-checkoutbranding-customizations"><code class="text-highlight text-highlight--grey">customizations</code></a> data object.</p>
<p>For example, you can hide the logo, breadcrumbs, default footer content, and <strong>Back to cart</strong> link, and control the footer position and alignment. On one-page checkout, you can customize the back to cart link with a custom icon.</p>
<p>The following new fields are available:</p>
<table>
  <caption>New types for customizing headers and footers</caption>
  <tr>
    <th scope="col">Name</th>
    <th scope="col">Type</th>
    <th scope="col">Change</th>
  </tr>
  <tr>
    <td scope="row"><code>buyerJourney</code> (breadcrumbs)</td>
    <td>Field</td>
    <td>Added</td>
  </tr>
  <tr>
    <td scope="row"><code>cartLink</code></td>
    <td>Field</td>
    <td>Added</td>
  </tr>
  <tr>
    <td scope="row"><code>cart_link</code></td>
    <td>Field</td>
    <td>Added to the <code>header</code> field</td>
  </tr>
  <tr>
    <td scope="row"><code>colorScheme</code></td>
    <td>Field</td>
    <td>Added</td>
  </tr>
  <tr>
    <td scope="row"><code>footer</code></td>
    <td>Field</td>
    <td>Added</td>
  </tr>
  <tr>
    <td scope="row"><code>padding</code></td>
    <td>Field</td>
    <td>Added</td>
  </tr>
</table>
<p>Learn how to customize the <a href="/docs/apps/build/checkout/customize-header">header</a> and <a href="/docs/apps/build/checkout/customize-footer">footer</a> for common use cases, using the GraphQL Admin API and checkout UI extensions.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Checkout section styling</h3>
  </div>
  <div class="accordion-content">
    <p>You can now use the <a href="/docs/api/admin-graphql/2024-04/objects/CheckoutBranding"><code class="text-highlight text-highlight--grey">CheckoutBranding</code></a> object to style sections of checkout and order summary. Section styling is used to highlight or contour the look of a page, creating high visual impact and expressiveness in structured content.</p>
<p>In the object and mutation, section customizations are available on the <a href="/docs/api/admin-graphql/2024-04/objects/CheckoutBranding#field-checkoutbranding-customizations"><code class="text-highlight text-highlight--grey">customizations</code></a> and <a href="/docs/api/admin-graphql/2024-04/objects/CheckoutBranding#field-checkoutbranding-designsystem"><code class="text-highlight text-highlight--grey">design-system</code></a> data objects.</p>
<p>The following are the data structures, which illustrate the customization capabilities now available through the API:</p>
<p>
<div class="react-code-block" data-preset="basic">
<div class="react-code-block-preload ThemeMode-dim">
<div class="react-code-block-preload-bar basic-codeblock"></div>
<div class="react-code-block-preload-placeholder-container">
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<div class="react-code-block-preload-code-container">
<div class="react-code-block-preload-codeline-number"></div>
<div class="react-code-block-preload-codeline"></div>
</div>
<p></div>
</div>
<script type="text/plain" data-language="gql" data-title="design-system">
designSystem {
  colors {
    schemes {
      scheme3 {
        base {
          background
          text
          border
          icon
          accent
          decorative
        }
        control {
          background
          text
          border
          icon
          accent
          decorative
          selected {
            background
            text
            border
            icon
            accent
            decorative
          }
        }
        primaryButton {
          background
          text
          border
          icon
          accent
          decorative
          hover {
            background
            text
            border
            icon
            accent
            decorative
          }
        }
        secondaryButton {
          background
          text
          border
          icon
          accent
          decorative
          hover {
            background
            text
            border
            icon
            accent
            decorative
          }
        }
      }
      scheme4 {
        base {
          background
          text
          border
          icon
          accent
          decorative
        }
        control {
          background
          text
          border
          icon
          accent
          decorative
          selected {
            background
            text
            border
            icon
            accent
            decorative
          }
        }
        primaryButton {
          background
          text
          border
          icon
          accent
          decorative
          hover {
            background
            text
            border
            icon
            accent
            decorative
          }
        }
        secondaryButton {
          background
          text
          border
          icon
          accent
          decorative
          hover {
            background
            text
            border
            icon
            accent
            decorative
          }
        }
      }
    }
  }
}
</script>
<script type="text/plain" data-language="gql" data-title="customizations">
customizations {
  main {
    section {
      background
      colorScheme
      cornerRadius
      border
      borderStyle
      borderWidth
      padding
      shadow
    }
  }
  orderSummary {
    section {
      background
      colorScheme
      cornerRadius
      border
      borderStyle
      borderWidth
      padding
      shadow
    }
  }
  expressCheckout {
    button {
      cornerRadius
    }
  }
}
</script>
</div>
</p>
<p>To learn more, refer to our tutorial on <a href="/docs/apps/build/checkout/styling/customize-sections">checkout section styling</a>.</p>
  </div>
</div></p>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Checkout color schemes</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-graphql/2024-04/objects/CheckoutBranding"><code class="text-highlight text-highlight--grey">CheckoutBranding</code></a> object now supports configuring two new color schemes, <code class="text-highlight text-highlight--grey">scheme3</code> and <code class="text-highlight text-highlight--grey">scheme4</code>.</p>
<p>Previously, only two color schemes were available. Now you can configure up to four schemes and assign any of them to the following sections in the <a href="/docs/api/admin-graphql/2024-04/objects/CheckoutBranding#field-checkoutbranding-designsystem"><code class="text-highlight text-highlight--grey">customizations</code></a> data object:</p>
<ul>
<li><code class="text-highlight text-highlight--grey">main</code></li>
<li><code class="text-highlight text-highlight--grey">main.section</code></li>
<li><code class="text-highlight text-highlight--grey">orderSummary</code></li>
<li><code class="text-highlight text-highlight--grey">orderSummary.section</code></li>
</ul>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Code-based discounts on line items</h3>
  </div>
  <div class="accordion-content">
    <p>The <code class="text-highlight text-highlight--grey">withCodeDiscounts</code> argument has been added to the <code class="text-highlight text-highlight--grey">LineItem</code> object&#39;s <a href="/docs/api/admin-graphql/2024-04/objects/LineItem#field-lineitem-discountedtotalset"><code class="text-highlight text-highlight--grey">discountedTotalSet</code></a> field.</p>
<p>Use this field to either include or exclude line item discounts that originate from a discount code.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Count field unification <span id="count-field-unification" class="heading-flag breaking"</h3>
  </div>
  <div class="accordion-content">
    <p>Fields that returned a count of resources are removed and replaced with new count fields that have consistent API design and improved features. Count fields are now standalone fields with a common naming pattern and their own arguments instead of being a field under a connection type.</p>
<p>Instead of varying <code class="text-highlight text-highlight--grey">Int</code> or <code class="text-highlight text-highlight--grey">UnsignedInt64</code> return types, all count fields now return a <code class="text-highlight text-highlight--grey">Count</code> object type with precision and <code class="text-highlight text-highlight--grey">count</code> fields.</p>
<p>Some count fields now accept filter arguments matching that of a neighboring connection, such as <a href="/docs/api/admin-graphql/2024-04/queries/products"><code class="text-highlight text-highlight--grey">products</code></a> and <a href="/docs/api/admin-graphql/2024-04/queries/productsCount"><code class="text-highlight text-highlight--grey">productsCount</code></a>.</p>
<p>For detailed information on the changes, <a href="/changelog/unification-of-count-fields">refer to the changelog</a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Create options linked to metafields</h3>
  </div>
  <div class="accordion-content">
    <p>You can now use the <code class="text-highlight text-highlight--grey">productOptionsCreate</code>, <code class="text-highlight text-highlight--grey">productCreate</code>, and <code class="text-highlight text-highlight--grey">productOptionUpdate</code> mutations to create metafield-linked product options.</p>
<p>Metafield-linked product options are only available in Shopify taxonomy early access.</p>
<p><a href="/docs/apps/build/graphql/migrate/new-product-model/metafield-linked">Learn more</a> about metafield-linked product options.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Customer redaction support</h3>
  </div>
  <div class="accordion-content">
    <p>The error code <code class="text-highlight text-highlight--grey">CUSTOMER_REDACTED</code> has been added to the <a href="/docs/api/admin-graphql/2024-04/mutations/subscriptionContractAtomicCreate"><code class="text-highlight text-highlight--grey">subscriptionContractAtomicCreate</code></a> and <a href="/docs/api/admin-graphql/2024-04/mutations/subscriptionContractCreate"><code class="text-highlight text-highlight--grey">subscriptionContractCreate</code></a> mutations.</p>
<p>This error code is returned when you create new subscription contracts for customers whose data is scheduled for redaction or has been redacted.</p>
<p><a rel="external noreferrer noopener" target="_blank" href="https://help.shopify.com/en/manual/customers/manage-customers#part-c3168705890cfe54">Learn more</a> about erasing a customer&#39;s personal data.</p>
<p>Learn more about customer redaction here.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Customer subscription contracts</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/customer/2024-04/objects/Customer#field-customer-subscriptioncontract"><code class="text-highlight text-highlight--grey">subscriptionContract</code></a> and <a href="/docs/api/customer/2024-04/objects/Customer#connection-subscriptioncontracts"><code class="text-highlight text-highlight--grey">subscriptionContracts</code></a> fields have been added to the <code class="text-highlight text-highlight--grey">Customer</code> object.</p>
<p>Use these fields to query for all subscription contracts that belong to a customer, or to query for a specific subscription contract, respectively.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Custom storefront attribution for abandonment events</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-graphql/2024-04/objects/Abandonment#field-abandonment-isfromcustomstorefront"><code class="text-highlight text-highlight--grey">isFromCustomStorefront</code></a> field has been added to the <code class="text-highlight text-highlight--grey">Abandonment</code> object, enabling you to determine whether an abandonment event comes from a custom storefront channel.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Error codes for creating product media</h3>
  </div>
  <div class="accordion-content">
    <p>The following error codes have been added to the <a href="/docs/api/admin-graphql/2024-04/enums/FilesErrorCode"><code class="text-highlight text-highlight--grey">FilesErrorCode</code></a> enum:</p>
<ul>
<li><code class="text-highlight text-highlight--grey">PRODUCT_MEDIA_LIMIT_EXCEEDED</code>: Thrown when you exceed the limit of 250 media items per product</li>
<li><code class="text-highlight text-highlight--grey">MISSING_ARGUMENTS</code>: Thrown when zero arguments are provided with the media file upload</li>
</ul>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Fulfillment request validation <span id="fulfillment-request-validation-gql" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>We now validate that there are no duplicate fulfillment orders in requests to create a fulfillment.</p>
<p>You can no longer have multiples of the same <code class="text-highlight text-highlight--grey">fulfillmentOrderId</code> in a request to the <a href="/docs/api/admin-graphql/2024-04/mutations/fulfillmentCreateV2"><code class="text-highlight text-highlight--grey">fulfillmentCreateV2</code></a> mutation.</p>
<p>Instead, you must combine any payload with the same <code class="text-highlight text-highlight--grey">fulfillmentOrderId</code> into one group.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Fulfillment service opt-in deprecation</h3>
  </div>
  <div class="accordion-content">
    <p>The <code class="text-highlight text-highlight--grey">fulfillmentOrdersOptIn</code> field on the <a href="/docs/api/admin-graphql/2024-04/objects/FulfillmentService"><code class="text-highlight text-highlight--grey">FulfillmentService</code></a> object, along with its related types, is being deprecated because the migration to the Fulfillment Orders API is complete. All properly functioning fulfillment services now have the <code class="text-highlight text-highlight--grey">fulfillmentOrdersOptIn</code> field set to <code class="text-highlight text-highlight--grey">true</code>.</p>
<p>In the 2024-04 API version, the <code class="text-highlight text-highlight--grey">fulfillmentOrdersOptIn</code> field becomes nullable and defaults to <code class="text-highlight text-highlight--grey">true</code> in the <code class="text-highlight text-highlight--grey">fulfillmentServiceCreate</code> mutation. This field will be removed from the mutation input in the next API version.</p>
<p>To prepare for the 2024-07 API version release, stop supplying the <code class="text-highlight text-highlight--grey">fulfillmentOrdersOptIn</code> parameter when you create a new fulfillment service.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Google Cloud Pub/Sub webhook duplicate error handling</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-graphql/2024-04/mutations/pubSubWebhookSubscriptionCreate#field-pubsubwebhooksubscriptioncreatepayload-usererrors"><code class="text-highlight text-highlight--grey">TAKEN</code></a> enum value has been added to the list of error codes in <code class="text-highlight text-highlight--grey">PubSubWebhookSubscriptionCreatePayload</code> returns, indicating when an address for the webhook topic has already been taken.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Inventory management when updating fulfillment services</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-graphql/2024-04/mutations/fulfillmentServiceUpdate#argument-inventorymanagement"><code class="text-highlight text-highlight--grey">inventory_management</code></a> argument has been added to the <code class="text-highlight text-highlight--grey">fulfillmentServiceUpdate</code> mutation.</p>
<p>Use this field to specify whether the fulfillment service tracks product inventory and provides updates to Shopify.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Inventory mutations and fields removal <span id="inventory-mutations-fields-removal" class="heading-flag breaking"</h3>
  </div>
  <div class="accordion-content">
    <p>The following fields and mutations are removed:</p>
<ul>
<li><code class="text-highlight text-highlight--grey">InventoryLevel.available</code></li>
<li><code class="text-highlight text-highlight--grey">InventoryLevel.incoming</code></li>
<li><code class="text-highlight text-highlight--grey">InventoryLevel.deactivationAlertHtml</code></li>
<li><code class="text-highlight text-highlight--grey">Mutation.InventoryAdjustQuantity</code></li>
<li><code class="text-highlight text-highlight--grey">Mutation.InventoryBulkAdjustQuantityAtLocation</code></li>
</ul>
<p>Replace <code class="text-highlight text-highlight--grey">InventoryLevel.available</code> and <code class="text-highlight text-highlight--grey">InventoryLevel.incoming</code> with <code class="text-highlight text-highlight--grey">InventoryLevel.quantities</code>.</p>
<p>Replace <code class="text-highlight text-highlight--grey">InventoryLevel.deactivationAlertHtml</code> with <code class="text-highlight text-highlight--grey">InventoryLevel.deactivationAlert</code>.</p>
<p>Replace <code class="text-highlight text-highlight--grey">Mutation.InventoryAdjustQuantity</code> and <code class="text-highlight text-highlight--grey">Mutation.InventoryBulkAdjustQuantityAtLocation</code> with <code class="text-highlight text-highlight--grey">Mutation.InventoryAdjustQuantities</code> or <code class="text-highlight text-highlight--grey">Mutation.InventoryMoveQuantities</code>.</p>
<p><a href="/docs/apps/build/orders-fulfillment/inventory-management-apps/manage-quantities-states">Learn more</a> about how to use the new fields.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Locale fields return <span id="locale-fields-return" class="heading-flag breaking"</h3>
  </div>
  <div class="accordion-content">
    <p>The following fields on the <code class="text-highlight text-highlight--grey">MarketWebPresence</code> object no longer return locale strings and instead make use of the <code class="text-highlight text-highlight--grey">ShopLocale</code> object:</p>
<ul>
<li><code class="text-highlight text-highlight--grey">defaultLocale</code></li>
<li><code class="text-highlight text-highlight--grey">alternateLocales</code></li>
</ul>
<p>Update your API calls using <code class="text-highlight text-highlight--grey">MarketWebPresence.defaultLocale</code> or <code class="text-highlight text-highlight--grey">MarketWebPresence.alternateLocales</code> to use the <a href="/docs/api/admin-graphql/2024-04/objects/ShopLocale"><code class="text-highlight text-highlight--grey">ShopLocale</code></a> object instead.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Media type query for product connection</h3>
  </div>
  <div class="accordion-content">
    <p>The <code class="text-highlight text-highlight--grey">media</code> connection on the <code class="text-highlight text-highlight--grey">Product</code> object now includes a <a href="/docs/api/admin-graphql/2024-04/objects/Product#connection-media-query-query-filter-media_type"><code class="text-highlight text-highlight--grey">media_type</code></a> filter on its <code class="text-highlight text-highlight--grey">query</code> argument. The following are the valid values:</p>
<ul>
<li><code class="text-highlight text-highlight--grey">IMAGE</code></li>
<li><code class="text-highlight text-highlight--grey">VIDEO</code></li>
<li><code class="text-highlight text-highlight--grey">MODEL_3D</code></li>
<li><code class="text-highlight text-highlight--grey">EXTERNAL_VIDEO</code></li>
</ul>
<p>Use this filter to search the media that&#39;s associated with a product, such as images, 3D models, or videos.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Metafield capability violation error code</h3>
  </div>
  <div class="accordion-content">
    <p>We&#39;ve added the <code class="text-highlight text-highlight--grey">CAPABILITY_VIOLATION</code> error code to additional mutations that write metafields.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>New fulfillment order assignment status</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-graphql/2024-04/enums/FulfillmentOrderAssignmentStatus#value-fulfillmentunsubmitted"><code class="text-highlight text-highlight--grey">FULFILLMENT_UNSUBMITTED</code></a> value has been added to the set of <code class="text-highlight text-highlight--grey">FulfillmentOrderAssignmentStatus</code> enum.</p>
<p>Use this value to filter fulfillment orders for which the merchant hasn&#39;t yet requested fulfillment.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>New fulfillment order search options</h3>
  </div>
  <div class="accordion-content">
    <p>You can now use the following new sort options in the <a href="/docs/api/admin-graphql/2024-04/queries/fulfillmentOrders">fulfillmentOrders</a> query.</p>
<ul>
<li><code class="text-highlight text-highlight--grey">createdAt</code>: The date that the fulfillment order was created.</li>
<li><code class="text-highlight text-highlight--grey">fulfillBy</code>: The date by which the fulfillment order should be fulfilled by the merchant.</li>
</ul>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>New fulfillment order sort key</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-graphql/2024-04/enums/FulfillmentOrderSortKeys#value-updatedat"><code class="text-highlight text-highlight--grey">UPDATED_AT</code></a> enum value has been added to the set of <code class="text-highlight text-highlight--grey">FulfillmentOrderSortKeys</code>.</p>
<p>Use this value to prioritize your work on fulfillment orders, and reduce the query cost when you&#39;re sorting and searching through other filters.</p>
<p><a href="/docs/api/admin-graphql/2024-04/queries/fulfillmentOrders">Learn more</a> about sort and search parameters for fulfillment orders.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>New inventory item fields and product variant deprecations</h3>
  </div>
  <div class="accordion-content">
    <p>The following new fields are exposed on the <code class="text-highlight text-highlight--grey">InventoryItem</code> object and its related input types, and some fields on <code class="text-highlight text-highlight--grey">ProductVariant</code>, and related input types, that were marked as deprecated. These changes are all in support of removing long-deprecated fields on <code class="text-highlight text-highlight--grey">ProductVariant</code> and removing the duplicated fields between <code class="text-highlight text-highlight--grey">ProductVariant</code> and <code class="text-highlight text-highlight--grey">InventoryItem</code>.</p>
<p>The following changes were made to <code class="text-highlight text-highlight--grey">InventoryItem</code> and related input types:</p>
<table>
  <tr>
    <th scope="col">Name</th>
    <th scope="col">Type</th>
    <th scope="col">Change</th>
  </tr>
  <tr>
    <td scope="row"><code><a href="/docs/api/admin-graphql/2024-04/objects/InventoryItem#field-inventoryitem-measurement">InventoryItem.measurement</a></code></td>
    <td>Field</td>
    <td>Added</td>
  </tr>
  <tr>
    <td scope="row"><code><a href="/docs/api/admin-graphql/2024-04/input-objects/InventoryItemInput#field-inventoryiteminput-harmonizedsystemcode">InventoryItemInput.harmonizedSystemCode</a></code>
      <p><code><a href="/docs/api/admin-graphql/2024-04/input-objects/InventoryItemInput#field-inventoryiteminput-measurement">InventoryItemInput.measurement</a></code></p>
      <p><code><a href="/docs/api/admin-graphql/2024-04/input-objects/InventoryItemInput#field-inventoryiteminput-requiresshipping">InventoryItemInput.requiresShipping</a></code></p>
    </td>
    <td>Field
    <p>Field</p>
    <p>Field</p>
    </td>
    <td>Added
    <p>Added</p>
    <p>Added</p>
    </td>
  </tr>
  <tr>
    <td scope="row"><code><a href="/docs/api/admin-graphql/2024-04/objects/InventoryItemMeasurement">InventoryItemMeasurement</a></code></td>
    <td>Object</td>
    <td>Added</td>
  </tr>
  <tr>
    <td scope="row"><code><a href="/docs/api/admin-graphql/2024-04/objects/InventoryItemMeasurement#field-inventoryitemmeasurement-weight">InventoryItemMeasurement.weight</a></code></td>
    <td>Field</td>
    <td>Added</td>
  </tr>
  <tr>
    <td scope="row"><code><a href="/docs/api/admin-graphql/2024-04/input-objects/InventoryItemMeasurementInput">InventoryItemMeasurementInput</a></code></td>
    <td>Input object</td>
    <td>Added</td>
  </tr>
  <tr>
    <td scope="row"><code><a href="/docs/api/admin-graphql/2024-04/input-objects/InventoryItemMeasurementInput#field-inventoryitemmeasurementinput-weight">InventoryItemMeasurementInput.weight</a></code></td>
    <td>Field</td>
    <td>Added</td>
  </tr>
</table>
<p>The following changes were made to <code class="text-highlight text-highlight--grey">ProductVariant</code> and related input types:</p>
<table>
  <tr>
    <th scope="col">Name</th>
    <th scope="col">Type</th>
    <th scope="col">Change</th>
  </tr>
  <tr>
    <td scope="row"><code><a href="/docs/api/admin-graphql/2024-04/objects/ProductVariant#field-productvariant-fulfillmentserviceeditable">ProductVariant.fulfillmentServiceEditable</a></code>
      <p><code><a href="/docs/api/admin-graphql/2024-04/objects/ProductVariant#field-productvariant-weight">ProductVariant.weight</a></code></p>
      <p><code><a href="/docs/api/admin-graphql/2024-04/objects/ProductVariant#field-productvariant-weightunit">ProductVariant.weightUnit</a></code></p>
    </td>
    <td>Field
    <p>Field</p>
    <p>Field</p>
    </td>
    <td>Deprecated
    <p>Deprecated</p>
    <p>Deprecated</p>
    </td>
  </tr>
  <tr>
    <td scope="row"><code><a href="/docs/api/admin-graphql/2024-04/input-objects/ProductVariantInput#field-productvariantinput-harmonizedsystemcode">ProductVariantInput.harmonizedSystemCode</a></code>
      <p><code><a href="/docs/api/admin-graphql/2024-04/input-objects/ProductVariantInput#field-productvariantinput-requiresshipping">ProductVariantInput.requiresShipping</a></code></p>
      <p><code><a href="/docs/api/admin-graphql/2024-04/input-objects/ProductVariantInput#field-productvariantinput-weight">ProductVariantInput.weight</a></code></p>
      <p><code><a href="/docs/api/admin-graphql/2024-04/input-objects/ProductVariantInput#field-productvariantinput-weightunit">ProductVariantInput.weightUnit</a></code></p>
    </td>
    <td>Field
    <p>Field</p>
    <p>Field</p>
    <p>Field</p>
    </td>
    <td>Deprecated
    <p>Deprecated</p>
    <p>Deprecated</p>
    <p>Deprecated</p>
    </td>
  </tr>
  <tr>
    <td scope="row"><code><a href="/docs/api/admin-graphql/2024-04/input-objects/ProductVariantsBulkInput#field-productvariantsbulkinput-harmonizedsystemcode">ProductVariantsBulkInput.harmonizedSystemCode</a></code>
      <p><code><a href="/docs/api/admin-graphql/2024-04/input-objects/ProductVariantsBulkInput#field-productvariantinput-requiresshipping">ProductVariantsBulkInput.requiresShipping</a></code></p>
      <p><code><a href="/docs/api/admin-graphql/2024-04/input-objects/ProductVariantsBulkInput#field-productvariantinput-weight">ProductVariantsBulkInput.weight</a></code></p>
      <p><code><a href="/docs/api/admin-graphql/2024-04/input-objects/ProductVariantsBulkInput#field-productvariantinput-weightunit">ProductVariantsBulkInput.weightUnit</a></code></p>
    </td>
    <td>Field
    <p>Field</p>
    <p>Field</p>
    <p>Field</p>
    </td>
    <td>Deprecated
    <p>Deprecated</p>
    <p>Deprecated</p>
    <p>Deprecated</p>
    </td>
  </tr>
</table>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Order payment status transaction</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-graphql/2024-04/objects/OrderPaymentStatus#field-orderpaymentstatus-transactions"><code class="text-highlight text-highlight--grey">transactions</code></a> field has been added to the <code class="text-highlight text-highlight--grey">OrderPaymentStatus</code> object.</p>
<p>Use this field to retrieve the transaction that&#39;s associated with an order&#39;s payment.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Order risk deprecation</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-graphql/2024-04/objects/OrderRisk"><code class="text-highlight text-highlight--grey">OrderRisk</code></a> object and associated fields are deprecated.</p>
<p>Use the new <a href="/docs/api/admin-graphql/2024-04/objects/OrderRiskAssessment"><code class="text-highlight text-highlight--grey">OrderRiskAssessment</code></a> object and related types instead. For example, to create assessments, you can use the new <a href="/docs/api/admin-graphql/2024-04/mutations/orderRiskAssessmentCreate"><code class="text-highlight text-highlight--grey">orderRiskAssessmentCreate</code></a> mutation.</p>
<p>We&#39;ve also added the new <a href="/docs/api/admin-graphql/2024-04/enums/WebhookSubscriptionTopic#value-ordersriskassessmentchanged"><code class="text-highlight text-highlight--grey">ORDERS_RISK_ASSESSMENT_CHANGED</code></a> webhook, which is triggered when a new risk assessment is available on an order.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Payment and error code mapping <span id="payment_error_code_mapping" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>The following fields have been added to the <a href="/docs/api/admin-graphql/2024-04/enums/SubscriptionBillingAttemptErrorCode"><code class="text-highlight text-highlight--grey">SubscriptionBillingAttemptErrorCode</code></a> enum:</p>
<ul>
<li><code class="text-highlight text-highlight--grey">CARD_NUMBER_INCORRECT</code></li>
<li><code class="text-highlight text-highlight--grey">INSUFFICIENT_FUNDS</code></li>
<li><code class="text-highlight text-highlight--grey">PAYPAL_ERROR_GENERAL</code></li>
<li><code class="text-highlight text-highlight--grey">PURCHASE_TYPE_NOT_SUPPORTED</code></li>
<li><code class="text-highlight text-highlight--grey">FRAUD_SUSPECTED</code></li>
</ul>
<p>Additionally, payment error code mappings have changed, and codes from payment processors have changed. For more information, refer to the <a href="/changelog/new-error-codes-and-updated-error-code-mapping-for-payment-and-billing">changelog</a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Product model and components changes</h3>
  </div>
  <div class="accordion-content">
    <p>We&#39;ve introduced a new product model that includes enhancing product-related components in the GraphQL Admin API. These changes include deprecating product-related components.</p>
<ul>
<li><p>The number of variants and options are no longer fixed at 100 and 3, respectively. Instead, the limits can vary by shop. We expect to have most shops support an initial rollout of 2K variants and 3+ options.</p></li>
<li><p>We&#39;ve introduced new mutations and fields for managing product options.</p></li>
<li><p>We&#39;ve elevated options and option values as first class entities within the data model.</p></li>
<li><p>We&#39;ve separated variant and option operations from product operations. Depending on your workflow, we recommend that you start managing your product variants using bulk product variant mutations.</p></li>
<li><p>A <code class="text-highlight text-highlight--grey">variant_gids</code> field will be retroactively added to all webhook versions. Product webhooks will return a full variants payload for the first 100 records, and only the variant_ids for variants 101+.</p></li>
</ul>
<p>Learn more about <a href="/docs/apps/build/graphql/migrate/new-product-model/api-updates#mutations-for-managing-product-options-and-variants">mutations for managing product options and variants</a>, and refer to the list of <a href="/docs/apps/build/graphql/migrate/new-product-model/api-updates#deprecated-graphql-component-fields">deprecated fields</a> and what you should use instead.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Product taxonomy</h3>
  </div>
  <div class="accordion-content">
    <p>Shopify has introduced a public product taxonomy, serving as an open-source, standardized, and global classification of products sold on Shopify. This taxonomy, composed of product categories, attributes, and attribute values, is utilized across Shopify and integrated with numerous marketplaces.</p>
<p>This feature enables developers to navigate the taxonomy tree for categories, attributes, and values.</p>
<p>To support this change the following types have been deprecated and replaced in favor of <code class="text-highlight text-highlight--grey">queryRoot.taxonomy.categories</code>
- <code class="text-highlight text-highlight--grey">queryRoot.productTaxonomy</code>
- <code class="text-highlight text-highlight--grey">queryRoot.productTaxonomyNodes</code></p>
<ul>
<li>The <code class="text-highlight text-highlight--grey">ProductTaxonomyNode</code> type has been replaced with a <code class="text-highlight text-highlight--grey">TaxonomyCategory</code> type.</li>
<li>The <code class="text-highlight text-highlight--grey">productCategory</code> field on the <a href="/docs/api/admin-graphql/2024-04/objects/Product"><code class="text-highlight text-highlight--grey">Product</code></a> object has been deprecated and replaced by <a href="/docs/api/admin-graphql/2024-04/objects/Product#field-product-category"><code class="text-highlight text-highlight--grey">category</code></a>. This field points towards the new <a href="/docs/api/admin-graphql/2024-04/objects/TaxonomyCategory"><code class="text-highlight text-highlight--grey">TaxonomyCategory</code></a> object.</li>
</ul>
<p>View the latest product taxonomy on the <a rel="external noreferrer noopener" target="_blank" href="https://shopify.github.io/product-taxonomy/releases/latest/">taxonomy explorer</a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Receipt field removal <span id="receipt-field-removal" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>The <code class="text-highlight text-highlight--grey">OrderTransaction.receipt</code> field has been removed, and is replaced by <a href="/docs/api/admin-graphql/2024-04/objects/OrderTransaction#field-ordertransaction-receiptjson"><code class="text-highlight text-highlight--grey">receiptJson</code></a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Return sales and exchange APIs</h3>
  </div>
  <div class="accordion-content">
    <p>Returns now create corresponding sales entries.</p>
<ul>
<li>The <a href="/docs/api/admin-graphql/2024-04/interfaces/SalesAgreement#value-returnagreementorder"><code class="text-highlight text-highlight--grey">ReturnAgreement</code></a> type has been added to the <code class="text-highlight text-highlight--grey">SalesAgreement</code> interface.</li>
<li>The <a href="/docs/api/admin-graphql/2024-04/enums/OrderActionType#value-return"><code class="text-highlight text-highlight--grey">RETURN</code></a> value has been added to the <code class="text-highlight text-highlight--grey">OrderActionType</code> enum.</li>
<li>The <a href="/docs/api/admin-graphql/2024-04/enums/SaleLineType#value-fee"><code class="text-highlight text-highlight--grey">FEE</code></a> value has been added to the <code class="text-highlight text-highlight--grey">SaleLineType</code> enum. Fees can be of the type <code class="text-highlight text-highlight--grey">RestockingFee</code> or <code class="text-highlight text-highlight--grey">ReturnShippingFee</code>, which represent corresponding fees on a return.</li>
</ul>
<p>Any GraphQL Admin API consumers of <code class="text-highlight text-highlight--grey">OrderActionType</code> or <code class="text-highlight text-highlight--grey">SaleLineType</code> need to accept these new enum values. Previous versions of the Admin API will show these values as <code class="text-highlight text-highlight--grey">UNKNOWN</code>.</p>
<p>You can now view <a href="/docs/api/admin-graphql/2024-04/objects/ExchangeLineItem"><code class="text-highlight text-highlight--grey">ExchangeLineItems</code></a> on their associated return. This provides context on returns that will be resolved with an exchange.</p>
<p>A new webhook <code class="text-highlight text-highlight--grey">returns/update</code> has been added. This webhook fires when fees or line items on a return are modified or removed. All returns webhooks will now display restock and shipping fees, as well as exchange line items.</p>
<p>Dispositions can no longer be created for canceled reverse fulfillment orders. This will result in the new error code <code class="text-highlight text-highlight--grey">INVALID_STATE</code>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Shipping lines on order editing</h3>
  </div>
  <div class="accordion-content">
    <p>You can now add new shipping lines or remove existing shipping lines when editing an order. You can also continue to query removed shipping lines.</p>
<p>For detailed information, <a href="/changelog/add-and-remove-shipping-lines-with-new-mutations-on-the-order-editing-api">refer to the changelog</a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Shipping line price with currency</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-graphql/2024-04/input-objects/ShippingLineInput#field-shippinglineinput-pricewithcurrency"><code class="text-highlight text-highlight--grey">priceWithCurrency</code></a> field has been added to the <code class="text-highlight text-highlight--grey">ShippingLineInput</code> input object, providing the price of the shipping rate, with currency.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Transaction details on voided transactions</h3>
  </div>
  <div class="accordion-content">
    <p>You can now void a transaction, and receive the corresponding transaction details, using the <a href="/docs/api/admin-graphql/2024-04/mutations/transactionVoid"><code class="text-highlight text-highlight--grey">transactionVoid</code></a> mutation.</p>
  </div>
</div>
  </div>
</div>


## REST Admin API changes

Version 2024-04 of the REST Admin API introduces the following 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>Checkout deprecation</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-rest/2023-07/resources/checkout"><code class="text-highlight text-highlight--grey">Checkout</code></a> resource is deprecated and will sunset on April 1, 2025. For more information, refer to <a href="/changelog/deprecation-of-checkout-apis">Deprecation of Checkout APIs</a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Fulfillment request validation <span id="fulfillment-request-validation-rest" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>We now validate that there are no duplicate fulfillment orders in requests to create a fulfillment.</p>
<p>You can no longer have multiples of the same <code class="text-highlight text-highlight--grey">fulfillment_order_id</code> within the <code class="text-highlight text-highlight--grey">line_items_by_fulfillment_order</code> parameter, for POST calls to the REST Admin API that <a href="/docs/api/admin-rest/2024-01/resources/fulfillment#post-fulfillments">create a fulfillment for one or many fulfillment orders</a>.</p>
<p>Instead, you must combine any payload with the same <code class="text-highlight text-highlight--grey">fulfillment_order_id</code> into one group.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Fulfillment service opt-in deprecation</h3>
  </div>
  <div class="accordion-content">
    <p>The <code class="text-highlight text-highlight--grey">fulfillmentOrdersOptIn</code> property on the <a href="/docs/api/admin-rest/2024-04/resources/fulfillmentservice"><code class="text-highlight text-highlight--grey">FulfillmentService</code></a> resource, along with the related endpoints, is being deprecated as the migration to the Fulfillment Orders API has been completed. All properly functioning fulfillment services now have the <code class="text-highlight text-highlight--grey">fulfillmentOrdersOptIn</code> property set to <code class="text-highlight text-highlight--grey">true</code>.</p>
<p>In the 2024-04 API version, the <code class="text-highlight text-highlight--grey">fulfillmentOrdersOptIn</code> property becomes nullable and defaults to true in the <a href="/docs/api/admin-rest/2024-04/resources/fulfillmentservice#post-fulfillment-services"><code class="text-highlight text-highlight--grey">POST FulfillmentService</code></a> endpoint. This field will be removed from the endpoint parameters in the next API version.</p>
<p>To prepare for the 2024-07 API version release, stop supplying the <code class="text-highlight text-highlight--grey">fulfillmentOrdersOptIn</code> parameter when creating a new fulfillment service.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Product model and components changes</h3>
  </div>
  <div class="accordion-content">
    <p>We&#39;ve introduced a new product model that include deprecating product-related resources in the REST Admin API.</p>
<p>Refer to the list of <a href="/docs/apps/build/graphql/migrate/new-product-model/api-updates#deprecated-rest-endpoints">deprecated endpoints</a>, and learn more about the <a href="/docs/apps/build/graphql/migrate/new-product-model">new product model</a> and working with GraphQL.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Order risk deprecation</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/admin-rest/2024-04/resources/order-risk"><code class="text-highlight text-highlight--grey">OrderRisk</code></a> resource and associated endpoints are deprecated.</p>
<p>Use the new <a href="/docs/api/admin-graphql/2024-04/objects/OrderRiskAssessment"><code class="text-highlight text-highlight--grey">OrderRiskAssessment</code></a> GraphQL Admin API object and related types instead. For example, to create assessments, use the new <a href="/docs/api/admin-graphql/2024-04/mutations/orderRiskAssessmentCreate"><code class="text-highlight text-highlight--grey">orderRiskAssessmentCreate</code></a> mutation on the GraphQL Admin API.</p>
<p>We&#39;ve also added the new <a href="/docs/api/admin-graphql/2024-04/enums/WebhookSubscriptionTopic#value-ordersriskassessmentchanged"><code class="text-highlight text-highlight--grey">ORDERS_RISK_ASSESSMENT_CHANGED</code></a> webhook for the GraphQL Admin API, which is triggered when a new risk assessment is available on an order.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Shipping lines on order editing</h3>
  </div>
  <div class="accordion-content">
    <p>Removed shipping lines continue to be returned in the payload of the <code class="text-highlight text-highlight--grey">Order</code> resource. You can determine whether a shipping line has been removed by checking the value of the new attribute <code class="text-highlight text-highlight--grey">is_removed</code>.</p>
<p>For detailed information, <a href="/changelog/add-and-remove-shipping-lines-with-new-mutations-on-the-order-editing-api">refer to the changelog</a>.</p>
  </div>
</div>
  </div>
</div>


## Shopify Function APIs changes

Version 2024-04 of the Shopify Function APIs introduces the following 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>Cart transform API set line properties</h3>
  </div>
  <div class="accordion-content">
    <p>We&#39;ve added the ability to set line properties using cart transform operations.</p>
<p>The <code class="text-highlight text-highlight--grey">attributes</code> field has been added to the <a href="/docs/api/functions/reference/cart-transform/graphql/common-objects/mergeoperation"><code class="text-highlight text-highlight--grey">MergeOperation</code></a> and <a href="/docs/api/functions/reference/cart-transform/graphql/common-objects/expandeditem"><code class="text-highlight text-highlight--grey">ExpandedItem</code></a> objects, which enable you to add <code class="text-highlight text-highlight--grey">CartLine</code> attributes to the parent line and component line, respectively.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Fulfillment request validation <span id="fulfillment-request-validation-gql" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>You can no longer have multiples of the same <code class="text-highlight text-highlight--grey">fulfillment_order_id</code> within the GraphQL Admin API&#39;s <a href="/docs/api/admin-graphql/2024-04/mutations/fulfillmentCreateV2"><code class="text-highlight text-highlight--grey">fulfillmentCreateV2</code></a> mutation.</p>
<p>Instead, you must combine any payload with the same <code class="text-highlight text-highlight--grey">fulfillment_order_id</code> into one group.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Sunset product duplicate async mutation <span id="rm-duplicate-product-async-mutation" class="heading-flag breaking"></h3>
  </div>
  <div class="accordion-content">
    <p>We&#39;ve removed the <code class="text-highlight text-highlight--grey">productDuplicateAsync</code> mutation, which has been deprecated since version 2023-07, from the GraphQL Admin API.</p>
<p>Use the <a href="/docs/api/admin-graphql/2024-04/mutations/productDuplicateAsyncV2"><code class="text-highlight text-highlight--grey">productDuplicateAsyncV2</code></a> mutation instead.</p>
  </div>
</div>
  </div>
</div>


## Storefront API changes

Version 2024-04 of the Storefront API introduces the following 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>Address validation in cart</h3>
  </div>
  <div class="accordion-content">
    <p>The following error codes have been added to the <a href="/docs/api/storefront/2024-04/objects/CartUserError"><code class="text-highlight text-highlight--grey">CartUserError</code></a> object, to validate addresses:</p>
<ul>
<li><code class="text-highlight text-highlight--grey">ADDRESS_FIELD_CONTAINS_EMOJIS</code></li>
<li><code class="text-highlight text-highlight--grey">ADDRESS_FIELD_CONTAINS_HTML_TAGS</code></li>
<li><code class="text-highlight text-highlight--grey">ADDRESS_FIELD_CONTAINS_URL</code></li>
<li><code class="text-highlight text-highlight--grey">ADDRESS_FIELD_DOES_NOT_MATCH_EXPECTED_PATTERN</code></li>
<li><code class="text-highlight text-highlight--grey">ADDRESS_FIELD_IS_REQUIRED</code></li>
<li><code class="text-highlight text-highlight--grey">ADDRESS_FIELD_IS_TOO_LONG</code></li>
<li><code class="text-highlight text-highlight--grey">INVALID_ZIP_CODE_FOR_PROVINCE</code></li>
<li><code class="text-highlight text-highlight--grey">INVALID_ZIP_CODE_FOR_COUNTRY</code></li>
<li><code class="text-highlight text-highlight--grey">ZIP_CODE_NOT_SUPPORTED</code></li>
<li><code class="text-highlight text-highlight--grey">PROVINCE_NOT_FOUND</code></li>
<li><code class="text-highlight text-highlight--grey">UNSPECIFIED_ADDRESS_ERROR</code></li>
</ul>
<p>For error code descriptions, consult the reference for the <a href="/docs/api/storefront/2024-04/objects/CartUserError#field-cartusererror-code"><code class="text-highlight text-highlight--grey">code</code></a> field on <code class="text-highlight text-highlight--grey">CartUserError</code></p>
<p>The <a href="/docs/api/storefront/2024-04/input-objects/DeliveryAddressInput#field-deliveryaddressinput-deliveryaddressvalidationstrategy"><code class="text-highlight text-highlight--grey">deliveryAddressValidationStrategy</code></a> field has been added to the <code class="text-highlight text-highlight--grey">DeliveryAddressInput</code> input object, to define the available validation strategies for delivery addresses. The following enum values are added:</p>
<ul>
<li><code class="text-highlight text-highlight--grey">COUNTRY_CODE_ONLY</code> (default): Only the country code is validated</li>
<li><code class="text-highlight text-highlight--grey">STRICT</code>: All fields in the address are validated according to Shopify&#39;s checkout rules. If the address fails validation, then the cart won&#39;t be updated.</li>
</ul>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Checkout deprecations</h3>
  </div>
  <div class="accordion-content">
    <p>The following <code class="text-highlight text-highlight--grey">Checkout</code> mutations, queries, and types are deprecated and will sunset on April 1, 2025:</p>
<p><table>
    <caption>Deprecated checkout types for the Storefront API</caption>
    <tr>
      <th scope="col">Name</th>
      <th scope="col">Type</th>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/connections/CheckoutLineItemConnection"><code>CheckoutLineItemConnection</code></a>
      </td>
      <td>Connection</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/connections/DiscountApplicationConnection"><code>DiscountApplicationConnection</code></a>
      </td>
      <td>Connection</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/connections/FulfillmentLineItemConnection"><code>FulfillmentLineItemConnection</code></a>
      </td>
      <td>Connection</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/connections/OrderConnection"><code>OrderConnection</code></a>
      </td>
      <td>Connection</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/connections/OrderLineItemConnection"><code>OrderLineItemConnection</code></a>
      </td>
      <td>Connection</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/enums/CheckoutErrorCode"><code>CheckoutErrorCode</code></a>
      </td>
      <td>Enum</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/enums/DiscountApplicationAllocationMethod"><code>DiscountApplicationAllocationMethod</code></a>
      </td>
      <td>Enum</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/enums/DiscountApplicationTargetSelection"><code>DiscountApplicationTargetSelection</code></a>
      </td>
      <td>Enum</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/enums/DiscountApplicationTargetType"><code>DiscountApplicationTargetType</code></a>
      </td>
      <td>Enum</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/enums/OrderCancelReason"><code>OrderCancelReason</code></a>
      </td>
      <td>Enum</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/enums/OrderFulfillmentStatus"><code>OrderFulfillmentStatus</code></a>
      </td>
      <td>Enum</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/enums/PaymentTokenType"><code>PaymentTokenType</code></a>
      </td>
      <td>Enum</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/enums/TransactionKind"><code>TransactionKind</code></a>
      </td>
      <td>Enum</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/enums/TransactionStatus"><code>TransactionStatus</code></a>
      </td>
      <td>Enum</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/input-objects/CheckoutAttributesUpdateV2Input"><code>CheckoutAttributesUpdateV2Input</code></a>
      </td>
      <td>Input</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/input-objects/CheckoutBuyerIdentityInput"><code>CheckoutBuyerIdentityInput</code></a>
      </td>
      <td>Input</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/input-objects/CheckoutCreateInput"><code>CheckoutCreateInput</code></a>
      </td>
      <td>Input</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/input-objects/CheckoutLineItemInput"><code>CheckoutLineItemInput</code></a>
      </td>
      <td>Input</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/input-objects/CheckoutLineItemUpdateInput"><code>CheckoutLineItemUpdateInput</code></a>
      </td>
      <td>Input</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/input-objects/CreditCardPaymentInputV2"><code>CreditCardPaymentInputV2</code></a>
      </td>
      <td>Input</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/input-objects/TokenizedPaymentInputV3"><code>TokenizedPaymentInputV3</code></a>
      </td>
      <td>Input</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/interfaces/DiscountApplication"><code>DiscountApplication</code></a>
      </td>
      <td>Interface</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutAttributesUpdateV2"><code>checkoutAttributesUpdateV2</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutCreate"><code>checkoutCreate</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutCompleteFree"><code>checkoutCompleteFree</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutCompleteWithCreditCardV2"><code>checkoutCompleteWithCreditCardV2</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutCompleteWithTokenizedPaymentV3"><code>checkoutCompleteWithTokenizedPaymentV3</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutCustomerAssociateV2"><code>checkoutCustomerAssociateV2</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutCustomerDisassociateV2"><code>checkoutCustomerDisassociateV2</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutDiscountCodeApplyV2"><code>checkoutDiscountCodeApplyV2</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutDiscountCodeRemove"><code>checkoutDiscountCodeRemove</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutEmailUpdateV2"><code>checkoutEmailUpdateV2</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutGiftCardRemoveV2"><code>checkoutGiftCardRemoveV2</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutGiftCardsAppend"><code>checkoutGiftCardsAppend</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutLineItemsAdd"><code>checkoutLineItemsAdd</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutLineItemsRemove"><code>checkoutLineItemsRemove</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutLineItemsReplace"><code>checkoutLineItemsReplace</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutLineItemsUpdate"><code>checkoutLineItemsUpdate</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutShippingAddressUpdateV2"><code>checkoutShippingAddressUpdateV2</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/mutations/checkoutShippingLineUpdate"><code>checkoutShippingLineUpdate</code></a>
      </td>
      <td>Mutation</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/AvailableShippingRates"><code>AvailableShippingRates</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/AppliedGiftCard"><code>AppliedGiftCard</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/AutomaticDiscountApplication"><code>AutomaticDiscountApplication</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/Checkout"><code>Checkout</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/CheckoutUserError"><code>CheckoutUserError</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/CheckoutLineItem"><code>CheckoutLineItem</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/CheckoutLineItemEdge"><code>CheckoutLineItemEdge</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/CheckoutBuyerIdentity"><code>CheckoutBuyerIdentity</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/DiscountAllocation"><code>DiscountAllocation</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/DiscountApplicationEdge"><code>DiscountApplicationEdge</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/DiscountCodeApplication"><code>DiscountCodeApplication</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/Fulfillment"><code>Fulfillment</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/FulfillmentLineItemEdge"><code>FulfillmentLineItemEdge</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/ManualDiscountApplication"><code>ManualDiscountApplication</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/Order"><code>Order</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/OrderLineItem"><code>OrderLineItem</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/objects/OrderLineItemEdge"><code>OrderLineItemEdge</code></a>
      </td>
      <td>Object</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/CheckoutAttributesUpdateV2Payload"><code>checkoutAttributesUpdateV2Payload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutCompleteFreePayload"><code>checkoutCompleteFreePayload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutCompleteWithCreditCardV2Payload"><code>checkoutCompleteWithCreditCardV2Payload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutCompleteWithTokenizedPaymentV3Payload"><code>checkoutCompleteWithTokenizedPaymentV3Payload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutCustomerAssociateV2Payload"><code>checkoutCustomerAssociateV2Payload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutCustomerDisassociateV2Payload"><code>checkoutCustomerDisassociateV2Payload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutDiscountCodeRemovePayload"><code>checkoutDiscountCodeRemovePayload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutEmailUpdateV2Payload"><code>checkoutEmailUpdateV2Payload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutGiftCardRemoveV2Payload"><code>checkoutGiftCardRemoveV2Payload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutGiftCardsAppendPayload"><code>checkoutGiftCardsAppendPayload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutLineItemsAddPayload"><code>checkoutLineItemsAddPayload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutLineItemsRemovePayload"><code>checkoutLineItemsRemovePayload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutLineItemsReplacePayload"><code>checkoutLineItemsReplacePayload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutLineItemsUpdatePayload"><code>checkoutLineItemsUpdatePayload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutShippingAddressUpdateV2Payload"><code>checkoutShippingAddressUpdateV2Payload</code></a>
      </td>
      <td>Payload</td>
    </tr>
    <tr>
      <td scope="row"><a href="/docs/api/storefront/unstable/payloads/checkoutShippingLineUpdatePayload"><code>checkoutShippingLineUpdatePayload</code></a>
      </td>
      <td>Payload</td>
    </tr>
  </table></p>
<p>For more information, refer to <a href="/changelog/deprecation-of-checkout-apis">Deprecation of Checkout APIs</a>.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Delivery group types</h3>
  </div>
  <div class="accordion-content">
    <p>The <a href="/docs/api/storefront/2024-04/objects/CartDeliveryGroup#field-cartdeliverygroup-grouptype"><code class="text-highlight text-highlight--grey">groupType</code></a> field has been added to the <code class="text-highlight text-highlight--grey">CartDeliveryGroup</code> objects. The field accepts the following enum values:</p>
<ul>
<li><strong><code class="text-highlight text-highlight--grey">ONE_TIME_PURCHASE</code></strong>: The delivery group only contains merchandise that&#39;s either a one-time purchase or the first delivery of subscription merchandise.</li>
<li><strong><code class="text-highlight text-highlight--grey">SUBSCRIPTION</code></strong>: The delivery group only contains subscription merchandise.</li>
</ul>
<p>Use the <code class="text-highlight text-highlight--grey">groupType</code> field to determine whether a delivery group represents a single delivery or a recurring delivery.</p>
  </div>
</div>
<div class="accordion-item">
  <div class="accordion-link">
    <div class="chevron-up"></div>
    <div class="chevron-down"></div>
    <h3>Metafields model 3D reference type</h3>
  </div>
  <div class="accordion-content">
    <p>The <code class="text-highlight text-highlight--grey">MODEL_3D</code> enum value on the <a href="/docs/api/storefront/2024-04/objects/Model3d#field-model3d-mediacontenttype"><code class="text-highlight text-highlight--grey">mediaContentType</code></a> field has been added to the <code class="text-highlight text-highlight--grey">Model3d</code> object.</p>
  </div>
</div>
  </div>
</div>