# Recent changes to Shopify’s platform
---
## Ads are available on mobile, plus more surfaces to target merchants
Shopify has introduced new advertising options in the App Store, enabling developers to run ads on mobile devices and target merchants based on location or plan type on the homepage and category pages.
Here are the latest updates to enhance your ad management and execution:
* **Mobile Ads**: You can now run mobile ads on the Shopify App Store
* **Ad Auction Types**: You can now set different bid prices for mobile and desktop ads, with options for geotargeting and merchant plan-based targeting.
* **Ad Reports**: These now include mobile-specific metrics and insights, offering a comprehensive view of your app's performance across various device channels.
* **Geotargeting and Merchant Plan-Based Targeting**: These features are now extended beyond search results and are available on homepage and category page ads. Note that merchant plan-based targeting is exclusive to apps with [Built for Shopify](https://shopify.dev/docs/apps/launch/built-for-shopify) status.
You can access these ad features through the Ads Manager in your Partner Dashboard.
For more information, [learn more here](https://shopify.dev/docs/apps/launch/marketing/advertising/create-ads)
*Published: March 19, 2025*
Tags: API, New
Link: https://shopify.dev/changelog/ads-are-available-on-mobile-plus-more-surfaces-to-target-merchants
---
## Ads are now available on mobile, plus more surfaces to target merchants
Shopify has introduced new advertising options in the App Store, enabling developers to run ads on mobile devices and target merchants based on location or plan type on the homepage and category pages.
Here are the latest updates to enhance your ad management and execution:
* **Mobile ads**: You can now run mobile ads on the Shopify App Store
* **Ad Auction Types**: You can now set different bid prices for mobile and desktop ads, with options for geotargeting and merchant plan-based targeting.
* **Ad Reports**: These now include mobile-specific metrics and insights, offering a comprehensive view of your app's performance across various device channels.
* **Geotargeting and Merchant Plan-Based Targeting**: These features are now extended beyond search results and are available on homepage and category page ads. Note that merchant plan-based targeting is exclusive to apps with [Built for Shopify](https://shopify.dev/docs/apps/launch/built-for-shopify) status.
You can access these ad features through the Ads Manager in your Partner Dashboard.
For more information, [learn more here](https://shopify.dev/docs/apps/launch/marketing/advertising/create-ads).
*Published: March 19, 2025*
Tags: Shopify App Store, New
Link: https://shopify.dev/changelog/ads-are-now-available-on-mobile-plus-more-surfaces-to-target-merchants
---
## Deprecating PriceListUserErrorCode values
Starting in API version 2025-04, [PriceListErrorCode](https://shopify.dev/docs/api/admin-graphql/unstable/enums/PriceListUserErrorCode) values that are currently not returned by the API will be hidden. These error codes include:
- `CATALOG_ASSIGNMENT_NOT_ALLOWED`
- `CATALOG_CANNOT_CHANGE_CONTEXT_TYPE`
- `APP_CATALOG_PRICE_LIST_ASSIGNMENT`
- `CONTEXT_RULE_MARKET_LOCKED`
*Published: March 17, 2025*
Tags: API, Breaking API Change
Link: https://shopify.dev/changelog/deprecating-pricelistusererrorcode-values
---
## 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
---
## FeeSale fee field is nullable as of 2025-07
As of 2025-07, the FeeSale.fee
field is now nullable, meaning a Fee
can be null if it has been deleted. In versions prior to 2025-07, the fee
field will still return the deleted fee.
For more information, visit the [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/unstable/objects/FeeSale) documentation on FeeSale
.
*Published: February 28, 2025*
Tags: API, Breaking API Change
Link: https://shopify.dev/changelog/feesale-fee-field-is-nullable-as-of-2025-07
---
## 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 `include_mirrored_exchanges` query filter parameter
We've added a new `include_mirrored_exchanges` [query filter parameter](https://shopify.dev/docs/apps/build/pos/exchangesv2#what-data-is-available-in-the-exchangev2s-field) to provide greater flexibility in managing and viewing exchange data using the Retail ExchangeV2 GraphQL Admin API.
The `include_mirrored_exchanges` query filter parameter controls whether exchanges that are mirrored from the Shopify admin are queryable through the GraphQL Admin API. Only exchanges that are created in the Shopify admin after API version 2025-04 will be queryable with the GraphQL Admin API. Historical exchanges won't be queryable using the API.
To include mirrored exchanges in your API query results, set the parameter to true: `query:"include_mirrored_exchanges:true"`. This ensures that all exchanges, including those mirrored from the Shopify admin, are visible in the API response. This is the default, so if no query parameter is included, then API query results will include mirrored Shopify admin exchanges.
Conversely, if you want to exclude mirrored exchanges from the results, then set the parameter to false: `query:"include_mirrored_exchanges:false"`. This filters out any exchanges that are mirrored from the Shopify admin, providing a cleaner dataset.
*Published: February 17, 2025*
Tags: API, New
Link: https://shopify.dev/changelog/new-includemirroredexchanges-query-filter-parameter
---
## 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.

## 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.

## 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
---