> 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, 2023</td> <td scope="row">April 1, 2024</td> </tr> </tbody> </table> **What's new in 2023-04** The following features were added in version 2023-04 of Shopify's APIs. Highlights from the GraphQL Admin API changes: - Metafield values can now be set for Locations - Move and Hold mutations for FulfillmentOrders now accept specific line items - Subscription contracts can now be created in a single operation - Customer profiles can now be combined using the Merge API - Functions APIs are now available for delivery and payment customizations - Catalog APIs are now available - Webhooks for B2B Customers have been added - Metafield definition validations can now be updated Highlights from the GraphQL Storefront API changes: - Metafields on Locations can now be queried - Targeted product recommendations can now be generated - Catalog APIs are now available - A buyer's wallet preference can now be passed to the Cart - Customer address IDs can now be used as input for delivery address preferences Highlights from the GraphQL Payments Apps API changes: - The status field in the Payments Apps API has been removed. - The previously deprecated `status` field has been removed from session-related objects. Highlights from the REST Admin API changes: - Move and Hold operations for `FulfillmentOrders` now accept specific line items - Additional filtering has been added to `FulfillmentOrders` ## 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. ### Metaobjects can now be Translatable [Metaobjects](/docs/apps/build/custom-data/metaobjects) can now be enabled with the [Translatable](/docs/apps/build/custom-data/metaobjects/use-metaobject-capabilities#make-your-metaobjects-translatable) capability. ### Changed access scope for publishing and unpublishing to current channel objects Calling the [`publishableUnpublishToCurrentChannel`](/docs/api/admin-graphql/2023-04/mutations/publishableUnpublishToCurrentChannel) and [`publishablePublishToCurrentChannel`](/docs/api/admin-graphql/2023-04/mutations/publishablePublishToCurrentChannel) mutations now requires the `writepublications` [access scope](/docs/api/usage/access-scopes), instead of the `writeproductslistings` access scope, which has been deprecated. ### The `writeproductslistings` access scope has been deprecated The `writeproductslistings` [access scope](/docs/api/usage/access-scopes) has been deprecated. Use `writepublications` instead. ### The `contextRule` field on `PriceList` has been removed The `contextRule` field on [`PriceList`](/docs/api/admin-graphql/2023-04/objects/PriceList) has been removed. Existing apps should migrate to [`Catalogs`](/docs/apps/build/markets/catalogs-different-markets). Check out our [`migration guide`](/docs/apps/build/markets/migrate-to-catalogs) for more information. ### The ShopifyQL parse error codes have been updated The ['ParseErrorCode'](/docs/api/admin-graphql/2023-04/enums/ParseErrorCode) values have been updated. Refer to the following list of codes for more details: ### `FulfillmentOrderLineItemsPreparedForPickupUserErrorCode` codes have been updated The [`FulfillmentOrderLineItemsPreparedForPickupUserErrorCode`](/docs/api/admin-graphql/2023-04/enums/FulfillmentOrderLineItemsPreparedForPickupUserErrorCode) object has the following changes: - The `FULFILLMENT_ORDER_CHANGED` error code has been removed - The `UNABLE_TO_PREPARE_QUANTITY` error code has been added ### `PublishedTranslation` has been replaced The [`PublishedTranslation`](/docs/api/admin-graphql/2023-01/objects/PublishedTranslation) object has been replaced by [`Translation`](/docs/api/admin-graphql/2023-04/objects/Translation). All existing connections to `PublishedTranslation` now point to `Translation`. All existing fields on `PublishedTranslation` exist on `Translation`, except for the `marketId` field. Instead, `Translation` is linked directly to [`Market`](docs/api/admin-graphql/2023-04/objects/Market) through the `market` field. ### Introducing `BaseCartLine` We have introduced [`BaseCartLine`](/docs/api/storefront/2023-04/interfaces/BaseCartLine) as an interface to [`CartLine`](/docs/api/storefront/2023-04/objects/CartLine). [`CartLineConnection`](/docs/api/storefront/2023-01/connections/CartLineConnection) has been updated to [`BaseCartLineConnection`](/docs/api/storefront/2023-04/connections/BaseCartLineConnection). ### The `status` field in the Payments Apps API has been removed The previously deprecated `status` field has been removed in favour of the `state` field on the following Payments Apps API objects: - [`PaymentSession`](/docs/api/payments-apps/2023-04/objects/PaymentSession) - [`RefundSession`](/docs/api/payments-apps/2023-04/objects/RefundSession) - [`CaptureSession`](/docs/api/payments-apps/2023-04/objects/CaptureSession) - [`VoidSession`](/docs/api/payments-apps/2023-04/objects/VoidSession) ### New error codes in `CartErrorCodes` enum Two new error codes, `INVALID_DELIVERY_GROUP` and `INVALID_DELIVERY_OPTION`, have been added to the [`CartErrorCode`](/docs/api/storefront/2023-04/enums/CartErrorCode) enum. ### `Transaction` in the REST API will now return the total unsettled set amount Requests for [Transaction](/docs/api/admin-rest/2023-04/resources/transaction) will now return `total_unsettled_set`. This represents the remaining amount to be captured on the transaction. `total_unsettled_set` is returned in both `shop` and `presentment` money objects with currency. ### Access to the Asset API is no longer available to public apps When requesting the Asset API, access to create, update and delete assets is no longer accessible for public apps. Refer to [this guide](/docs/apps/build/online-store/asset-legacy) for more details on the change, exemptions and how to migrate your apps. ### Payment properties on the `Order` resource have been removed The following properties have been removed from the [`Order`](/docs/api/admin-rest/2023-04/resources/order) resource: - `gateway` - `payment_details` - `processing_method` ## GraphQL Admin API changes The following are all the changes currently introduced in the 2023-04 version of the GraphQL Admin API. <div class="accordion-container"> <div class="accordion-controls"> <button class="accordion-control" data-accordion-control-type="expand-all" type="button">Expand all</button> </div> <div class="accordion-content-container"> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>The inventoryItemId field has been added to FulfillmentOrderLineItem</h3> </div> <div class="accordion-content"> <p>The <code class="text-highlight text-highlight--grey">inventoryItemId</code> field can now be accessed from the <a href="/docs/api/admin-graphql/2023-04/objects/FulfillmentOrderLineItem">FulfillmentOrderLineItem</a> resource.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Functions APIs have been added in developer preview for delivery and payment customizations</h3> </div> <div class="accordion-content"> <p>The Functions APIs for delivery customizations and payment customizations are now available in a developer preview.</p> <p>With these new APIs, you can hide, reorder, or rename payment and delivery options to help merchants increase conversions and stand out from the competition.</p> <p>Learn more about building with delivery and payment Functions in our dev docs:</p> <ul> <li><a href="/docs/apps/build/checkout/delivery-shipping/delivery-options/build-function">Delivery customization</a></li> <li><a href="/docs/apps/build/checkout/payments">Payment customization</a></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Metafield values can now be set for Locations</h3> </div> <div class="accordion-content"> <p><a href="/docs/api/admin-graphql/2023-04/objects/Metafield">Metafield</a> values can now be set for Locations via the <a href="/docs/api/admin-graphql/2023-04/mutations/locationAdd"><code class="text-highlight text-highlight--grey">locationAdd</code></a> and <a href="/docs/api/admin-graphql/2023-04/mutations/locationEdit"><code class="text-highlight text-highlight--grey">locationEdit</code></a> mutations.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Metaobjects can now be translated <span id="metaobjects-translatable" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p><a href="/docs/apps/build/custom-data/metaobjects">Metaobjects</a> can now be enabled with the <a href="/docs/apps/build/custom-data/metaobjects/use-metaobject-capabilities#make-your-metaobjects-translatable">Translatable</a> capability. When enabled, all Metaobjects belonging to the definition are eligible for translations through the <a href="/docs/apps/build/markets/manage-translated-content">Translations API</a> as well as the <a href="/docs/apps.shopify.com/translate-and-adapt">Translate and Adapt</a> app.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Access Scope has changed for publishing and unpublishing to current channel <span id="publishing-access-scope" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>Calling the <a href="/docs/api/admin-graphql/2023-01/mutations/publishableUnpublishToCurrentChannel"><code class="text-highlight text-highlight--grey">publishableUnpublishToCurrentChannel</code></a> and <a href="/docs/api/admin-graphql/2023-01/mutations/publishablePublishToCurrentChannel"><code class="text-highlight text-highlight--grey">publishablePublishToCurrentChannel</code></a> mutations now requires the <code class="text-highlight text-highlight--grey">writepublications</code> <a href="/docs/api/usage/access-scopes">access scope</a>, instead of the <code class="text-highlight text-highlight--grey">writeproductslistings</code> access scope, which has been deprecated.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Check if a Shop is verified by Shopify tiers</h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2023-04/objects/MerchantApprovalSignals"><code class="text-highlight text-highlight--grey">MerchantApprovedSignals</code></a> object, which is a field on the <a href="/docs/api/admin-graphql/2023-04/objects/Shop#field-shop-merchantapprovalsignals"><code class="text-highlight text-highlight--grey">Shop</code></a> object, has a new <code class="text-highlight text-highlight--grey">verifiedByShopifyTier</code> field that determines what tier of pre-approval a merchant is in, if available.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Move and Hold mutations for FulfillmentOrders now accept specific line items</h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2023-04/mutations/fulfillmentOrderMove"><code class="text-highlight text-highlight--grey">fulfillmentOrderMove</code></a> and <a href="/docs/api/admin-graphql/2023-04/mutations/fulfillmentOrderHold"><code class="text-highlight text-highlight--grey">fulfillmentOrderHold</code></a> mutations have a new and optional <code class="text-highlight text-highlight--grey">fulfillment_order_line_items</code> parameter that enables you to specify the line items you wish to hold or move.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Orders can be filtered by return status</h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2023-04/queries/orders#:~:text=reference_location_id-,return_status,-risk_level"><code class="text-highlight text-highlight--grey">return_status</code> filter</a> is available on the orders connection. This status corresponds to the <a href="/docs/api/admin-graphql/2023-04/enums/OrderReturnStatus">return status</a> that merchants see in the <strong>Orders</strong> page in the Shopify admin.</p> <p>For more information on Order status, check out <a rel="external noreferrer noopener" target="_blank" href="https://help.shopify.com/en/manual/orders/order-status">the help center</a>.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Create subscription contracts in a single operation</h3> </div> <div class="accordion-content"> <p>You can now create subcription contracts in a single operation with the new <a href="/docs/api/admin-graphql/2023-04/mutations/subscriptionContractAtomicCreate"><code class="text-highlight text-highlight--grey">subscriptionContractAtomicCreate</code></a> mutation. You can also replace a product, or update the price of a product in a subscription contract using the <a href="/docs/api/admin-graphql/2023-04/mutations/subscriptionContractUpdate"><code class="text-highlight text-highlight--grey">subscriptonContractProductUpdate</code></a> mutation.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>The contextRule field on PriceList has been removed <span id="pricelist-contextrule" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>The <code class="text-highlight text-highlight--grey">contextRule</code> field on <a href="/docs/api/admin-graphql/2023-04/objects/PriceList"><code class="text-highlight text-highlight--grey">PriceList</code></a> has been removed and deprecated in previous versions of the API. Existing apps should migrate to <a href="/docs/apps/build/markets/catalogs-different-markets"><code class="text-highlight text-highlight--grey">Catalogs</code></a>. Check out our <a href="/docs/apps/build/markets/migrate-to-catalogs">migration guide</a> for more information.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>ShopifyQL parse error codes have been updated <span id="shopifyql-error-codes" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2023-04/enums/ParseErrorCode"><code class="text-highlight text-highlight--grey">ParseErrorCode</code></a> values have been updated according to the following list:</p> <p><strong>Added</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">INVALID_DATE_RANGE</code></li> <li><code class="text-highlight text-highlight--grey">EXCESS_BACKFILL_DIMENSIONS</code></li> <li><code class="text-highlight text-highlight--grey">BACKFILL_DATE_RANGE_NOT_FOUND</code></li> <li><code class="text-highlight text-highlight--grey">COMPARE_TO_MISSING_PERIOD</code></li> <li><code class="text-highlight text-highlight--grey">EXCESS_DIMENSIONS</code></li> <li><code class="text-highlight text-highlight--grey">SYNTAX_FAILED_PREDICATE</code></li> </ul> <p><strong>Removed</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">VISUALIZE_TYPE_NOT_FOUND</code></li> <li><code class="text-highlight text-highlight--grey">FUNCTION_MODIFIER_INVALID</code></li> <li><code class="text-highlight text-highlight--grey">VISUALIZE_BY_OR_OVER_NOT_FOUND</code></li> <li><code class="text-highlight text-highlight--grey">VISUALIZE_CONTAINS_BY_AND_OVER</code></li> <li><code class="text-highlight text-highlight--grey">BINARY_EXPRESSION_INCOMPATIBLE_TYPES</code></li> <li><code class="text-highlight text-highlight--grey">VISUALIZE_EXCESS_PROJECTIONS_ALPHA</code></li> <li><code class="text-highlight text-highlight--grey">EXCESS_GROUP_BY_ALL</code></li> <li><code class="text-highlight text-highlight--grey">GROUP_BY_ALL_DATE_RANGE_NOT_FOUND</code></li> <li><code class="text-highlight text-highlight--grey">COMPARE_TO_WITHOUT_DURING</code></li> <li><code class="text-highlight text-highlight--grey">GROUP_BY_EXCESS_PROJECTIONS</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Combine customer profiles with the Merge API</h3> </div> <div class="accordion-content"> <p>Use the new Customer Merge API to combine two separate <a href="/docs/api/admin-graphql/2023-04/objects/Customer"><code class="text-highlight text-highlight--grey">Customer</code></a> records. You can use the new queries and mutations below to preview a merge, initiate a merge, and check the status of an ongoing merge.</p> <p><strong>New queries</strong></p> <ul> <li><a href="/docs/api/admin-graphql/2023-04/queries/customerMergePreview"><code class="text-highlight text-highlight--grey">customerMergePreview</code></a></li> <li><a href="/docs/api/admin-graphql/2023-04/queries/customerMergeJobStatus"><code class="text-highlight text-highlight--grey">customerMergeJobStatus</code></a></li> </ul> <p><strong>New mutations</strong></p> <ul> <li><a href="/docs/api/admin-graphql/2023-04/mutations/customerMerge"><code class="text-highlight text-highlight--grey">customerMerge</code></a></li> </ul> <p>Additionally, you can check whether a customer can be merged with another customer using the new <a href="/docs/api/admin-graphql/2023-04/objects/Customer#field-customer-mergeable"><code class="text-highlight text-highlight--grey">Customer.mergeable</code></a> field. This field is also available on the <a href="/docs/api/admin-graphql/2023-04/objects/CustomerSegmentMember#field-customersegmentmember-mergeable">CustomerSegmentMember API</a></p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Create app charges using the merchant's billing currency</h3> </div> <div class="accordion-content"> <p>The Billing API now enables you to create app charges using currencies that match the <a rel="external noreferrer noopener" target="_blank" href="https://help.shopify.com/en/manual/your-account/manage-billing/your-invoice/local-currency#countries-and-regions-where-local-currency-billing-is-supported">merchant's local billing currency</a>.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Functions APIs are now available for delivery and payment customizations</h3> </div> <div class="accordion-content"> <p>The Functions APIs for <a href="/docs/api/functions/reference/delivery-customization"><code class="text-highlight text-highlight--grey">delivery customizations</code></a> and <a href="/docs/api/functions/reference/payment-customization"><code class="text-highlight text-highlight--grey">payment customizations</code></a> are now available in a <a href="/docs/api/developer-previews">developer preview</a>. With these new APIs, you can hide, reorder, or rename payment and delivery options to help merchants increase conversions and stand out from the competition.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Catalog APIs are now available</h3> </div> <div class="accordion-content"> <p>You can use the new <a href="/docs/apps/build/b2b/manage-catalogs"><code class="text-highlight text-highlight--grey">Catalogs API</code></a> to create a set of rules that determine the available products and their prices in different customer contexts. The Catalogs API lets you link Shopify Markets and B2B primitives to Publications and PriceLists to customize product offerings for different audiences. The same APIs also allow you to manage product publishing for sales channels.</p> <p>Previously, app charges could only be created using USD and were converted to the merchant's local currency using the exchange rate at the time the invoice is issued. By creating app charges in the merchant's billing currency, app developers can enable merchants to better budget their app spend without being exposed to currency exchange rate fluctuations.</p> <p>You can use the <a href="/docs/api/admin-graphql/2023-04/queries/shopBillingPreferences"><code class="text-highlight text-highlight--grey">shopBillingPreferences</code></a> query to retrieve the merchant's local billing currency, then pass in the currency value as input to the existing GraphQL Billing APIs.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Web Pixels can now be queried without specifying an ID</h3> </div> <div class="accordion-content"> <p>You can now query the web pixels installed on an online store without specifying the ID using the <a href="/docs/api/admin-graphql/2023-04/queries/webPixel"><code class="text-highlight text-highlight--grey">webPixel</code></a> query. Learn more about <a href="/docs/apps/build/marketing-analytics/pixels">web pixels</a>.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Idempotent creation of AppUsageRecord</h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2023-04/mutations/appUsageRecordCreate"><code class="text-highlight text-highlight--grey">appUsageRecordCreate</code></a> now supports an optional parameter <code class="text-highlight text-highlight--grey">idempotencyKey</code>, which ensures the merchant will not be charged twice. When <code class="text-highlight text-highlight--grey">idempotencyKey</code> is provided, the mutation will return the same response as any previous <code class="text-highlight text-highlight--grey">appUsageRecordCreate</code> mutation calls with an identical <code class="text-highlight text-highlight--grey">idempotencyKey</code> value for the intended shop and requesting app, rather than creating a new record and charging the merchant again.</p> <p>This means that an <code class="text-highlight text-highlight--grey">idempotencyKey</code> could be reused by an app to create <a href="/docs/api/admin-graphql/2023-04/objects/AppUsageRecord"><code class="text-highlight text-highlight--grey">AppUsageRecords</code></a> on different shops to charge the merchant. Different apps can also use the same <code class="text-highlight text-highlight--grey">idempotencyKey</code> on the same shop and still charge the shop. However, we recommend a UUID instead.</p> <p>The <code class="text-highlight text-highlight--grey">appUsageRecordCreate</code> mutation behaves like past API versions when the <code class="text-highlight text-highlight--grey">idempotencyKey</code> value is not provided and creates a new record on every call.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>SVG files are now returned as a MediaImage</h3> </div> <div class="accordion-content"> <p>SVG files are now treated as MediaImages by the Admin API. This makes it easier to use SVGs in your online storefront.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>The productVariantsBulkUpdate mutation now returns data along with errors</h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2023-04/mutations/productvariantsbulkupdate"><code class="text-highlight text-highlight--grey">productVariantsBulkUpdate</code></a> mutation will now return <a href="/docs/api/admin-graphql/2023-04/objects/Product"><code class="text-highlight text-highlight--grey">Product</code></a> and <a href="/docs/api/admin-graphql/2023-04/objects/ProductVariant"><code class="text-highlight text-highlight--grey">ProductVariant</code></a> data even when errors are present. Previously, the mutation would always return <code class="text-highlight text-highlight--grey">null</code> for the <code class="text-highlight text-highlight--grey">Product</code> and <code class="text-highlight text-highlight--grey">ProductVariant</code> data.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>PublishedTranslation has been replaced by Translation <span id="published-translations-removed" class="heading-flag breaking" ></h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2023-01/objects/PublishedTranslation"><code class="text-highlight text-highlight--grey">PublishedTranslation</code></a> object has been replaced by <a href="/docs/api/admin-graphql/2023-04/objects/Translation"><code class="text-highlight text-highlight--grey">Translation</code></a>. All existing connections to <code class="text-highlight text-highlight--grey">PublishedTranslation</code> now point to <code class="text-highlight text-highlight--grey">Translation</code>. All existing fields on <code class="text-highlight text-highlight--grey">PublishedTranslation</code> exist on <code class="text-highlight text-highlight--grey">Translation</code>, except for the <code class="text-highlight text-highlight--grey">marketId</code> field. Instead, <code class="text-highlight text-highlight--grey">Translation</code> is linked directly to <a href="/docs/api/admin-graphql/2023-04/objects/Market"><code class="text-highlight text-highlight--grey">Market</code></a> through the <code class="text-highlight text-highlight--grey">market</code> field.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>FulfillmentOrderLineItemsPreparedForPickupUserErrorCode codes have been updated <span id="fulfillment-order-error-codes" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2023-01/enums/FulfillmentOrderLineItemsPreparedForPickupUserErrorCode"><code class="text-highlight text-highlight--grey">FulfillmentOrderLineItemsPreparedForPickupUserErrorCode</code></a> object has the following changes:</p> <ul> <li>The <code class="text-highlight text-highlight--grey">FULFILLMENT_ORDER_CHANGED</code> error code has been removed</li> <li>The <code class="text-highlight text-highlight--grey">UNABLE_TO_PREPARE_QUANTITY</code> error code has been added</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Webhooks for B2B Customers have been added</h3> </div> <div class="accordion-content"> <p>The following webhook notifications for changes to the major entities within the B2B Customers product have been added:</p> <ul> <li><a href="/docs/api/admin-graphql/2023-04/enums/WebhookSubscriptionTopic#value-companiescreate"><code class="text-highlight text-highlight--grey">companies/create</code></a></li> <li><a href="/docs/api/admin-graphql/2023-04/enums/WebhookSubscriptionTopic#value-companiesupdate"><code class="text-highlight text-highlight--grey">companies/update</code></a></li> <li><a href="/docs/api/admin-graphql/2023-04/enums/WebhookSubscriptionTopic#value-companiesdelete"><code class="text-highlight text-highlight--grey">companies/delete</code></a></li> <li><a href="/docs/api/admin-graphql/2023-04/enums/WebhookSubscriptionTopic#value-companylocationscreate"><code class="text-highlight text-highlight--grey">company_locations/create</code></a></li> <li><a href="/docs/api/admin-graphql/2023-04/enums/WebhookSubscriptionTopic#value-companieslocationsupdate"><code class="text-highlight text-highlight--grey">company_locations/update</code></a></li> <li><a href="/docs/api/admin-graphql/2023-04/enums/WebhookSubscriptionTopic#value-companieslocationsdelete"><code class="text-highlight text-highlight--grey">company_locations/delete</code></a></li> <li><a href="/docs/api/admin-graphql/2023-04/enums/WebhookSubscriptionTopic#value-companiescontractscreate"><code class="text-highlight text-highlight--grey">company_contacts/create</code></a></li> <li><a href="/docs/api/admin-graphql/2023-04/enums/WebhookSubscriptionTopic#value-companiescontractsupdate"><code class="text-highlight text-highlight--grey">company_contacts/update</code></a></li> <li><a href="/docs/api/admin-graphql/2023-04/enums/WebhookSubscriptionTopic#value-companiescontractsdelete"><code class="text-highlight text-highlight--grey">company_contacts/delete</code></a></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Destroy delegate access tokens</h3> </div> <div class="accordion-content"> <p>You can use the <a href="/docs/api/admin-graphql/2023-04/mutations/delegateAccessTokenDestroy"><code class="text-highlight text-highlight--grey">delegateAccessTokenDestroy</code></a> mutation to delete the delegate tokens created by the API client. For app architectures that use delegate tokens from multiple subsystems, this makes it easy to remove those delegate tokens that are unused or leaked for better application security.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Additional fees fields for Orders</h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2023-04/objects/Order"><code class="text-highlight text-highlight--grey">Order</code></a> object has the following new fields that represent additional fees. Additional fees are extra costs associated with an international package that are neither duties nor taxes.</p> <ul> <li><code class="text-highlight text-highlight--grey">additionalFees</code></li> <li><code class="text-highlight text-highlight--grey">currentTotalAdditionalFeesSet</code></li> <li><code class="text-highlight text-highlight--grey">originalTotalAdditionalFeesSet</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Update validations of a metafield definition</h3> </div> <div class="accordion-content"> <p>You can now use the new <code class="text-highlight text-highlight--grey">validations</code> field on <a href="/docs/api/admin-graphql/2023-04/input-objects/MetafieldDefinitionInput"><code class="text-highlight text-highlight--grey">MetafieldDefinitionInput</code></a> to change the validations for a <a href="/docs/api/admin-graphql/2023-04/objects/Metafield"><code class="text-highlight text-highlight--grey">Metafield</code></a> definition. You can also query the <code class="text-highlight text-highlight--grey">validationJob</code> field on <a href="/docs/api/admin-graphql/2023-04/payloads/MetafieldDefinitionUpdatePayload"><code class="text-highlight text-highlight--grey">MetafieldDefinitionUpdatePayload</code></a> to get the details of the running validation job.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Server Pixels are now available to select partners</h3> </div> <div class="accordion-content"> <p>Select partners can use Server Pixels to consume customer events on the server-side. These new mutations are available to those partners:</p> <ul> <li><a href="/docs/api/admin-graphql/2023-04/mutations/serverPixelCreate"><code class="text-highlight text-highlight--grey">serverPixelCreate</code></a></li> <li><a href="/docs/api/admin-graphql/2023-04/mutations/eventBridgeServerPixelUpdate"><code class="text-highlight text-highlight--grey">eventBridgeServerPixelUpdate</code></a></li> <li><a href="/docs/api/admin-graphql/2023-04/mutations/pubSubServerPixelUpdate"><code class="text-highlight text-highlight--grey">pubSubServerPixelUpdate</code></a></li> <li><a href="/docs/api/admin-graphql/2023-04/mutations/serverPixelDelete"><code class="text-highlight text-highlight--grey">serverPixelDelete</code></a></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>You can compare columns in ShopifyqlResponse</h3> </div> <div class="accordion-content"> <p>You can now use the <code class="text-highlight text-highlight--grey">COMPARE TO</code> keyword on comparison columns in <code class="text-highlight text-highlight--grey">ShopifyqlResponse</code> to indicate the columns to be compared. Learn more about the <code class="text-highlight text-highlight--grey">COMPARE TO</code> keyword in our <a href="/docs/api/shopifyql/shopifyql-reference#compare-to">ShopifyQL Documentation</a></p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Added source_location field to FulfillmentOrdersMove webhook payload</h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2023-04/enums/WebhookSubscriptionTopic#value-fulfillmentordersmoved"><code class="text-highlight text-highlight--grey">FulfillmentOrdersMove</code></a> webhook payload is extended <code class="text-highlight text-highlight--grey">source_location</code> field.</p> <p>The <a href="/docs/api/admin-graphql/2023-04/objects/fulfillmentorder#field-fulfillmentorder-assignedlocation"><code class="text-highlight text-highlight--grey">assignedLocation</code></a> of the <code class="text-highlight text-highlight--grey">original_fulfillment_order</code> may be changed by the move operation. Therefore, if you need to determine the originally assigned location, then you should refer to the <code class="text-highlight text-highlight--grey">source_location</code> field.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Partial updates for bulk product variants</h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2023-01/mutations/productVariantsBulkUpdate"><code class="text-highlight text-highlight--grey">productVariantsBulkUpdate</code></a> mutation has a new <code class="text-highlight text-highlight--grey">allowPartialUpdates</code> parameter. By default, the mutation won't update any variant if any variant is invalid. However, when this field is set to <code class="text-highlight text-highlight--grey">true</code>, the mutation will modify valid products variants, even if there are invalid ones.</p> </div> </div> </div> </div> ## GraphQL Storefront API changes <div class="accordion-container"> <div class="accordion-controls"> <button class="accordion-control" data-accordion-control-type="expand-all" type="button">Expand all</button> </div> <div class="accordion-content-container"> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Metafields on Locations can now be queried</h3> </div> <div class="accordion-content"> <p><a href="/docs/api/storefront/2023-04/objects/Metafields">Metafields</a> belonging to a <a href="/docs/api/storefront/2023-04/objects/Location">Location</a> can now be queried using the <a href="/docs/api/storefront/2023-04/objects/Location#queries">Location</a> query object.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Generate targeted product recommendations</h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/storefront/2023-04/queries/productRecommendations"><code class="text-highlight text-highlight--grey">productRecommendations</code></a> query has a new optional <code class="text-highlight text-highlight--grey">intent</code> argument of the type <a href="/docs/api/storefront/2023-04/enums/ProductRecommendationIntent"><code class="text-highlight text-highlight--grey">ProductRecommendationIntent</code></a>. By default, the value for this argument is <code class="text-highlight text-highlight--grey">RELATED</code>.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>A buyer's wallet preference can be passed to the Cart</h3> </div> <div class="accordion-content"> <p>The new <code class="text-highlight text-highlight--grey">wallet_preferences</code> field on the <a href="/docs/api/storefront/2023-04/objects/CartBuyerIdentity"><code class="text-highlight text-highlight--grey">CartBuyerIdentity</code></a> object allows you to pass a buyer's wallet preference and be redirected to the accelerated checkout flow. Accepted value: <code class="text-highlight text-highlight--grey">shop_pay</code>.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Introducing BaseCartLine <span id="base-cart-line" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>We have introduced <a href="/docs/api/storefront/2023-04/interfaces/BaseCartLine"><code class="text-highlight text-highlight--grey">BaseCartLine</code></a> as an interface to <a href="/docs/api/storefront/2023-04/objects/CartLine"><code class="text-highlight text-highlight--grey">CartLine</code></a>. <a href="/docs/api/storefront/2023-04/connections/CartLineConnection"><code class="text-highlight text-highlight--grey">CartLineConnection</code></a> has been updated to <a href="/docs/api/storefront/2023-04/connections/BaseCartLineConnection"><code class="text-highlight text-highlight--grey">BaseCartLineConnection</code></a>.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Read 3D model configuration settings from the Storefront API</h3> </div> <div class="accordion-content"> <p>When a 3D model is customized via the no code 3D viewer configuration the properties associated with lighting, zoom, camera angle and background color are available in the Storefront API. Learn more about this feature on <a rel="external noreferrer noopener" target="_blank" href="https://help.shopify.com/en/manual/online-store/images/3d-images">Shopify Help</a>.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Focal Point setting for images is now available</h3> </div> <div class="accordion-content"> <p>You can now access the <a rel="external noreferrer noopener" target="_blank" href="https://help.shopify.com/en/manual/online-store/images/theme-images#set-a-focal-point-on-a-theme-image"><code class="text-highlight text-highlight--grey">Focal Point</code></a> for an image. <code class="text-highlight text-highlight--grey">Focal Points</code> can be set from the shop admin while editing image files.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>You can use the customer's address id as input for delivery address preferences</h3> </div> <div class="accordion-content"> <p>You can now pass the <a href="/docs/api/storefront/2023-04/objects/Customer#connection-customer-addresses">Customer's address id</a> as an input for <a href="/docs/api/storefront/2023-04/objects/CartBuyerIdentity#field-cartbuyeridentity-deliveryaddresspreferences">CartBuyerIdentity.deliveryAddressPreferences</a> when creating or updating carts for authenticated customers.</p> </div> </div> </div> </div> ## GraphQL Payments Apps API changes <div class="accordion-container"> <div class="accordion-controls"> <button class="accordion-control" data-accordion-control-type="expand-all" type="button">Expand all</button> </div> <div class="accordion-content-container"> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>The status field in the Payments Apps API has been removed <span id="payments-apps-status-field" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>The previously deprecated <code class="text-highlight text-highlight--grey">status</code> field has been removed in favour of the <code class="text-highlight text-highlight--grey">state</code> field on the following Payments Apps API objects:</p> <ul> <li><a href="/docs/api/payments-apps/2023-04/objects/PaymentSession"><code class="text-highlight text-highlight--grey">PaymentSession</code></a></li> <li><a href="/docs/api/payments-apps/2023-04/objects/RefundSession"><code class="text-highlight text-highlight--grey">RefundSession</code></a></li> <li><a href="/docs/api/payments-apps/2023-04/objects/CaptureSession"><code class="text-highlight text-highlight--grey">CaptureSession</code></a></li> <li><a href="/docs/api/payments-apps/2023-04/objects/VoidSession"><code class="text-highlight text-highlight--grey">VoidSession</code></a></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>New CartErrorCodes have been added <span id="new-cart-error-codes" class="heading-flag breaking" ></h3> </div> <div class="accordion-content"> <p>Two new error codes, <code class="text-highlight text-highlight--grey">INVALID_DELIVERY_GROUP</code> and <code class="text-highlight text-highlight--grey">INVALID_DELIVERY_OPTION</code>, have been added to the <a href="/docs/api/storefront/2023-04/enums/CartErrorCode"><code class="text-highlight text-highlight--grey">CartErrorCode</code></a> enum. This error code can be returned when the <a href="/docs/api/storefront/2023-04/mutations/cartSelectedDeliveryOptionsUpdate"><code class="text-highlight text-highlight--grey">cartSelectedDeliveryOptionsUpdate</code></a> mutation is called.</p> </div> </div> </div> </div> ## REST Admin API changes <div class="accordion-container"> <div class="accordion-controls"> <button class="accordion-control" data-accordion-control-type="expand-all" type="button">Expand all</button> </div> <div class="accordion-content-container"> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Move and Hold operations for FulfillmentOrders now accept specific line items</h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2023-04/mutations/fulfillmentOrderMove"><code class="text-highlight text-highlight--grey">fulfillmentOrderMove</code></a> and <a href="/docs/api/admin-graphql/2023-04/mutations/fulfillmentOrderHold"><code class="text-highlight text-highlight--grey">fulfillmentOrderHold</code></a> operations have a new and optional <code class="text-highlight text-highlight--grey">fulfillment_order_line_items</code> parameter that allows you to specific the line itms you wish to hold or move.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Transaction will now return the total unsettled set amount <span id="total-unsettled-set" class="heading-flag breaking" ></h3> </div> <div class="accordion-content"> <p>Requests for <a href="/docs/api/admin-rest/2023-04/resources/transaction">Transaction</a> will now return <code class="text-highlight text-highlight--grey">total_unsettled_set</code>. This represents the remaining amount to be captured on the transaction. <code class="text-highlight text-highlight--grey">total_unsettled_set</code> is returned in both <code class="text-highlight text-highlight--grey">shop</code> and <code class="text-highlight text-highlight--grey">presentment</code> money objects with currency.</p> <p>If you are leveraging <strong>manual capture</strong> and the <strong>authorized</strong> amount from <a href="/docs/api/admin-rest/2023-04/resources/transaction">Transaction</a>, then you should switch to referencing <code class="text-highlight text-highlight--grey">total_unsettled_set</code>. The authorized amount can differ from the total amount to capture due to adjustments during order finalization such as tax adjustments.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Additional filtering added to FulfillmentOrders</h3> </div> <div class="accordion-content"> <p>You can now retrieve a subset of <a href="/docs/api/admin-rest/2023-04/resources/fulfillmentorder"><code class="text-highlight text-highlight--grey">FulfillmentOrders</code></a> that are assigned to the locations owned by the app performing the request, but haven't yet been requested for fulfillment.</p> <p>The <code class="text-highlight text-highlight--grey">assignment_status</code> query parameter in the <a href="/docs/api/admin-rest/2023-04/resources/assignedfulfillmentorder#get-assigned-fulfillment-orders"><code class="text-highlight text-highlight--grey">AssignedFulfillmentOrder</code></a> endpoint can now accept a value of <code class="text-highlight text-highlight--grey">fulfillment_unsubmitted</code> for filtering in addition to the existing <code class="text-highlight text-highlight--grey">fulfillment_requested</code>, <code class="text-highlight text-highlight--grey">fulfillment_accepted</code>, and <code class="text-highlight text-highlight--grey">cancellation_requested</code> filter values.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Access to the Asset API is no longer available to public apps <span id="asset-api-access-scope" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>When requesting the Asset API, access to create, update and delete assets is no longer accessible for public apps. Refer to <a href="https://shopify.dev/docs/apps/online-store/other-integration-methods/asset">this guide</a> for more details on the change, exemptions, and how to migrate your apps.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Payment properties on the Order resource have been removed <span id="payment-resource-order" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>The following properties have been removed from the <a href="/docs/api/admin-rest/2023-04/resources/order"><code class="text-highlight text-highlight--grey">Order</code></a> resource:</p> <ul> <li><code class="text-highlight text-highlight--grey">gateway</code></li> <li><code class="text-highlight text-highlight--grey">payment_details</code></li> <li><code class="text-highlight text-highlight--grey">processing_method</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Additional fees fields for Orders</h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-rest/2023-04/objects/Order"><code class="text-highlight text-highlight--grey">Order</code></a> object has the following new fields that represent additional fees. Additional fees are extra costs that are associated with international packages that are neither duties nor taxes.</p> <ul> <li><code class="text-highlight text-highlight--grey">current_total_additional_fees_set</code></li> <li><code class="text-highlight text-highlight--grey">original_total_additional_fees_set</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Added source_location field to FulfillmentOrdersMove webhook payload</h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-rest/2023-04/resources/webhook#event-topics-fulfillment-orders-moved"><code class="text-highlight text-highlight--grey">FulfillmentOrdersMove</code></a> webhook payload is extended <code class="text-highlight text-highlight--grey">source_location</code> field.</p> <p>The <a href="/docs/api/admin-graphql/2023-04/objects/fulfillmentorder#field-fulfillmentorder-assignedlocation"><code class="text-highlight text-highlight--grey">assignedLocation</code></a> of the <code class="text-highlight text-highlight--grey">original_fulfillment_order</code> may be changed by the move operation. If you need to determine the originally assigned location, then you should refer to the <code class="text-highlight text-highlight--grey">source_location</code> field instead.</p> </div> </div> </div> </div>