> 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.
The API version release date and the date that the version is no longer supported
Release date Date version is no longer supported
October 1, 2024 October 1, 2025
## Highlights The 2024-10 version of Shopify's APIs include the following highlights: - **[Abandoned checkouts](/docs/api/admin-graphql/latest/objects/AbandonedCheckout)**: We've added new types that are associated with the `AbandonedCheckout` object. This object replaces the [`Abandoned checkouts`](/docs/api/admin-rest/latest/resources/abandoned-checkouts) resource in the REST Admin API. - **[`app_scopes/update` webhook](/docs/api/webhooks/latest?reference=toml#list-of-topics-app/scopes_update)**: Apps can now subscribe to the `app/scopes_update` webhook topic. This webhook is triggered when the granted access scopes for the installed app on a shop have been modified. - **[Cart warnings](/docs/storefronts/headless/building-with-the-storefront-api/cart/cart-warnings)**: Storefront API cart mutations now include warnings to show automatic changes that occurred while executing a mutation. - **[Fulfillment constraints](/docs/apps/build/orders-fulfillment/order-routing-apps/build-fulfillment-constraints-function)**: You can now associate a fulfillment constraint function to one or multiple delivery methods, such as `SHIPPING` and `PICKUP`. The function will only run under the context of the specified delivery methods. - **[Gift cards](/docs/api/admin-graphql/2024-10/queries/giftCard)**: You can now use new gift cards and gift card transaction types in all apps and shops, with no additional approval scopes or flags required. - **[Metafield capabilities](/docs/apps/build/custom-data/metafields/use-metafield-capabilities)**: Create an automated collection based on metafield values for a given definition. Then, filter products based on metafield values for that definition. - **[`Products` query attributes](/docs/api/admin-graphql/latest/queries/products#argument-query)**: We've added new attributes to the `products` query, which include `publication_ids`, `variant_id`, and `variant_title`. - **[`StaffMember` improvements](/docs/api/admin-graphql/latest/objects/StaffMember)**: We've made several improvements to the `StaffMember` object. These improvements enable apps using the REST Admin API's [`User`](/docs/api/admin-rest/latest/resources/user) resource to migrate to using the GraphQL Admin API's `StaffMember` object. - **[Subscription contracts](/docs/api/customer/2024-10/objects/SubscriptionContract)**: New types for subscription contracts are now available in the Customer Account API. ## 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. ### Cart warnings Inventory errors about stock levels are no longer included in the `userErrors` of cart mutations in the Storefront API. Inventory errors are now available in the `warnings` return field, and contain the following explicit values: - `MERCHANDISE_NOT_ENOUGH_STOCK` - `MERCHANDISE_OUT_OF_STOCK` Warnings are available on all cart mutations to show automatic changes that occurred while executing the mutation. You can use warnings to manage items in your cart or display information to a buyer. For example, you can remove out-of-stock lines from a cart by using the [`target`](/docs/api/storefront/2024-10/mutations/cartLinesRemove#field-cartlinesremovepayload-warnings) field included in the `warning` as the input to the `cartLinesRemove` mutation. [Learn more about cart warnings](/docs/storefronts/headless/building-with-the-storefront-api/cart/cart-warnings). ### Changed enum value for `OrderDisplayFulfillmentStatus` The [`OrderDisplayFulfillmentStatus`](/docs/api/admin-graphql/2024-10/enums/OrderDisplayFulfillmentStatus) enum now returns a `REQUEST_DECLINED` value for an order that has had its fulfillment request rejected by a third-party fulfillment service. In API versions prior to 2024-10, orders in the request rejected state return an `UNFULFILLED` status. ### Event query enhancements We've made the [`CommentEvent.subject`](/docs/api/admin-graphql/2024-10/objects/CommentEvent#field-subject) field nullable. `null` is returned when the subject's underlying data has been deleted. You must update your code to handle cases where `subject` might return `null`. For example, revise existing logic that assumes the field will always contain data, and implement checks or fallback mechanisms to manage situations where the `subject` data has been deleted. We've also deprecated the [`deletionEvents`](/docs/api/admin-graphql/2024-10/queries/deletionEvents) query in favour of events that indicate deletion. Update your code to remove any reliance on `deletionEvents`, and use the new event structure. To support querying events, we've added the following types:
Types for events
Name Type Change
action field Added to Event interface
event Query Added
events Query Added
eventsCount Query Added
events Connection Added to Article, Blog, Comment, Page, Product, and ProductVariant objects
EventSubjectType Enum Added
arguments field Added to BasicEvent object
subject field Added to BasicEvent object
subjectID field Added to BasicEvent object
subjectType field Added to BasicEvent object
### Fulfillment by Amazon As of API version 2024-10, the [`shippingMethods`](/docs/api/admin-graphql/2024-10/objects/FulfillmentService#field-shippingmethods) field on the `FulfillmentService` object has been deprecated. The [`shippingMethods`](/docs/api/admin-graphql/2024-10/mutations/fulfillmentOrderSubmitFulfillmentRequest#argument-shippingmethod) argument on the `fulfillmentOrderSubmitFulfillmentRequest` mutation has also been deprecated. The shipping method associated with the fulfillment service provider applied only to the **Fulfill By Amazon** fulfillment service. The Fulfillment by Amazon feature isn't supported as of March 30, 2023. To continue using Amazon fulfillment, merchants need to set up a [multi-channel fulfillment solution](https://help.shopify.com/manual/shipping/fulfillment-services/amazon#activate-fulfillment-by-amazon), as recommended by Amazon. ### Fulfillment holds As of API version 2024-10, apps can't [release fulfillment holds](/docs/api/admin-graphql/2024-10/mutations/fulfillmentOrderReleaseHold) unless they have write access to them. You need to request the following access scopes for your app: - `write_merchant_managed_fulfillment_orders`: Allows your app to release holds on fulfillment orders assigned to a merchant-managed location - `write_third_party_fulfillment_orders`: Allows your app to release holds on fulfillment orders assigned to a third-party location - `write_marketplace_fulfillment_orders`: Allows your app to release holds on fulfillment orders which belong to one of your marketplace's orders If your app doesn't have sufficient access scopes to release a hold, then a user error with the [`INVALID_ACCESS`](/docs/api/admin-graphql/2024-10/enums/FulfillmentOrderReleaseHoldUserErrorCode#value-fulfillmentordernotfound) code is returned and the hold isn't released. We've deprecated the [`fulfillmentOrdersReleaseHolds`](/docs/api/admin-graphql/2024-10/mutations/fulfillmentOrdersReleaseHolds) mutation. Use the [`fulfillmentOrderReleaseHold`](/docs/api/admin-graphql/latest/mutations/fulfillmentOrderReleaseHold) mutation instead. We've also deprecated the `GREATER_THAN_ZERO` and `INVALID_LINE_ITEM_QUANTITY` [error codes](/docs/api/admin-graphql/2024-10/enums/FulfillmentOrderReleaseHoldUserErrorCode) on the `fulfillmentOrderReleaseHold` mutation. We've also added the [`heldByRequestingApp`](/docs/api/admin-graphql/2024-10/objects/FulfillmentHold#field-heldbyrequestingapp) field to the `FulfillmentHold` object. If you have the `read_apps` scope enabled on your app, then you'll only be able to read the [`heldBy`](/docs/api/admin-graphql/2024-10/objects/FulfillmentHold#field-heldby) field on the `FulfillmentHold` object. Use the `heldByRequestingApp` field instead if you need to confirm whether your app created the fulfillment hold. Additionally, the `fulfillmentOrderHold` mutation now returns the fulfillment hold that was created in a new [`fulfillmentHold` return field](/docs/api/admin-graphql/2024-10/mutations/fulfillmentOrderHold#field-fulfillmentorderholdpayload-fulfillmenthold). ### Gift cards We've improved the [`GiftCard`](/docs/api/admin-graphql/2024-10/objects/GiftCard) types and have introduced several new types for working with gift cards. The gift card types are now open to all apps and shops, with no additional approval scopes or flags required. **Developer action required** - The [`giftCardDisable`](/docs/api/admin-graphql/2024-07/mutations/giftCardDisable) mutation has been removed. Use [`giftCardDeactivate`](/docs/api/admin-graphql/2024-10/mutations/giftCardDeactivate) instead. - The [`disabledAt`](/docs/api/admin-graphql/2024-07/objects/GiftCard#field-disabledat) field on the `GiftCard` object has been removed. Use the [`deactivatedAt`](/docs/api/admin-graphql/2024-10/objects/GiftCard#field-deactivatedat) field instead. The following types for gift cards are now available:
Available types for gift cards
Name Type Change
CUSTOMER_NOT_FOUND Value Added to GiftCardErrorCode enum
deactivatedAt Field Added to GiftCard object
GiftCardCreateInput Input object Added
giftCardCredit Mutation Added
GiftCardCreditInput Input object Added
GiftCardCreditTransaction Object Added
giftCardDebit Mutation Added
GiftCardDebitInput Input object Added
GiftCardDebitTransaction Object Added
giftCardDeactivate Mutation Added
GiftCardRecipient Object Added
GiftCardRecipientInput Input object Added
giftCardSendNotificationToCustomer Mutation Added
giftCardSendNotificationToRecipient Mutation Added
GiftCardTransaction Interface Added
GiftCardTransactionUserError Object Added
recipientAttributes Field Added to GiftCard object
recipientAttributes Field Added to GiftCardCreateInput input object
recipientAttributes Field Added to GiftCardUpdateInput input object
RECIPIENT_NOT_FOUND Value Added to GiftCardErrorCode enum
transactions Connection Added to GiftCard object
updatedAt Field Added to GiftCard object
### Improvements to the `StaffMember` type `Shop.staffMembers` has been deprecated. Use the [`staffMembers`](/docs/api/admin-graphql/2024-10/queries/staffMembers) query instead. ### Location error codes We've removed the `HAS_OPEN_TRANSFERS_ERROR` and `FAILED_TO_RELOCATE_OPEN_TRANSFERS` error codes from the [`LocationDeactivateUserErrorCode`](/docs/api/admin-graphql/2024-10/enums/LocationDeactivateUserErrorCode) enum. If you're explicitly checking for either of these error codes in your app, then you should remove references to them. ### Location resource If your app retrieves a [`Location`](/docs/api/admin-rest/2024-10/resources/location) resource using the REST Admin API, then you need to request the `read_locations` access scope. If your app reads a [`Location`](/docs/api/admin-graphql/2024-10/objects/Location) resource without the [`read_locations` access scope](/docs/api/usage/access-scopes), then a [403 Forbidden error](/docs/api/admin-rest#status_and_error_codes) is returned. ### Metafield definitions We've deprecated the `definitions.visibleToStorefrontApi` argument on the [`standardMetafieldDefinitionEnable`](/docs/api/admin-graphql/unstable/mutations/standardMetafieldDefinitionsEnable#argument-definitions) and [`standardMetafieldDefinitionsEnable`](/docs/api/admin-graphql/unstable/mutations/standardMetafieldDefinitionsEnable#argument-definitions) mutations. Use the `definitions.access` argument on these mutations instead. > Note: > The `definitions.access` argument allows you to specify more granular [permissions](/docs/apps/build/custom-data/permissions) when enabling a [standard metafield definition template](/docs/api/admin-graphql/2024-10/objects/StandardMetafieldDefinitionTemplate). ### Online store We've deprecated the [`OnlineStorePage`](/docs/api/admin-graphql/2024-10/objects/OnlineStorePage), [`OnlineStoreArticle`](/docs/api/admin-graphql/2024-10/objects/OnlineStoreArticle), and [`OnlineStoreBlog`](/docs/api/admin-graphql/2024-10/objects/OnlineStoreBlog) objects. Use the [`Page`](/docs/api/admin-graphql/2024-10/objects/Page), [`Article`](/docs/api/admin-graphql/2024-10/objects/Article), and [`Blog`](/docs/api/admin-graphql/2024-10/objects/Blog) objects instead. You can now read and modify pages, articles, blogs, and comments. The following types are now available:
Types for the online store
Name Type Change
pageCreateInput Input object Added
pageUpdateInput Input object Added
pageCreate Mutation Added
pageUpdate Mutation Added
pageDelete Mutation Added
page Query Added
pages Query Added
pagesCount Query Added
PAGE Value Added to TranslatableResourceType enum
ArticleAuthor Object Added
ArticleBlogInput Input object Added
ArticleCreateInput Input object Added
ArticleImageInput Input object Added
ArticleUpdateInput Input object Added
articleCreate Mutation Added
articleUpdate Mutation Added
articleDelete Mutation Added
article Query Added
articles Query Added
ARTICLE Value Added to TranslatableResourceType enum
AuthorInput Input object Added
BlogCreateInput Input object Added
BlogUpdateInput Input object Added
BlogFeed Object Added
blogCreate Mutation Added
blogUpdate Mutation Added
blogDelete Mutation Added
blog Query Added
blogs Query Added
blogsCount Query Added
BLOG Value Added to TranslatableResourceType enum
Comment Object Added
CommentAuthor Object Added
commentApprove Mutation Added
commentSpam Mutation Added
commentNotSpam Mutation Added
commentDelete Mutation Added
comment Query Added
comments Query Added
CommentStatus Enum Added
CommentPolicy Enum Added
MENU Value Added to TranslatableResourceType enum
### Order line items We've removed the `lineItemsMutable` connection on the `Order` object. Use the [`lineItems`](/docs/api/admin-graphql/2024-10/objects/Order#connection-lineitems) connection on the `Order` object instead. ### Order management apps The `write_third_party_fulfillment_orders` access scope no longer allows [order management apps](/docs/apps/build/orders-fulfillment/order-management-apps) to fulfill fulfillment orders assigned to locations that are owned by other fulfillment service apps. Order management apps will still be able to access and manage these orders, but fulfillment creation will be prohibited. The `write_assigned_fulfillment_orders` and `write_merchant_managed_fulfillment_orders` access scopes remain unchanged. Fulfillment service apps can still fulfill orders that are assigned to them, as long as they're granted the `write_assigned_fulfillment_orders` access scope. Fulfillment orders that are assigned to merchant-managed locations are still fulfillable by order management apps, as long as they're granted the `write_merchant_managed_fulfillment_orders` access scope. Apps can confirm whether fulfillment creation is possible by querying supported actions using the [GraphQL Admin API](/docs/api/admin-graphql/2024-10/objects/FulfillmentOrder#field-supportedactions). If the fulfillment order is assigned to a merchant-managed location or to the fulfillment service performing the query and it's in a fulfillable state, then the `CREATE_FULFILLMENT` action is returned as a possible option. ### Pickup locations You can now use the [`destination`](/docs/api/admin-graphql/2024-10/objects/FulfillmentOrder#field-destination) field on the `fulfillmentOrder` object to retrieve the pickup location for a fulfillment order. As of API version 2024-10, the `destination` field returns a [`FulfillmentOrderDestination`](/docs/api/admin-graphql/2024-10/objects/FulfillmentOrderDestination) object instead of `null` for fulfillment orders that don't have an associated shipping address. If the fulfillment order doesn't have a shipping address, then the address-related fields within the `FulfillmentOrderDestination` object are set to `null`. ### PriceRule types removed As of API version 2024-10, we've removed `PriceRule` types from the GraphQL Admin API. The associated queries and mutations have been deprecated since API version 2023-03. Use the [`discountNode`](/docs/api/admin-graphql/2024-10/queries/discountNode) query instead. The following types have been removed: - `PriceRuleUserError` object - `PriceRuleCustomerSelectionInput` input object - `PriceRuleDiscountCodeInput` input object - `PriceRuleEntitlementToPrerequisiteQuantityRatioInput` input object - `PriceRuleInput` input object - `PriceRuleItemEntitlementsInput` input object - `PriceRuleItemPrerequisitesInput` input object - `PriceRuleMoneyRangeInput` input object - `PriceRulePrerequisiteToEntitlementQuantityRatioInput` input object - `PriceRuleQuantityRangeInput` input object - `PriceRuleShippingEntitlementsInput` input object - `PriceRuleValidityPeriodInput` input object - `PriceRuleValueInput` input object - `priceRuleSavedSearches` query - `PriceRuleActivate` mutation - `PriceRuleCreate` mutation - `PriceRuleDeactivate` mutation - `PriceRuleDelete` mutation - `PriceRuleDiscountCodeCreate` mutation - `PriceRuleDiscountCodeUpdate` mutation - `PriceRuleUpdate` mutation - `priceRule` field on the `QueryRoot` object - `priceRules` connection on the `QueryRoot` object - `priceRules` connection on the `Shop` object - `priceRuleSavedSearches` connection on the `Shop` object ### Product duplications The [`productDuplicateAsyncV2`](/docs/api/admin-graphql/2024-10/mutations/productDuplicateAsyncV2) mutation has been removed. We've added the [`synchronous`](/docs/api/admin-graphql/2024-10/mutations/productDuplicate#argument-synchronous) argument to the `productDuplicate` mutation, allowing you to choose whether the product duplication should be processed synchronously or asynchronously. - **Asynchronous duplication:** By setting the `synchronous` field to `false` in the `productDuplicate` mutation, the operation operates asynchronously, and returns a [`ProductDuplicateOperation`](/docs/api/admin-graphql/2024-10/objects/ProductDuplicateOperation) object. - **Operation tracking:** You can track the status of the asynchronous duplication by querying the operation ID through the [`productOperation`](/docs/api/admin-graphql/2024-10/queries/productOperation#argument-id) query. ### Product input We've removed the `input` argument on the [`productCreate`](/docs/api/admin-graphql/2024-10/mutations/productCreate) and [`productUpdate`](/docs/api/admin-graphql/2024-10/mutations/productUpdate) mutations. Use the following `product` arguments instead: - [`ProductCreateInput`](/docs/api/admin-graphql/2024-10/input-objects/ProductCreateInput) on the `productCreate` mutation - [`ProductUpdateInput`](/docs/api/admin-graphql/2024-10/input-objects/ProductUpdateInput) on the `productUpdate` mutation ### Product media We've made changes to how you work with product media by replacing the current media ID inputs with file inputs and expanding media capabilities: - The `mediaIds` field on the [`ProductSetInput`](/docs/api/admin-graphql/2024-10/input-objects/ProductSetInput) input object has been removed. Use the [`files`](/docs/api/admin-graphql/2024-10/input-objects/ProductSetInput#field-files) field instead to associate files to a product. - The `mediaId` field on the [`ProductVariantSetInput`](/docs/api/admin-graphql/2024-10/input-objects/ProductVariantSetInput) input object has been removed. Use the [`file`](/docs/api/admin-graphql/2024-10/input-objects/ProductVariantSetInput#field-file) field instead to associate a file with the product variant. - The [`FileSetInput`](/docs/api/admin-graphql/2024-10/input-objects/FileSetInput) input object is now available for working with existing media and creating new files. This input object is a derivative of the [`FileCreateInput`](/docs/api/admin-graphql/2024-10/input-objects/FileCreateInput) input object, with an added `id` field. ### Product mutations We've removed the following deprecated product mutations from the GraphQL Admin API: - [`productAppendImages`](/docs/api/admin-graphql/2024-07/mutations/productAppendImages) is removed. Use the [`productCreateMedia`](/docs/api/admin-graphql/2024-10/mutations/productCreateMedia) mutation instead. - [`productDeleteImages`](/docs/api/admin-graphql/2024-07/mutations/productDeleteImages) is removed. Use the [`productDeleteMedia`](/docs/api/admin-graphql/2024-10/mutations/productDeleteMedia) mutation instead. - [`productImageUpdate`](/docs/api/admin-graphql/2024-07/mutations/productImageUpdate) is removed. Use the [`productDeleteMedia`](/docs/api/admin-graphql/2024-10/mutations/productDeleteMedia). Use the [`productUpdateMedia`](/docs/api/admin-graphql/2024-10/mutations/productUpdateMedia) mutation instead. - [`productReorderImages`](/docs/api/admin-graphql/2024-07/mutations/productReorderImages) is removed. Use the [`productReorderMedia`](/docs/api/admin-graphql/2024-10/mutations/productReorderMedia) mutation instead. ### Product variant mutations We've deprecated the following singular product variant mutations in favor of their equivalent bulk versions: - [`productVariantCreate`](/docs/api/admin-graphql/2024-07/mutations/productvariantcreate) is deprecated. Use the [`productVariantsBulkCreate`](/docs/api/admin-graphql/2024-10/mutations/productvariantsbulkcreate) mutation instead. - [`productVariantUpdate`](/docs/api/admin-graphql/2024-07/mutations/productvariantupdate) is deprecated. Use the [`productVariantsBulkUpdate`](/docs/api/admin-graphql/2024-10/mutations/productvariantsbulkupdate) mutation instead. - [`productVariantDelete`](/docs/api/admin-graphql/2024-07/mutations/productvariantdelete) is deprecated. Use the [`productVariantsBulkDelete`](/docs/api/admin-graphql/2024-10/mutations/productvariantsbulkdelete) mutation instead. ### ProductImage value removed The `PRODUCTIMAGE` value has been removed from the [`MetafieldOwnerType`](/docs/api/admin-graphql/2024-10/enums/MetafieldOwnerType) enum. Use `MEDIA_IMAGE` instead. ### ProductInput fields removed We've removed the following deprecated `ProductInput` fields from the GraphQL Admin API: - `bodyHTML` is removed. Use the [`descriptionHtml`](/docs/api/admin-graphql/2024-10/input-objects/ProductInput#field-descriptionhtml) field instead. - `privateMetaFields` is removed. Use the [`productOptions`](/docs/api/admin-graphql/2024-10/input-objects/ProductInput#field-productoptions) field instead. - `standardizedProductType` is removed. Use the [`category`](/docs/api/admin-graphql/2024-10/input-objects/ProductInput#field-category) field instead. - `productCategory` is removed. Use the [`category`](/docs/api/admin-graphql/2024-10/input-objects/ProductInput#field-category) field instead. - `customProductType` is removed. Use the [`category`](/docs/api/admin-graphql/2024-10/input-objects/ProductInput#field-category) field instead. ### Removed fields on `ShopFeatures` object The following deprecated fields on the [`ShopFeatures`](/docs/api/admin-graphql/2024-10/objects/ShopFeatures) object have been removed: - `avalaraAvatax` - `branding` - `captcha` - `dynamicRemarketing` - `harmonizedSystemCode` - `liveView` - `onboardingVisual` - `reports` - `showMetrics` Instead of the `branding` field, use [`Shop.plan.shopifyPlus`](/docs/api/admin-graphql/2024-10/objects/Shop#field-plan) instead. ### Removed `V2` on Fulfillment mutations We've deprecated the [`fulfillmentCreateV2`](/docs/api/admin-graphql/2024-10/mutations/fulfillmentCreateV2) and [`fulfillmentTrackingInfoUpdateV2`](/docs/api/admin-graphql/2024-10/mutations/fulfillmentTrackingInfoUpdateV2) mutations. Use the [`fulfillmentCreate`](/docs/api/admin-graphql/2024-10/mutations/fulfillmentCreate) and [`fulfillmentTrackingInfoUpdate`](/docs/api/admin-graphql/2024-10/mutations/fulfillmentTrackingInfoUpdate) mutations instead. The behavior of the new mutations remains the same as the previous ones. The only change is the removal of `V2` to ensure consistent naming across all mutations. ### Reverse fulfillment orders The [`reverseDeliveryDispose`](/docs/api/admin-graphql/2024-07/mutations/reverseDeliveryDispose) mutation is deprecated. Use the [`reverseFulfillmentOrderDispose`](/docs/api/admin-graphql/2024-10/mutations/reverseFulfillmentOrderDispose) mutation instead. The [`fulfillmentLineItem`](/docs/api/admin-graphql/2024-10/objects/ReverseFulfillmentOrderLineItem#field-fulfillmentlineitem) field on the `ReverseFulfillmentOrderLineItem` object is now nullable. A `ReverseFulfillmentOrderLineItem` object won't always be associated with a `FulfillmentLineItem` object. The non-null `fulfillmentLineItem` field on API versions prior to 2024-10 returns an error when the fulfillment line item doesn't exist. [Learn more about managing reverse fulfillment orders](/docs/apps/build/orders-fulfillment/returns-apps/manage-reverse-fulfillment-orders). ### Setting available inventory quantity We've deprecated the ability to set the available quantity on the [`inventoryActivate`](/docs/api/admin-graphql/2024-10/mutations/inventoryActivate) mutation for inventory items that are already in an active state. Use the [`inventorySetQuantities`](/docs/api/admin-graphql/2024-10/mutations/inventorySetQuantities) mutation instead. We've also added the [`INVALID_QUANTITY_TOO_LOW`](/docs/api/admin-graphql/2024-10/enums/InventorySetQuantitiesUserErrorCode#value-invalidquantitytoolow) value to the `InventorySetQuantitiesUserErrorCode` enum. The error code is returned if you run the `inventorySetQuantities` mutation and a quantity is less than negative one billion. ## GraphQL Admin API changes The following changes are introduced in the 2024-10 version of the GraphQL Admin API.

