# Recent changes to Shopify’s platform --- ## New `has_variants_that_requires_components` field on Product Webhooks As of 2024-10, the product create and update webhook payloads contain information indicating if the product has a variant that is a product bundle. The new boolean field, `has_variants_that_requires_components`, mirrors what is already available on the Product GraphQL [response](https://shopify.dev/docs/api/admin-graphql/2024-04/objects/Product#field-product-hasvariantsthatrequirescomponents). To receive `has_variants_that_requires_components` in the webhook payload, specify 2024-10 or greater as the webhook API version in your [App Partner Dashboard](https://shopify.dev/docs/apps/build/webhooks/subscribe/use-newer-api-version#step-3-select-the-newer-api-version). Learn more about [Product Bundles](https://shopify.dev/docs/apps/build/product-merchandising/bundles). *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/new-has_variants_that_requires_components-field-on-product-webhooks --- ## New field and queries for the `StaffMember` object in the GraphQL Admin API The `2024-10` version of the GraphQL Admin API brings improvements to the [`StaffMember`](https://shopify.dev/docs/api/admin-graphql/latest/objects/StaffMember) object: - New [`accountType` field](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/StaffMember#field-accounttype). - You can retrieve the staff member making the API request with the [`currentStaffMember` query](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/currentStaffMember). - You can list all staff members with the [`staffMembers` connection query](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/staffMembers). - [`Shop.staffMembers`](https://shopify.dev/docs/api/admin-graphql/latest/objects/Shop#connection-staffmembers) was deprecated in favor of the `staffMembers` query. This allows apps using the [`User`](https://shopify.dev/docs/api/admin-rest/latest/resources/user) REST Admin API resource to migrate to GraphQL's [`StaffMember`](https://shopify.dev/docs/api/admin-graphql/latest/objects/StaffMember) object. *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/new-field-and-queries-for-the-staffmember-object-in-the-graphql-admin-api --- ## Removal fulfillment service shipping method As of 2024-10, you can no longer use the deprecated `shippingMethods` field on the `fulfillmentService` query or include it as an argument in the `fulfillmentOrderSubmitFulfillmentRequest mutation`. The shipping method associated with the fulfillment service provider applied only to Fulfill By Amazon fulfillment service. The Fulfillment by Amazon feature is not supported as of March 30, 2023. To continue using Amazon fulfillment, merchants need to set up a Multi-Channel Fulfillment solution recommended by Amazon. To learn more see https://help.shopify.com/manual/shipping/fulfillment-services/amazon#activate-fulfillment-by-amazon *Published: October 01, 2024* Tags: API, Deprecation Announcement Link: https://shopify.dev/changelog/removal-fulfillment-service-shipping-method --- ## New mutation to create an order As of GraphQL Admin API 2024-10 version, you can make use of a new mutation to create an order. Learn more about `orderCreate` on [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/orderCreate). *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/new-mutation-to-create-an-order --- ## POS UI Extensions 2024-10 Update As of October 1, we added the following updates to POS UI Extensions: * Added support for iOS debugging with the Safari dev tools. * Added support for the `pos.product-details.block.render` target. * Added support for the `pos.purchase.post.block.render` target. * Added support for the `pos.order-details.block.render` target. * Added support for the `pos.customer-details.block.render` target. * Introduced a `POSBlock` component. It's the required parent component for block extension targets. * Introduced a `POSBlockRow` component. It's the required child component for `POSBlock`, and can be used to wrap other components. * Deprecated the `ActionItem` component. Please use the `Button` component instead. * Added support for windowed modals. All of the changes are available for POS UI extensions version 2024-10 and POS app version 9.19.0. See the [version log](https://shopify.dev/docs/api/pos-ui-extensions/unstable/versions) for all version details. *Published: October 01, 2024* Tags: API, Update Link: https://shopify.dev/changelog/pos-ui-extensions-2024-10-update --- ## Fulfillment Constraints can now be associated with one or multiple delivery methods You can now associate a [Fulfillment Constraint](https://shopify.dev/docs/api/functions/reference/fulfillment-constraints) function with one or multiple [delivery method types](https://shopify.dev/docs/api/admin-graphql/unstable/enums/DeliveryMethodType). The function will only run within the context of those specific delivery methods. As of Admin GraphQL API version `2024-10` and `unstable`, you can - Use the [FulfillmentConstraintRuleCreate](https://shopify.dev/docs/api/admin-graphql/unstable/mutations/fulfillmentConstraintRuleCreate) mutation to register your new Fulfillment Constraint function and associate it with one or multiple delivery methods. A new required input field `delivery_method_types` will be added. - Use the [FulfillmentConstraintRuleUpdate](https://shopify.dev/docs/api/admin-graphql/unstable/mutations/fulfillmentConstraintRuleUpdate) mutation to update delivery method(s) for an existing registered function. Existing fulfillment constraint functions will continue to run for `SHIPPING`, `LOCAL` and `PICKUP_POINT`. *Published: October 01, 2024* Tags: API, Update Link: https://shopify.dev/changelog/fulfillment-constraints-can-now-be-associated-with-one-or-multiple-delivery-methods --- ## Fulfillment Constraints now support Local Pickup As of Admin GraphQL API version `2024-10` and `unstable`, you can setup your [Fulfillment Constraint](https://shopify.dev/docs/api/functions/reference/fulfillment-constraints) function to run for Local Pickup delivery method. Use the [FulfillmentConstraintRuleCreate](https://shopify.dev/docs/api/admin-graphql/unstable/mutations/fulfillmentConstraintRuleCreate) mutation to register your new Fulfillment Constraint function with the `PICK_UP` delivery method. Or, use the [FulfillmentConstraintRuleUpdate](https://shopify.dev/docs/api/admin-graphql/unstable/mutations/fulfillmentConstraintRuleUpdate) mutation to update your existing registered function to include `PICK_UP`. *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/fulfillment-constraints-now-support-local-pickup --- ## Admin API update on `fulfillmentOrder.destination` and `FulfillmentOrderDestination` object ### Breaking Changes As of the Admin API version **2024-10** and **unstable** release, `fulfillmentOrder.destination` will return a `FulfillmentOrderDestination` object instead of `null` for fulfillment orders lacking an associated shipping address. In such cases, the address related fields within the `FulfillmentOrderDestination` object will be set to null. ### Non Breaking Changes As of GQL Admin API version **2024-10** and **unstable** release, you can use new field `fulfillmentOrder.destination.location` to retrieve the pickup location for the fulfillment order. You can learn more about `fulfillmentOrder.destination` [here](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/FulfillmentOrder#field-destination) and `fulfillmentOrderDestination` [here](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/FulfillmentOrderDestination) *Published: October 01, 2024* Tags: API, Update Link: https://shopify.dev/changelog/admin-api-update-on-fulfillmentorder-destination-and-fulfillmentorderdestination-object --- ## New CompanyLocationStaffMemberAssignments API endpoints for managing staff member assignments on a Company Location As of 2024-10, we've added a `CompanyLocationStaffMemberAssignment` to the `CompanyLocation` object for viewing the staff members assigned to the company location. You can assign and remove staff members for a company location using the `CompanyLocationAssignStaffMembers` and `CompanyLocationRemoveStaffMembers` mutations. *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/new-companylocationstaffmemberassignments-api-endpoints-for-managing-staff-member-assignments-on-a-company-location --- ## Removal of the `priceRule` resource from GraphQL Admin API As of `2024-10`, the `priceRule` resource is being removed. The queries and mutations have been deprecated since `2023-03`. The [discount](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/discountNode) resource can be used to achieve the same operations. *Published: October 01, 2024* Tags: API, Deprecation Announcement Link: https://shopify.dev/changelog/removal-of-the-pricerule-resource-from-graphql-admin-api --- ## Breaking changes to returns API: Deprecate `reverseDeliveryDispose` mutation As of GraphQL Admin API version **2024-10**, the [`reverseDeliveryDispose`](https://shopify.dev/docs/api/admin-graphql/2024-01/mutations/reverseDeliveryDispose) mutation will be deprecated. Use the [`reverseFulfillmentOrderDispose`](https://shopify.dev/docs/api/admin-graphql/latest/mutations/reverseFulfillmentOrderDispose) mutation instead. Learn more about managing reverse fulfillment orders on [Shopify.dev](https://shopify.dev/docs/apps/fulfillment/returns-apps/reverse-fulfillment-orders). *Published: October 01, 2024* Tags: API, Deprecation Announcement Link: https://shopify.dev/changelog/breaking-changes-to-returns-api-deprecate-reversedeliverydispose-mutation-1 --- ## Notify customers when their return requests are approved or declined As of the 2024-10 API version, you can notify customers that their return request was approved or declined. You can submit a `notifyCustomer` argument when approving a return request using [the `returnApproveRequest` mutation](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/returnApproveRequest). You can also submit a `notifyCustomer` argument when declining a return request using [the `returnDeclineRequest` mutation](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/returnDeclineRequest). To include a custom message to the buyer in the email notification, use the `declineNote` argument. When `notifyCustomer` is `true`, an email notification is sent to the [`Order.email`](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Order#field-email). If this field is null, the notification is not sent. *Published: October 01, 2024* Tags: API, Update Link: https://shopify.dev/changelog/notify-customers-when-their-return-requests-are-approved-or-declined --- ## Exposing the order adjustments connection on a Refund As of the 2024-10 Admin GraphQL API, you can use the [`Refund.orderAdjustments` connection](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Refund#connection-orderadjustments) to query for the difference between calculated and actual refund amounts. The [`REFUNDS_CREATE` webhook topic](https://shopify.dev/docs/api/webhooks/2024-10?reference=graphql#list-of-topics-refunds_create) will include order adjustments too. As of 2024-10, the webhook payload for `REFUNDS_CREATE` will **not include** the `kind` field. Please note that the [`OrderAdjustment.kind`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/OrderAdjustment#field-kind) field is now **deprecated** in the Admin GraphQL API. It is also deprecated in the legacy [`refund.order_adjustments`](https://shopify.dev/docs/api/admin-rest/unstable/resources/refund#resource-object) resource in the Admin REST API. For this reason, refunded shipping costs will **not** be included in the [`Refund.orderAdjustments` connection](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Refund#connection-orderadjustments). To query for refunded shipping costs, use the [`Refund.refundShippingLines` connection](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Refund#connection-refundshippinglines) instead. This connection has been updated as of **July 18, 2024** to include refunded shipping costs; [more info here](https://shopify.dev/changelog/refunding-orders-with-multiple-shipping-lines-returns-accurate-data). Refunded shipping costs will not be present in the webhook payload for `REFUNDS_CREATE` as of 2024-10 for the same reason. The [`OrderAdjustment.kind`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/OrderAdjustment#field-kind) field will be present on the `unstable` API version for 6 months to allow apps to migrate to the 2024-10 API version. *Published: October 01, 2024* Tags: API, Deprecation Announcement Link: https://shopify.dev/changelog/exposing-the-order-adjustments-connection-on-a-refund --- ## Introducing Payment Groups and Sessions to SubscriptionBillingAttempts As of GraphQL Admin API version 2024-10, the SubscriptionBillingAttempt object will have two new fields: [payment_group_id](https://shopify.dev/docs/api/admin-graphql/unstable/objects/SubscriptionBillingAttempt#field-paymentgroupid) and [payment_session_id](https://shopify.dev/docs/api/admin-graphql/unstable/objects/SubscriptionBillingAttempt#field-paymentsessionid). This will allow your subscription apps to have better insights into how billing attempts correlate for merchant-facing statistics. The payment group is defined as: - Attempts belonged to the same subscription contract identity. - The attempts were all failures, or ended in a success. If two sequential successes occur with all the same attributes, then they're treated as separate groups. It can be used for correlated retried billing attempts together. The payment session for subscriptions is defined as: - Attempts used the same payment group - Attempts used the same payment method - Attempts used the same currency - Attempts were for the same amount We expect any merchant facing statistics regarding payment success rates to only show a single success or failure per payment_session_id. *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/introducing-payment-groups-and-sessions-to-subscriptionbillingattempts --- ## Introducing Session ID to StartPaymentSession As of Payments Apps API version 2024-10, the StartPaymentSession payload for all payment extension types will have one new field: [session_id](https://shopify.dev/docs/apps/build/payments/request-reference#request-body). This identifier is shared across payment sessions that belong to the same payment group, buyer session, and share payment details. It can be used to power auth rate calculations. *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/introducing-session-id-to-startpaymentsession --- ## Admin API includes `discountNodesCount` As of Admin GraphQL API version `2024-10`, you can access the `QueryRoot.discountNodesCount` field to retrieve the total count of discounts in the shop. Learn more about `discountNodesCount` on [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/discountNodesCount). *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/admin-api-includes-discountnodescount --- ## Localized fulfillment hold reason on `FulfillmentHold` We've added a new localized string field `displayReason` to `FulfillmentHold` so that you can query for a human-readable reason when a fulfillment is on hold. *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/localized-fulfillment-hold-reason-on-fulfillmenthold --- ## Add new theme-related fields to `TranslatableResourceType` enum As of API version `2024-10`, you can use these new fields to `TranslatableResourceType` that are related to the online store theme: `ONLINE_STORE_THEME_JSON_TEMPLATE`, `ONLINE_STORE_THEME_SECTION_GROUP`, `ONLINE_STORE_THEME_APP_EMBED`, `ONLINE_STORE_THEME_LOCALE_CONTENT`, `ONLINE_STORE_THEME_SETTINGS_CATEGORY` and `ONLINE_STORE_THEME_SETTINGS_DATA_SECTIONS` Together, these new types will cover the translatable content and translations within the existing ONLINE_STORE_THEME [enum type](https://shopify.dev/docs/api/admin-graphql/2024-04/enums/TranslatableResourceType#value-onlinestoretheme) and offer more granularity with respect to the returned data. They are introduced with the intent of reducing the use of `ONLINE_STORE_THEME` type in the future, so that we do not return the entirety of a theme's content when it is not needed. We are also introducing a `nestedTranslatableResources` connection under `TranslatableResource` object. When used with a `ONLINE_STORE_THEME` type `TranslatableResource`, the theme resources that belong to this particular theme are exposed. --> *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/add-new-theme-related-fields-to-translatableresourcetype-enum --- ## Translatable content that is specific to a market context is now exposed As of API version `2024-10`, you can use the `marketId` argument to retrieve translatable content that is specific to a market. Concretely, combined with `ONLINE_STORE_THEME_JSON_TEMPLATE` and `ONLINE_STORE_THEME_SECTION_GROUP` translatable resource types, you can retrieve translatable content within the added sections and blocks in a contextualized theme template or theme section group for a specfic market. More details can be found [here](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/store-contextualization) about customizing a theme for specific markets. *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/translatable-content-that-is-specific-to-a-market-context-is-now-exposed --- ## GraphQL support to send customer account invite As of GraphQL Admin API version **2024-10**, you can use the `customerSendAccountInviteEmail` mutation to send an email invite to create a classic customer account. *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/graphql-support-to-send-customer-account-invite --- ## Adding pagination arguments to Customer addresses As of GraphQL Admin API version **2024-10**, the `addressesV2` field is introduced on the `Customer` object to support paginating through a customer's addresses. Learn more about the `Customer` fields on [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Customer). *Published: October 01, 2024* Tags: API, Update Link: https://shopify.dev/changelog/adding-pagination-arguments-to-customer-addresses --- ## New abandoned checkouts listing endpoint on the admin GraphQL API As of 2024-10, you can use the `abandonedCheckouts` endpoint to get the list of abandoned checkouts of a shop. This will replace the current [REST](https://shopify.dev/docs/api/admin-rest/unstable/resources/abandoned-checkouts) endpoint. *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/new-abandoned-checkouts-listing-endpoint-on-the-admin-graphql-api --- ## New customer account pages now available in menus via Admin API As of API version 2024-10, you can add links to the Orders, Profile, and Settings pages to navigation menus. To learn more, refer to [menuCreate](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/menuCreate), [menuUpdate](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/menuUpdate) and [menu](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/menus) *Published: October 01, 2024* Tags: API, Update Link: https://shopify.dev/changelog/new-customer-account-pages-now-available-in-menus-via-admin-api --- ## Subscription Contract fields now fully available on the Customer API As of the **2024-10** release of the GraphQL Customer API, you can now query the following fields for a [customer's](https://shopify.dev/docs/api/customer/2024-10/objects/Customer) subscription contracts using the `subscriptionContracts` or `subscriptionContract` fields: * linesCount * billingPolicy * deliveryPolicy * deliveryMethod * deliveryPrice * updatedAt * currencyCode We’ve also added support for the following connections: * lines * orders The `customer_read_own_subscription_contracts` permission is now required to query subscription contracts and the `customer_write_own_subscription_contracts` permission is now required for subscription contract mutations. Learn more about subscription contracts on the Customer API at [Shopify.dev](https://shopify.dev/docs/api/customer/2024-10/objects/SubscriptionContract). *Published: October 01, 2024* Tags: API, Update Link: https://shopify.dev/changelog/subscription-contract-fields-now-fully-available-on-the-customer-api --- ## New field and permission update to fulfillment hold resource As of the GraphQL Admin API version 2024-10, a `heldByRequestingApp` field is being added to the `FulfillmentHold` GraphQL resource. As of the GraphQL Admin API version 2024-10, you will only be able to read the `heldBy` field on the `FulfillmentHold` GraphQL resource if you have `read_apps` scope enabled on your application. Use the `heldByRequestingApp` boolean field instead if you need to see if your application created the fulfillment hold. Learn more about [FulfillmentHolds](https://shopify.dev/docs/api/admin-graphql/latest/objects/FulfillmentHold). *Published: October 01, 2024* Tags: API, Update Link: https://shopify.dev/changelog/new-field-and-permission-update-to-fulfillment-hold-resource --- ## `fulfillmentOrderHold` mutation updated to return a fulfillment hold resource As of the GraphQL Admin API version 2024-10, the `fulfillmentOrderHold` mutation will return the fulfillment hold that was created in a new `fulfillmentHold` return field. Learn more about the [fulfillmentOrderHold mutation](https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentOrderHold). *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/fulfillmentorderhold-mutation-updated-to-return-a-fulfillment-hold-resource --- ## New parameter on `fulfillmentServiceDelete` to control inventory behaviour on location removal As of GraphQL API version `2024-10` we will introduce a new enum field for the `fulfillmentServiceDelete` mutation. The `inventoryAction` field will allow partners to specifiy the behaviour regarding the inventory when deleting a fulfillment service. The options are: 1. `KEEP` - this option will convert a Fulfillment Service's locations to be owned by the merchant and therefore the inventory at those locations becomes the responsiblity of the merchant. 2. `DELETE` - this option, when there are no outstanding fulfillments, will delete the inventory at the location and then the location itself. 3. `TRANSFER` - this is the existing behaviour, where a `destinationLocationId` is provided as the destination to relocate the inventory to, before the location is deleted. If either `KEEP` or `DELETE` are provided, it is not possible to also specify a `destinationLocationId`. If `KEEP` is provided, then the merchant must have a sufficient remaining quota of locations on their plan for this operation to succeed, an error will be returned if they do not. *Published: October 01, 2024* Tags: API, Update Link: https://shopify.dev/changelog/new-parameter-on-fulfillmentservicedelete-to-control-inventory-behaviour-on-location-removal --- ## Order Management apps can no longer fulfill orders that are assigned to a different fulfillment service As of `2024-10`, the `write_third_party_fulfillment_orders` access scope permission will change for fulfillment creation. This access scope will no longer allow [order management apps](https://shopify.dev/docs/apps/build/orders-fulfillment/order-management-apps) to fulfill fulfillment orders assigned to locations owned by other fulfillment service apps. Order management apps will still be able to access and manage these orders, only fulfillment creation will be prohibited. The `write_assigned_fulfillment_orders` and `write_merchant_managed_fulfillment_orders` access scopes will remain unchanged. Fulfillment service apps will continue to be able to fulfill orders assigned to them as long as they have the `write_assigned_fulfillment_orders` access scope. Fulfillment orders assigned to merchant managed locations will continue to be fulfillable by order management apps as long as they have the `write_merchant_managed_fulfillment_orders` access scope. Apps can confirm whether or not fulfillment creation is possible by querying the available `supportedActions` through either the [GraphQL](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/FulfillmentOrder#field-supportedactions) or [REST](https://shopify.dev/docs/api/admin-rest/2024-10/resources/fulfillmentorder#get-fulfillment-orders-fulfillment-order-id) APIs. If the fulfillment order is assigned to a merchant managed location or to the fulfillment service performing the query and it is in a fulfillable state, `CREATE_FULFILLMENT` will be returned as a possible option. *Published: October 01, 2024* Tags: API, Update Link: https://shopify.dev/changelog/order-management-apps-can-no-longer-fulfill-orders-that-are-assigned-to-a-different-fulfillment-service --- ## Added FAILED_TO_RETRIEVE_BILLING_ADDRESS to CustomerPaymentMethodRevocationReason Enum As of GraphQL Admin API version 2024-10, the CustomerPaymentMethodRevocationReason object has a new enum value: `FAILED_TO_RETRIEVE_BILLING_ADDRESS`. This value is assigned when a customer payment method is missing the billing address field. *Published: October 01, 2024* Tags: API, Update Link: https://shopify.dev/changelog/added-failed_to_retrieve_billing_address-to-customerpaymentmethodrevocationreason-enum --- ## Removal of deprecated product image mutations from the GraphQL Admin API As of **2024-10**, we're removing the deprecated `productAppendImages`, `productDeleteImages`, `productImageUpdate` and `productReorderImages` mutations from public GraphQL API. Use the [productCreateMedia](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productCreateMedia), [productDeleteMedia](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productDeleteMedia), [productUpdateMedia](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productUpdateMedia) and [productReorderMedia](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productReorderMedia) mutation instead. *Published: October 01, 2024* Tags: API, Deprecation Announcement Link: https://shopify.dev/changelog/removal-of-deprecated-product-image-mutations-from-the-graphql-admin-api --- ## New `created_fulfillment_hold` field on `fulfillment_orders/placed_on_hold` webhook As of Admin API version 2024-10, you can use the `created_fulfillment_hold` field on `fulfillment_orders/placed_on_hold` webhook to see the fulfillment hold that was created. **Why was this field added** A fulfillment hold gets deleted when a hold is released. It is possible that the `FulfillmentOrder.FulfillmentHolds` field will be empty by the time the subscriber receives the webhook. The new field `created_fulfillment_hold` will always show hold that was created regardless of whether it has already been released/deleted. Learn more about `fulfillment_orders/placed_on_hold` webhook on [Shopify.dev](https://shopify.dev/docs/api/webhooks/2024-10?reference=toml#list-of-topics-fulfillment_orders/placed_on_hold). *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/new-created_fulfillment_hold-field-on-fulfillment_orders-placed_on_hold-webhook --- ## New webhook topic `app/scopes_update` As of Webhook API version `2024-10` and `unstable`, apps can 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. For example, an app that has enabled [Shopify managed install](https://shopify.dev/docs/apps/build/authentication-authorization/app-installation) is released with a new configuration that increased the requested scopes from `"read_customers"` to `"read_customers,read_discounts"`. Once a merchant opens the app and approves the `read_discounts` access scope this webhook will be emitted with payload: ```json { "id": 1234, "previous": [ "read_customers" ], "current": [ "read_customers", "read_discounts" ], "updated_at": "2024-10-01T00:00:00.000Z" } ``` Learn more about this webhook on [Shopify.dev](https://shopify.dev/docs/api/webhooks/unstable?reference=toml#list-of-topics-app/scopes_update) *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/new-webhook-topic-app-scopes_update --- ## Cart Warnings in Storefront API Cart As of API version 2024-10, inventory errors about stock levels will no longer be included in the `userErrors` of cart mutations. Inventory errors will now be available in a new return field, `warnings` and will contain explicit `code` values of `MERCHANDISE_NOT_ENOUGH_STOCK` or `MERCHANDISE_OUT_OF_STOCK`. Warnings will be available on all cart mutations to show automatic changes that occurred during the mutation. You can use warnings to manage items in your cart or display information to a buyer. For example, out of stock lines can be easily removed from a cart by using the `target` field included in the warning as the input to a call to `CartLineRemove`. Learn more about cart warnings on [Shopify.dev](https://shopify.dev/docs/storefronts/headless/building-with-the-storefront-api/cart/cart-warnings). *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/cart-warnings-in-storefront-api-cart --- ## Querying events through the `events` connection and `CommentEvent.subject` becomes nullable As of 2024-10, you can query [events](https://shopify.dev/docs/api/admin-graphql/unstable/interfaces/Event) by means of `eventsCount`, `event` and `events`. There has been the addition of an `events` connection on several types as well, allowing you to query the related events: - [Article](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Article) - [Blog](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Blog) - [Collection](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Collection) - [Comments](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Comment) - [Pages](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Page) - [ProductVariants](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ProductVariant) - [Products](https://shopify.dev/docs/api/admin-graphql/unstable/objects/Product) There has been one breaking change on the `CommentEvent.subject` field where we transitioned it to be nullable, null will be returned when the `subject`'s underlying data has been deleted, in the process we also deprected `deletionEvents` as these are now returned as an `Event`. When the `subject` is deleted, the REST API, will also return `null` for the `subject` property. *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/querying-events-through-the-events-connection-and-commentevent-subject-becomes-nullable --- ## Add subscription status updates to bulkOperationRunMutation Subscription Status updates can now be run with the bulkOperationRunMutation. The following mutations have been added: * `subscriptionContractActivate` * `subscriptionContractCancel` * `subscriptionContractExpire` * `subscriptionContractFail` * `subscriptionContractPause` See https://shopify.dev/docs/api/usage/bulk-operations/imports for more information. *Published: October 01, 2024* Tags: API, Update Link: https://shopify.dev/changelog/add-subscription-status-updates-to-bulkoperationrunmutation --- ## `ProductInput` split into `ProductCreateInput` and `ProductUpdateInput` in `2024-10` As of `2024-10` version of the Admin GraphQL API, the `ProductInput` object has been split into `ProductCreateInput` and `ProductUpdateInput`. The `productCreate` and `productUpdate` mutations now accept a new `product` argument using these types. The existing `input` field has been marked deprecated. Learn more about [ProductCreateInput](https://shopify.dev/docs/api/admin-graphql/2024-10/input-objects/ProductCreateInput) and [ProductUpdateInput](https://shopify.dev/docs/api/admin-graphql/2024-10/input-objects/ProductUpdateInput) on [Shopify.dev](https://shopify.dev/). *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/productinput-split-into-productcreateinput-and-productupdateinput-in-2024-10 --- ## Admin GraphQL API: new APIs for Pages, Articles, Blogs, and Comments now available in 2024-10 As of version 2024-10 of the Admin GraphQL API, you can now read and modify Pages, Articles, Blogs, Comments. `Page`, `Article`, and `Blog` types have replaced the `OnlineStorePage`, `OnlineStoreArticle`, and `OnlineStoreBlog` types in the API. Pages: * You can now create new pages using [`pageCreate`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/pageCreate), modify existing pages using [`pageUpdate`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/pageUpdate), and delete pages using [`pageDelete`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/pageDelete). * Pages can be queried using the new [`page`](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/page) or [`pages`](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/pages) queries. Articles: * You can now create new articles using [`articleCreate`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/articleCreate), modify existing articles using [`articleUpdate`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/articleUpdate), and delete articles using [`articleDelete`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/articleDelete). * Articles can be queried using the new [`article`](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/article) or [`articles`](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/articles) queries. Blogs: * You can now create new blogs using [`blogCreate`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/blogCreate), modify existing blogs using [`blogUpdate`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/blogUpdate), and delete blogs using [`blogDelete`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/blogDelete). * Blogs can be queried using the new [`blog`](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/blog) or [`blogs`](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/blogs) queries. Comments: * You can now modify existing comments using [`commentApprove`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/commentApprove), [`commentSpam`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/commentSpam), or [`commentNotSpam`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/commentNotSpam). Comments can be deleted with [`commentDelete`](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/commentDelete). * Comments can be queried using the new [`comment`](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/comment) or [`comments`](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/comments) queries *Published: October 01, 2024* Tags: API, New Link: https://shopify.dev/changelog/admin-graphql-api-new-apis-for-pages-articles-blogs-and-comments-now-available-in-2024-10 --- ## Deprecating explicit access grants for app-owned metafields [Specifying grants for specific apps](https://shopify.dev/docs/api/admin-graphql/2024-07/objects/MetafieldAccess#field-grants) on app-owned metafields is now deprecated. New apps will not be able to use this feature effective immediately. Existing apps will continue to have access. *Published: September 30, 2024* Tags: API, Deprecation Announcement Link: https://shopify.dev/changelog/deprecating-explicit-access-grants-for-app-owned-metafields --- ## Introducing theme and theme file management in the Admin GraphQL API As of API version 2024-10, you can use the admin API to manage Online Store Themes. This feature provides parity with our REST API for managing themes and theme files. # What's New ## New queries: * `theme` to query an individual theme by ID * `themes` to query many themes by role or name `OnlineStoreTheme` objects expose a `files` query which can be used to fetch the metadata and content of files in a theme. Multiple files can be requested at once, speeding up operations that need to fetch many files. ## New mutations for themes: * `themeCreate` - upload a new theme * `themeDelete` - delete an unpublished theme * `themePublish` - publish a theme * `themeUpdate` - update the name of a theme ## New mutations for theme files: * `themeFilesCopy` - copy files from one location to another * `themeFilesDelete` - delete files in a theme * `themeFilesUpsert` - write data to files in a theme Learn more about these changes on [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/OnlineStoreTheme) *Published: September 30, 2024* Tags: API, New Link: https://shopify.dev/changelog/introducing-theme-and-theme-file-management-in-the-admin-graphql-api --- ## Changing the default value of permitsSkuSharing argument in fulfillmentServiceCreate As of `2025-01`, the default value for the `permitsSkuSharing` argument in the `fulfillmentServiceCreate` mutation has been updated to true. Please be aware that this argument is deprecated and will be removed in the version `2025-04`. Consequently, all fulfillment services will be required to permit SKU sharing by default. *Published: September 25, 2024* Tags: API, Update Link: https://shopify.dev/changelog/changing-the-default-value-of-permitsskusharing-argument-in-fulfillmentservicecreate --- ## Introducing metafield definition capabilities in the admin API As of API version 2024-10, we're launching an API to manage metafield definition capabilities. This new feature provides a flexible and extensible way to define and manage behaviors for metafield definitions across various Shopify features. ## What's new? Metafield definition capabilities can be easily enabled, disabled, and queried through the Admin API ## What's next? In future API versions, we'll be introducing new capabilities to enhance metafield functionality across various Shopify features. Stay tuned for announcements about specific capabilities and how they can benefit your app or integration. Learn more about metafield capabilities at [Shopify.dev](https://shopify.dev/docs/apps/build/custom-data/metafields/use-metafield-capabilities) *Published: September 20, 2024* Tags: API, New Link: https://shopify.dev/changelog/introducing-metafield-definition-capabilities-in-the-admin-api --- ## Metafield Definition Capability Framework and Deprecation of `use_as_collection_condition` As of API version 2024-10, we're introducing the Metafield Definition Capability Framework and deprecating the `use_as_collection_condition` field on the Metafield Definition object. The new `smart_collection_condition` capability will replace the deprecated field, providing a more flexible and extensible way to manage metafield behaviors in smart collections. ## What's changing? - The `use_as_collection_condition` field on Metafield Definitions is being deprecated. - A new `smart_collection_condition` capability is being introduced as part of the Metafield Definition Capability Framework. ## Why it matters The new Capability Framework offers several benefits: 1. **Improved flexibility**: Capabilities can be easily added, removed, or modified without changing the core Metafield Definition structure. 2. **Better extensibility**: New capabilities can be introduced in the future without affecting existing implementations. 3. **Clearer semantics**: Capabilities provide a more explicit way to define metafield behaviors. ## How to update To prepare for this change, update your API calls and app logic as follows: 1. Instead of setting `use_as_collection_condition: true`, use: ```graphql capabilities: { smartCollectionCondition: { enabled: true } } ``` 2. When querying metafield definitions, check the `smart_collection_condition` capability instead of the `use_as_collection_condition` field: ```graphql query { metafieldDefinition(id: "gid://shopify/MetafieldDefinition/1234") { capabilities { smartCollectionCondition { enabled } } } } ``` ## Timeline - **API version 2024-10**: The new capability is available, and `use_as_collection_condition` is deprecated but still functional. - **Future version**: The `use_as_collection_condition` field will be removed entirely. We recommend updating your integrations to use the new capability as soon as possible to ensure a smooth transition. Learn more about metafield capabilities at [Shopify.dev](https://shopify.dev/docs/apps/build/custom-data/metafields/use-metafield-capabilities) Learn more about the Metafield Definition Capability Framework at [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/latest/objects/MetafieldDefinition). *Published: September 20, 2024* Tags: API, Deprecation Announcement Link: https://shopify.dev/changelog/metafield-definition-capability-framework-and-deprecation-of-use_as_collection_condition --- ## New inventory input fields in productSet mutation in version 2024-10 As of GraphQL API version `2024-10`, we are adding new inventory capabilities in the productSet mutation, in the form of a new field type **`ProductSetInventoryInput`**, which allows setting `available` or `on_hand` quantities for new and existing product variants on locations specified. This type can be used in the following contexts: * `ProductSetInput.inventoryQuantities` field to specify inventory quantities for products with no custom variants. * `ProductSetVariantInput.inventoryQuantities` field to specify inventory quantities for individual custom variants. For more detailed information and examples, visit our [productSet documentation](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/productSet) on Shopify.dev. *Published: September 19, 2024* Tags: API, New Link: https://shopify.dev/changelog/new-inventory-input-fields-in-productset-mutation-in-version-2024-10 --- ## Product Feed webhooks now support per-market inventory The `quantityAvailable` and `availableForSale` fields will now reflect country-specific inventory availability, scoped to the specified market country of the Product Feed. The Fulfillable Inventory feature must be enabled on the shop. Learn more about Fulfillable Inventory on the [Shopify help docs](https://help.shopify.com/en/manual/shipping/setting-up-and-managing-your-shipping/fulfillable-inventory?shpxid=9f72f39f-880B-480B-6688-54167E11AB9A). *Published: September 18, 2024* Tags: API, Update Link: https://shopify.dev/changelog/product-feed-webhooks-now-support-per-market-inventory --- ## Improvements in the GiftCard GraphQL endpoints and introducing GiftCardTransaction types As of the GraphQL Admin API version 2024-10, we're improving the `GiftCard` endpoints and introducing `GiftCardTransaction` types. The gift card endpoints are now open to all apps and shops, with no additional approval scopes or flags required. We have added the following mutations: * `giftCardDeactivate` renamed from `giftCardDisable` (deprecated). * `giftCardCredit` to apply credit to a gift card returning a `GiftCardCreditTransaction`. * `giftCardDebit` to apply debit to a gift card returning a `GiftCardDebitTransaction`. * `giftCardSendNotificationToCustomer` to send the notification to the customer. * `giftCardSendNotificationToRecipient` to send the notification to the recipient. We have updated the following mutations: * `giftCardCreate` to add `recipientAttributes`. * `giftCardUpdate` to add `recipientAttributes`. We have added and modified fields in the `GiftCard` object: * Added `updatedAt`. * Added `recipientAttributes`. * Added `transactions` returning all transactions created by credits and debits. * Renamed `disabledAt` to `deactivatedAt` (deprecated). ### Developer action required Developers using the existing `giftCardDisable` mutation will need to replace it with `giftCardDeactivate` Developers using the `disableAt` property on the `GiftCard` object will need to replace it with `deactivatedAt` To learn more about gift cards, refer to the [gift cards](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/GiftCard) documentation. To learn more about gift card recipient functionality, refer to the help center documentation for [recipient fields](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/add-gift-card-recipient-fields) *Published: September 17, 2024* Tags: API, Update Link: https://shopify.dev/changelog/improvements-in-the-giftcard-graphql-endpoints-and-introducing-giftcardtransaction-types --- ## The fulfillmentOrdersReleaseHolds Mutation Is Deprecated As of the Admin API version 2024-10, the [fulfillmentOrdersReleaseHolds](https://shopify.dev/docs/api/admin-graphql/2024-07/mutations/fulfillmentOrdersReleaseHolds) mutation has been deprecated. Apps using this mutation should migrate to using the [fulfillmentOrderReleaseHold](https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentOrderReleaseHold) mutation instead. *Published: September 16, 2024* Tags: API, Deprecation Announcement Link: https://shopify.dev/changelog/the-fulfillmentordersreleaseholds-mutation-is-deprecated --- ## Admin API includes `urlRedirectsCount` As of Admin GraphQL API version `2024-10`, you can access `QueryRoot.urlRedirectsCount` field to retrieve the count of redirects. Learn more about `urlRedirectsCount` on [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/urlRedirectsCount). *Published: September 16, 2024* Tags: API, New Link: https://shopify.dev/changelog/admin-api-includes-urlredirectscount --- ## New query attributes on products query As of the **2024-10** version of the GraphQL Admin API, the `products` query filter has been expanded to allow filtering on additional attributes: `publication_ids`, `variant_id` and `variant_title`. Check out all [products query attributes](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/products#argument-query) at [shopify.dev](https://shopify.dev/) for more details. *Published: September 16, 2024* Tags: API, New Link: https://shopify.dev/changelog/new-query-attributes-on-products-query --- ## Field deprecations on the abandoned checkout REST API The following fields have been deprecated from the [Abandoned Checkout REST API](https://shopify.dev/docs/api/admin-rest/unstable/resources/abandoned-checkouts): `cart_token`, `closed_at`, `currency`, `gateway`, `landing_site`, `fulfillment_service`, `grams`, `presentment_currency`, `referring_site`, `shipping_lines`, `token` and `total_weight` fields As of 2024-10, the endpoint is available via the [newly published GraphQL abandoned checkout API](https://shopify.dev/changelog/new-abandoned-checkouts-listing-endpoint-on-the-admin-graphql-api). *Published: September 13, 2024* Tags: API, Deprecation Announcement Link: https://shopify.dev/changelog/field-deprecations-on-the-abandoned-checkout-rest-api --- ## Fulfillment Holds Now Able To Be Released by ID As of the GraphQL Admin API version 2024-10, a `id` field is being added to the `FulfillmentHold` GraphQL object. As of the GraphQL Admin API version 2024-10, an optional `holdIds` argument is being added to the [fulfillmentOrderReleaseHold](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/fulfillmentOrderReleaseHold) mutation. This will give apps the ability to release a hold by ID, ensuring that only the intended hold is released. **It is highly recommended that apps supply the ids of any holds when releasing them**. Releasing all holds on a fulfillment order will result in the fulfillment order being released prematurely and items being incorrectly fulfilled. *Published: September 13, 2024* Tags: API, New Link: https://shopify.dev/changelog/fulfillment-holds-now-able-to-be-released-by-id ---