Customer Merge Logic & Shipping/Marketing Field Updates

6/23/2026, 12:00:29 AM

The API now clarifies that the customer kept in a merge is determined by explicit override or email/account consent rules; arguments ‘customerOneId’ and ‘customerTwoId’ are no longer implied to be kept. The resultingCustomerId field in preview, payload, and request now describes an authoritative kept customer ID. Old marketing‑consent fields on CustomerPhoneNumber (marketingCollectedFrom, marketingOptInLevel, marketingState, marketingUpdatedAt, sourceLocation) are deprecated and replaced with the nested smsMarketingConsent fields. New input objects CollectionUpdateSourceTargetInput, CollectionUpdateSubCollectionsSourceInput, and CollectionSourceExclusionConditionUpdateCollectionInput enable updating collection sources by condition or sub‑collections. CollectionExclusionProductSelection no longer exposes variantIds. DeliveryProfile adds a coversAllItems switch that overrides explicit variant assignments. The Market type has dropped channels and channelsCount. Shipping configuration references have been unified: DeliveryMarketProfile is removed and its fields moved into the ShippingConfiguration interface, with updated option description and counts. New enum values MAXIMUM_CART_TRANSFORMS and MAXIMUM_PAYMENT_CUSTOMIZATIONS were added. Developers should update queries, mutations, and client schemas to reflect these deprecations, use the new marketing consent fields, and incorporate the new collection source input types and delivery profile flag. All other API behavior remains unchanged.

Query Changes

🔄 Modified Queries (2)

collection

Retrieves a collection by its ID.
A collection represents a grouping of products
that merchants can display and sell as a group in their online store and
other sales channels.

Use the collection query when you need to:

  • Manage collection publishing across sales channels
  • Access collection metadata and SEO information
  • Work with collection conditions and product relationships

A collection determines which products it includes through conditions that automatically include
products that match, and through manual selections of individual products. Each collection has
associated metadata including title, description, handle, image, and
metafields.

customerMergePreview

Returns a preview of a customer merge request.

The customerOneId and customerTwoId arguments don't guarantee which customer is kept. Shopify
selects the resulting customer in this order:

  1. If overrideFields.customerIdOfEmailToKeep is provided and valid, then the selected customer is kept.
  2. If exactly one customer has an email address, then that customer is kept.
  3. If both customers have email addresses, then account state and email marketing consent determine
    the customer that's kept: an enabled account wins over other account states; otherwise, an
    invited account can win when consent doesn't already prefer subscribed or pending; otherwise
    the consent result is used. If those rules don't prefer either customer, then customerTwoId is kept.
  4. If neither customer has an email address, then customerTwoId is kept.
~ Modified argument: customerOneId
~ Modified argument: customerTwoId
~ Modified argument: overrideFields

Mutation Changes

🔄 Modified Mutations (1)

customerMerge

Merges two customers.

The customerOneId and customerTwoId arguments don't guarantee which customer is kept. Shopify
selects the resulting customer in this order:

  1. If overrideFields.customerIdOfEmailToKeep is provided and valid, then the selected customer is kept.
  2. If exactly one customer has an email address, then that customer is kept.
  3. If both customers have email addresses, then account state and email marketing consent determine
    the customer that's kept: an enabled account wins over other account states; otherwise, an
    invited account can win when consent doesn't already prefer subscribed or pending; otherwise
    the consent result is used. If those rules don't prefer either customer, then customerTwoId is kept.
  4. If neither customer has an email address, then customerTwoId is kept.

Use customerMergePreview and resultingCustomerId to check which customer will be kept before merging.

~ Modified argument: customerOneId
~ Modified argument: customerTwoId
~ Modified argument: overrideFields

Type Changes

➕ Added Types (3)

📥CollectionSourceExclusionConditionUpdateCollectionInput➕ AddedINPUT_OBJECT

The input fields for updating an exclusion condition based on collections.

📥CollectionUpdateSourceTargetInput➕ AddedINPUT_OBJECT

The input fields for updating a collection source - provide the one field that represents the type of source to update.

📥CollectionUpdateSubCollectionsSourceInput➕ AddedINPUT_OBJECT

The input fields for updating a sub-collection source — a source whose membership comes from one or more referenced collections.

➖ Removed Types (1)

🏗️DeliveryMarketProfile➖ RemovedOBJECT

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

🔄 Modified Types (11)

🏗️CartTransformCreateUserErrorCode🔄 Modified
Enum value added: MAXIMUM_CART_TRANSFORMS
🏗️CollectionExclusionProductSelection🔄 Modified
Field removed: variantIds
🏗️CustomerMergePayload🔄 Modified
🔄 Field modified: resultingCustomerId
🏗️CustomerMergePreview🔄 Modified
🔄 Field modified: resultingCustomerId
🏗️CustomerMergeRequest🔄 Modified
🔄 Field modified: resultingCustomerId
🏗️CustomerPhoneNumber🔄 Modified
🔄 Field modified: marketingCollectedFrom
🔄 Field modified: marketingOptInLevel
🔄 Field modified: marketingState
🔄 Field modified: marketingUpdatedAt
🔄 Field modified: sourceLocation
🏗️DeliveryProfile🔄 Modified
Field added: coversAllItems

Whether this delivery profile covers every shippable product variant in the shop. Rates from a profile with coversAllItems: true apply to all items at checkout, overriding any explicit product or variant assignments.

🏗️Market🔄 Modified
Field removed: channels
Field removed: channelsCount
🏗️MarketDeliveryConfigurations🔄 Modified
🔄 Field modified: shipping
🏗️PaymentCustomizationErrorCode🔄 Modified
Enum value added: MAXIMUM_PAYMENT_CUSTOMIZATIONS
🏗️ShippingConfiguration🔄 Modified
🔄 Field modified: activeOptionDefinitionsCount
🔄 Field modified: id
🔄 Field modified: optionDefinitions
🔄 Field modified: optionDefinitionsCount