We've added new types that are associated with the AbandonedCheckout object. This object replaces the Abandoned checkouts resource in the REST Admin API.

The following new types are available:

New types related to abandoned checkouts
Name Type Change
UnitPriceMeasurement Object Added
abandonedCheckouts Query Added
abandonedCheckoutsCount Query Added
totalWeight Field Added to AbandonedCheckout object
referringSite Field Added to AbandonedCheckout object
landingSite Field Added to AbandonedCheckout object
gateway Field Added to AbandonedCheckout object
currencyCode Field Added to AbandonedCheckout object
presentmentCurrencyCode Field Added to AbandonedCheckout object
token Field Added to AbandonedCheckout object
cartToken Field Added to AbandonedCheckout object
customAttributes Field Added to AbandonedCheckout object
note Field Added to AbandonedCheckout object
totalLineItemsPriceSet Field Added to AbandonedCheckout object
subtotalPriceSet Field Added to AbandonedCheckout object
discountCodes Field Added to AbandonedCheckout object
totalDiscountSet Field Added to AbandonedCheckout object
totalTaxSet Field Added to AbandonedCheckout object
totalDutiesSet Field Added to AbandonedCheckout object
taxLines Field Added to AbandonedCheckout object
taxesIncluded Field Added to AbandonedCheckout object
closedAt Field Added to AbandonedCheckout object
completedAt Field Added to AbandonedCheckout object
updatedAt Field Added to AbandonedCheckout object
createdAt Field Added to AbandonedCheckout object
shippingLines Field Added to AbandonedCheckout object
billingAddress Field Added to AbandonedCheckout object
shippingAddress Field Added to AbandonedCheckout object
customer Field Added to AbandonedCheckout object
name Field Added to AbandonedCheckout object
AbandonedCheckoutShippingLine Object Added
taxLines Field Added to AbandonedCheckoutLineItem object
discountAllocations Field Added to AbandonedCheckoutLineItem object
requiresShipping Field Added to AbandonedCheckoutLineItem object
weight Field Added to AbandonedCheckoutLineItem object
fulfillmentService Field Added to AbandonedCheckoutLineItem object
presentmentVariantTitle Field Added to AbandonedCheckoutLineItem object
presentmentTitle Field Added to AbandonedCheckoutLineItem object
source Field Added to TaxLines object
unitPriceMeasurement Field Added to ProductVariant object

