Collections API Moves to Inclusion and Exclusion Conditions

6/18/2026, 12:00:32 AM

The collectionRulesConditions field’s description has been updated to reflect that it lists all usable rules for creating collections, but the field remains deprecated in favor of the new CollectionSourceInclusionCondition* and CollectionSourceExclusionCondition* types. The collections query description now removes the mention of managing both custom and smart collections and refers to “collection rules or conditions” instead of “smart collections”, and the old publishable_status argument has been replaced by published_status. The collectionCreate mutation’s documentation was rewritten to emphasize that the legacy ruleSet input is deprecated and that product membership should now be defined through sources with inclusion and manual selections. The collectionAddProducts, collectionAddProductsV2, and collectionRemoveProducts mutations are all marked deprecated and now recommend using collectionUpdate with inclusion.selectionsToAdd or inclusions.selectionsToRemove to bulk‑manage products. The collectionUpdate mutation description was expanded to clarify that it can modify properties, products, or publication settings, that product membership changes can be performed through rules, sources, or conditions, and that these updates may run asynchronously and return a Job. These changes unify product assignment and removal under collectionUpdate, deprecating the older add/remove operations. Overall, the API is shifting toward a single, more consistent approach for creating and updating collections using inclusion/exclusion conditions instead of legacy rule sets.

Query Changes

🔄 Modified Queries (2)

collectionRulesConditions

Lists all rules that can be used to create collections.

collections

Retrieves a list of collections
in a store. Collections are groups of products
that merchants can organize for display in their online store and
other sales channels.
For example, an athletics store might create different collections for running attire, shoes, and accessories.

Use the collections query when you need to:

  • Build a browsing interface for a store's product groupings.
  • Create collection searching, sorting, and filtering experiences (for example, by title, type, or published status).
  • Sync collection data with external systems.

The collections query supports pagination
for large catalogs and saved searches
for frequently used collection queries.

The collections query returns collections with their associated metadata, including:

  • Basic collection information (title, description, handle, and type)
  • Collection image and SEO metadata
  • Product count and product relationships
  • Collection rules or conditions
  • Publishing status and publication details
  • Metafields and custom attributes

Learn more about using metafields with collection conditions.

Mutation Changes

🔄 Modified Mutations (5)

collectionAddProducts

Adds multiple products to an existing collection in a single operation. This mutation provides an efficient way to bulk-manage collection membership without individual product updates.

For example, when merchants create seasonal collections, they can add dozens of related products at once rather than updating each product individually. A clothing store might add all winter jackets to a "Winter Collection" in one operation.

Use CollectionAddProducts to:

  • Bulk-add products to collections for efficient catalog management
  • Implement collection building tools in admin interfaces
  • Organize collection membership during bulk product operations
  • Reduce API calls when managing large product sets

The mutation processes multiple product additions and returns success status along with any errors encountered during the operation. Products are added to the collection while preserving existing collection settings.

Learn more about collection management.

⚠️ Deprecated: Use `collectionUpdate` with inclusion.selectionsToAdd instead.
~ Modified argument: id
collectionAddProductsV2

Adds products to a Collection asynchronously and returns a Job to track the operation's progress. This mutation handles large product sets efficiently by processing them in the background.

You can poll the returned job using the job query to monitor completion status.

Note:
This mutation adds products in the order specified in the productIds argument.

⚠️ Deprecated: Use `collectionUpdate` with inclusion.selectionsToAdd instead.
collectionCreate

Creates a collection
to group products together
in the online store and
other sales channels.
For example, an athletics store might create different collections for running attire, shoes, and accessories.

Use the collectionCreate mutation when you need to:

  • Create a new collection for a product launch or campaign
  • Organize products by category, season, or promotion
  • Automate product grouping using conditions (for example, by tag, type, or price)

Collections can include products manually and can also include products automatically based on rules, sources,
or conditions.

Defining a collection's membership

Define membership with sources on the collection argument
(CollectionCreateInput).
Each source adds products through conditions (such as product tag, title, or metafield—see
CollectionSourceInclusionConditionInput
for the full list) and through manual selections.

Note:
The input argument and its ruleSet field are deprecated. Existing integrations should migrate to
collection and sources — a ruleSet rule maps to an equivalent source condition (for example, a
tag rule becomes a productTag condition). If both collection and input are provided, collection
is used.

Note:
The created collection is unpublished by default. To make it available to customers,
use the publishablePublish
mutation after creation.

Learn more about using metafields with collection conditions.

~ Modified argument: collection
collectionRemoveProducts

Removes multiple manually included products from a collection in a single operation. This mutation can process large product sets (up to 250 products) and may take significant time to complete for collections with many products.

For example, when ending a seasonal promotion, merchants can remove all sale items from a "Summer Clearance" collection at once rather than editing each product individually.

