type to Discount.allowWebIndexing to Page and CategoryhasMemberPrice to Product.memberPrice to Product.externalHashId login.login with externalHashId.history.previousPrice to Product and ProductVariant.updateCustomerGroup mutation that, given a customerGroupAccessCode, will update a customer with the customer group for that access code.dynamicFiltering field to category query along with new types: CategoryDynamicFilter and ListStringValue.externalAttributes parameter to both SignUp and UpdateCustomer mutations.cartItem.customerComments special characters unnecessarily HTML encoded.signUp mutation error response differscontent query that given list of content IDs returns a list of objects containting succesful matches of ContentGraphType and another list of not found IDs.hasFamilyMembers to Product.externalId to Discount & field externalDiscountId to Category.orderPurchaseLocation to Order response type.first and offset values to Category.products, previously this would result in an unhandled error, now you get a BadRequest along with a description instead.Product.primaryRoute.breadcrumbs would sometimes not return all crumbs.hasVariantsWithDifferingPrices to the Product type that is true if the product has variants with differing prices, false if not (and false if there are no variants at all).updateCustomerPriceList mutation that, given a priceListAccessCode, will update a customer with the price list for that access code.signUp mutation has a new field priceListAccessCode that, if provided, will create a customer with the price list for that access code.page.externalUrl did not show its localized value.page.subPages now accepts an includeHidden flag as argument that is set to true as default. This will exclude hidden sub-pages when fetching by ID if set to false.customerComments field on Product, it no longer resolves via a separate backend API call.breadcrumbs to Route that contain breadcrumb texts starting with the root parent, ending in the current route.quantitySuffix field on Product, it no longer resolves via a separate backend API call.head field on Product, it no longer resolves via a separate backend API call.debug field to Route that can be used for troubleshooting routes. N.B. it's not meant for production code use!channel.settings.countrySettings.businessCustomerFields would not output data for the organizationNumber field.externalId should now be available on Store.hasExternalUrl and externalUrl to the Page type where externalUrl is a Link type that contains link and target.product's comments added to cart will now be HTML encoded to prevent XSS injectionscategory and priceDateSpan to productand it's variants to display time intervals of discounted prices and campaigns.externalId to category.parent and subPages to the Page type.category query now allows the id parameter as a string or as a int.externalCustomerLookup will now return a COUNTRY_NOT_VALID status when the customer account may not be activated on the channel as it's missing the customer country. A new externalCustomerLookup.customer.countryCode field has been added to show which country the external customer has.includeInactive argument to productVariant.warehouseStock which will include warehouseStock for inactive stores in the result. Defaults to false, i.e. warehouse stock for inactive stores are not included.includeInactive argument to product.warehouseStock which will include warehouseStock for inactive stores in the result. Defaults to false, i.e. warehouse stock for inactive stores are not included.product.warehouseStock should now be sorted by product.warehouseStock.location.name.FacebookConversionsApis accessToken & pixelId is now be available on ChannelSettings Tracking.ContentItemProperty.value wouldn't resolve Categories that were hidden or had display type API.category.data, page.data & startpage.datasearchAutoComplete.categories wouldn't give you any results unless you had provied three or more characters in the term argument. This should now give you results from one character and up.name.category.data and page.data. Both serve content from the Content Editor and function exactly like the already existing startpage.data field.Product.familyMembers that contains all other products in the same family as the product.product.upsell has now been implemented and should now produce results.product.hasUpsell has been added.product.badges would include badges for campaigns that had Exclude discounted products set to true, even when the product had a discount on the price list.product.campaigns would include campaigns that had Exclude discounted products set to true, even when the product had a discount on the price list.name and description fields on cart.aggregatedDiscounts were not using their localized values.stockStatus.id to be globally unique. The old value, which is not globally unique, can now be found in the newly added stockStatus.stockStatusId field.ProductNotFound errors when querying products on either articleNumbers, ids or barcodes with duplicate values.preview header is set to true."error": "Unexpected end of JSON input" you'll instead now get a mildly more informative: "errors": [ { "message": "", "extensions": { "code": "UnhandledException", "codes": [ "UnhandledException" ] } } ]currency.format.culture to always be that of the channel culture.currency.format.culture has been deprecated. Instead use a culture that makes sense contextually when formatting a currency.100:somefilter, somefilter). List filter values will be merged. In the case of numeric and boolean filters, all repeating filters with the same id will be ignored.emailAddress and pid on SignUp-mutation didn't get decrypted.startPage.primaryRoute would sometimes return null.stockStatus.buyable of true, even though all its variants had their buyable status set to false.preOrder.fromDate and preOrder.toDate should now be null when a product doesn't have pre-order.isActivatedByDiscountCode and discountCode to CustomerLoyaltyDiscount.customerLoyalty.discounts to exclude redeemed discounts from the result by default.includeRedeemed argument to customerLoyalty.discounts which will include redeemed discounts in the result. Defaults to false, i.e. redeemed discounts are not included.includeInactive argument to stores which will include inactive stores in the result. Defaults to false, i.e. inactive stores are not included.InvalidToken error.product.campaigns may now be visible even when the root campaign is of the display type "API".cartItem.product wouldn't have calculated member prices.stores should no longer return inactive stores.googleUserId should now be available on Customer.limit argument to product.images which will limit the number of returned images. Defaults to null, which will return all images.product or products by an article number containing '/' wouldn't always work.externalAttributes should now be available on Customer.previousPrice would be shown as 200, and current price would be shown as 180. Only taking into account the discount of 10%. After the fix, previousPrice will be shown as 100 and the current price will be 90. Taking into account the reduced price and the discount.organizationId on customer would always return null.organizationId on customer and added organizationNumber, in order to match the name used on signup and update.store on customer.object on said route, you will get the EmptyRoute error. However, route should remain intact, returing object as null./, i.e. the start page, should now included alternate routes.orderId input argument to the order query that can handle both internal and external orders.id input argument to the order query, please use the above mentioned orderId argument instead.hasOrderDetails to OrderHeader. When this is false, a call to order for that order will result in a failure.Order that had a OrderItem without a associated product.DynamicContent has been added to customer.subscribeToNewsletter mutation now supports JetShop, Mailchimp, Rule and Voyado-subscriptions.warehouseStock.location on product should now show locations even when they're inactive (the inactive state is meant to signify that the location is not available for collect at store).CustomField of CustomListField type should no longer be returned when the list contains no elements.updateCustomerProductListItem and removeFromCustomerProductList mutations now accepts variant's articleNumber as inputpage.head should now be set even if the page is not visible in the channel.ProductNotFound would be returned from products when matching on a variant article number.customer.OrderHeader should no longer result in an error when OrderId is empty.products query to be more descriptive.addMultipleToCart mutation to be more descriptive.alias to AlternateRoute; which, when set, may be used in place of culture when rendering alternate links.order and customer.orderHeaders should now be capable of fetching orders from external systems (when available and activated in the back end).__healthcheck route should now disregard if a channel requires authentication.useArticleNumberAsId to the GoogleAnalytics type.barcode input argument to product.barcodes input argument to products.FreeShippingLimit.Access-Control-Max-Age, set to 24 hours, on pre-flight requests.order.items.variantOptionNames would somtimes be null, it should now always be an empty list in these cases.updateCart, addToCart and addToCustomerProductList mutations.primaryRoute.parents on product. Previously parents would always be fetched in the backend query, even when not used, now they'll be left out unless asked for.InputComment on a cart item for any product.updateCart mutation.Route.alternateRoutes should now be empty if the shop only has one channel and one language.channel, channels and the introspection query should now be allowed even when a channel requires authentication.Channel.requiresAuth to signify that a customer must be logged on to view the channel.removeMultipleFromCart mutation.Page object.Page.primaryRoute on an inactive page for that channel would result in an error, it should now instead result a null route.ListFilterItem.resultCount would sometimes not have the right value.Category.subcategories list should no longer contain any null values.MultiListFilterList has had its id field un-deprecated and should now be unique within the channel.Category.products should no longer be returned when it's the only sort order active.Category.products filter input with the wrong category id-prefix should no longer affect the filtered product result.Category.products.totalResults wouldn't always update correctly.id field has been added to ListFilterItem that should be unique for that category.Store should no longer be html-encoded.CustomerField.id should now be globally unqiue.CustomerField.name has been added.Login mutation now accepts either email, pid, externalId or memberNumber.Country.id should now be globally unique as it's now a concatenation of country code and channel id.defaultPrice and defaultPreviousPrice to Product and ProductVariant both.CartItem and OrderItem now both has a variantOptionNames field.Category should no longer be truncated to 100 chars (unless there's no meta description specified, in which case we source it from the content field and truncate it).Customer have been altered to align with the updateCustomer and signUp mutations.categories as well as products.categories as well as products.quantitySuffix on ProductCustomer.orders with Customer.orderHeaders.previousTotal and previousUnitPrice to CartItem.Product.recommendedProducts, a timeout will now result in an empty list.Category.isDynamic has been added to indicate that a catgory has a dynamic collection of products.imageUrl to Channel, this can be used to build image urls if needed.Cart.aggregatedDiscounts has now been implemented.CartItem.discounts has now been implemented.Currency.id should now be set to the alphabetic code of the currency instead of a number.Product.categories should no longer contain hidden categories.Filter.id is unique per category to facilitate Apollo client side caching.Category.mainHeader should now correctly fall back to using the category name if no main header exists.We have previously been applying non-null to fields too generously, especially on lists. In accordance to the graphql specification, if a non-null field is somehow resolved to null (through error or otherwise) the entire object containing this field will also be set as null. This behavior will then escalate until the next nullable field. We have now changed some fields from being non-nullable to be nullable. This is to better reflect what fields are critical to the encapsulating object. For example, a Product needs to have an article number, so this is set to non-null. Meanwhile, a product is very likely to have a list of images, but if this fails to resolve there is no reason to break the entire Product. In some cases we will have non-critical non-null String fields, these will be defaulted to empty string.
Bestseller sort order is now available for products.StockStatus.text should now adhere to the "mask exact amount" settings.products query that takes a collection of either article numbers or productIds.images collection on Product should no longer contain any duplicate entries.shuffledToplist to recommendedProducts on Product.privateCustomerFields, businessCustomerFields, privateCustomerConsents and businessCustomerConsents fields on CountrySettings are now nullable.Product by ID in addition to article number.nostoAccountId should now be available on ChannelSettings.gtinEan should now be available on Product.Categories and Pages queries should no longer return categories/pages with display type API.hasVariants to Product.privateCustomerConsents and businessCustomerConsents on CountrySettings should now be populated (they were previously mocked).id on Page, Product, Category and StartPage should now be of the same type int!. (Yesterday's change to ID! wasn't working quite the way we intended, sorry about that!).url field to ProductImage.sizes field on ProductImage, use url in conjunction with the image resizing service instead.id on Page, Product, Category and StartPage should now be of the same type ID!.name on Page, Product, Category and StartPage should now be of the same type String!.images to ProductVariant.includeVariantImages argument to images on Product that defaults to true. Set this to false if you prefer to manually collate the Product images with the images found on the ProductVariant.subcategories on Category should no longer include hidden categories.hasSubcategories to Category, this can be used to determine if a category has subcategories without fetching the subcategories.subscribeToStockNotifications query now has more granular validation errors; InvalidEmail and InvalidArticleNumber.object field on Route should no longer return null when the route exists but the product is hidden. Instead it should return EmptyRoute. Thus more accurately resulting in a 404 page rather than the error page.