You can now add links to the Orders, Customer profiles, and Settings pages in navigation menus.

You can use the GraphQL Admin API to update menus that include these pages, and add activated full page extensions to menus, when customer account UI extensions are available for general release. Merchants will also be able to customize their customer account navigation menu. For more information, refer to the product roadmap.

To learn more, refer to the following GraphQL reference documentation:

We've added the feedbackGeneratedAt and state fields to the AppFeedback object. This field represents the date and time when the app feedback was generated. It conveys the state of the feedback and whether it requires merchant action.

Apps can now subscribe to the app/scopes_update webhook topic. This webhook is triggered when the granted access scopes for the installed app on a shop have been modified. It allows apps to keep track of the granted access scopes of their installations.

We've added the recurringCycleLimit and appliesOnSubscription fields on the DiscountAutomaticApp object and DiscountAutomaticAppInput input object.

The fields enable merchants to use automatic app discounts for subscriptions, and apply the discounts for a pre-determined number of cycles. Developers can use the fields in their automatic app discount functions.

Large merchants with an established international presence need to be able to specify which of their business entities handles sales for a given buyer context. You can now use the GraphQL Admin API to query fields related to the business entities that are enabled on a store.

The following new types are available:

New types related to business entities
Name Type Change
businessEntities Query Added
businessEntity Query Added
BusinessEntity Object Added
BusinessEntityAddress Object Added
businessEntity Field Added to Payout object
merchantBusinessEntity Field Added to Order object

