> Note: > We're no longer publishing API release notes. Instead, you can find the latest updates on Shopify APIs in our [developer changelog](https://shopify.dev/changelog). You can filter updates by area. For example, you can filter API updates by the API name and version, such as GraphQL Admin API changes in version 2025-04. <table> <caption>The API version release date and the date that the version is no longer supported</caption> <thead> <tr> <th scope="col">Release date</th> <th scope="col">Date version is no longer supported</th> </tr> </thead> <tbody> <tr> <td scope="row">October 1, 2022</td> <td scope="row">October 1, 2023</td> </tr> </tbody> </table> **What's new in 2022-10** The following features were added in version 2022-10 of Shopify's APIs. Highlights from the GraphQL Admin API changes: - Checkout Profiles API - B2B API released - Web Pixel API released - New mutation to bulk activate or deactivate a single inventory item at multiple locations - Support for custom content by market through the Translations API - Location Management API released - Full markets and multi-currency support for `DraftOrders` - `SellingPlan` and `SellingPlanGroup` fields are now supported by the Translations API - New `references` connection on `Metafields` - Metafield support for `Locations` - Duplicate and Create Inventory Reservations in `DraftOrders` - Local Delivery & Pickup for Subscriptions Highlights from the GraphQL Storefront API changes: - You can now use the Storefront API to attach shipping address preferences to the carts of non-logged-in customers and the fetch cart delivery groups through the new `deliveryAddressPreferences` field, which has been added to the Storefront API's `CartBuyerIdentity` and `CartBuyerIdentityInput` objects - New `references` connection on `Metafields` - Querying for `CheckoutProfiles` - New `deliveryAddressPreferences` field added to cart buyer identity objects Highlights from the REST Admin API changes: - New `merchant_of_record_app_id` field on the [`Order`](/docs/api/admin-rest/latest/resources/order) object - New `marketing_sms_consent_enabled_at_checkout` field on the [`Shop`](/docs/api/admin-rest/latest/resources/shop) object ## 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. ### Protected customer data requirements As of version 2022-10, published, public apps that use [GraphQL Admin API](/docs/api/admin-graphql) and [REST Admin API](/docs/api/admin-rest) resources must meet the [protected customer data requirements](/docs/apps/launch/protected-customer-data). The protected customer data requirements focus on data minimization, transparency, and security so that you can better support merchants' path towards compliance with privacy and data protection rules. ### Deleting a reference type metafield definition As of version 2022-10, if you [delete a reference type metafield definition](/docs/api/admin-graphql/latest/mutations/metafieldDefinitionDelete) with the `deleteAllAssociatedMetafields` argument set to `false`, then `REFERENCE_TYPE_DELETION_ERROR` is returned with the following error message: Deleting a reference type metafield definition requires deletion of its associated metafields. ### Deprecated Fulfillment cancel endpoint on the REST Order API The `Fulfillment` `cancel` endpoint on the REST Order API is now deprecated: `/orders/{order_id}/fulfillments/{fulfillment_id}/cancel.json`. Use `/fulfillment/{fulfillment_id}/cancel.json` on the `Fulfillment` endpoint instead. ### Deprecated `title` field on `ProductVariant` resource You will no longer be able to register `title` translations on the `ProductVariant` resource. The `title` will be automatically generated using the `option` translations when they are registered. ### Deprecated customer-related `Order` properties The following `Customer` object properties on the REST Admin API's [`Order`](/docs/api/admin-rest/latest/resources/order#top) resource have been deprecated: - `last_order_id` - `last_order_name` - `orders_count` - `total_spent` These properties will still be available in the [`Customer`](/docs/api/admin-rest/latest/resources/customer#top) resource. ### Deprecated Order and LineItem properties We've introduced a breaking change to the `LineItem` resource. The `fulfillment_service` field is no longer supported in the REST and GraphQL Admin APIs. Fulfillment services will all be opted into SKU sharing in 2023-04. Consider using one of the following options instead: - [`assigned_location` property on the REST`FulfillmentOrder` resource](/docs/api/admin-rest/2022-04/resources/fulfillmentorder) - [`assigned_location` field on the GraphQL`FulfillmentOrder` object](/docs/api/admin-graphql/2022-04/objects/FulfillmentOrder#field-fulfillmentorder-assignedlocation) When a fulfillment service app sets `permits_sku_sharing` to `true`, some existing behaviour will break. When a product variant's `fulfillmentService` parameter (REST and GraphQL) is set to `manual`, it no longer means that the variant is stocked only at a merchant-managed location. Therefore, apps that use the `fulfillmentService` parameter in this way should instead use the `location` parameter on the `FulfillmentOrder` resource to determine which location or fulfillment service fulfills for a given line item. The following other line item properties on the REST Admin API's `Order` resource are deprecated: - `origin_location` - `destination_location` The following object property on the REST Admin API's `Order` resource is deprecated: - `total_price_usd` ### Subscription billing cycles We've added subscription billing cycles to the existing Subscriptions Contract APIs so that you can make changes to an upcoming order without affecting the base subscription contract. The following changes are included: - Skipping future orders - Making changes to the line items of an upcoming order, including any additions, quantity changes, or removals - Combining the orders of one or more subscriptions contracts to save on shipping costs > Note: > With the introduction of subscription billing cycles, the `SubscriptionBillingAttemptCreate` mutation will create a billing attempt for the billing cycle at the `origin_time`, if specified. Otherwise, a billing attempt will be created for the current billing cycle by default. ### Changes to MoneyV2 related fields The [`Money`](/docs/api/admin-graphql/2022-07/scalars/Money) scalar is being removed from the Storefront API. It was previously used for monetary fields that don't have a V2 suffix (`<name>: Money`). As a result, the following changes have been made: - Non-V2 fields now use [`MoneyV2`](/docs/api/admin-graphql/2022-07/objects/MoneyV2) objects for their type (`<name>: MoneyV2`). - Monetary fields that do have the `V2` suffix (`<name>V2: MoneyV2`) are deprecated in favor of the `<name>: MoneyV2` equivalent. These fields will be removed in subsequent releases. The Money V2 changes help to improve the consistency of the GraphQL Admin API and make it clearer to use these fields. ## GraphQL Admin API changes The following are all the changes currently introduced in the 2022-10 version of the GraphQL Admin API. <div class="accordion-container"> <div class="accordion-controls"> <button class="accordion-control" data-accordion-control-type="expand-all" type="button">Expand all</button> </div> <div class="accordion-content-container"> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Deleting a reference type metafield definition <span id="deleting-a-reference-type-metafield-definition" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>As of the API version 2022-10, if you <a href="/docs/api/admin-graphql/latest/mutations/metafieldDefinitionDelete">delete a reference type metafield definition</a> with the <code class="text-highlight text-highlight--grey">deleteAllAssociatedMetafields</code> argument set to <code class="text-highlight text-highlight--grey">false</code>, then <code class="text-highlight text-highlight--grey">REFERENCE_TYPE_DELETION_ERROR</code> is returned with the following error message:</p> <p>Deleting a reference type metafield definition requires deletion of its associated metafields.</p> <p><strong>New error code</strong></p> <ul> <li><code class="text-highlight text-highlight--grey">REFERENCE_TYPE_DELETION_ERROR</code> was added to <code class="text-highlight text-highlight--grey">MetafieldDefinitionDelete</code> mutation</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Protected customer data requirements <span id="protected-customer-data-requirements-graphql-admin" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>As of version 2022-10, published, public apps that use the GraphQL Admin API must meet the <a href="/docs/apps/launch/protected-customer-data">protected customer data requirements</a>.</p> <p>The protected customer data requirements focus on data minimization, transparency, and security so that you can better support merchants' path towards compliance with privacy and data protection rules.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Deprecated title field on ProductVariant <span id="title-field-deprecated-on-product-variant" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>You will no longer be able to register <code class="text-highlight text-highlight--grey">title</code> translations on the <code class="text-highlight text-highlight--grey">ProductVariant</code> resource. The <code class="text-highlight text-highlight--grey">title</code> will be automatically generated using the <code class="text-highlight text-highlight--grey">option</code> translations when they are registered.</p> <p>Learn more about <a href="/docs/api/admin-graphql/latest/enums/TranslatableResourceType#value-productvariant"><code class="text-highlight text-highlight--grey">TranslatableResourceTypes</code></a>.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Deprecated Order and LineItem properties <span id="order-and-lineitem-property-deprecations-gql" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>We've introduced a breaking change to the <code class="text-highlight text-highlight--grey">LineItem</code> resource. The <code class="text-highlight text-highlight--grey">fulfillment_service</code> field is no longer supported in the GraphQL Admin API. Fulfillment services will all be opted into SKU sharing in 2023-04. Consider using the <a href="/docs/api/admin-graphql/2022-04/objects/FulfillmentOrder#field-fulfillmentorder-assignedlocation"><code class="text-highlight text-highlight--grey">assigned_location</code> field on the GraphQL<code class="text-highlight text-highlight--grey">FulfillmentOrder</code> object</a> instead.</p> <p>When a fulfillment service app sets <code class="text-highlight text-highlight--grey">permits_sku_sharing</code> to <code class="text-highlight text-highlight--grey">true</code>, some existing behaviour will break. When a product variant's <code class="text-highlight text-highlight--grey">fulfillmentService</code> parameter (REST and GraphQL) is set to <code class="text-highlight text-highlight--grey">manual</code>, it no longer means that the variant is stocked only at a merchant-managed location. Therefore, apps that use the <code class="text-highlight text-highlight--grey">fulfillmentService</code> parameter in this way should instead use the <code class="text-highlight text-highlight--grey">location</code> parameter on the <code class="text-highlight text-highlight--grey">FulfillmentOrder</code> resource to determine which location or fulfillment service fulfills for a given line item.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Subscription billing cycles <span id="subscription-billing-cycles" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>We've added subscription billing cycles to the existing Subscriptions Contract APIs so that you can make changes to an upcoming order without affecting the base subscription contract.</p> <p>The following changes are included:</p> <ul> <li>Skipping future orders</li> <li>Making changes to the line items of an upcoming order, including any additions, quantity changes, or removals</li> <li>Combining the orders of one or more subscriptions contracts to save on shipping costs</li> </ul> <aside class="note"> <h4>Note</h4> <p> With the introduction of subscription billing cycles, the <code class="text-highlight text-highlight--grey">SubscriptionBillingAttemptCreate</code> mutation will create a billing attempt for the billing cycle at the <code class="text-highlight text-highlight--grey">origin_time</code>, if specified. Otherwise, a billing attempt will be created for the current billing cycle by default.</p> </aside> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Disable transactional SMS <span id="disabled-transactional-sms-graphql-admin"</h3> </div> <div class="accordion-content"> <p>Due to carrier constraints, Shopify can no longer send customized SMS messages. This change risks a degraded experience for merchants using the feature. You can disable transactional SMS to mitigate a negative impact on the merchant experience. By disabling transactional SMS sent by Shopify, you can enable third parties to take over this job and provide customizable SMS.</p> <p><strong>New fields</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">transactionalSmsDisabled</code> field was added to the <a href="/docs/api/admin-graphql/latest/objects/Shop#field-shop-transactionalsmsdisabled"><code class="text-highlight text-highlight--grey">Shop</code></a> object</li> </ul> <p><strong>New webhook subscription topics</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">transactionalSmsDisabled</code> field was added to the <a href="/docs/api/admin-graphql/latest/enums/webhooksubscriptiontopic#value-shopupdate"><code class="text-highlight text-highlight--grey">SHOP_UPDATE</code></a> webhook subscription topic, which is now triggered when the <code class="text-highlight text-highlight--grey">transactionalSmsDisabled</code> state of a shop changes</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Bulk activate or deactivate a single inventory item</h3> </div> <div class="accordion-content"> <p>You can now use the new <a href="/docs/api/admin-graphql/latest/mutations/inventoryBulkToggleActivation"><code class="text-highlight text-highlight--grey">inventoryBulkToggleActivation</code></a> mutation to bulk activate or deactivate a single inventory item at many locations, with a maximum of 250 locations at a time.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Retrieve manually held fulfillment orders</h3> </div> <div class="accordion-content"> <p>You can now use the new <a href="/docs/api/admin-graphql/latest/queries/manualHoldsFulfillmentOrders"><code class="text-highlight text-highlight--grey">manualHoldsFulfillmentOrders</code></a> query to retrieve all of the manually held fulfillment orders for a shop. Fulfillment orders can also be filtered based on <code class="text-highlight text-highlight--grey">Order</code> filters:</p> <ul> <li><code class="text-highlight text-highlight--grey">order_risk_level</code> - The fraud risk level of the order.</li> <li><code class="text-highlight text-highlight--grey">order_financial_status</code> - The financial status of the order</li> <li><code class="text-highlight text-highlight--grey">shipping_address_coordinates_validated</code> - Whether the shipping address was geolocated and it is a valid address.</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Merchant of Record</h3> </div> <div class="accordion-content"> <p>You can now access information on the application acting as the Merchant of Record on the Order object. This information is only populated for supported applications.</p> <p><strong>New fields</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">merchantOfRecordApp</code> field has been added to the Order object.</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>MarketWebPresence association is accessible through ShopLocale endpoints</h3> </div> <div class="accordion-content"> <p>As of <code class="text-highlight text-highlight--grey">2022-10</code> you can now add, remove, and view the <a href="/docs/api/admin-graphql/latest/objects/MarketWebPresence"><code class="text-highlight text-highlight--grey">MarketWebPresence</code></a> object that's associated with a <a href="/docs/api/admin-graphql/latest/objects/Locale"><code class="text-highlight text-highlight--grey">Locale</code></a> through the <a href="/docs/api/admin-graphql/latest/objects/ShopLocale"><code class="text-highlight text-highlight--grey">ShopLocale</code></a> GraphQL object.</p> <p><strong>New fields</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">marketWebPresences</code> field has been added to <code class="text-highlight text-highlight--grey">ShopLocale</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Metafields</h3> </div> <div class="accordion-content"> <p>You can now access a <code class="text-highlight text-highlight--grey">references</code> connection on a <code class="text-highlight text-highlight--grey">metafield</code>. Use this connection to resolve metafield values of a list reference type to their underlying resource. This new connection is paginated and works similarly to the existing <code class="text-highlight text-highlight--grey">reference</code> field, which is used for single references.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Unpublished locales can now be added to a MarketWebPresence</h3> </div> <div class="accordion-content"> <p>As of <code class="text-highlight text-highlight--grey">2022-10</code> the <a href="/docs/api/admin-graphql/latest/mutations/marketWebPresenceUpdate"><code class="text-highlight text-highlight--grey">marketWebPresenceUpdate</code></a> endpoint now supports adding unpublished locales as <code class="text-highlight text-highlight--grey">alternateLocales</code>.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Support for custom content by market</h3> </div> <div class="accordion-content"> <p>You can now use the Translations API to surface custom content to buyers in a specific market, including custom content for a store's default language. This feature enables merchants to provide localized and custom content, such as:</p> <ul> <li>Support showing regional spelling or preferred terms. For example, a “Sweaters” menu title for a United States market, and a “Jumpers” menu title for a United Kingdom market.</li> <li>Display promotional content based on the buyer’s market. For example, a custom Thanksgiving announcement bar in October for Canadian buyers.</li> </ul> <p><strong>New queries and mutations</strong>:</p> <ul> <li><a href="/docs/api/admin-graphql/latest/queries/translatableResource"><code class="text-highlight text-highlight--grey">translatableResource</code></a></li> <li><a href="/docs/api/admin-graphql/latest/mutations/translationsRegister"><code class="text-highlight text-highlight--grey">translationsRegister</code></a></li> <li><a href="/docs/api/admin-graphql/latest/mutations/translationsRemove"><code class="text-highlight text-highlight--grey">translationsRemove</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>SellingPlan and SellingPlanGroup fields are now supported by the Translations API</h3> </div> <div class="accordion-content"> <p>The following <code class="text-highlight text-highlight--grey">SellingPlan</code> and <code class="text-highlight text-highlight--grey">SellingPlanGroup</code> fields are now supported by the Translations API:</p> <ul> <li><code class="text-highlight text-highlight--grey">SellingPlanGroup.name</code> - Public-Facing Name of the Selling Plan Group</li> <li><code class="text-highlight text-highlight--grey">SellingPlan.description</code> - Optional, more verbose description of the Selling Plan</li> <li><code class="text-highlight text-highlight--grey">SeillingPlan.option1</code> - Delivery frequency</li> <li><code class="text-highlight text-highlight--grey">SellingPlan.option2</code> - Delivery frequency (optional)</li> <li><code class="text-highlight text-highlight--grey">SellingPlan.option3</code> - Delivery frequency (optional)</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>New metafield definition types have been added</h3> </div> <div class="accordion-content"> <p>Two new metafield definition types have been added:</p> <ul> <li><code class="text-highlight text-highlight--grey">collection_reference</code>: A reference to a collection on the online store.</li> <li><code class="text-highlight text-highlight--grey">list.collection_reference</code>: A list of collection references on the online store.</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Duplicate and Create Inventory Reservations in DraftOrders</h3> </div> <div class="accordion-content"> <p>You now have the ability to do the following on DraftOrders:</p> <ul> <li>Duplicate drafts</li> <li>Creating drafts from orders</li> <li>Execute bulk operations such as add/remove tags and deleting drafts</li> <li>Create drafts with inventory reservations</li> <li>Access previously hidden fields, such as metafields, on drafts and line items</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Custom and Standardized Product Types have been deprecated in favor of Product Category and Type</h3> </div> <div class="accordion-content"> <p>On the <a href="/docs/api/admin-graphql/latest/objects/Product"><code class="text-highlight text-highlight--grey">Product</code></a> object, the <code class="text-highlight text-highlight--grey">standardizedProductType</code> field is deprecated in favor of <code class="text-highlight text-highlight--grey">productCategory</code> and the <code class="text-highlight text-highlight--grey">customProductType</code> field is deprecated in favor of <code class="text-highlight text-highlight--grey">productType</code>.</p> <p><strong>New fields</strong>:</p> <ul> <li>The <code class="text-highlight text-highlight--grey">productCategory</code> field has been added to the <code class="text-highlight text-highlight--grey">Product</code> object.</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Full markets and multi-currency support for Draft Orders</h3> </div> <div class="accordion-content"> <p>We have added full support for markets and multi-currency on <code class="text-highlight text-highlight--grey">DraftOrders</code>. You will now be able to specify the market region that should apply to a <code class="text-highlight text-highlight--grey">DraftOrder</code>, inheriting your configured market settings such as pricing. The selected market region’s attributes will be available on their respective objects.</p> <p>Additionally, we have built out full support for multi-currency in draft orders. You will now be able to query a new set of fields that expose all monetary values relevant to a draft order in multi-currency. As part of these changes, you will now be able to use all draft order payment completion flows in multi-currency.</p> <p>Learn more about these fields in the <a href="/docs/api/admin-graphql/latest/objects/DraftOrder"><code class="text-highlight text-highlight--grey">DraftOrder</code></a>, <a href="/docs/api/admin-graphql/latest/objects/DraftOrderLineItem"><code class="text-highlight text-highlight--grey">DraftOrderLineItem</code></a>, <a href="/docs/api/admin-graphql/latest/objects/DraftOrderAppliedDiscount"><code class="text-highlight text-highlight--grey">DraftOrderAppliedDiscount</code></a>, <a href="/docs/api/admin-graphql/latest/input-objects/DraftOrderInput"><code class="text-highlight text-highlight--grey">DraftOrderInput</code></a>, <a href="/docs/api/admin-graphql/latest/objects/CalculatedDraftOrder"><code class="text-highlight text-highlight--grey">CalculatedDraftOrder</code></a> and <a href="/docs/api/admin-graphql/latest/objects/CalculatedDraftOrderLineItem"><code class="text-highlight text-highlight--grey">CalculatedDraftOrderLineItem</code></a> API reference.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Create B2B DraftOrders via PurchasingEntityInput</h3> </div> <div class="accordion-content"> <p>You can use the <a href="/docs/api/admin-graphql/latest/input-objects/PurchasingEntityInput"><code class="text-highlight text-highlight--grey">PurchasingEntityInput</code></a> input object to create and update B2B <code class="text-highlight text-highlight--grey">DraftOrders</code>. This input object attaches company, location, and contacts to the <code class="text-highlight text-highlight--grey">DraftOrder</code> object. The input object can also be used to create and update a traditional direct-to-consumer (D2C) draft order, requiring only a customer ID.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Metafield support for locations</h3> </div> <div class="accordion-content"> <p>As of API version 2022-10, the <a href="/docs/api/admin-graphql/latest/objects/Location"><code class="text-highlight text-highlight--grey">Location</code></a> object supports metafields. You can use <a href="/docs/api/admin-graphql/latest/objects/Metafield#fields">metafields</a> to store additional information, such as store hours, and then reference the information in Liquid.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Local delivery and pickup for subscriptions</h3> </div> <div class="accordion-content"> <p>You can now manage delivery methods of subscriptions contracts with shipping, local delivery, and pickup.</p> <p>A new <a href="/docs/api/admin-graphql/latest/objects/SubscriptionDraft#field-subscriptiondraft-deliveryoptions"><code class="text-highlight text-highlight--grey">deliveryOptions</code> field on the <code class="text-highlight text-highlight--grey">SubscriptionDraft</code> object</a> provides a <code class="text-highlight text-highlight--grey">SubscriptionDeliveryOptionResultSuccess</code> type for all three delivery methods.</p> <p>To edit or create contracts, <code class="text-highlight text-highlight--grey">localDelivery</code> and <code class="text-highlight text-highlight--grey">pickup</code> fields can be included in the extended <a href="/docs/api/admin-graphql/latest/input-objects/SubscriptionDeliveryMethodInput"><code class="text-highlight text-highlight--grey">SubscriptionDeliveryMethodInput</code></a> input object, which can be used in the <code class="text-highlight text-highlight--grey">SubscriptionDraftInput</code>.</p> <aside class="note"> <h4>Note</h4> <p> The following considerations apply: - The <a href="/docs/api/admin-graphql/2022-04/objects/SubscriptionContract#field-subscriptioncontract-deliverymethod"><code class="text-highlight text-highlight--grey">deliveryMethod</code> field on the <code class="text-highlight text-highlight--grey">SubscriptionContract</code> object</a> returns <code class="text-highlight text-highlight--grey">null</code> for clients using API versions earlier than 2022-10 when the contract is created with local delivery or pickup. If you've been inferring a subscription has only digital products because the delivery method is <code class="text-highlight text-highlight--grey">null</code>, then adopt our new GraphQL changes. - We also recommend taking a look at general delivery terms your app might be using, such as “delivers” or “ships”. Consider replacing them with broader terminology like “fulfills” or “recurs” that cover all modes of delivery.</p> </aside> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>New mutations for marketing activities</h3> </div> <div class="accordion-content"> <p>You can now use the <code class="text-highlight text-highlight--grey">marketingActivityCreateExternal</code> and <code class="text-highlight text-highlight--grey">marketingActivityUpdateExternal</code> mutations to create and manage marketing activities, without the need to implement a marketing activity app extension. These endpoints allow app developers to more easily link their marketing efforts, and accompanying tracking information to Shopify, so merchants can have a more complete picture of their marketing performance.</p> <p><strong>New mutations</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">marketingActivityCreateExternal</code> mutation was added</li> <li><code class="text-highlight text-highlight--grey">marketingActivityUpdateExternal</code> mutation was added</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Subscription billing cycles</h3> </div> <div class="accordion-content"> <p>We have added <a href="/docs/apps/build/purchase-options/subscriptions/billing-cycles">subscription billing cycles</a> to the existing <a href="/docs/api/admin-graphql/latest/objects/SubscriptionContract"><code class="text-highlight text-highlight--grey">SubscriptionsContract</code></a> APIs so that you can make changes to an upcoming order without affecting the base subscription contract.</p> <p>This includes the following changes:</p> <ul> <li>Skipping future orders:</li> <li>Making changes to the line items of an upcoming order, including any additions, quantity changes, or removals</li> <li>Combining the orders of one or more subscriptions contracts in order to save on shipping costs</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>New mutations to manage locations</h3> </div> <div class="accordion-content"> <p>We have added mutations that allow you to manage your <a href="/docs/api/admin-graphql/latest/objects/Location">locations</a> using GraphQL. The mutations enable you to add, edit, deactivate, re-activate, and delete locations.</p> <p><strong>New mutations</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">locationActivate</code> mutation was added</li> <li><code class="text-highlight text-highlight--grey">locationAdd</code> mutation was added</li> <li><code class="text-highlight text-highlight--grey">locationDeactivate</code> mutation was added</li> <li><code class="text-highlight text-highlight--grey">locationEdit</code> mutation was added</li> <li><code class="text-highlight text-highlight--grey">locationDelete</code> mutation was added</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>B2B APIs are now available</h3> </div> <div class="accordion-content"> <p>We have added queries, objects, and mutations to introspect and manage B2B primitives, including <a href="/docs/api/admin-graphql/latest/queries/companies"><code class="text-highlight text-highlight--grey">companies</code></a>, <a href="/docs/api/admin-graphql/latest/queries/company"><code class="text-highlight text-highlight--grey">company</code></a>, <a href="/docs/api/admin-graphql/latest/queries/companyLocations"><code class="text-highlight text-highlight--grey">locations</code></a>, and <a href="/docs/api/admin-graphql/latest/queries/companyContact"><code class="text-highlight text-highlight--grey">company contacts</code></a> with associated <a href="/docs/api/admin-graphql/latest/queries/companyContactRole"><code class="text-highlight text-highlight--grey">roles</code></a>.</p> <p>For a full listing of queries and mutations, refer to the B2B section in the <a href="/docs/api/admin-graphql">GraphQL Admin API reference</a>.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Web Pixel API is now available</h3> </div> <div class="accordion-content"> <p>You can use <a href="/docs/apps/build/marketing-analytics/pixels">web pixel app extensions</a> to connect your marketing and analytics pixels to a merchant's online store for collecting customer events. For more information, refer to the <a href="/docs/api/web-pixels-api">Web Pixel Extension API reference</a>.</p> </div> </div> </div> </div> ## GraphQL Storefront API changes The following are all the changes currently introduced in the 2022-10 version of the GraphQL Storefront API. <div class="accordion-container"> <div class="accordion-controls"> <button class="accordion-control" data-accordion-control-type="expand-all" type="button">Expand all</button> </div> <div class="accordion-content-container"> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Changes to MoneyV2 related fields <span id="changes-to-moneyv2-related-fields" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>The <a href="/docs/api/admin-graphql/2022-07/scalars/Money"><code class="text-highlight text-highlight--grey">Money</code></a> scalar is being removed from the Storefront API. It was previously used for monetary fields that do not have a V2 suffix (<code class="text-highlight text-highlight--grey"><name>: Money</code>). As a result, the following changes are being made: - Non-V2 fields now use <a href="/docs/api/admin-graphql/2022-07/objects/MoneyV2"><code class="text-highlight text-highlight--grey">MoneyV2</code></a> objects for their type (<code class="text-highlight text-highlight--grey"><name>: MoneyV2</code>). - Monetary fields that do have the <code class="text-highlight text-highlight--grey">V2</code> suffix (<code class="text-highlight text-highlight--grey"><name>V2: MoneyV2</code>) are being deprecated in favor of the <code class="text-highlight text-highlight--grey"><name>: MoneyV2</code> equivalent. These fields will be removed in subsequent releases.</p> <p>The Money V2 changes help to improve the consistency of the GraphQL Admin API and make it clearer to use these fields.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>New field added to cart buyer identity objects</h3> </div> <div class="accordion-content"> <p>You can now use the Storefront API to attach shipping address preferences to the carts of non-logged-in customers and the fetch cart delivery groups.</p> <p><strong>New fields</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">deliveryAddressPreferences</code> field was added to the <code class="text-highlight text-highlight--grey">CartBuyerIdentity</code> and <code class="text-highlight text-highlight--grey">CartBuyerIdentityInput</code> objects.</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>New references connection on metafields</h3> </div> <div class="accordion-content"> <p>You can now access a <code class="text-highlight text-highlight--grey">references</code> connection on a <code class="text-highlight text-highlight--grey">metafield</code>. Use this connection to resolve metafield values of a list reference type to their underlying resource. This new connection is paginated and works similarly to the existing <code class="text-highlight text-highlight--grey">reference</code> field, which is used for single references.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>New metafield definition types have been added</h3> </div> <div class="accordion-content"> <p>Two new metafield definition types have been added:</p> <ul> <li><code class="text-highlight text-highlight--grey">collection_reference</code>: A reference to a collection on the online store.</li> <li><code class="text-highlight text-highlight--grey">list.collection_reference</code>: A list of collection references on the online store.</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Access to a shop's brand settings</h3> </div> <div class="accordion-content"> <p>You can now query a shop's brand settings and assets via the new <a href="/docs/api/storefront/latest/objects/Brand"><code class="text-highlight text-highlight--grey">Shop.brand</code></a> field.</p> <p><strong>New fields</strong>:</p> <ul> <li>The <code class="text-highlight text-highlight--grey">brand</code> field has been added to <code class="text-highlight text-highlight--grey">Shop</code>.</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Querying for checkout profiles</h3> </div> <div class="accordion-content"> <p>You can now query for a <a href="/docs/api/admin-graphql/latest/objects/CheckoutProfile"><code class="text-highlight text-highlight--grey">CheckoutProfile</code></a> or multiple <code class="text-highlight text-highlight--grey">CheckoutProfiles</code>, which provide insights about the profiles on a shop.</p> <p><strong>New queries</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">checkoutProfile</code> query was added</li> <li><code class="text-highlight text-highlight--grey">checkoutProfiles</code> query was added</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>New deliveryAddressPreferences field added to cart buyer identity objects</h3> </div> <div class="accordion-content"> <p>You can now use the Storefront API to attach shipping address preferences to the carts of non-logged-in customers and the fetch cart delivery groups. To attach shipping address preferences, the <code class="text-highlight text-highlight--grey">deliveryAddressPreferences</code> field has been added to the Storefront API's <a href="/docs/api/storefront/latest/objects/CartBuyerIdentity"><code class="text-highlight text-highlight--grey">CartBuyerIdentity</code></a> and <a href="/docs/api/storefront/latest/input-objects/CartBuyerIdentityInput"><code class="text-highlight text-highlight--grey">CartBuyerIdentityInput</code></a> objects.</p> <p><strong>New fields</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">deliveryAddressPreferences</code> field was added to <code class="text-highlight text-highlight--grey">CartBuyerIdentity</code> object</li> <li><code class="text-highlight text-highlight--grey">deliveryAddressPreferences</code> field was added to <code class="text-highlight text-highlight--grey">CartBuyerIdentityInput</code> input object</li> </ul> </div> </div> </div> </div> ## REST Admin API changes The following are all the changes currently introduced in the 2022-10 version of the REST Admin API. <div class="accordion-container"> <div class="accordion-controls"> <button class="accordion-control" data-accordion-control-type="expand-all" type="button">Expand all</button> </div> <div class="accordion-content-container"> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Protected customer data requirements <span id="protected-customer-data-rest-admin-requirements" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>As of version 2022-10, published, public apps that use the REST Admin API must meet the <a href="/docs/apps/launch/protected-customer-data">protected customer data requirements</a>.</p> <p>The protected customer data requirements focus on data minimization, transparency, and security so that you can better support merchants' path towards compliance with privacy and data protection rules.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>The Fulfillment cancel endpoint on the Order API has been deprecated <span id="cancel-endpoint-fulfillment-api" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>The <code class="text-highlight text-highlight--grey">Fulfillment</code> <code class="text-highlight text-highlight--grey">cancel</code> endpoint on the REST Order API is now deprecated: <code class="text-highlight text-highlight--grey">/orders/{order_id}/fulfillments/{fulfillment_id}/cancel.json</code>. Use <code class="text-highlight text-highlight--grey">/fulfillment/{fulfillment_id}/cancel.json</code> on the <code class="text-highlight text-highlight--grey">Fulfillment</code> endpoint instead.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Deprecated customer-related Order properties <span id="deprecate-customer-related-order-props" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>The following <code class="text-highlight text-highlight--grey">Customer</code> object properties on the REST Admin API's <a href="/docs/api/admin-rest/2021-10/resources/order#top"><code class="text-highlight text-highlight--grey">Order</code></a> resource have been deprecated:</p> <ul> <li><code class="text-highlight text-highlight--grey">last_order_id</code></li> <li><code class="text-highlight text-highlight--grey">last_order_name</code></li> <li><code class="text-highlight text-highlight--grey">orders_count</code></li> <li><code class="text-highlight text-highlight--grey">total_spent</code></li> </ul> <p>These properties will still be available in the <a href="/docs/api/admin-rest/2021-10/resources/customer#top"><code class="text-highlight text-highlight--grey">Customer</code></a> resource.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Deprecated Order and LineItem properties <span id="order-and-lineitem-property-deprecations-rest" class="heading-flag breaking"></h3> </div> <div class="accordion-content"> <p>We introduced a breaking change to the <code class="text-highlight text-highlight--grey">LineItem</code> resource. The <code class="text-highlight text-highlight--grey">fulfillment_service</code> property is no longer supported in the REST Admin API. Fulfillment services will all be opted into SKU sharing in 2023-04. Consider using the <a href="/docs/api/admin-rest/latest/resources/fulfillmentorder"><code class="text-highlight text-highlight--grey">assigned_location</code> property on the <code class="text-highlight text-highlight--grey">FulfillmentOrder</code></a> instead.</p> <p>When a fulfillment service app sets <code class="text-highlight text-highlight--grey">permits_sku_sharing</code> to <code class="text-highlight text-highlight--grey">true</code>, some existing behaviour will break. When a product variant's <code class="text-highlight text-highlight--grey">fulfillmentService</code> parameter is set to <code class="text-highlight text-highlight--grey">manual</code>, it no longer means that the variant is stocked only at a merchant-managed location. Therefore, apps that use the <code class="text-highlight text-highlight--grey">fulfillmentService</code> parameter in this way should instead use the <code class="text-highlight text-highlight--grey">location</code> parameter on the <code class="text-highlight text-highlight--grey">FulfillmentOrder</code> resource to determine which location or fulfillment service fulfills for a given line item.</p> <p>The following other line item object properties on the <code class="text-highlight text-highlight--grey">Order</code> resource are deprecated:</p> <ul> <li><code class="text-highlight text-highlight--grey">origin_location</code></li> <li><code class="text-highlight text-highlight--grey">destination_location</code></li> </ul> <p>The following object property on the REST Admin API's <code class="text-highlight text-highlight--grey">Order</code> resource is deprecated:</p> <ul> <li><code class="text-highlight text-highlight--grey">total_price_usd</code></li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Cursor-based pagination supported for retrieving locations <span id="cursor-based-pagination-retrieving-locations"></h3> </div> <div class="accordion-content"> <p>As of API version 2022-10, <a href="/docs/api/admin-rest/latest/resources/location#get-locations">GET requests for a list of locations</a> are paginated. By default, you can display up to 50 locations on each page.</p> <p>For more information about REST endpoints that support cursor-based pagination, refer to <a href="/docs/api/usage/pagination-rest">Make paginated requests to the REST Admin API</a>.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Disable transactional SMS <span id="disabled-transactional-sms-rest-admin"></h3> </div> <div class="accordion-content"> <p>Due to carrier constraints, Shopify can no longer send customized SMS messages. This change risks a degraded experience for merchants using the feature. You can disable transactional SMS to mitigate a negative impact on the merchant experience. By disabling transactional SMS sent by Shopify, you can enable third parties to take over this job and provide customizable SMS.</p> <p><strong>New properties</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">transactional_sms_disabled</code> property was added to the <a href="/docs/api/admin-rest/latest/resources/shop"><code class="text-highlight text-highlight--grey">Shop</code></a> object</li> </ul> <p><strong>New webhook subscription topics</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">transactional_sms_disabled</code> property was added to the <a href="/docs/api/admin-rest/latest/resources/webhook"><code class="text-highlight text-highlight--grey">shop/update</code></a> webhook topic, which is now triggered when the <code class="text-highlight text-highlight--grey">transactional_sms_disabled</code> state of a shop changes.</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>Order IDs for the Order Risk resource <span id="order-id-order-risk-resource"></h3> </div> <div class="accordion-content"> <p>As of API version 2022-10, you can't create or update <a href="/docs/api/admin-rest/latest/resources/order-risk">order risks</a> without specifying an order ID.</p> <p>Previously, you could create order risks by specifying the <code class="text-highlight text-highlight--grey">order_id</code> property as <code class="text-highlight text-highlight--grey">null</code>. This enabled you to create order risks prior to creating the order and block checkout. However, this functionality isn't used by apps. As a result, the update to specify an order ID isn't a breaking change.</p> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>New Merchant of Record application field on Order object</h3> </div> <div class="accordion-content"> <p>You can now access information on the application acting as the Merchant of Record on the Order object. This information is only populated for supported applications.</p> <p><strong>New fields</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">merchant_of_record_app_id</code> field has been added to the Order object.</li> </ul> </div> </div> <div class="accordion-item"> <div class="accordion-link"> <div class="chevron-up"></div> <div class="chevron-down"></div> <h3>New Marketing SMS Consent property on Shop object</h3> </div> <div class="accordion-content"> <p>A new <code class="text-highlight text-highlight--grey">marketing_sms_consent_enabled_at_checkout</code> property has been added to the <a href="/docs/api/admin-rest/latest/resources/shop"><code class="text-highlight text-highlight--grey">Shop</code></a> object. The property is also present on the <a href="https://shopify.dev/api/admin-rest/latest/resources/webhook"><code class="text-highlight text-highlight--grey">shop/update</code></a> webhook, which now triggers when the <code class="text-highlight text-highlight--grey">marketing_sms_consent_enabled_at_checkout</code> state of a shop changes.</p> <p><strong>New property</strong>:</p> <ul> <li><code class="text-highlight text-highlight--grey">marketing_sms_consent_enabled_at_checkout</code> property was added to the <code class="text-highlight text-highlight--grey">Shop</code> resource</li> </ul> </div> </div> </div> </div>