Use CollectionRemoveProducts to:

  • Bulk-remove products from collections efficiently
  • Clean up collection membership during catalog updates
  • Implement automated collection management workflows

The operation processes asynchronously to avoid timeouts and performance issues, especially for large product sets.

Learn more about collection management.

⚠️ Deprecated: Use `collectionUpdate` with inclusions.selectionsToRemove instead.
~ Modified argument: id
collectionUpdate

Updates a collection,
modifying its properties, products, or publication settings. Collections help organize
products together
in the online store and
other sales channels.

Use the collectionUpdate mutation to programmatically modify collections in scenarios such as:

  • Updating collection details, like title, description, or image
  • Modifying SEO metadata for better search visibility
  • Changing which products are included in a collection by updating its rules, sources, or conditions
  • Updating custom data using metafields

Collections can include products manually and can also include products automatically based on rules, sources,
or conditions. When product membership is updated through rules, sources, or conditions, the operation might
be processed asynchronously. In these cases, the mutation returns a job object
that you can use to track the progress of the update.

To publish or unpublish collections to specific sales channels, use the dedicated
publishablePublish and
publishableUnpublish mutations.

Learn more about using metafields with collection conditions.

Type Changes

➕ Added Types (74)

🏗️CollectionExclusionProductSelection➕ AddedOBJECT

Represents a product that has been manually selected for exclusion from a collection.

Fields: product, variantIds
🏗️CollectionExclusionProductSelectionConnection➕ AddedOBJECT

An auto-generated type for paginating through multiple CollectionExclusionProductSelections.

Fields: edges, nodes, pageInfo
🏗️CollectionExclusionProductSelectionEdge➕ AddedOBJECT

An auto-generated type which holds one CollectionExclusionProductSelection and a cursor during pagination.

Fields: cursor, node
🏗️CollectionSourceExclusion➕ AddedOBJECT

Defines the rules and selections for excluding products from a collection.

Fields: conditions, matchType, selections
🔌CollectionSourceExclusionCondition➕ AddedINTERFACE

A condition that determines which products should be excluded from a collection.

Fields: id
🏗️CollectionSourceExclusionConditionCollection➕ AddedOBJECT

A condition based on collections for excluding products from a collection.

Fields: id, matchType, values
🏗️CollectionSourceExclusionConditionProductCategory➕ AddedOBJECT

A condition based on product category IDs for excluding products from a collection.

Fields: id, matchType, relation, values
🏗️CollectionSourceExclusionConditionProductCategoryValue➕ AddedOBJECT

A value for a product category exclusion condition.

Fields: category, includeDescendants
🏗️CollectionSourceExclusionConditionProductTag➕ AddedOBJECT

A condition based on product tags for excluding products from a collection.

Fields: id, matchType, relation, values
🏗️CollectionSourceExclusionConditionProductType➕ AddedOBJECT

A condition based on product types for excluding products from a collection.

Fields: id, matchType, relation, values
🏗️CollectionSourceExclusionConditionProductVendor➕ AddedOBJECT

A condition based on product vendors for excluding products from a collection.

Fields: id, matchType, relation, values
🏗️CollectionSourceExclusionConditionUnknown➕ AddedOBJECT

An exclusion condition introduced in a newer API version that is not modeled by this version of the API. Clients should treat the relation and values as opaque strings.

Fields: id, matchType, relation, values
🏗️CollectionSourceExclusionConditionVariantTitle➕ AddedOBJECT

A condition based on variant titles for excluding products from a collection.

Fields: id, matchType, relation, values
🏗️DeliveryCarrierCalculatedOptionDefinition➕ AddedOBJECT

A shipping option with rates calculated by a carrier service.

Carrier-calculated options fetch real-time rates from carriers(e.g., UPS, FedEx) at checkout
instead of using merchant-defined fixed prices.

Fields: currency, description, freeDeliveryMinimumValue, id, includedCollections ... +3 more
📥DeliveryCarrierCalculatedOptionDefinitionCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a carrier-calculated shipping option.

📥DeliveryCarrierCalculatedOptionDefinitionUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a carrier-calculated shipping option.

🏗️DeliveryCarrierCalculatedRateGroup➕ AddedOBJECT

A rate group for a carrier-calculated shipping option.

Sets the carrier service, rate adjustments,
and carrier-provided services offered at checkout.

Fields: absoluteAdjustment, autoIncludeNewServices, carrierService, conditions, id ... +2 more
📥DeliveryCarrierCalculatedRateGroupCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a rate group for a carrier-calculated shipping option.

🏗️DeliveryCarrierCalculatedRateGroupService➕ AddedOBJECT

A carrier-provided service within a carrier-calculated rate group.

Represents an individual service that the merchant has explicitly included or excluded.