We've added the MAX_VALIDATIONS_ACTIVATED error code to the ValidationUserErrorCode enum. The error code is returned when your app exceeds the maximum of five validation functions in checkout.

We've added the totalCashRoundingAdjustment field to the Order object, which allows you to query the total rounding adjustment applied on cash payments or refund transactions in an order on Point of Sale (POS).

Cash transactions on POS are now automatically rounded to the nearest denominations for the some currencies and countries, like CAD (Canada), AUD (Australia), NZD (New Zealand), EUR (Switzerland, Belgium, Finland), DKK (Denmark), Sweden (SEK) and Norway (NOK).

The OrderDisplayFulfillmentStatus enum now returns a REQUEST_DECLINED value for an order that has had its fulfillment request rejected by a third-party fulfillment service. In API versions prior to 2024-10, orders in the request rejected state return an UNFULFILLED status.

We've added the collectionsCount query, which enables you to retrieve a count of all collections in a shop. This includes published and unpublished collections, and custom and smart collections.

We've added the CompanyLocationStaffMemberAssignment object, which allows you to retrieve staff members assigned to a company location.

You can assign and remove staff members for a company location using the CompanyLocationAssignStaffMembers and CompanyLocationRemoveStaffMembers mutations.

You can now use the customerSendAccountInvite mutation to send an email invitation to a customer so that they can create a classic customer account.

