# Recent changes to Shopify’s platform --- ## Now available: JS Buy SDK v3.0 We released the last and final version of JavaScript Buy SDK v3.0 to extend its useful life following the [Checkout API deprecation](https://shopify.dev/changelog/deprecation-of-checkout-apis). Upgrading to v3.0 will extend the grace period of SDK's `.checkout` interface by replacing it with an equivalent interface based on the [Cart API](https://shopify.dev/docs/api/storefront/2025-01/objects/Cart) with some limitations inherent to the different scope of both APIs. See this [upgrade guide](https://github.com/Shopify/js-buy-sdk/blob/main/README.md#how-to-upgrade-to-v30) with supported use cases to help the transition. The other option to remain operational is to switch to the [Storefront API Client](https://github.com/Shopify/shopify-app-js/tree/main/packages/api-clients/storefront-api-client#readme), which manages the API’s authentication information and provides various methods that enable devs to interact with the API. See this [migration guide](https://github.com/Shopify/js-buy-sdk/tree/main/migration-guide) for more details. **Critical Deadline: July 1, 2025 11:00 AM ET**. You must implement one of these changes by this date, or customers will not be able to complete purchases. Please choose the option that best suits your needs and timelines. *Published: March 14, 2025* Tags: API, Breaking API Change Link: https://shopify.dev/changelog/now-available-js-buy-sdk-v30 --- ## Adding defaultPhoneNumber field to Customer As of GraphQL Admin API version **2025-04**, the `defaultPhoneNumber` field is introduced on the `Customer` object to support querying a customer's phone number and marketing state. Learn more about the `Customer` fields on [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/2025-04/objects/Customer). *Published: March 11, 2025* Tags: API, New Link: https://shopify.dev/changelog/adding-defaultphonenumber-field-to-customer --- ## End of Compatibility for Old POS UI Extensions Versions [Shopify's API version policy](https://shopify.dev/docs/api/usage/versioning) supports stable versions for 12 months. With the release of Shopify API 2025.04, we will discontinue support for the following POS UI Extension versions: - 1.0.0 - 1.0.1 - 1.1.2 - 1.2.0 - 1.3.0 - 1.4.0 - 1.5.1 - 1.6.0 - 1.7.0 - 2024-04 Starting with POS version 9.31, POS UI extensions built on these unsupported versions will no longer function. If your application uses any of these versions, please update to the latest POS UI Extension version to ensure continued functionality and support. *Published: March 07, 2025* Tags: API, Deprecation Announcement Link: https://shopify.dev/changelog/end-of-compatibility-for-old-pos-ui-extensions-versions --- ## New developer documentation now available for Shopify Collective As of March 6, 2025, you can access the new [developer documentation](https://shopify.dev/docs/apps/build/collective) for Shopify Collective. This resource is designed to help developers integrate seamlessly with Shopify Collective, especially when working with external dependencies like third-party ERP and PIM solutions. The documentation provides clear guidance on using Shopify's API and webhooks to integrate your existing workflows into the Collective ecosystem. *Published: March 07, 2025* Tags: API, New Link: https://shopify.dev/changelog/shopify-collective-developer-documentation --- ## Storefront API Cart now includes payment information As of version 2025-04 of the GraphQL Storefront API, the Cart object includes a `payment` field that indicates whether a payment has been added. Additionally, it is possible to determine the type of payment involved. *Published: March 07, 2025* Tags: API, Update Link: https://shopify.dev/changelog/storefront-api-cart-now-includes-payment-information --- ## POS UI Extensions: Modal update In POS version 9.30, the POS UI Extensions modal will be enhanced to prevent accidental dismissals. You won't be able to dismiss the modal by swiping down or tapping outside of it. This update is designed to improve user experience and ensure that important information remains accessible. [Learn more about POS UI Extensions here](https://shopify.dev/docs/api/pos-ui-extensions/2025-01/versions). *Published: March 06, 2025* Tags: API, Update Link: https://shopify.dev/changelog/pos-ui-extensions-modal-update --- ## orderEditAddVariant mutation applies contextual pricing by default As of the 2025-04 API version, the [`OrderEditAddVariant`](https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/orderEditAddVariant) API will adhere to the pricing configurations set for Markets and Company Locations. This means that any variant added to an order will automatically apply the appropriate pricing context based on the specified market or company location settings. *Published: March 05, 2025* Tags: API, Breaking API Change Link: https://shopify.dev/changelog/order-edit-add-variant-mutation-applies-contextual-pricing-by-default --- ## [Cart AJAX API] Inventory error message updates We are updating the error messages in the AJAX API for cases where a client requests more inventory than is available. * If no inventory of a variant is in the cart and the client requests more than is available, the error message will be: "Only *available quantity* items were added to your cart." * If all available inventory of a variant is already in the cart and the client requests more, the error message will be: "The maximum quantity of this item is already in your cart." These changes will affect the `add.js`, `change.js`, and `update.js` endpoints. *Published: March 04, 2025* Tags: API, New Link: https://shopify.dev/changelog/cart-ajax-api-inventory-error-message-updates --- ## Introducing the .dev Assistant VSCode Extension We're excited to announce the release of the new .dev Assistant extension for VSCode! Now, you can harness the full potential of the dev assistant directly within your favorite code editor to streamline your development workflow. Download [the dev assistant extension on VSCode](https://marketplace.visualstudio.com/items?itemName=Shopify.vscode-shopify-dev-assistant) and take it for a spin! *Published: March 03, 2025* Tags: Tools, New Link: https://shopify.dev/changelog/introducing-the-dev-assistant-vscode-extension --- ## New GraphQL APIs for Inventory Transfers Management With the introduction of the new Transfers APIs and webhooks, merchants and developers can now seamlessly integrate inventory transfer data between Shopify and external systems such as Inventory Management Systems (IMS) or Enterprise Resource Planning (ERP) systems. This integration enables users to view, create, edit, delete, duplicate, and mark transfers as ready to ship. Additionally, we are launching new Shipment APIs that allow for the creation and management of multiple shipments associated with these transfers. These APIs are currently available in the `unstable` API version, which is a preliminary phase for testing and feedback. They're intended to be added to the release candidate by July 2025. For more details, please refer to the [Shopify API documentation](https://shopify.dev/docs/api/admin-graphql/unstable/mutations/inventoryTransferCreate). *Published: March 03, 2025* Tags: API, New Link: https://shopify.dev/changelog/new-graphql-apis-for-inventory-transfers-management --- ## Checkout APIs will be shut down April 1, 2025 Reminder: The Checkout APIs (Storefront Checkout Mutations and REST Checkout Endpoints) are deprecated and [will be shut off](https://shopify.dev/changelog/deprecation-of-checkout-apis?utm_source=mozart&utm_medium=email&utm_campaign=checkoutapideprecation&utm_content=30daynotice) on April 1, 2025. Customers will not be able to create or complete checkouts using the deprecated Checkout APIs after the deadline. To prevent disruptions, all impacted apps, including mobile apps, need to [update to the Storefront Cart API](https://shopify.dev/docs/storefronts/headless/building-with-the-storefront-api/cart/migrate-to-cart-api) before April 1, 2025. In addition to the Storefront Cart API, mobile apps can also adopt [Checkout Sheet Kit](https://shopify.dev/docs/storefronts/headless/mobile-apps/checkout-sheet-kit). *Note: This change is unrelated to the prior move from checkout.liquid to Checkout Extensibility.* *Published: March 02, 2025* Tags: API, Deprecation Announcement Link: https://shopify.dev/changelog/checkout-apis-will-be-shut-down-april-1-2025 --- ## AMAZON_PAY enumerated in DigitalWallets The [`DigitalWallet`](https://shopify.dev/docs/api/storefront/2025-04/enums/DigitalWallet) enum type will now include `AMAZON_PAY` This adds Amazon Pay as an enumerated wallet on the Storefront and GraphQL Admin APIs. On a query for [`shop.paymentDetails.supportedDigitalWallets`](https://shopify.dev/docs/api/admin-graphql/2025-04/objects/PaymentSettings#field-supporteddigitalwallets) including this value indicates that the AmazonPay wallet is active on the merchant storefront. This also enables visibility of AMAZON_PAY as a value on the [`wallet`](https://shopify.dev/docs/api/admin-graphql/2025-04/objects/CardPaymentDetails#field-wallet) field of the on [`CardPaymentDetails`](https://shopify.dev/docs/api/admin-graphql/2025-04/objects/CardPaymentDetails) object. Previously, transactions using Amazon Pay would have a null `wallet` value. *Published: February 28, 2025* Tags: API, New Link: https://shopify.dev/changelog/amazonpay-enumerated-in-digitalwallets --- ## The `X-Shopify-API-Deprecated-Reason` HTTP header will return actual GraphQL deprecations if any As of `2025-04`, the `X-Shopify-API-Deprecated-Reason` HTTP header will return the list of detected deprecations instead of a generic URL. **Example** As of `2025-04`: `X-Shopify-API-Deprecated-Reason: Shop.products, Shop.productVariants` Before `2025-04`: `X-Shopify-API-Deprecated-Reason: https://shopify.dev/api/usage/versioning#deprecation-practices` *Published: February 24, 2025* Tags: API, Update Link: https://shopify.dev/changelog/graphql-return-actual-deprecation-reasons --- ## New customer address capabilities in the Admin API Starting with API version 2025-04, we've enhanced the Admin API with new capabilities for managing customer addresses. You can now efficiently create, update, and delete customer addresses using the following mutations: `customerAddressCreate`, `customerAddressUpdate`, and `customerAddressDelete`. Both create and update mutations allow the address to be the default address for the customer with the `setAsDefault` argument set to true. See more in the docs: - [customerAddressCreate](https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/customerAddressCreate) - [customerAddressUpdate](https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/customerAddressUpdate) - [customerAddressDelete](https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/customerAddressDelete) *Published: February 20, 2025* Tags: API, New Link: https://shopify.dev/changelog/new-customer-address-capabilities-in-the-admin-api --- ## Metafield description input field removal The `description` field on metafield is being removed from the [`MetafieldInput`](https://shopify.dev/docs/api/admin-graphql/unstable/input-objects/MetafieldInput) GraphQL input object. The change will appear in `unstable` and will be included in the `2025-07` API version. The `description` field is optional and isn't exposed to merchants. You can safely stop including the field in queries and mutations. If you want to set or get the description of a metafield, use the `description` field on [`MetafieldDefinition`](https://shopify.dev/docs/api/admin-graphql/unstable/objects/MetafieldDefinition). *Published: February 20, 2025* Tags: API, Breaking API Change Link: https://shopify.dev/changelog/metafield-description-field-removal --- ## Reserved prefix protection for metafields and metaobjects Starting today, [reserved prefixes](https://shopify.dev/docs/apps/build/custom-data/ownership#reserved-prefixes) have been widened to include any phrase. You can no longer make any metafield namespace or metaobject type that includes `--` (e.g., `foo--` , `foo--bar` ). This only affects new metafield and metaobject definitions; existing definitions will continue to work as before. This change is intended to reserve the `--` format for platform defined features such as `shopify--{standard}` and `app--{your-app-id}`. *Published: February 19, 2025* Tags: API, Update Link: https://shopify.dev/changelog/reserved-prefix-protection-for-metafields-and-metaobjects --- ## No-op for unchanged metafields and metaobjects Starting today, when updating metafields and metaobjects, we'll skip triggering webhooks and related actions if the new value matches the existing one. This optimization eliminates unnecessary processing and improves system performance. The change is rolling out iteratively across metafield and metaobject operations. *Published: February 18, 2025* Tags: API, Update Link: https://shopify.dev/changelog/no-op-for-unchanged-metafields-and-metaobjects --- ## New ends_at, created_at, and updated_at query filter parameters for searching discounts As of API version 2025-04, we've added new `ends_at`, `created_at`, and `updated_at` filters to the `discountNodes` query, in order to provide greater flexibility in managing and viewing discounts using the GraphQL Admin API. The `ends_at`, `created_at`, and `updated_at` query filter parameters allow you to find discounts that will end at, were created at, or were last updated at a given time range. For more information about the discountNodes query, please refer to our [documentation](https://shopify.dev/docs/api/admin-graphql/2025-04/queries/discountNodes). *Published: February 17, 2025* Tags: API, New Link: https://shopify.dev/changelog/new-endsat-createdat-and-updatedat-query-filter-parameters-for-searching-discounts --- ## Explicit access grants for metafields removed Completing the transition that began with the [deprecation of explicit grants](https://shopify.dev/changelog/deprecating-explicit-access-grants-for-app-owned-metafields), existing explicit grants in the system will stop working on February 24, 2025. *Published: February 17, 2025* Tags: API, Breaking API Change Link: https://shopify.dev/changelog/explicit-access-grants-for-metafields-full-deprecation --- ## Hydrogen February 2025 release The February 2025 Hydrogen release contains several upgrades: * Turn on Remix future flag `v3_singleFetch` ([#2708](https://github.com/Shopify/hydrogen/pull/2708)) * Bump Remix package dependency to 2.15.3 ([#2740](https://github.com/Shopify/hydrogen/pull/2740)) * Decoupled dependency on eslint ([#2716](https://github.com/Shopify/hydrogen/pull/2716)) * B2B methods and props are now stable ([#2736](https://github.com/Shopify/hydrogen/pull/2736)) * Pass i18n context automatically to customer account login ([#2746](https://github.com/Shopify/hydrogen/pull/2746)) * Update getProductOptions to handle combined listing products with divergent options ([#2747](https://github.com/Shopify/hydrogen/pull/2747)) Check out our full [Hydrogen February 2025 release blog post](https://hydrogen.shopify.dev/update/january-2025) for more details. And please drop your comments, feedback, and suggestions in [GitHub Discussions](https://github.com/Shopify/hydrogen/discussions)! *Published: February 15, 2025* Tags: Platform, Update Link: https://shopify.dev/changelog/hydrogen-february-2025-release --- ## `NON_TEST_ORDER_LIMIT_REACHED` error code for subscriptions billing attempts We added a `NON_TEST_ORDER_LIMIT_REACHED` field to the `SubscriptionBillingAttemptErrorCode` enum. This indicates that you've reached the order limit with this payment processor, and you'll need to [use a test payment gateway to place another order](https://help.shopify.com/en/partners/dashboard/managing-stores/test-orders-in-dev-stores). *Published: February 15, 2025* Tags: API, Update Link: https://shopify.dev/changelog/nontestorderlimitreached-error-for-subscriptions-billing-attempts --- ## Liquid arrays now support the `find`, `find_index`, `has`, and `reject` filters We’ve introduced the following new filters to improve how you handle arrays in your Liquid templates. Now, you can quickly retrieve or check for items in an array without writing verbose loops or complex conditional logic. - **`find`**: Returns the first item that matches your condition - **`find_index`**: Returns the index of the item that matches your condition - **`has`**: Returns `true` when the array includes an item that matches your condition - **`reject`**: Returns an array without items matching your condition These filters make your Liquid code more concise and declarative. To learn more, check out the [Liquid arrays API docs](https://shopify.dev/docs/api/liquid/filters/array-filters). Happy coding! *Published: February 12, 2025* Tags: Themes, New Link: https://shopify.dev/changelog/liquid-arrays-now-support-the-find-findindex-has-and-reject-filters --- ## Attribute Marketing Consent to Retail Locations You can now attribute customer marketing consent to a specific source location. This enhancement allows you to track marketing opt-in rates by retail location and provides better visibility into how customer marketing opt-ins are captured. The `CustomerEmailMarketingConsentState` and `CustomerSmsMarketingConsentState` GraphQL APIs can now return the retail location where the marketing consent state was last updated, when applicable. New fields: * `CustomerEmailMarketingConsentState.sourceLocation` * `CustomerSmsMarketingConsentState.sourceLocation` For more information on using the GraphQL Admin API to query customer data, please refer to the [API documentation](https://shopify.dev/docs/api/admin-graphql/2025-04/objects/Customer). *Published: February 07, 2025* Tags: API, New Link: https://shopify.dev/changelog/track-the-retail-locations-where-your-customers-update-their-marketing-consent --- ## Updated Country Harmonized System Code validations on Product Variant mutations Starting with the Admin GraphQL API version 2025-04, all Product Variant mutations will include validations to ensure that any country-specific harmonized system codes provided in the input are compatible with the existing codes on the Inventory Item. These country-specific codes must be prefixed with the item's global harmonized system code and must be at least six characters long. If the input country HS codes do not meet these criteria, a user error will be returned, specifying the invalid input index and providing an error message. The following Admin GraphQL API Product Variant mutations will incorporate these validations starting from API version 2025-04: - ProductVariantsBulkCreate - ProductVariantsBulkUpdate - ProductVariantCreate - ProductVariantUpdate - ProductSet *Published: February 07, 2025* Tags: API, Breaking API Change Link: https://shopify.dev/changelog/updated-country-harmonized-system-code-validations-on-product-variant-mutations --- ## Flow: Template extensions no longer block deploys Going forward, when you use `app deploy` to push updated or new Flow template extensions, your app will be deployed immediately. After deployment, Flow will review the template extension. If it is approved, the template will appear in Flow's template library. If it is not approved, you will receive an email detailing the necessary changes. Once you have made these changes, you can redeploy your app. *Published: February 07, 2025* Tags: Platform, Update Link: https://shopify.dev/changelog/flow-template-extensions-no-longer-block-deploys --- ## Discounts reference docs improvements We’ve rewritten our most-visited and least-loved docs in the **Discounts and marketing** section of the [GraphQL Admin API reference](https://shopify.dev/docs/api/admin-graphql). You've shared many helpful comments and questions through our **Was this page helpful?** form, and we’ve reviewed and addressed 100% of them. Here’s the lowdown on the latest updates. ## Better descriptions Many of our descriptions were too brief, circular (restated the method name), expected too much Shopify knowledge, or didn’t link to other relevant docs. We’ve thoroughly revamped descriptions for Discounts objects, queries (including query filters), mutations, and input objects to include all the details you need without any guesswork. We also added more links to relevant tutorials to make it easier to find your way around and speed up your coding process. ![Improved descriptions for `discountCodeApp` object](https://cdn.shopify.com/s/files/1/0262/2383/7206/files/discountCodeApp-descs.png?v=1738628466) ## Better examples We know how helpful it is to see code in action! That’s why we’ve added more real-world examples for common use cases. We added examples across top Discounts pages, especially for pages with 0 examples going in. ![Improved examples for `automaticDiscountNode` query](https://cdn.shopify.com/s/files/1/0262/2383/7206/files/automaticDiscountNode-examples.png?v=1738628608) ## Thanks for your feedback! These updates are all about making your life easier. Less time scratching your head or making guesses means more time building amazing things! We'd love to know what you think—where have these updates helped, and where else in the Admin API docs would you like to see improvements? You can leave comments by clicking the **Was this page helpful?** button on Shopify.dev. *Published: February 07, 2025* Tags: API, Update Link: https://shopify.dev/changelog/discounts-reference-docs-improvements --- ## Support added for app-owned metafields In the `2025-04` API versions of Checkout and Customer Account UI extension APIs, we've enhanced the `appMetafield` API to support reading app owned metafields. These metafields give you greater control over your application's data, as your app manages both the data and its visibility. To read app-owned metafields, you must request them in your extension configuration `toml` file using the `$app` format in the namespace. This configuration makes app-owned metafields accessible through the `appMetafield` API in your UI extension code. Note that while you can read these metafields, writing to them is not permitted. Currently, app-owned metafields are available in the `unstable` version and will be included in stable versions starting from `2025-04`. For more details, please refer to the metafield configuration guide for the [Checkout UI extensions API](https://shopify.dev/docs/api/checkout-ui-extensions/unstable/apis/metafields) or the [Customer Account UI extensions API](https://shopify.dev/docs/api/customer-account-ui-extensions/unstable/configuration#metafields). *Published: February 07, 2025* Tags: API, New Link: https://shopify.dev/changelog/support-added-for-app-owned-metafields-in-checkout-ui-extension-api --- ## Events and Origins in Store Credit Account Transactions As of Admin API version 2025-01, we've enhanced the store credit transaction object with two new features to provide more detailed insights into store credit transactions. **New Types Introduced:** - [`StoreCreditAccountTransactionOrigin`](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountCreditTransaction#field-origin): This type identifies the origin of a store credit transaction, offering additional context and traceability. - [`StoreCreditSystemEvent`](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountCreditTransaction#field-event): This type details system events related to store credit transactions, facilitating improved tracking and auditing. **New Fields Added to Transaction Objects:** - The `event` and `origin` fields are now part of the following transaction object types: - [`StoreCreditAccountCreditTransaction`](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountCreditTransaction) - [`StoreCreditAccountDebitRevertTransaction`](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountDebitRevertTransaction) - [`StoreCreditAccountDebitTransaction`](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountDebitTransaction) - [`StoreCreditAccountExpirationTransaction`](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountExpirationTransaction) - [`StoreCreditAccountTransaction`](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountCreditTransaction) These enhancements allow you to access event and origin data for each transaction, enriching the store credit transaction data. By utilizing these new fields, you can gain deeper insights into transaction histories, enhancing financial reporting and customer service. For detailed implementation instructions, please refer to our [documentation](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/StoreCreditAccountCreditTransaction). *Published: February 01, 2025* Tags: API, New Link: https://shopify.dev/changelog/events-and-origins-in-store-credit-account-transactions --- ## Removing unnecessary `RELEVANCE` sort options `RELEVANCE` will no longer be included in connection sort options by default as of `2025-04` API versions. This will eliminate cases where the option offered no unique behavior, and acted as a basic `ID` sort. Legitimate cases where this option provides unique capabilities and services regular traffic will not change. *Published: February 01, 2025* Tags: API, Breaking API Change Link: https://shopify.dev/changelog/removing-unnecessary-relevance-sort-options --- ## Hydrogen January 2025 release The January 2025 Hydrogen release contains several upgrades: * Turn on Remix future flag `v3_lazyRouteDiscovery` ([#2702](https://github.com/Shopify/hydrogen/pull/2702)) * Update SFAPI to 2025-01 ([#2715](https://github.com/Shopify/hydrogen/pull/2715)) * Workaround for “Error: failed to execute ‘insertBefore’ on ‘Node’” that sometimes happen during development ([#2701](https://github.com/Shopify/hydrogen/pull/2701)) * Bump vite, Remix package versions and bump tailwind v4 alpha to beta ([#2696](https://github.com/Shopify/hydrogen/pull/2696)) * Fix `getProductOptions` crashing when one of the variant returns a null `firstSelectableVariant` ([#2704](https://github.com/Shopify/hydrogen/pull/2704)) * Fix `decodeEncodedVariant` when option value encoding does not end with a control character ([#2721](https://github.com/Shopify/hydrogen/pull/2721)) * Remove deprecated prop `customerAccountUrl` from `createCustomerAccountClient` ([#2730](https://github.com/Shopify/hydrogen/pull/2730)) Check out our full [Hydrogen January 2025 release blog post](https://hydrogen.shopify.dev/update/january-2025) for more details. And please drop your comments, feedback, and suggestions in [GitHub Discussions](https://github.com/Shopify/hydrogen/discussions)! *Published: January 31, 2025* Tags: Platform, Update Link: https://shopify.dev/changelog/hydrogen-january-2025-release --- ## New `event` and `origin` fields for store credit transactions As of `2025-04`, the `event` and `origin` fields have been added to store credit transactions for the Customer Account GraphQL API. `event`: Track what triggered a store credit transaction through the `StoreCreditSystemEvent` enum, which includes: * Order payments and refunds * Order cancellations * Payment failures and returns * Tax finalization adjustments * Manual adjustments `origin`: Identify the source of the transaction, with the ability to reference back to the originating `OrderTransaction` when applicable. Additionally, we've made the `order` field accessible on `OrderTransaction` objects, allowing you to easily navigate from a transaction to its associated order. For detailed documentation on using these new fields, visit [Shopify.dev](https://shopify.dev/docs/api/customer/2025-01/interfaces/StoreCreditAccountTransaction). *Published: January 30, 2025* Tags: API, New Link: https://shopify.dev/changelog/new-event-and-origin-fields-for-store-credit-transactions --- ## New Catalog APIs As of April 2025, the Catalog APIs have been updated to support changes in how markets are managed. For more details, see the [New Markets APIs](https://shopify.dev/changelog/new-markets-apis). With these updates, multiple markets can now be assigned to a single catalog. Consequently, the [`MarketCatalog.markets`](https://shopify.dev/docs/api/admin-graphql/2025-04/objects/MarketCatalog#connection-markets) connection will no longer guarantee the return of a single entry. Additionally, the `Market` object now supports new conditions. Previously, only `RegionConditions` were available for a market; now, `CompanyLocationConditions` are also supported. To maintain the existing behavior and access only `Regions`, you must update the `markets` connection by using the `type: REGION` argument. *Published: January 29, 2025* Tags: API, Breaking API Change Link: https://shopify.dev/changelog/new-catalog-apis --- ## Payout statuses In Transit and Scheduled have been merged # Deprecation Announcement: Payout Status Changes We’ve made a significant update to the payout statuses in our system. As part of our ongoing efforts to streamline and enhance your experience, we have merged the payout statuses "In Transit" and "Scheduled" into a single status: **Scheduled**. ## Key Changes - **Merged Payout Statuses:** The previous statuses of "In Transit" and "Scheduled" will now be represented simply as **Scheduled**. ## What You Need to Do - If you have been utilizing the "In Transit" status in your workflows or integrations, please update your systems to just recognize the **Scheduled** status moving forward. This change will ensure that you continue to receive accurate information regarding your payouts. ## Why This Change? We made this decision to simplify the payout tracking process, improve clarity, and enhance your overall experience with our services. ## Deprecation Date This change is effective immediately, and the statuses will be adjusted in your dashboards and API responses. For more detailed information on this change, please refer to our [documentation](https://shopify.dev/docs/api/admin-graphql/2025-01/enums/ShopifyPaymentsPayoutStatus). We appreciate your understanding and support as we continually work to improve our services for you. *Published: January 29, 2025* Tags: API, Deprecation Announcement Link: https://shopify.dev/changelog/payout-statuses-in-transit-and-scheduled-have-been-merged --- ## shop.metaobjects is now just metaobjects in liquid We've simplified access to metaobjects in Liquid. You can now access metaobjects using the streamlined syntax `metaobjects.type.handle`, aligning with conventions used for other resource types. This new approach is more standardized and is now the preferred method. The previous access syntax, `shop.metaobjects.type.handle`, remains functional and backward compatible but is officially deprecated. [Learn more](https://shopify.dev/docs/api/liquid/objects/metaobject) about metaobjects in liquid *Published: January 28, 2025* Tags: API, Update Link: https://shopify.dev/changelog/shopmetaobjects-is-now-just-metaobjects-in-liquid --- ## New creation, update, and status filters for subscriptionContracts As of API version 2025-04, you can now sort the subscriptionContracts query results by `created_at`, `updated_at`, and `status` filters in both the admin and customer account APIs. The ability to sort subscription contracts simplifies tracking and prioritizing by allowing you to quickly organize and view information based on when they were created, updated, or their current status. For more information, please refer to our documentation: - Learn how to [implement sorting](https://shopify.dev/docs/api/admin-graphql/2025-04/queries/subscriptionContracts#argument-query) in the admin API. - Explore [sorting filters](https://shopify.dev/docs/api/customer/2025-04/objects/Customer#connection-subscriptioncontracts) in the customer account API. *Published: January 25, 2025* Tags: API, New Link: https://shopify.dev/changelog/subscription-contracts-filters --- ## Apps will be reviewed for necessary scopes Starting February 1, 2025, all apps submitted to the Shopify App Store will be checked for scopes that require Shopify permission for approved use cases. Apps that have unnecessary scopes, or are using scopes for non-approved use cases will have these scopes removed. To learn more about these scopes, please visit the `API access` page in your Partner Dashboard. *Published: January 24, 2025* Tags: Shopify App Store, New Link: https://shopify.dev/changelog/apps-will-be-reviewed-for-necessary-scopes --- ## Record partial payments on Orders As of `2025-04` partial payments can be recorded on orders using the new [orderCreateManualPayment](https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/orderCreateManualPayment) mutation. This allows the recording of multiple separate payments, up to the total amount owing on the order. *Published: January 24, 2025* Tags: API, New Link: https://shopify.dev/changelog/record-partial-payments-on-orders --- ## Optional `role` argument for `themeCreate` mutation We've added an optional [`role` argument](/docs/api/admin-graphql/2025-04/mutations/themeCreate#argument-role) on the `themeCreate` mutation, which allows clients to specify a role for the newly created theme. Only `UNPUBLISHED` and `DEVELOPMENT` roles are permitted for newly created themes. *Published: January 23, 2025* Tags: API, New Link: https://shopify.dev/changelog/optional-role-argument-for-theme-create-mutation --- ## InventoryItem Queryable and Updatable with Products Scopes The scopes for the [InventoryItemInput](https://shopify.dev/docs/api/admin-graphql/2025-01/input-objects/InventoryItemInput) input object and the [InventoryItem](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/InventoryItem) object have been relaxed. These objects can now be updated and queried using the `write_products` and `read_products` scopes, respectively. Specifically, the following changes have been made: - The `InventoryItemInput` can now be set within `product*` mutations using only the `write_products` scope. - The `InventoryItem` can be queried with either the `read_products` or `read_inventory` scope. However, the following restrictions still apply: - The `inventoryLevel` cannot be queried from the `InventoryItem` object without the `read_inventory` scope. - The `location` cannot be queried without the `read_locations` scope. These changes are applicable across all API versions. *Published: January 22, 2025* Tags: API, New Link: https://shopify.dev/changelog/inventoryitem-queryable-and-updatable-with-products-scopes --- ## Support added for $app in product queries by metafield We now support querying products by app-owned metafields with a saved namespace using the `$app` syntax. To include an app-owned metafield in your query, you can use the syntax `metafields.$app.key:\"value\"` or `metafields.$app\\:optional-additional-text.key:\"value\"`. [As documented](https://shopify.dev/docs/api/usage/search-syntax#special-characters), special characters need to be escaped from queries. For this reason, you need a `\\` when specifying `:`. For example, suppose you have an app-owned metafield with the optional-additional-text `swatch-app` and key `color` with a value of `green`. To query for products with this metafield, you would use the following search syntax: `"metafields.$app\\:swatch-app.color:\"green\""` Learn more about [querying products by metafield value](https://shopify.dev/docs/apps/build/custom-data/metafields/query-by-metafield-value) and [creating metafields with reserved namespaces](https://shopify.dev/docs/apps/build/custom-data/ownership#create-metafield-definitions-with-reserved-namespaces). *Published: January 20, 2025* Tags: API, Update Link: https://shopify.dev/changelog/support-added-for-app-namespaces-in-product-queries-by-metafield --- ## Continuous cart authentication We’ve recently rolled out a change that enables continuous authentication when a customerAccessToken is appended to the cart in the buyerIdentity object. The obtained checkoutUrl allows authenticated customers to navigate to a logged-in checkout experience. Note that for security reasons, the checkoutUrl should be requested when the customer is ready to navigate to checkout, which can be re-requested if needed. To log in customers automatically at checkout, please [append the customerAccessToken](https://shopify.dev/docs/storefronts/headless/building-with-the-storefront-api/cart/manage#step-6-authenticate-customer-for-logged-in-checkouts) into the Buyer Identity object of the Storefront API Cart and [include the buyer IP address](https://shopify.dev/docs/api/usage/authentication#making-server-side-requests) when making server side requests. For developers building mobile apps with the Checkout Sheet Kit, see this [detailed guide](https://shopify.dev/docs/storefronts/headless/mobile-apps/checkout-sheet-kit/authenticate-checkouts) to create authenticated checkout experiences for buyers within mobile apps. Previously, opening an authenticated checkout was only possible using multipass limited to Shopify Plus plans and legacy customer accounts. Now, authenticated checkouts are possible for merchants on all plans and customer account versions. *Published: January 16, 2025* Tags: API, Update Link: https://shopify.dev/changelog/continuous-cart-authentication --- ## New Buyer Consent Requirement As of Tuesday, February 18, 2025, all published apps must display costs and obtain explicit buyer consent before adding any optional paid items to Storefront, Cart, or Checkout.  These requirements are already being enforced on unpublished apps. We've updated our [Checkout UI extension app requirements](https://shopify.dev/docs/apps/launch/app-requirements-checklist?utm_source=mozart&utm_medium=email&utm_campaign=app_requirement&utm_content=optional_paid_items#18-checkout-ui-extension-apps) and [prohibited app types](https://shopify.dev/docs/apps/launch/app-requirements-checklist?utm_source=mozart&utm_medium=email&utm_campaign=app_requirement&utm_content=optional_paid_items#1-prohibited-and-restricted-app-configurations) to make buying experiences more trustworthy. These requirements apply to both packaged Checkout UI extensions and any downloadable code provided by the app or app partner across Storefront, Cart, and Checkout. *Published: January 16, 2025* Tags: Shopify App Store, New Link: https://shopify.dev/changelog/new-buyer-consent-requirement --- ## Line item weight input for `orderCreate` mutation We have enhanced the `orderCreate` mutation by adding an optional field, `OrderCreateLineItemInput.weight`, which allows you to specify the weight of each line item using the `WeightInput` object. For line items linked to a product variant: - Specifying a weight will override the variant's default weight. - If no weight is specified, the variant's weight will be used by default. For line items not linked to a product variant, such as custom items: - Specifying a weight will apply that weight to the line item. - If no weight is specified, the line item's weight will default to 0. This is an improved version of the `line_items.grams` field that exists in the [REST API](https://shopify.dev/docs/api/admin-rest/unstable/resources/order#post-orders). *Published: January 15, 2025* Tags: API, New Link: https://shopify.dev/changelog/line-item-weight-input-for-ordercreate-mutation --- ## Expose the id field in ProductFullSyncPayload object As of version 2025-04, the return field id in product full sync payload in Admin API will be available. *Published: January 15, 2025* Tags: API, Update Link: https://shopify.dev/changelog/expose-the-id-field-in-productfullsyncpayload-object --- ## New `inventoryItem` field on ProductSetVariantInput We are expanding capabilities of the GraphQL Admin API [**productSet**](https://shopify.dev/docs/api/admin-graphql/latest/mutations/productSet) mutation by adding `inventoryItem` field to the [**ProductVariantSetInput**](https://shopify.dev/docs/api/admin-graphql/latest/input-objects/ProductVariantSetInput) type. This enables `productSet` to modify `ProductVariant` fields related to its `inventoryItem`, such as unit cost and tracked status . This change is applied to all API versions, starting with `2024-10`. For more detailed information and examples, visit our [productSet documentation](https://shopify.dev/docs/api/admin-graphql/latest/mutations/productSet) on Shopify.dev. *Published: January 15, 2025* Tags: API, New Link: https://shopify.dev/changelog/new-inventoryitem-field-on-productsetvariantinput --- ## Performance, integration and category-specific requirements come into practice To ensure that the Built for Shopify status represents the highest quality of app apps will need to meet the following performance, integration and category-specific requirements. These requirements are designed to ensure that each app that earns the Built for Shopify status excels in meeting the unique needs of the merchants it serves. Built for Shopify annual review will be on January 2, 2025. ### **Performance requirements** Date enforced: January 2, 2025 * [Make the admin performance meet 75th percentile Web Vitals targets](https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#make-the-admin-performance-meet-the-th-percentile-web-vitals-target) * [Cumulative Layout Shift (CLS)](/docs/apps/build/performance/admin-installation-oauth#cumulative-layout-shift): will be re-introduced and needs to be 0.1 or less. * [Interaction to Next Paint (INP)](/docs/apps/build/performance/admin-installation-oauth#largest-contentful-paint): 200 milliseconds or less. *This requirement replaces the previous [First Input Delay (FID)](/docs/apps/build/performance/admin-installation-oauth#first-input-delay) requirement.* * [Minimize the impact on checkout speed](https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#minimize-the-impact-on-checkout-speed) * Your app must make a minimum of 1,000 requests over the last 28 days. * Your requests must have a p95 value of 500ms or less, with a 0.1% failure rate. *These requirements will replace the following ones: Your app must make a minimum of 1,000 requests over three weeks. Your app must have a p99 value of 1000ms or less, with 0% failure rate.* ### **Integration requirements** Date enforced: January 2, 2025 * [Enable seamless sign up based on Shopify credentials](https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#enable-seamless-sign-up-based-on-shopify-credentials) Apps should make sign up seamless for merchants, without requiring an additional login or sign-up prompt. Users should be able to begin using the app immediately after installing it without having to complete another sign up. [Exceptions](/docs/apps/build/integrating-with-shopify#exceptions) apply on apps that can’t be easily accessed by merchants in a self-service manner and require a more complex sign-up, often involving a business-to-business contract. In these cases, the first step to the in-admin onboarding of these apps must always be a workflow that enables a merchant to link the current store with their existing credentials.