Fields: name, status
📥DeliveryCarrierCalculatedRateGroupServiceInput➕ AddedINPUT_OBJECT

The input fields for including or excluding a carrier-provided service in a rate group.

📋DeliveryCarrierCalculatedRateGroupServiceStatus➕ AddedENUM

Whether a carrier-provided service is included at checkout.

Values: INCLUDED, EXCLUDED
📥DeliveryCarrierCalculatedRateGroupUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a rate group for a carrier-calculated shipping option.

🏗️DeliveryFlatRate➕ AddedOBJECT

A fixed-price shipping rate.

Flat rates charge the same price regardless of cart value or weight,
and may include optional transit time estimates.

Fields: id, price, transitTimeMaxSeconds, transitTimeMinSeconds
📥DeliveryFlatRateCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a flat rate.

🏗️DeliveryFlatRateGroup➕ AddedOBJECT

A flat rate group for a shipping option.

Contains one fixed-price rate and optional collection or origin location conditions.

Fields: conditions, id, rate
🏗️DeliveryFlatRateGroupConnection➕ AddedOBJECT

An auto-generated type for paginating through multiple DeliveryFlatRateGroups.

Fields: edges, nodes, pageInfo
📥DeliveryFlatRateGroupCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a flat rate group.

🏗️DeliveryFlatRateGroupEdge➕ AddedOBJECT

An auto-generated type which holds one DeliveryFlatRateGroup and a cursor during pagination.

Fields: cursor, node
📥DeliveryFlatRateGroupUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a flat rate group.

🏗️DeliveryFlatRateOptionDefinition➕ AddedOBJECT

A shipping option with fixed-price rates.

Flat rate options charge the same price regardless of cart value or weight.

Fields: currency, description, freeDeliveryMinimumValue, id, includedCollections ... +4 more
📥DeliveryFlatRateOptionDefinitionCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a flat rate shipping option.

📥DeliveryFlatRateOptionDefinitionUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a flat rate shipping option.

📥DeliveryFlatRateUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a flat rate.

🏗️DeliveryMarketProfile➕ AddedOBJECT

The shipping configuration attached to a market. Defines the shipping
options available when a buyer is resolved to that market.

Fields: activeOptionDefinitionsCount, id, isEnabled, optionDefinitions, optionDefinitionsCount
🔌DeliveryOptionDefinition➕ AddedINTERFACE

A shipping option shown to buyers at checkout. Implemented by concrete option types.

Fields: currency, description, freeDeliveryMinimumValue, id, includedCollections ... +2 more
🏗️DeliveryOptionDefinitionConnection➕ AddedOBJECT

An auto-generated type for paginating through multiple DeliveryOptionDefinitions.

Fields: edges, nodes, pageInfo
📥DeliveryOptionDefinitionCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a shipping option. Provide exactly one option type.

🏗️DeliveryOptionDefinitionEdge➕ AddedOBJECT

An auto-generated type which holds one DeliveryOptionDefinition and a cursor during pagination.

Fields: cursor, node
🔌DeliveryOptionDefinitionRateGroup➕ AddedINTERFACE

A delivery rate group within an option definition.

Fields: conditions, id
📥DeliveryOptionDefinitionUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a shipping option. Provide exactly one option type.

🔌DeliveryRate➕ AddedINTERFACE

A shipping rate with a price and optional transit time.

Rates define the price charged to buyers for a shipping option.

Fields: price, transitTimeMaxSeconds, transitTimeMinSeconds
📥DeliveryRateConditionsCreateInput➕ AddedINPUT_OBJECT

The input fields for conditions that limit a rate group to specific collections or origin locations.

📥DeliveryRateConditionsUpdateInput➕ AddedINPUT_OBJECT

The input fields for conditions that limit a rate group to specific collections or origin locations.

🏗️DeliveryRateGroupConditions➕ AddedOBJECT

Conditions that limit a rate group to specific collections or origin locations.

When conditions are set, the rate group applies only to matching shipments.

Fields: collections, collectionsCount, originLocations, originLocationsCount
🏗️DeliveryValueBasedOptionDefinition➕ AddedOBJECT

A shipping option with rates based on cart value.

Value-based options charge different rates depending on cart value,
using tiers that define price thresholds (e.g., "$5 shipping under $50, $2 shipping over $50").

Fields: currency, description, freeDeliveryMinimumValue, id, includedCollections ... +4 more
📥DeliveryValueBasedOptionDefinitionCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a value-based shipping option.

📥DeliveryValueBasedOptionDefinitionUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a value-based shipping option.

🏗️DeliveryValueBasedRate➕ AddedOBJECT

A value-based shipping rate.

Defines price, optional transit time estimates, and the cart-value range for this rate.

Fields: id, maxValue, minValue, price, transitTimeMaxSeconds ... +1 more
🏗️DeliveryValueBasedRateConnection➕ AddedOBJECT