We've also added the CustomerSendAccountInviteEmailUserError that defines errors for the customerSendAccountInvite mutation.

We've added the addressesV2 connection to the Customer object. The addressesV2 connection supports paginating through a customer's addresses, which enables you to retrieve a subset of results at a time.

We've added the FAILED_TO_RETRIEVE_BILLING_ADDRESS value on the CustomerPaymentMethodRevocationReason enum. The value is returned when a customer payment method is missing the billing address field.

We've introduced the inventoryAction argument on the fulfillmentServiceDelete mutation. You can use the argument to specify how to handle inventory when you delete a fulfillment service. Valid values:

  • KEEP: Converts a fulfillment service's locations to be merchant-owned. The inventory at the locations becomes the merchant's responsibility. If KEEP is provided, then the merchant must have a sufficient remaining quota of locations on their Shopify plan for the operation to succeed. Otherwise, an error is returned.

  • DELETE: Deletes the inventory at the location and then the location itself. You can only use this option when there are no outstanding fulfillments.

  • TRANSFER: Relocates the inventory to a specified destinationLocationId. If you specify either KEEP or DELETE, then you can't also specify a destinationLocationId.

The presentedName field has been added to the DeliveryMethod object. The presentedName field represents the name of the delivery option that was presented to the customer during checkout.

You can now set up a percentage-based deposit requirement for your payment terms using the DepositInput input object. Set up payment terms on company locations using the CompanyCreate, CompanyLocationCreate, and CompanyLocationUpdate mutations.

Learn more about deposits.

You can now query the total number of discounts on a shop, automatic and code-based, using the discountNodesCount query.

We've added the dutiesIncluded field to Order object.

We've made the CommentEvent.subject field nullable. null is returned when the subject's underlying data has been deleted. You must update your code to handle cases where subject might return null. For example, revise existing logic that assumes the field will always contain data, and implement checks or fallback mechanisms to manage situations where the subject data has been deleted.

We've also deprecated the deletionEvents query in favour of events that indicate deletion. Update your code to remove any reliance on deletionEvents, and use the new event structure. To support querying events, we've added the following types:

Types for events
Name Type Change
action field Added to Event interface
event Query Added
events Query Added
eventsCount Query Added
events Connection Added to Article, Blog, Comment, Page, Product, and ProductVariant objects
EventSubjectType Enum Added
arguments field Added to BasicEvent object
subject field Added to BasicEvent object
subjectID field Added to BasicEvent object
subjectType field Added to BasicEvent object

You can now filter orders by the number of items they contain using the subtotalLineItemsQuantity field on the Order object.

You can also filter by an exact number of items, or within a specified range, using the subtotal_line_items_quantity query filter.

We've added new attributes to the products query. You can now filter products by the following attributes:

  • publication_ids: The IDs of product publications.
  • variant_id: The ID of the product variant.
  • variant_title: The title of the product variant.

As of API version 2024-10, the shippingMethods field on the FulfillmentService object has been deprecated. The shippingMethods argument on the fulfillmentOrderSubmitFulfillmentRequest mutation has also been deprecated.

The shipping method associated with the fulfillment service provider applied only to the Fulfill By Amazon fulfillment service. The Fulfillment by Amazon feature isn't supported as of March 30, 2023. To continue using Amazon fulfillment, merchants need to set up a multi-channel fulfillment solution, as recommended by Amazon.

As of API version 2024-10, apps can't release fulfillment holds unless they have write access to them. You need to request the following access scopes for your app:

  • write_merchant_managed_fulfillment_orders: Allows your app to release holds on fulfillment orders assigned to a merchant-managed location

  • write_third_party_fulfillment_orders: Allows your app to release holds on fulfillment orders assigned to a third-party location

  • write_marketplace_fulfillment_orders: Allows your app to release holds on fulfillment orders which belong to one of your marketplace's orders

If your app doesn't have sufficient access scopes to release a hold, then a user error with the INVALID_ACCESS code is returned and the hold isn't released.

We've deprecated the fulfillmentOrdersReleaseHolds mutation. Use the fulfillmentOrderReleaseHold mutation instead.

We've also deprecated the GREATER_THAN_ZERO and INVALID_LINE_ITEM_QUANTITY error codes on the fulfillmentOrderReleaseHold mutation.

We've added the id field to the FulfillmentHold object. We've also added an optional holdIds argument to the fulfillmentOrderReleaseHold mutation. The holdIds argument enables apps to release a hold by ID, ensuring that only the intended hold is released.

The heldByRequestingApp field is now available on the FulfillmentHold object. As of API version 2024-10, you'll only be able to read the heldBy field on the FulfillmentHold object if you have the read_apps scope enabled on your app. Use the heldByRequestingApp field instead if you need to confirm whether your app created the fulfillment hold.

