Skip to content

Breaking Changes

Removal of the POP_IN_A_BOX_TRACKER feature (Released on 10/04/2026)

The POP_IN_A_BOX_TRACKER site feature has been removed. All fields and mutations gated by it are deprecated and will be removed from the schema. This affects:

  • Customer.popTracker, Customer.preferredPopCategories, Customer.dislikedPopCategories
  • Query.popCategories
  • The PopTracker type and its wishlist, dislikelist, myCollection fields
  • Mutations: addProductToPopTrackerWishlist, removeProductFromPopTrackerWishlist, addProductToPopTrackerDislikelist, removeProductFromPopTrackerDislikelist, addProductToPopTrackerCollection, removeProductFromPopTrackerCollection, markPopCategoryPreferred, markPopCategoryDisliked, resetPopCategory

Clients using the standard WISHLIST feature are unaffected. See Wishlist.

Deprecation of the recognisedCustomer query (Released on 06/02/2026)

The recognisedCustomer query has been deprecated. The customer query now supports recognised users — sensitive fields require full authentication. Use customer for both authenticated and recognised access paths.

Deprecation of Customer.loyalty and the legacy Loyalty schema (Released on 24/04/2025)

The entire legacy loyalty surface has been deprecated in favour of LoyaltyAccountDashboard. The Customer.loyalty field itself was deprecated later, on 06/02/2026. Affected fields and types:

  • Customer.loyalty → use customer.loyaltyAccountDashboard
  • Query.loyaltyScheme, Query.interactionAward → derive equivalents from LoyaltyAccountDashboard
  • CustomerLoyalty.tier, .points, .pendingPoints, .transactions
  • LoyaltyScheme.tiers, .interactionAwards
  • LoyaltyTier.id, .name, .threshold, .rewards
  • The LoyaltyTransaction type (productVariant, pointsEarned, quantity, earned, clears) — use LoyaltyHistoryEntry instead
  • The LoyaltyTierReward type and the LoyaltyTierRewardType enum (GENERIC, SUBSCRIPTION_GIFT, BIRTHDAY_GIFT)
  • Mutation setLoyaltyOptIn → use updateLoyaltyOptIn

See Loyalty for the replacement dashboard.

Deprecation of Form.productSku on survey forms (Released on 27/10/2025)

The productSku field on survey forms has been deprecated. Use Form.product instead, which exposes the full ProductVariant.

Deprecation of PageMetadata.title (Released on 18/09/2025)

The title field on PageMetadata has been split into metaTitle (used in the <title> element and OpenGraph) and pageTitle (used for the on-page heading). Update consumers to read whichever value is appropriate for their use case.

Deprecation of the WHERE_IS_MY_ORDER discussion topic (Released on 26/06/2025)

The WHERE_IS_MY_ORDER value on the discussion topic enum has been deprecated. Use WHEN_WILL_MY_ORDER_BE_DISPATCHED instead.

Deprecation of Customer.creditAccounts (Released on 07/02/2025)

The plural creditAccounts(filter: ...) field on Customer has been deprecated. Use the singular creditAccount field instead.

Deprecation of legacy ProductSubscription fields (Released on 13/01/2025)

Two ProductSubscription fields have been deprecated in favour of subscriptionItems, which supports both legacy subscriptions and subs-by-sku:

  • sku → use subscriptionItems
  • product → use subscriptionItems

See Subscriptions for the current shape.

Deprecation of addProductToWaitlist (Released on 13/01/2025)

addProductToWaitlist has been deprecated. Use addProductToWaitlistByType instead, which accepts a waitlist type so the same product can be tracked across multiple waitlists.

Deprecation of cheapestVariantPrice on Product (Released on 18/11/2024)

Product.cheapestVariantPrice(currency, shippingDestination, includeLinkedProducts) has been deprecated. Use the cheapestVariant field instead, which exposes the full variant including its price.

Deprecation of Form.options (Released on 24/10/2024)

The options field on form fields has been deprecated. Use answerOptions instead, which returns AnswerOption objects with both the option key and a translated display string.