An auto-generated type for paginating through multiple DeliveryValueBasedRates.

Fields: edges, nodes, pageInfo
📥DeliveryValueBasedRateCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a value-based rate.

🏗️DeliveryValueBasedRateEdge➕ AddedOBJECT

An auto-generated type which holds one DeliveryValueBasedRate and a cursor during pagination.

Fields: cursor, node
🏗️DeliveryValueBasedRateGroup➕ AddedOBJECT

A rate group for a value-based shipping option.

Contains rates that define price tiers based on cart value.

Fields: conditions, id, rates
🏗️DeliveryValueBasedRateGroupConnection➕ AddedOBJECT

An auto-generated type for paginating through multiple DeliveryValueBasedRateGroups.

Fields: edges, nodes, pageInfo
📥DeliveryValueBasedRateGroupCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a rate group for a value-based shipping option.

🏗️DeliveryValueBasedRateGroupEdge➕ AddedOBJECT

An auto-generated type which holds one DeliveryValueBasedRateGroup and a cursor during pagination.

Fields: cursor, node
📥DeliveryValueBasedRateGroupUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a rate group for a value-based shipping option.

📥DeliveryValueBasedRateUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a value-based rate.

🏗️DeliveryWeightBasedOptionDefinition➕ AddedOBJECT

A shipping option with rates based on package weight.

Rates contain tiers that define package-weight thresholds. Checkout selects the
appropriate tier using the package weight of the shipping allocation, or the
combined package weight when allocations are grouped for weight conditions.

Fields: currency, description, freeDeliveryMinimumValue, id, includedCollections ... +4 more
📥DeliveryWeightBasedOptionDefinitionCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a weight-based shipping option.

📥DeliveryWeightBasedOptionDefinitionUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a weight-based shipping option.

🏗️DeliveryWeightBasedRate➕ AddedOBJECT

A weight-based shipping rate.

Weight-based rates charge different prices depending on package weight, which can
include packaging weight in addition to item weight, and may include optional
transit time estimates.

Fields: id, maxWeight, minWeight, price, transitTimeMaxSeconds ... +1 more
🏗️DeliveryWeightBasedRateConnection➕ AddedOBJECT

An auto-generated type for paginating through multiple DeliveryWeightBasedRates.

Fields: edges, nodes, pageInfo
📥DeliveryWeightBasedRateCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a weight-based rate.

🏗️DeliveryWeightBasedRateEdge➕ AddedOBJECT

An auto-generated type which holds one DeliveryWeightBasedRate and a cursor during pagination.

Fields: cursor, node
🏗️DeliveryWeightBasedRateGroup➕ AddedOBJECT

A rate group for a weight-based shipping option.

Contains rates that define price tiers based on package weight.

Fields: conditions, id, rates
📥DeliveryWeightBasedRateGroupCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a weight-based rate group.

📥DeliveryWeightBasedRateGroupUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a weight-based rate group.

📥DeliveryWeightBasedRateUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a weight-based rate.

🏗️MarketDeliveryConfigurations➕ AddedOBJECT

Delivery configurations for a market. Container type for shipping configuration.

Fields: shipping
📥MarketDeliveryConfigurationsCreateInput➕ AddedINPUT_OBJECT

The input fields for configuring delivery for a new market.

📥MarketDeliveryConfigurationsUpdateInput➕ AddedINPUT_OBJECT

The input fields for configuring delivery for an existing market.

🔌ShippingConfiguration➕ AddedINTERFACE

Compatibility interface for market shipping configurations.
Implemented by DeliveryMarketProfile during the GraphQL rename rollout.

Fields: activeOptionDefinitionsCount, id, isEnabled, optionDefinitions, optionDefinitionsCount
📥ShippingConfigurationCreateInput➕ AddedINPUT_OBJECT

The input fields for creating a market's shipping configuration.

📥ShippingConfigurationUpdateInput➕ AddedINPUT_OBJECT

The input fields for updating a market's shipping configuration.

🔄 Modified Types (5)

🏗️Collection🔄 Modified
🔄 Field modified: ruleSet
🏗️CollectionConditionsSource🔄 Modified
Field added: exclusion

The rules and selections for excluding products from the collection.

Field added: products

The products that are members of this source: products matched by the source's inclusion
conditions and manual selections, with the source's exclusion conditions, excluded
collections, and manual exclusions removed.

🏗️CollectionConditionsSourceDeletePayload🔄 Modified
Field removed: jobId
Field added: deletedId

The ID of the deleted collection source.

🏗️Market🔄 Modified
Field added: delivery

The delivery settings for this market.

🏗️ShopFeatures🔄 Modified
Field added: marketDrivenShipping

Whether market-driven shipping is enabled for the shop.