Additionally, the fulfillmentOrderHold mutation now returns the fulfillment hold that was created in a new fulfillmentHold return field.

As well, we've added a localized, displayReason field to the FulfillmentHold object. You can use this field to query a human-readable reason when a fulfillment is on hold.

You can now use the created_fulfillment_hold field on the fulfillment_orders/placed_on_hold webhook to retrieve the fulfillment hold that was created.

A fulfillment hold is deleted when a hold is released. As a result, it's possible that FulfillmentOrder.FulfillmentHolds is empty by the time the subscriber receives the webhook. The new created_fulfillment_hold field always shows the hold that was created, regardless of whether it has already been released and deleted.

We've improved the GiftCard types and have introduced several new types for working with gift cards. The gift card types are now open to all apps and shops, with no additional approval scopes or flags required.

Developer action required

The following types for gift cards are now available:

Available types for gift cards
Name Type Change
CUSTOMER_NOT_FOUND Value Added to GiftCardErrorCode enum
deactivatedAt Field Added to GiftCard object
GiftCardCreateInput Input object Added
giftCardCredit Mutation Added
GiftCardCreditInput Input object Added
GiftCardCreditTransaction Object Added
giftCardDebit Mutation Added
GiftCardDebitInput Input object Added
GiftCardDebitTransaction Object Added
giftCardDeactivate Mutation Added
GiftCardRecipient Object Added
GiftCardRecipientInput Input object Added
giftCardSendNotificationToCustomer Mutation Added
giftCardSendNotificationToRecipient Mutation Added
GiftCardTransaction Interface Added
GiftCardTransactionUserError Object Added
recipientAttributes Field Added to GiftCard object
recipientAttributes Field Added to GiftCardCreateInput input object
recipientAttributes Field Added to GiftCardUpdateInput input object
RECIPIENT_NOT_FOUND Value Added to GiftCardErrorCode enum
transactions Connection Added to GiftCard object
updatedAt Field Added to GiftCard object

We've added the accountOwner field to the Shop object. You can use the field to retrieve information about the account owner of a shop. The accountOwner field returns a StaffMember object.

We've made several improvements to the StaffMember object. These improvements enable apps using the REST Admin API's User resource to migrate to using the GraphQL Admin API's StaffMember object.

You can now use the optional stockAtLegacyLocation argument on the inventoryActivate mutation. Setting the argument to true allows inventory to be activated if the location ID that's provided is associated with a fulfillment service that doesn't permit SKU sharing.

  • If an item is activated at a location that doesn't permit SKU sharing, then the item will be deactivated at all other locations.

  • If an item is currently active at a location that doesn't permit SKU sharing, and you want to activate that item at another location, then you need to set the stockAtLegacyLocation argument to true.

You can use the ProductSetInventoryInput input object to specify inventory quantities for individual product variants and set available or on_hand quantities for new and existing product variants on locations specified.

We've added the LINKED_METAFIELD_VALUE_WITHOUT_LINKED_OPTION error code to the ProductOptionsCreateUserError enum. This error code is returned when the linkedMetafieldValue can't be specified for an option that isn't linked to a metafield.

We've added the LocalPaymentMethodsPaymentDetails object, which allows you to query the details of a local payment method that's related to a transaction.

We've removed the HAS_OPEN_TRANSFERS_ERROR and FAILED_TO_RELOCATE_OPEN_TRANSFERS error codes from theLocationDeactivateUserErrorCode enum. If you're explicitly checking for either of these error codes in your app, then you should remove references to them.

Metafield capabilities provide a way to include logic with your metafields. When you create a metafield definition, you can now enable capabilities that provide additional behaviors.

You can enable the following capabilities:

  • Smart collection: Create an automated collection based on metafield values for a given definition.
  • Admin filterable: Filter products based on metafield values for a definition.

Learn more about using metafield capabilities.

We've deprecated the definitions.visibleToStorefrontApi argument on the standardMetafieldDefinitionEnable and standardMetafieldDefinitionsEnable mutations. Use the definitions.access argument on these mutations instead.

In the 2024-04 API version release, we introduced the ability to use the productOptionsCreate, productCreate, and productOptionUpdate mutations to create metafield-linked product options.

As of API version 2024-10, we've added more fields and error codes to support linking metafields to product options.

Available types

New types for managing metafield-linked product options
Name Type Change
linkedMetafield Field Added to OptionSetInput input object
linkedMetafieldValue Field Added to VariantOptionValueInput input object
CANNOT_COMBINE_LINKED_AND_NONLINKED_OPTION_VALUES Error code Added to ProductSetUserErrorCode enum
INVALID_METAFIELD_VALUE_FOR_LINKED_OPTION Error code Added to ProductSetUserErrorCode enum
DUPLICATE_LINKED_OPTION Error code Added to ProductSetUserErrorCode enum
LINKED_OPTIONS_NOT_SUPPORTED_FOR_SHOP Error code Added to ProductSetUserErrorCode enum
LINKED_METAFIELD_DEFINITION_NOT_FOUND Error code Added to ProductSetUserErrorCode enum

We've added the metafields argument to the cartTransformCreate mutation. You can use the argument to set metafields for a CartTransform object at creation without needing to call the metafieldsSet mutation in a subsequent call.

Learn more about the Cart Transform Function API.

We've deprecated the OnlineStorePage, OnlineStoreArticle, and OnlineStoreBlog objects. Use the Page, Article, and Blog objects instead.

You can now read and modify pages, articles, blogs, and comments. The following types are now available:

Types for the online store
Name Type Change
pageCreateInput Input object Added
pageUpdateInput Input object Added
pageCreate Mutation Added
pageUpdate Mutation Added
pageDelete Mutation Added
page Query Added
pages Query Added
pagesCount Query Added
PAGE Value Added to TranslatableResourceType enum
ArticleAuthor Object Added
ArticleBlogInput Input object Added
ArticleCreateInput Input object Added
ArticleImageInput Input object Added
ArticleUpdateInput Input object Added
articleCreate Mutation Added
articleUpdate Mutation Added
articleDelete Mutation Added
article Query Added
articles Query Added
ARTICLE Value Added to TranslatableResourceType enum
AuthorInput Input object Added
BlogCreateInput Input object Added
BlogUpdateInput Input object Added
BlogFeed Object Added
blogCreate Mutation Added
blogUpdate Mutation Added
blogDelete Mutation Added
blog Query Added
blogs Query Added
blogsCount Query Added
BLOG Value Added to TranslatableResourceType enum
Comment Object Added
CommentAuthor Object Added
commentApprove Mutation Added
commentSpam Mutation Added
commentNotSpam Mutation Added
commentDelete Mutation Added
comment Query Added
comments Query Added
CommentStatus Enum Added
CommentPolicy Enum Added
MENU Value Added to TranslatableResourceType enum

We've added the optionalAccessScopes field to the App object so that apps can declare some scopes as optional within their configuration. This field allows merchants to progressively grant apps access to data in their store.