Deprecation of vipPrice and earnableLoyaltyPoints on Product (Released on 10/09/2024)

The vipPrice(sku) and earnableLoyaltyPoints(sku) fields on Product have been deprecated. Read these values on the ProductVariant directly instead — no SKU argument is needed once you’re on the variant.

Deprecation of the marketingPreferences query (Released on 16/04/2024)

The top-level marketingPreferences(input: MarketingPreferencesInput!) query has been deprecated. Use accountCreationMarketingPreferences(email) for pre-account-creation lookups. The per-channel customer.marketingPreferences(type) field on Customer remains the way to read a logged-in customer’s preferences.

Deprecation of personalisationFields on product personalisation (Released on 26/03/2024)

personalisationFields has been deprecated. The same data is now included in the personalisation configuration object.

Deprecation of the flags query (Released on 13/02/2024)

Query.flags has been deprecated. Use Query.features instead.

Deprecation of SponsoredAdsWidget.product (Released on 12/09/2023)

The product field on sponsored ads widgets has been deprecated. Use the field with the WidgetProductItem type instead, which can return either a Product or a ProductVariant.

Deprecation of ProductSubscription.childOrders (Released on 16/06/2023)

childOrders on ProductSubscription has been deprecated. Use orders(offset, limit, startDate, endDate) instead — it supports pagination and both legacy and current orders.

Deprecation of paymentFrequency and dispatchFrequency on subscriptions (Released on 11/10/2022)

On SubscriptionSchedule, both paymentFrequency and dispatchFrequency (of type SubscriptionFrequency) have been deprecated. Use paymentFrequencyDuration and dispatchFrequencyDuration (of type SubscriptionFrequencyDuration) instead — they express the cadence as a unit (DAY/WEEK/MONTH/YEAR) and a duration, which scales beyond the enum.

The equivalent frequency field on SubscriptionFrequency in the subs-by-sku schema is also deprecated on the same date in favour of frequencyDuration.

Deprecation of SearchResult fields (Released on 27/09/2022)

The total, hasMore, correctedQuery, facets and products fields on the search result type have been deprecated. They are being pulled into ProductList and clients will need to migrate to the new query shape — see Search.

Deprecation of supersizeVariant on Product (Released on 14/03/2022)

Product.supersizeVariant has been deprecated. Use supersize -> variant instead.

Deprecation of the sku argument on newReviewForm (Released on 21/01/2022)

The sku argument on Product.newReviewForm is no longer required — the SKU of the product the field is attached to is used automatically. The field itself remains valid; only the input argument is deprecated.

Deprecation of Account.age (Released on 24/06/2021)

The age field on the registration input has been deprecated as it is no longer needed.

Deprecation of WebMeta.noIndex (Released on 12/02/2021)

The noIndex field on WebMeta is no longer supported and has been deprecated.

Deprecation of ProductSubscription.delayStatus (Released on 30/11/2020)

delayStatus on ProductSubscription has been deprecated. Use delayCount instead, which records the number of times the subscription has been delayed rather than a fixed enum of delay buckets.

Deprecation of Form.optionsAreLocalised (Released on 08/09/2020)

optionsAreLocalised has been deprecated. Use AnswerOption.translation on each option instead — it carries the localised display string per option.

Deprecation of RequestError.captchaConfiguration (Released on 18/02/2020)

captchaConfiguration on RequestError has been deprecated. The same information is included in the GraphQL extensions block on the response, where applicable.

Deprecation of ForgottenPasswordResponse.success (Released on 03/02/2020)

The success boolean on ForgottenPasswordResponse has been deprecated. Check the error field instead — a null error indicates success.

Deprecation of the paymentType and paymentCard fields on Order

The paymentType and paymentCard fields on the Order type have now been deprecated and will be removed from the schema in 6 months. As a replacement, we have introduced a new field, usedPaymentMethods. This field is of type List<UsedPaymentMethod>. Where UsedPaymentMethod will be defined as:

type UsedPaymentMethod {
paymentType: String
paymentCard: PaymentCard
giftCard: GiftCard
amountSpent: MoneyValue!
}

You will then be able to access the original paymentType and paymentCard fields here. Note that this will be a list of all payment methods used to purchase the respective order. So paymentType and paymentCard may be different for each payment method used. The amountSpent field will be a MoneyValue specifying how much money was used to contribute to the total cost of the product for the respective payment method.

If a Gift Card was used either partially or to fully purchase the product, then Gift Card information will be exposed via the giftCard field. Where the type GiftCard will be defined as:

type GiftCard {
cardUuid: String!
obfuscatedCardNumber: String!
}

Deprecation of the customerReturns field on Customer

The field customerReturns is now deprecated and will be removed from the schema in 6 months from 17/04/2023. It will be replaced by a paginated field called returns. This field will allow you to specify a limit and an offset which will help to speed up page load times when a user has a large number of customer returns they wish to view. Use of this field is outlined below.

type Customer {
returns(offset: Int! = 0, limit: Int! = 10): CustomerReturns @authenticated @if(feature: ORDER_RETURNS)
}
type CustomerReturns @if(feature: ORDER_RETURNS) {
customerReturns: [CustomerReturn!]!
total: Int!
hasMore: Boolean!
}

Deprecation of account update mutations

The following mutations for updating customer account information have been deprecated and will be removed from the schema:

  • updateName - Use updateAccountSettings instead
  • updateMobilePhoneNumber - Use updateAccountSettings instead
  • updateDateOfBirth - Use updateAccountSettings instead

Deprecation of fields in BasketItem

The chargePrice field on the BasketItem type has been deprecated and will be removed from the schema. Please use the chargePricePerUnit field instead.

Deprecation of fields in SelectYourSampleTier

The following fields in the SelectYourSampleTier type have been deprecated and will be removed from the schema:

  • additionalSpendToReach - Use additionalToReach from qualification instead for type MIN_SPEND
  • thresholdAmountSpent - Use threshold from qualification instead for type MIN_SPEND
  • products - Use sysProducts instead
  • selectedProducts - Use selectedSysProducts instead

Deprecation of fields in GiftCard

The obfuscatedCardNumber field on the GiftCard type has been deprecated and will be removed from the schema. Please use the cardNumber field instead.

Deprecation of fields in SocialAuthenticationResponse

The socialUserId field on the SocialAuthenticationResponse type has been deprecated and will be removed from the schema. Please use the socialLinkID field instead.

Change in product to cheapestVariantPrice field (Released on 19/07/2022)

The field cheapestVariantPrice is now deprecated and will be removed from the schema in 6 months. Please use the cheapestVariant field to access the cheapest variant price.

Change in addProductToBasket Basket mutation (Released on 25/05/2022)

The way Horizon calculates a product quantity inside a Basket has been changed. This means that Horizon now takes into account the quantity of a pre-existing product inside a Basket when clients attempt to add additional products using the addProductToBasket mutation. Now, given a basket containing a pre-existing product of quantity 1, calling the following mutation:

mutation AddToBasket {
addProductToBasket(
basketId: <BASKET ID>
sku: <SKU OF PRE-EXISTING PRODUCT>
quantity: 1
settings: { currency: GBP, shippingDestination: GB }
) {...}
}

Will result in the basket now containing 1 product of quantity 2.

Change in add to basket mutation (Released on 13/05/2022)

There is a new mutation to add products to basket which allows adding multiple products to basket within one operation. The previous mutation has been deprecated and will be removed from the schema in 6 months. . See here

Change in supersize variant (Released on 23/03/2022)

The supersize variants query has changed. The previous query has been deprecated and will be removed from the schema in 6 months. . See here

This page lists any backwards-incompatible changes made to the Horizon schema.

Change in registration input fields (Released on 27/10/2021)

The field “lastName” has been renamed as “surname” to make it compatible with the “surname” field returned from the “accountCreationForm” query.