type
to Discount
.allowWebIndexing
to Page
and Category
hasMemberPrice
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 product
and 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
.FacebookConversionsApi
s 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.data
searchAutoComplete.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 Product
Customer.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.