We've added the OrderAdjustment object, which represents the difference between a calculated and an actual refund amount. We've also added the orderAdjustment connection on the Refund object, allowing you to retrieve order adjustments that are attached to a refund.

You can now use the orderCreate mutation to create an order.

We've removed the lineItemsMutable connection on the Order object. Use the lineItems connection on the Order object instead.

The write_third_party_fulfillment_orders access scope no longer allows order management apps to fulfill fulfillment orders assigned to locations that are owned by other fulfillment service apps. Order management apps will still be able to access and manage these orders, but fulfillment creation will be prohibited.

The write_assigned_fulfillment_orders and write_merchant_managed_fulfillment_orders access scopes remain unchanged. Fulfillment service apps can still fulfill orders that are assigned to them, as long as they're granted the write_assigned_fulfillment_orders access scope. Fulfillment orders that are assigned to merchant-managed locations are still fulfillable by order management apps, as long as they're granted the write_merchant_managed_fulfillment_orders access scope.

Apps can confirm whether fulfillment creation is possible by querying supported actions using the GraphQL Admin API. If the fulfillment order is assigned to a merchant-managed location or to the fulfillment service performing the query and it's in a fulfillable state, then the CREATE_FULFILLMENT action is returned as a possible option.

We've added the statusPageUrl field to the Order object, allowing you to retrieve the URL where the customer can check the order's current status.

You can now use the destination field on the fulfillmentOrder object to retrieve the pickup location for a fulfillment order.

As of API version 2024-10, the destination field returns a FulfillmentOrderDestination object instead of null for fulfillment orders that don't have an associated shipping address. If the fulfillment order doesn't have a shipping address, then the address-related fields within the FulfillmentOrderDestination object are set to null.

As of API version 2024-10, we've removed PriceRule types from the GraphQL Admin API. The associated queries and mutations have been deprecated since API version 2023-03. Use the discountNode query instead.

The following types have been removed:

  • PriceRuleUserError object
  • PriceRuleCustomerSelectionInput input object
  • PriceRuleDiscountCodeInput input object
  • PriceRuleEntitlementToPrerequisiteQuantityRatioInput input object
  • PriceRuleInput input object
  • PriceRuleItemEntitlementsInput input object
  • PriceRuleItemPrerequisitesInput input object
  • PriceRuleMoneyRangeInput input object
  • PriceRulePrerequisiteToEntitlementQuantityRatioInput input object
  • PriceRuleQuantityRangeInput input object
  • PriceRuleShippingEntitlementsInput input object
  • PriceRuleValidityPeriodInput input object
  • PriceRuleValueInput input object
  • priceRuleSavedSearches query
  • PriceRuleActivate mutation
  • PriceRuleCreate mutation
  • PriceRuleDeactivate mutation
  • PriceRuleDelete mutation
  • PriceRuleDiscountCodeCreate mutation
  • PriceRuleDiscountCodeUpdate mutation
  • PriceRuleUpdate mutation
  • priceRule field on the QueryRoot object
  • priceRules connection on the QueryRoot object
  • priceRules connection on the Shop object
  • priceRuleSavedSearches connection on the Shop object

The PRODUCTIMAGE value has been removed from the MetafieldOwnerType enum. Use MEDIA_IMAGE instead.

We've removed the following deprecated ProductInput fields from the GraphQL Admin API:

  • bodyHTML is removed. Use the descriptionHtml field instead.
  • privateMetaFields is removed. Use the productOptions field instead.
  • standardizedProductType is removed. Use the category field instead.
  • productCategory is removed. Use the category field instead.
  • customProductType is removed. Use the category field instead.

We've added the synchronous argument to the productDelete mutation. The field allows you to choose whether a product should be deleted synchronously or asynchronously.

  • Asynchronous deletion: By setting the synchronous field to false in the productDelete mutation, the operation proceeds asynchronously, and returns a ProductDeleteOperation object.
  • Operation tracking: You can track the status of the asynchronous deletion by querying the operation ID through the productOperation query.

The productDuplicateAsyncV2 mutation has been removed. We've added the synchronous argument to the productDuplicate mutation, allowing you to choose whether the product duplication should be processed synchronously or asynchronously.

  • Asynchronous duplication: By setting the synchronous field to false in the productDuplicate mutation, the operation operates asynchronously, and returns a ProductDuplicateOperation object.
  • Operation tracking: You can track the status of the asynchronous duplication by querying the operation ID through the productOperation query.

We've removed the input argument on the productCreate and productUpdate mutations.

Use the following product arguments instead:

We've made changes to how you work with product media by replacing the current media ID inputs with file inputs and expanding media capabilities:

  • The mediaIds field on the ProductSetInput input object has been removed. Use the files field instead to associate files to a product.

  • The mediaId field on the ProductVariantSetInput input object has been removed. Use the file field instead to associate a file with the product variant.

  • The FileSetInput input object is now available for working with existing media and creating new files. This input object is a derivative of the FileCreateInput input object, with an added id field.

We've removed the following deprecated product mutations from the GraphQL Admin API:

We've added the restrictedForResource field to the Product object. The field allows you to query product restrictions for a given CalculatedOrder object, and returns both the restricted status and the reason for the restriction.

We've deprecated the PRODUCT_TAXONOMY_NODE_ID value on the CollectionRuleColumn enum, which is used when creating automated collections. Use the PRODUCT_CATEGORY_ID value instead.

For more information, refer to the developer changelog.

We've deprecated the following singular product variant mutations in favor of their equivalent bulk versions:

We've added the productVariantsCount query to the GraphQL Admin API to provide parity with the REST Admin API's ProductVariant count endpoint.

We've added the variantStrategy argument to the productOptionsCreate mutation, which enables more precise control over product variant configuration and inventory management.

The variantStrategy argument includes the following input fields:

  • CREATE: Generates new product variants for all possible combinations of option values.
  • LEAVE_AS_IS: Updates existing variants to include new option values, without creating new variants.

The PRODUCTS_CREATE and PRODUCTS_UPDATE webhook payloads now contain the following fields:

  • has_variants_that_requires_components: Indicates whether a product has a variant that's a product bundle. The field mirrors the hasVariantsThatRequiresComponents field on the Product object.

  • category: Information about the product category associated with a product. The category field exposes a trimmed version of fields that are available on the Product object.

You can now use the urlRedirectsCount query to retrieve a count of redirects. Previously, this functionality was only available using the REST Admin API.

You can now refund multiple shipping lines using the shipping field on the RefundInput input object or refundShipping field on the ReturnRefundInput input object.

For more information, refer to the developer changelog.

The following deprecated fields on the ShopFeatures object have been removed:

  • avalaraAvatax
  • branding
  • captcha
  • dynamicRemarketing
  • harmonizedSystemCode
  • liveView
  • onboardingVisual
  • reports
  • showMetrics

Instead of the branding field, use Shop.plan.shopifyPlus instead.

We've deprecated the fulfillmentCreateV2 and fulfillmentTrackingInfoUpdateV2 mutations. Use the fulfillmentCreate and fulfillmentTrackingInfoUpdate mutations instead.