If your app offers both self-service and business-to-business sign up, then the app's onboarding must include an option to sign up for the service using the merchant's existing Shopify credentials. * [Include simplified monitoring or reporting](https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#include-simplified-monitoring-or-reporting) Expose key metrics that are helpful for merchants on the app’s home page. If your app includes monitoring or complex reports that can only exist on an external website or app surface, then you must include a simplified version of the monitoring or reporting in the Shopify admin. * [Keep third-party connection settings within Shopify](https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#keep-third-party-connection-settings-within-shopify) Any settings or configurations that control the connection between Shopify and a third-party system must be available inside the Shopify embedded app interface. ### **Category specific requirements** We understand not all apps are the same. Apps are built to address a wide variety of merchant workflows and serve many diverse functions. Moving forward some categories of apps must adhere to additional requirements. These requirements specify specific APIs, integrations, and design guidelines that reflect what a great app in these categories looks like. **Product bundles apps** Date enforced: January 2, 2025 * [Use bundles primitives](https://shopify.dev/docs/apps/launch/built-for-shopify/requirements#use-bundles-primitives) Your app must either use the GraphQL Admin API to create [static bundles](https://shopify.dev/docs/apps/build/product-merchandising/bundles/add-fixed-bundle) or use a cartTransform function to create [customized bundles](https://shopify.dev/docs/apps/build/product-merchandising/bundles/add-customized-bundle). However, if your app supports a bundles use case that is not yet supported through these APIs *Published: January 11, 2025* Tags: Built for Shopify, Update Link: https://shopify.dev/changelog/performance-integration-and-category-specific-requirements-come-into-practice --- ## New card brands for OrderTransactions.paymentMethods The [`OrderTransactions.paymentMethods`](https://shopify.dev/docs/api/admin-graphql/unstable/enums/PaymentMethods) enumerated type now includes two new values: `CARTES_BANCAIRES` and `BANCONTACT`. Starting with API version `2025-04`, order transactions paid using these methods will reflect the new values in GraphQL API responses. *Published: January 10, 2025* Tags: API, Update Link: https://shopify.dev/changelog/new-card-brands-for-ordertransactionspaymentmethods --- ## Shopify Functions template and Shopify CLI changes to support Rust 1.84 In anticipation of the [removal of the wasm32-wasi build target in Rust 1.84](https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html), Shopify has updated its Shopify Functions templates for Rust. The `cargo-wasi` utility has been removed because it is incompatible with Rust 1.84 and later versions. Additionally, starting with Shopify CLI 3.73, all function builds now include an optimization pass by default. Previously, this optimization was handled by `cargo-wasi`. Before you update to Rust 1.84, we recommend reviewing and following the [steps outlined here](https://shopify.dev/docs/apps/build/functions/programming-languages/rust-for-functions#updating-to-rust-1-84-and-higher). These changes are compatible with Rust 1.78 and above. *Published: January 08, 2025* Tags: Tools, Update Link: https://shopify.dev/changelog/shopify-functions-template-and-shopify-cli-changes-to-support-rust-184 --- ## New validations on function input query variables metafields As of 2025-01, input query variables metafields will now be subject to additional validation across all Function APIs. Previously, if these metafields didn't contain properly formatted data, we treated them as empty. This could lead to situations where it was difficult to determine why a function wasn't receiving the expected input data. Now, an invalid metafield will result in an `InvalidVariableValueError` when attempting to run the function. For more information, refer to the [list of errors](https://shopify.dev/docs/apps/build/functions/monitoring-and-errors#list-of-errors). *Published: January 06, 2025* Tags: API, Update Link: https://shopify.dev/changelog/new-validations-on-function-input-query-variables-metafields --- ## Add tax validation with localizedFields in Checkout UI Extensions & Functions **As of Jan 6, 2025**, you can use the new localizedFields in the Checkout UI Extension API and Function API to implement custom validation for tax fields in checkout. The localizationExtensions field in the Admin GraphQL API has now been renamed to localizedFields too. Additionally, you can now target tax fields in checkout for error messages. Available currently in the unstable API version and will be released to the stable 2025-01 API version. Learn more on how to implement [localizedFields](https://shopify.dev/docs/apps/build/markets/add-locally-required-order-data#validate-a-country-field). *Published: January 06, 2025* Tags: API, Update Link: https://shopify.dev/changelog/add-tax-validation-with-localizedfields-in-checkout-ui-extensions-functions ---