# Recent changes to Shopify’s platform
---
## 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
---
## 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
---
## POS UI Extensions 2025-01 Update
As of January 20, we added the following updates to POS UI Extensions:
### Breaking Changes
- Removed the deprecated ActionItem component. Use a [Button](/docs/api/pos-ui-extensions/components/button) instead.
- Removed the deprecated SmartGridApi. Use the [ActionApi](/docs/api/pos-ui-extensions/apis/action-api) instead.
- Removed the deprecated DiscountType. Use [CartDiscountType](/docs/api/pos-ui-extensions/apis/cart-api#cartapi-propertydetail-applycartdiscount) and [LineItemDiscountType](/docs/api/pos-ui-extensions/apis/cart-api#cartapi-propertydetail-setlineitemdiscount) instead.
- Removed the deprecated `badge` prop from the [List](/docs/api/pos-ui-extensions/components/list) component. Use `badges` instead.
- Removed the deprecated `TextFieldProps` type from the [TextField](/docs/api/pos-ui-extensions/components/textfield) component.
- Deprecated `'vertical'` and `'horizontal'` as values for the `direction` field in the [Stack](/docs/api/pos-ui-extensions/components/Stack) component.
- Deprecated the `flexChildren'` field in the [Stack](/docs/api/pos-ui-extensions/components/Stack) component.
- Deprecated the `flex'` field in the [Stack](/docs/api/pos-ui-extensions/components/Stack) component.
- Deprecated the `flexWrap'` field in the [Stack](/docs/api/pos-ui-extensions/components/Stack) component.
- Deprecated the `paddingHorizontal'` and `paddingVertical` fields in the [Stack](/docs/api/pos-ui-extensions/components/Stack) component.
- Removed `customValidator` prop from the [FormattedTextField](/docs/api/pos-ui-extensions/components/formattedtextfield) component.
- Removed `email`, `firstName`, `lastName`, and `note` from the [Customer](/docs/api/pos-ui-extensions/apis/cart-api#customer) object.
### Features
- Added [PrintApi](/docs/api/pos-ui-extensions/apis/print-api) and a [PrintPreview](/docs/api/pos-ui-extensions/components/printpreview) component.
- Added `currency` prop to the [SessionApi](/docs/api/pos-ui-extensions/apis/session-api).
- [Cart API](/docs/api/pos-ui-extensions/apis/cart-api) updates:
- Added `bulkUpdateCart` function for single-operation cart updates.
- The `addLineItem` and `addCustomSale` functions now return a UUID for the added line item.
- Added [Box](/docs/api/pos-ui-extensions/components/box) component.
- Enhanced the [Stack](/docs/api/pos-ui-extensions/components/box) component. New fields include `justifyContent`, `alignItems`, and `alignContent`, as well as numerous new sizing and spacing options.
- Added Sizing and fill options to the[Image](/docs/api/pos-ui-extensions/components/image) component.
All of the changes are available for POS UI extensions version 2025-01 and POS app version 9.26.0. See the [version log](https://shopify.dev/docs/api/pos-ui-extensions/unstable/versions) for all version details.
*Published: January 06, 2025*
Tags: API, Update
Link: https://shopify.dev/changelog/pos-ui-extensions-2025-01-update
---
## New Markets APIs
As of `2025-04`, the Markets APIs have been updated to support additional customizations and conditions for each market, enabling merchants to tailor their shops' buyer experiences.
### Primary Market
To transition away from the "primary market" concept, a new mutation, [`backupRegionUpdate`](https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/backupRegionUpdate) allows you to set a shop-wide region to use when no better option can be determined from buyer signals. Instead of `MarketRegionCreateInput`, you must use [`BackupRegionUpdateInput`](https://shopify.dev/docs/api/admin-graphql/2025-04/input-objects/BackupRegionUpdateInput).
* To query the shop's backup region, use [`backupRegion`](https://shopify.dev/docs/api/admin-graphql/2025-04/queries/backupRegion).
* To obtain a list of available regions that can be set as a backup, use the [`availableBackupRegions`](https://shopify.dev/docs/api/admin-graphql/2025-04/queries/availableBackupRegions) query.
### Currency Settings
The [`Market.currencySettings`](https://shopify.dev/docs/api/admin-graphql/2025-04/objects/Market#field-currencysettings) field is now nullable. A null value indicates that the currency settings are inherited from the parent market.
### Web Presence
A web presence can now exist without a market and can also be assigned to multiple markets. The field [`MarketWebPresence.market`](https://shopify.dev/docs/api/admin-graphql/2025-04/objects/MarketWebPresence#field-market) is deprecated in favour of [`MarketWebPresence.markets`](https://shopify.dev/docs/api/admin-graphql/2025-04/objects/MarketWebPresence#connection-markets), which allows for this expanded functionality.
### Catalogs
As of `2025-04`, the Product's [contextualPricing](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/Product#field-contextualpricing) field and Product Variant's [contextualPricing](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/ProductVariant#field-contextualpricing) field will resolve prices only considering active markets. Previous versions will continue to consider draft markets in the calculation of these fields.
*Published: January 03, 2025*
Tags: API, Breaking API Change
Link: https://shopify.dev/changelog/new-markets-apis
---
## New `collection_id` filter added to `products` query filters
As of the **2024-10** version of the GraphQL Admin API, a new filter, `collection_id`, has been added to the `products` query. This filter allows you to retrieve products that belong to a specific collection.
When using the `collection_id` filter, it can be combined with the following filters:
- `created_at`
- `updated_at`
- `published_at`
- `gift_card`
- `handle`
- `combined_listing_role`
- `product_type`
- `status`
- `title`
- `vendor`
For more details on all available attributes for the `products` query, visit the [Shopify developer documentation](https://shopify.dev/docs/api/admin-graphql/2024-10/queries/products#argument-query) on [shopify.dev](https://shopify.dev/).
Example usage of the `collection_id` filter in a query:
```graphql
{
products(query: "collection_id:1234567890") {
edges {
node {
id
title
}
}
}
}
```
This query retrieves products from the collection with the ID `1234567890`.
*Published: January 01, 2025*
Tags: API, New
Link: https://shopify.dev/changelog/new-collection_id-filter-added-to-products-query-filters
---
## New fields to represent product bundles in a grouped view
As of API `2025-01` version, we have introduced two new fields that allow you to accurately nest component products under the parent product in a grouped view.
* The new `components` field has been added to the [AbandonedCheckoutLineItem](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/AbandonedCheckoutLineItem) object in the Admin GraphQL API. Use this field to define the component products within a product bundle, ensuring a grouped view in Abandoned Checkout Emails.
* The new `group` field has been added to the [LineItem](https://shopify.dev/docs/api/customer/2025-01/objects/LineItem) object in the Customer Account API. Use this field to indicate that line item products are a part of a product bundle, ensuring a grouped view in Orders Detail Pages.
In addition, these fields can help you display product bundles in a grouped view in transactional emails, such as order confirmations and shipping updates. Learn how you can implement a grouped view by following [this tutorial](https://shopify.dev/docs/storefronts/themes/product-merchandising/bundles-emails).
*Published: January 01, 2025*
Tags: API, New
Link: https://shopify.dev/changelog/support-bundles-grouped-view-fields-in-graphql-api
---
## Filter products by category or taxonomy metafield
Starting with Storefront API version 2025-01, you can now filter products within collections and search results using `CategoryFilter` and `TaxonomyMetafieldFilter`.
- **`CategoryFilter`**: Filter products by a category ID.
- **`TaxonomyMetafieldFilter`**: Filter products based on a taxonomy metafield namespace, key, and value.
Learn more about [filtering products in collections](https://shopify.dev/docs/storefronts/headless/building-with-the-storefront-api/products-collections/filter-products) on Shopify.dev.
*Published: January 01, 2025*
Tags: API, New
Link: https://shopify.dev/changelog/filter-products-by-category-or-taxonomy-metafield
---
## Minimum requirement is now optional on automatic discounts
Previously merchants were required to specify minimum purchase conditions on product, order, and free shipping automatic discounts. We're now making these conditions optional, so the `minimumRequirement` field in our APIs is now able to return a `null` value.
As of version 2025-01, the `minimumRequirement` field for both [DiscountAutomaticBasic](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/DiscountAutomaticBasic#field-minimumrequirement) and [DiscountAutomaticFreeShipping](https://shopify.dev/docs/api/admin-graphql/2025-01/objects/DiscountAutomaticFreeShipping#field-minimumrequirement) will become nullable.
*Published: January 01, 2025*
Tags: API, Update
Link: https://shopify.dev/changelog/minimum-requirement-is-now-optional-on-automatic-discounts
---
## New customer input field for the OrderCreate mutation
As of GraphQL Admin API 2025-01 version, we're deprecating the `customer_id` field in favor of the new `customer` field which you can use to either associate an existing customer or upsert a customer record.
This provides some added flexibility when creating an order by saving the caller an extra step in fetching the customer ID before initiating the order creation.
Learn more about `orderCreate` on [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/orderCreate).
*Published: January 01, 2025*
Tags: API, New
Link: https://shopify.dev/changelog/new-customer-input-field-for-the-ordercreate-mutation
---
## Introduce concatenatedOriginContract to subscriptionLine
As of 2025-01, we've introduced `concatenatedOriginContract` to `subscriptionLine` .
You can now query the origin contract of the lines if you have used the Subscription Billing Cycle APIs to combine multiple contracts. This can be accessed through `subscriptionBillingCycle.editedContract.lines.concatenatedOriginContract`.
Learn more about combining contract on [Shopify.dev](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts/combine-subscription-contracts).
*Published: January 01, 2025*
Tags: API, New
Link: https://shopify.dev/changelog/introduce-concatenatedorigincontract-to-subscriptionline
---
## Unused PriceListUserErrorCode values removed
Starting in API version 2025-01, [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:
- `CONTEXT_RULE_COUNTRIES_LIMIT`
- `CONTEXT_RULE_COUNTRY_TAKEN`
- `CONTEXT_RULE_LIMIT_REACHED`
- `CURRENCY_COUNTRY_MISMATCH`
- `COUNTRY_CURRENCY_MISMATCH`
- `MARKET_CURRENCY_MISMATCH`
- `CONTEXT_RULE_MARKET_NOT_FOUND`
- `CONTEXT_RULE_MARKET_TAKEN`
*Published: January 01, 2025*
Tags: API, Breaking API Change
Link: https://shopify.dev/changelog/unused-pricelistusererrorcode-values-removed
---
## Update to `percentage_adjustment` field on `SellingPlanPercentagePriceAdjustment`
In the Storefront API version 2025-01, there is an update to the [adjustmentPercentage](https://shopify.dev/docs/api/storefront/2025-01/objects/SellingPlanPercentagePriceAdjustment#field-adjustmentpercentage) field on the [`SellingPlanPercentagePriceAdjustment`](https://shopify.dev/docs/api/storefront/2025-01/objects/SellingPlanPercentagePriceAdjustment) object. This field, which facilitates the percentage price adjustment for a selling plan's pricing policy, will transition from an [`Int`](https://shopify.dev/docs/api/storefront/2025-01/scalars/Int) data type to a [`Float`](https://shopify.dev/docs/api/storefront/2025-01/scalars/Float).
*Published: January 01, 2025*
Tags: API, Update
Link: https://shopify.dev/changelog/update-to-percentage_adjustment-field-on-sellingplanpercentagepriceadjustment
---
## Deprecation of `storefrontCustomerAccessTokenCreate` Mutation
As of API version `2025-01`, the `storefrontCustomerAccessTokenCreate` mutation is deprecated. This mutation, which was used to exchange the Customer Access Token in the `Authorization` header for a Storefront Customer Access Token, is no longer necessary. The Storefront API now directly supports Access Tokens from the Customer Accounts API via the `@inContext` [BuyerInput#customerAccessToken](https://shopify.dev/docs/api/storefront/2025-01/input-objects/BuyerInput#field-customeraccesstoken), and can be used for cart creation and buyer updates.
**Migration Path:**
1. Obtain an access token using the OAuth2 specification. Detailed steps are available [here](https://shopify.dev/docs/api/customer#step-obtain-access-token). These steps are identical to those for obtaining an access token for the Customer Accounts API.
2. Use this access token directly with the Storefront API, replacing the deprecated `storefrontCustomerAccessTokenCreate` mutation.
This access token identifies your customer, enabling personalized features within the Storefront API.
For more information on the Customer Accounts API, visit [Shopify.dev](https://shopify.dev/docs/api/customer).
*Published: January 01, 2025*
Tags: API, Deprecation Announcement
Link: https://shopify.dev/changelog/deprecation-of-storefrontcustomeraccesstokencreate-mutation
---
## New delivery promise participants API
As of the 2025-01 Admin GraphQL API, you can now query for delivery promise participants, using [`deliveryPromiseParticipants`](https://shopify.dev/docs/api/admin-graphql/2025-01/queries/deliveryPromiseParticipants).
You can make updates using the [`deliveryPromiseParticipantsUpdate`](https://shopify.dev/docs/api/admin-graphql/2025-01/mutations/deliveryPromiseParticipantsUpdate) mutation.
These APIs control the usage of delivery promises on the platform.
*Published: January 01, 2025*
Tags: API, New
Link: https://shopify.dev/changelog/new-delivery-promise-participants-api
---
## Combined Listings update mutation error improvements
Starting with the Admin API version 2025-01, we've introduced new error codes for the `combinedListingUpdate` mutation. These enhancements aim to provide clearer feedback when incorrect data is submitted.
- The `missing_option_values` error occurs when the `optionsAndValues` field is required but not provided in the request.
*Published: January 01, 2025*
Tags: API, Update
Link: https://shopify.dev/changelog/combined-listings-update-mutation-error-improvements
---
## Update in orders webhook to view bundles and their components
Starting with the Admin API version 2025-01, we have added the `sales_line_item_group_id` field to the orders webhook. This field allows you to determine if a specific `line_item` is part of a bundle. When a `line_item` belongs to a bundle, it will have an associated `sales_line_item_group_id`.
*Published: January 01, 2025*
Tags: API, Update
Link: https://shopify.dev/changelog/update-in-orders-webhook-to-view-bundles-and-their-components
---
## Public apps must use new GraphQL Product APIs to be accepted in the Shopify App Store
Starting January 6, 2025, all new apps submitted to the Shopify App Store must use the [new GraphQL Product APIs](https://shopify.dev/changelog/new-graphql-product-apis-that-support-up-to-2000-variants-now-available-in-2024-04). After this date, apps that query [deprecated REST API product resources](https://shopify.dev/docs/apps/build/graphql/migrate/new-product-model/api-updates#deprecated-rest-endpoints) won’t be approved.
As of February 1, 2025, all public apps must migrate to the [new GraphQL Product APIs](https://shopify.dev/changelog/new-graphql-product-apis-that-support-up-to-2000-variants-now-available-in-2024-04). This includes apps already listed in the Shopify App Store.
Public apps are always required to use currently supported APIs. To learn more about the specific changes to Shopify’s product APIs, and how to update your app, check out our [migration guide](https://shopify.dev/docs/apps/build/graphql/migrate/new-product-model).
*Published: January 01, 2025*
Tags: Shopify App Store, Update
Link: https://shopify.dev/changelog/public-apps-must-use-new-graphql-product-apis-to-be-accepted-in-the-shopify-app-store
---
## Introduce a `tax_exempt` field associated to a `CompanyLocation`
The `CompanyLocationTaxSettings` now also contains the `tax_exemptions` and `tax_registration_id`. As a result, we have deprecated these fields from the root of `CompanyLocation.`
*Published: January 01, 2025*
Tags: API, New
Link: https://shopify.dev/changelog/introduce-a-tax_exempt-field-associated-to-a-companylocation
---
## New validation against duplicate handles in productCreate, productUpdate, and productSet mutation inputs
As of the `2025-01` version of the Admin GraphQL API, the `handle` field in [productInput](https://shopify.dev/docs/api/admin-graphql/latest/input-objects/ProductInput) for [productCreate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/productCreate) and [productUpdate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/productUpdate), as well as in [productSetInput](https://shopify.dev/docs/api/admin-graphql/latest/input-objects/ProductSetInput) for [productSet](https://shopify.dev/docs/api/admin-graphql/latest/mutations/productSet) will be validated for uniqueness. This means that you will no longer be able to input a duplicate handle. This change does not affect existing behaviour when `handle` is not provided as input.
This enhancement ensures that there are no collisions when creating or updating product handles.
*Published: January 01, 2025*
Tags: API, Update
Link: https://shopify.dev/changelog/new-validation-against-duplicate-handles-in-productcreate-productupdate-and-productset-mutation-inputs
---
## Add new requiresShippingMethod field to fulfillmentServiceCreate and fulfillmentServiceUpdate mutations
As of Admin API 2025-04, we have introduced a new field `requiresShippingMethod` on the [fulfillmentServiceCreate](https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/fulfillmentServiceCreate) and [fulfillmentServiceUpdate](https://shopify.dev/docs/api/admin-graphql/2025-04/mutations/fulfillmentServiceUpdate) mutations to bring these mutations in line with their REST API equivalents.
*Published: January 01, 2025*
Tags: API, Update
Link: https://shopify.dev/changelog/add-new-requiresshippingmethod-field-to-fulfillmentservicecreate-and-fulfillmentserviceupdate-mutations
---
## Enhanced variant query limits for single product queries
As of the **2025-01** version of the GraphQL Admin API, you can now use a limit of up to 2000 variants when running a query on a single product, such as `product` or `productByHandle`. This enhanced limit does not apply if you make multiple queries in one request, or are accessing the variants any other way except through the `variants` connection.
Learn more about the [product](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/Product) object on [Shopify.dev](https://shopify.dev/).
*Published: January 01, 2025*
Tags: API, Update
Link: https://shopify.dev/changelog/enhanced-variant-query-limits-for-single-product-queries
---
## New customer's webhook and changes to existing customer's webhooks payload
As of 2025-01, we're changing how a customer is represented in webhooks:
* We added the `customers/purchasing_summary` webhook.
* We made some changes affecting webhooks containing a customer payload:
* We removed `tags` in favour of the `customer.tags_added` and `customer.tags_removed` webhooks.
* We removed `email_marketing_consent` in favour of the `customers/email_marketing_consent_update`.
* We removed `sms_marketing_consent` in favour of the `customers/marketing_consent_update`.
* We removed the following fields: `last_order_id`, `last_order_name`, `total_spent`, and `orders_count`. They are now available in the new `customers/purchasing_summary` webhook.
The webhooks containing a customer payload are the following:
* `checkouts/create`
* `checkouts/update`
* `customers/create`
* `customers/delete`
* `customers/disable`
* `customers/enable`
* `customers/update`
* `draft_orders/create`
* `draft_orders/update`
* `orders/cancelled`
* `orders/create`
* `orders/fulfilled`
* `orders/paid`
* `orders/partially_fulfilled`
* `orders/updated`
Learn more about webhook topics on [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/2025-01/enums/WebhookSubscriptionTopic).
*Published: January 01, 2025*
Tags: API, Update
Link: https://shopify.dev/changelog/new-customer-s-webhook-and-changes-to-existing-customer-s-webhooks-payload
---
## ReverseFulfillmentOrder.order field is nullable as of 2025-01
As of **2025-01**, ReverseFulfillmentOrder.order
field is nullable. An Order
can be nullable if the client does not have access to the [`read_all_orders`](https://shopify.dev/docs/api/usage/access-scopes#orders-permissions) scope and the order is older than 60 days or no longer exists. For versions that predate **2025-01**, the order field will return a graphql error when the order is not available.
Learn more about ReverseFulfillmentOrder
on [Shopify.dev](https://shopify.dev/docs/api/admin-graphql/unstable/objects/ReverseFulfillmentOrder).
*Published: January 01, 2025*
Tags: API, Update
Link: https://shopify.dev/changelog/reversefulfillmentorder-order-field-is-nullable-as-of-2025-01
---
## Addition of 'paymentDetails' field in `verificationSessionResolve` mutation.
As of Payments Apps API version **2025-01** release, the `paymentDetails` field
will be addded to `verificationSessionResolve` mutation. Payment providers can now send payment details like Card Information etc. as an argument.
*Published: January 01, 2025*
Tags: API, Update
Link: https://shopify.dev/changelog/addition-of-paymentdetails-field-in-verificationsessionresolve-mutation
---