The behavior of the new mutations remains the same as the previous ones. The only change is the removal of V2 to ensure consistent naming across all mutations.

We've added the notifyCustomer field on the ReturnApproveRequestInput input object and the ReturnDeclineRequestInput input object.

We've also added the declineNote field on the ReturnDeclineRequestInput input object, which represents the notification message that's sent to a customer about their declined return request.

The reverseDeliveryDispose mutation is deprecated. Use the reverseFulfillmentOrderDispose mutation instead.

The fulfillmentLineItem field on the ReverseFulfillmentOrderLineItem object is now nullable. A ReverseFulfillmentOrderLineItem object won't always be associated with a FulfillmentLineItem object. The non-null fulfillmentLineItem field on API versions prior to 2024-10 returns an error when the fulfillment line item doesn't exist.

Learn more about managing reverse fulfillment orders.

We've added the amountRounding field on the OrderTransaction object. The amountRounding field represents the rounding adjustment applied on a cash amount in presentment currency.

We've deprecated the ability to set the available quantity on the inventoryActivate mutation for inventory items that are already in an active state. Use the inventorySetQuantities mutation instead.

We've also added the INVALID_QUANTITY_TOO_LOW value to the InventorySetQuantitiesUserErrorCode enum. The error code is returned if you run the inventorySetQuantities mutation and a quantity is less than negative one billion.

We've added the shopOwnerName field to the Shop object. The field returns the shop owner's first and last name.

You can now use the ShopifyPaymentsDispute object to query all Shopify Payments disputes that are associated with a store.

We've also added the ADVANCE and ADVANCE_FUNDING values to the ShopifyPaymentsTransactionType enum.

We've added the advanceFees and advanceGross fields to the ShopifyPaymentsPayoutSummary object.

We've added the transactions connection to the SubscriptionBillingAttempt object. The connection returns the transactions that are created by billing attempts.

We've added the lastBillingAttemptErrorType field to the SubscriptionContract object. You can use this field to determine the billing error type when a billing attempt fails.

We've added the order field to the TenderTransaction object. You can use the field to retrieve an order that's related to a transaction with financial impact on a store's balance sheet. If the order has been deleted, then the value is null.

We've added the ONLINE_STORE_THEME_APP_EMBED value to the TranslatableResourceType enum. You can use this value to query the translatable content for an embedded app.

## REST Admin API changes The following changes are introduced in the 2024-10 version of the REST Admin API.

Large merchants with an established international presence need to be able to specify which of their business entities handles sales for a given buyer context. You can now use the REST Admin API to request the business entity ID (merchant_business_entity_id) associated with an order.

On the Event resource, we now return null when underlying subject data has been deleted. You must update your code to handle null cases. For example, revise existing logic that assumes the field will always contain data, and implement checks or fallback mechanisms to manage situations where subject data has been deleted.

The presented_name property has been added to the FulfillmentOrder resource. The presented_name property represents the name of the delivery option that was presented to the customer during checkout.

If your app retrieves a Location resource, then you need to request the read_locations access scope.

If your app reads a Location resource without the read_locations access scope, then a 403 Forbidden error is returned.

The products/create and products/update webhook payloads now contain the following properties:

  • has_variants_that_requires_components: Indicates whether a product has a variant that's a product bundle
  • category: Information about the product category that's associated with a product

You can now refund multiple shipping lines using the Refunds resource in the REST Admin API.

For more information, refer to the developer changelog.

We've added the amount_rounding property on the Transaction resource. The amount_rounding property represents the rounding adjustment applied on a cash amount in presentment currency.

## Storefront API changes The following changes are introduced in the 2024-10 version of the Storefront API.

Inventory errors about stock levels are no longer included in the userErrors of cart mutations. Inventory errors are now available in the warnings return field, and contain the following explicit values:

  • MERCHANDISE_NOT_ENOUGH_STOCK
  • MERCHANDISE_OUT_OF_STOCK

Warnings are available on all cart mutations to show automatic changes that occurred while executing the mutation. You can use warnings to manage items in your cart or display information to a buyer. For example, you can remove out-of-stock lines from a cart by using the target field included in the warning as the input to the cartLinesRemove mutation.

Learn more about cart warnings.

We've added ShopPayInstallmentsPricing fields to the Shop and ProductVariant types. In the future, Hydrogen will support using these fields to display the Shop Pay installments banner on the product page. These require the unauthenticated_read_shop_pay_installments_pricing access scope.

You can now query combined listings products.

The options field on the Product object returns options and values for both parent and child products. We've also added the following fields to simplify working with complex products:

In the future, you'll be able to use these fields in Hydrogen to build option pickers and display combined listings and other complex products on a storefront.

## Shopify Function APIs changes The following changes are introduced in the 2024-10 version of Shopify Function APIs.

You can now associate a fulfillment constraint function to one or multiple delivery methods, such as SHIPPING and PICKUP. The function will only run under the context of the specified delivery methods.

We've added the deliveryMethodTypes field to the FulfillmentConstraintRule object. You can use the fulfillmentConstraintRuleCreate mutation to register your fulfillment constraint function and associate it with one or more delivery methods.

Use the fulfillmentConstraintRuleUpdate mutation to update delivery methods for an existing registered function.

We've added the metafields argument to the cartTransformCreate mutation. You can use the argument to set metafields for a CartTransform object at creation without needing to call the metafieldsSet mutation in a subsequent call.

Learn more about the Cart Transform Function API.

## Customer Account API changes The following changes are introduced in the 2024-10 version of the Customer Account API.

You can now query the percentage-based deposit requirement for your payment terms on company locations.

Learn more about deposits.

We've added new types for subscription contracts. The customer_read_own_subscription_contracts permission is now required to query subscription contracts and the customer_write_own_subscription_contracts permission is required to run subscription contracts mutations.

The following new types for managing subscription contracts are available:

New types for managing subscription contracts
Name Type Change
SubscriptionBillingCycleInput Input object Added
SubscriptionBillingCycleSelector Input object Added
SubscriptionDeliveryMethodInput Input object Added
SubscriptionDeliveryMethodLocalDeliveryInput Input object Added
SubscriptionDeliveryMethodPickupInput Input object Added
SubscriptionDeliveryMethodShippingInput Input object Added
SubscriptionContractStatusUpdateUserError Object Added
SubscriptionContractUserError Object Added
SubscriptionDeliveryMethodLocalDeliveryOption Object Added
SubscriptionDeliveryMethodLocalDelivery Object Added
SubscriptionDeliveryMethodPickupOption Object Added
SubscriptionDeliveryMethodPickup Object Added
SubscriptionDeliveryMethodShippingOption Object Added
SubscriptionDeliveryMethodShipping Object Added
SubscriptionLine Object Added
SubscriptionLocalDeliveryOption Object Added
SubscriptionPickupOption Object Added
SubscriptionMailingAddress Object Added
SubscriptionShippingOption Object Added
SubscriptionDeliveryMethod Union Added
SubscriptionDeliveryOption Union Added
SubscriptionContractBase Interface Added
address Argument Added to SubscriptionContractFetchDeliveryOptions mutation