Add discount tag filtering and query‑enhanced filtering

5/1/2026, 12:00:39 AM

AutomaticDiscountNodes, AutomaticDiscounts, CodeDiscountNodes, and DiscountNodes now include an optional filter field named combines_with.product_discounts_with_tags_on_same_cart_line, allowing vendors to specify tags that enable multiple product discounts to apply on the same cart line (Shopify Plus only). A new input type, ProductDiscountsWithTagsOnSameCartLineInput, was introduced along with the productDiscountsWithTagsOnSameCartLine list field on the DiscountCombinesWith type, and several new error enum values were added to handle invalid or duplicate tag configurations. The Shop type’s productVariants field has been deprecated and moved to the root query, so consumers should use QueryRoot.productVariants instead. The tagsAdd and tagsRemove mutations now support tagging of DiscountNode resources in addition to orders, draft orders, customers, products, and articles. The AnalyticsTargetCreate mutation’s description was clarified to state that the currency defaults to the shop’s currency rather than an explicit currencyCode argument, and a new currency_mismatch error code is available for manual payment creation. The disputes query received a richer description detailing that it returns status, amount, reason, and order information for Shopify Payments disputes. Developers should update their queries to include the new tag‑based filter where applicable, migrate any usage of Shop.productVariants to the root query, and handle the newly added error codes for discount tag operations and order creation.

Query Changes

🔄 Modified Queries (7)

automaticDiscountNodes

Returns a list of automatic discounts.

~ Modified argument: query
automaticDiscounts

Returns a list of automatic discounts that are applied in the cart and at checkout without requiring a discount code.

~ Modified argument: query
codeDiscountNodes

Returns a list of code-based discounts.

~ Modified argument: query
discountNodes

Returns a list of discounts.

~ Modified argument: query
discountNodesCount

The total number of discounts for the shop. Limited to a maximum of 10000 by default.

~ Modified argument: query
disputes

Returns a paginated list of all Shopify Payments disputes for the shop. Disputes occur when a buyer files a complaint with their payments provider, and the merchant must provide evidence to contest it. Each dispute includes the status, amount, reason, and associated order. Use this to monitor and manage open chargebacks and track dispute resolution outcomes.

productVariants

Retrieves a list of product variants
associated with a product.

A product variant is a specific version of a product that comes in more than
one option,
such as size or color. For example, if a merchant sells t-shirts with options for size and color,
then a small, blue t-shirt would be one product variant and a large, blue t-shirt would be another.

Use the productVariants query when you need to:

  • Search for product variants by attributes such as SKU, barcode, or inventory quantity.
  • Filter product variants by attributes, such as whether they're gift cards or have custom metafields.
  • Fetch product variants for bulk operations, such as updating prices or inventory.
  • Preload data for product variants, such as inventory items, selected options, or associated products.

The productVariants query supports pagination
to handle large product catalogs and saved searches
for frequently used product variant queries.

The productVariants query returns product variants with their associated metadata, including:

  • Basic product variant information (for example, title, SKU, barcode, price, and inventory)
  • Media attachments (for example, images and videos)
  • Associated products, selling plans, bundles, and metafields

Learn more about working with Shopify's product model.

~ Modified argument: query

Mutation Changes

🔄 Modified Mutations (4)

analyticsTargetCreate

Creates an analytics target that
defines a merchant's goal for a specific metric over a date range. For example, a merchant
can set a target of $50,000 in total sales for a quarter, or 1,000 orders in a month.

Provide the target attributes through the input argument. The target's currency is set to
the shop's currency. A target is uniquely identified by the combination of metric, startDate,
endDate, and filters — attempting to create a duplicate returns a user error.

Use analyticsTargetUpdate
to modify an existing target, or
analyticsTargetsDelete
to remove targets.

disputeEvidenceUpdate

Updates the evidence package for a Shopify Payments dispute. Merchants submit evidence — such as shipping confirmations, customer communications, and refund policies — to contest a dispute filed by a cardholder. This mutation updates the evidence fields.

tagsAdd

Adds tags to a resource. If the resource type doesn't support tagging, the id argument returns a resource-not-found error.

Tags help merchants organize and filter resources. See the tags argument for supported input formats.

Learn more about using tags to organize subscription orders.

~ Modified argument: id
tagsRemove

Removes tags from a resource. If the resource type doesn't support tagging, the id argument returns a resource-not-found error.

Tags are searchable keywords that help organize and filter these resources.

~ Modified argument: id

Type Changes

➕ Added Types (1)

📥ProductDiscountsWithTagsOnSameCartLineInput➕ AddedINPUT_OBJECT

The product discount tags that determine which product discounts can apply
together on the same cart line. By default, only one product discount
applies per cart line. When each of two product discounts lists a tag in
this field that matches a tag on the other discount, both discounts can
apply to the same cart line. For example, if Discount A lists "SEASONAL"
in this field and Discount B is tagged "SEASONAL", and Discount B lists
"LOYALTY" in this field and Discount A is tagged "LOYALTY", both discounts
can apply to the same cart line. To use this field, productDiscounts
must also be set to true. This field is available only on a Shopify Plus
plan.

🔄 Modified Types (5)

🏗️DiscountCombinesWith🔄 Modified
Field added: productDiscountsWithTagsOnSameCartLine

The product discount tags that determine which product discounts can apply together on
the same cart line. By default, only one product discount applies per cart line. When
each of two product discounts lists a tag in this field that matches a tag on the other
discount, both discounts can apply to the same cart line. For example, if Discount A
lists "SEASONAL" in this field and Discount B is tagged "SEASONAL", and Discount B
lists "LOYALTY" in this field and Discount A is tagged "LOYALTY", both discounts can
apply to the same cart line. To use this field, productDiscounts must also be set to
true. This field is available only on a Shopify Plus plan.

🏗️DiscountErrorCode🔄 Modified
Enum value added: TOO_MANY_PRODUCT_DISCOUNTS_WITH_TAGS_ON_SAME_CART_LINE
Enum value added: INVALID_PRODUCT_DISCOUNTS_WITH_TAGS_ON_SAME_CART_LINE_FOR_DISCOUNT_CLASS
Enum value added: INVALID_PRODUCT_DISCOUNTS_WITH_TAGS_ON_SAME_CART_LINE_WITHOUT_PRODUCT_DISCOUNTS
Enum value added: INVALID_PRODUCT_DISCOUNTS_FALSE_WITH_EXISTING_TAGS_ON_SAME_CART_LINE
Enum value added: PRODUCT_DISCOUNTS_WITH_TAGS_ON_SAME_CART_LINE_NOT_ENTITLED
🏗️OrderCreateManualPaymentOrderCreateManualPaymentErrorCode🔄 Modified
Enum value added: CURRENCY_MISMATCH
🏗️Shop🔄 Modified
🔄 Field modified: productVariants
🏗️ShopifyqlQueryResponse🔄 Modified
Field added: analyticsTargets

A list of analytics targets that match the query's metric, date range, and filters.