Introduced Product Selections in Beta
Product Selections let you model the availability of your products in different sales channels. Depending on your use case and by leveraging the existing Stores functionality you can create individual catalogs or assortments for your brand sites, regional shops or brick-and-mortar stores.
Currently, the feature allows you to create Product Selections, populate them with Products, add them to any of your Stores and activate them independently for each Store. We also introduced a new endpoint that returns a Product Projection available in a given Store's active Product Selections.
Please note that the focus of this first release lies in scenarios where assortment management happens in a commercetools-external Product Information Management system and a commercetools-external search provider is used for product discovery in the shop frontend. As a consequence, you currently can’t filter your search results by Product Selections or Stores in both, Product Projections and the Merchant Center Product list. We plan to close these gaps progressively and add more functionality to Product Selections during the public beta phase.
Read more on Product Selections and how to use them in the API reference.
Read more on how to integrate with an external search service providing product discovery for your Store-specific shop frontends in this guide.
Furthermore, you can now subscribe to Messages triggered when Product Selections are created, deleted, or updated or when the Store's Product Selections have changed.
Changes:
- [API] Added the
view_product_selections
andmanage_product_selections
OAuth scopes. - [API] Added ProductSelections.
- [API] Added query on Product Selections for a Product.
- [API] Added Get ProductProjection in Store by ID or by Key.
- [API] Added ProductSelectionCreated and ProductSelectionDeleted Message.
- [API] Added ProductSelectionProductAdded and ProductSelectionProductRemoved Message.
- [API] Added StoreProductSelectionsChanged Message.
- [GraphQL API] Added the following types to the GraphQL schema:
AddProductSelectionProduct
,AddStoreProductSelection
,ChangeProductSelectionName
,ChangeStoreProductSelectionActive
,CreateProductSelectionDraft
,IndividualProductSelectionCreatedPayload
,ProductAssignment
,ProductAssignmentQueryResult
,ProductOfSelection
,ProductOfSelectionQueryResult
,ProductSelection
,ProductSelectionCreated
,ProductSelectionCreatedPayload
,ProductSelectionDeleted
,ProductSelectionProductAdded
,ProductSelectionProductRemoved
,ProductSelectionQueryInterface
,ProductSelectionQueryResult
,ProductSelectionSetting
,ProductSelectionSettingDraft
,ProductSelectionSettingInActionInput
,ProductSelectionUpdateAction
,RemoveProductSelectionProduct
,RemoveStoreProductSelection
,SelectionOfProduct
,SelectionOfProductQueryResult
,SetProductSelectionKey
,SetStoreProductSelections
,StoreProductSelectionsChanged
. - [GraphQL API] Changed the
CreateStore
type:- Input field
productSelections
was added toCreateStore
type
- Input field
- [GraphQL API] Changed the
Query
type:- Added the
productSelections
field to theQuery
type. Query.inStores
description is changedQuery
object type now implementsProductSelectionQueryInterface
interface- Added the
productSelectionAssignments
field to theQuery
type. - Added the
productSelection
field to theQuery
type. Query.inStore
description is changed
- Added the
- [GraphQL API] Changed the
Mutation
type:- Added the
updateProductSelection
field to theMutation
type. - Added the
deleteProductSelection
field to theMutation
type. - Added the
createProductSelection
field to theMutation
type.
- Added the
- [GraphQL API] Changed the
Product
type:- Added the
productSelectionRefs
field to theProduct
type.
- Added the
- [GraphQL API] Changed the
StoreCreated
type:- Added the
productSelections
field to theStoreCreated
type. - Added the
productSelectionsRef
field to theStoreCreated
type.
- Added the
- [GraphQL API] Changed the
Store
type:- Added the
productSelections
field to theStore
type.
- Added the
- [GraphQL API] Changed the
StoreUpdateAction
type:- Input field
changeProductSelectionActive
was added toStoreUpdateAction
type - Input field
setProductSelections
was added toStoreUpdateAction
type - Input field
addProductSelection
was added toStoreUpdateAction
type - Input field
removeProductSelection
was added toStoreUpdateAction
type
- Input field
- [GraphQL API] Changed the
InStore
type:- Added the
product
field to theInStore
type. - Added the
productSelectionAssignments
field to theInStore
type.
- Added the
The following changes were introduced in terms of GraphQL SDL:
extend type InStore {"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"product("Queries for a product with specified SKU"sku: String,"Queries for a product with specified [product variant key](https://docs.commercetools.com/api/projects/products#variant_key)"variantKey: String,"Queries with specified ID"id: String,"Queries with specified key"key: String): Product"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"productSelectionAssignments(where: String, sort: [String!], limit: Int, offset: Int): ProductAssignmentQueryResult!}extend type Query {"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"productSelection("Queries with specified ID"id: String,"Queries with specified key"key: String): ProductSelection"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"productSelectionAssignments(where: String, sort: [String!], limit: Int, offset: Int): ProductAssignmentQueryResult!"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"productSelections(where: String, sort: [String!], limit: Int, offset: Int): ProductSelectionQueryResult!}extend type Mutation {"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"createProductSelection("BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"draft: CreateProductSelectionDraft!): ProductSelection"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"deleteProductSelection(version: Long!,"Queries with specified ID"id: String,"Queries with specified key"key: String): ProductSelection"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"updateProductSelection(version: Long!,"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"actions: [ProductSelectionUpdateAction!]!,"Queries with specified ID"id: String,"Queries with specified key"key: String): ProductSelection}extend type Product {"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"productSelectionRefs(where: String, sort: [String!], limit: Int, offset: Int): SelectionOfProductQueryResult!}extend type StoreCreated {"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"productSelections: [ProductSelectionSetting!]!}extend type Store {"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"productSelections: [ProductSelectionSetting!]!}extend input StoreUpdateAction {addProductSelection: AddStoreProductSelectionchangeProductSelectionActive: ChangeStoreProductSelectionActiveremoveProductSelection: RemoveStoreProductSelectionsetProductSelections: SetStoreProductSelections}extend input CreateStore {"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"productSelections: [ProductSelectionSettingDraft!]}input AddProductSelectionProduct {product: ResourceIdentifierInput!}input AddStoreProductSelection {productSelection: ResourceIdentifierInput!active: Boolean}input ChangeProductSelectionName {name: [LocalizedStringItemInputType!]!}input ChangeStoreProductSelectionActive {productSelection: ResourceIdentifierInput!active: Boolean!}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"input CreateProductSelectionDraft {key: Stringname: [LocalizedStringItemInputType!]!}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"type IndividualProductSelectionCreatedPayload implements ProductSelectionCreatedPayload {name("String is defined for different locales. This argument specifies the desired locale."locale: Locale,"List of languages the client is able to understand, and which locale variant is preferred."acceptLanguage: [Locale!]): StringnameAllLocales: [LocalizedString!]!type: String!}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"type ProductAssignment {productRef: Reference!product: ProductproductSelectionRef: Reference!productSelection: ProductSelection}type ProductAssignmentQueryResult {offset: Int!count: Int!total: Long!"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"exists: Boolean!results: [ProductAssignment!]!}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"type ProductOfSelection {productRef: Reference!product: Product}type ProductOfSelectionQueryResult {offset: Int!count: Int!total: Long!"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"exists: Boolean!results: [ProductOfSelection!]!}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"type ProductSelection implements Versioned {key: Stringname("String is defined for different locales. This argument specifies the desired locale."locale: Locale,"List of languages the client is able to understand, and which locale variant is preferred."acceptLanguage: [Locale!]): StringnameAllLocales: [LocalizedString!]!productRefs(where: String, sort: [String!], limit: Int, offset: Int): ProductOfSelectionQueryResult!productCount: Int!id: String!version: Long!createdAt: DateTime!lastModifiedAt: DateTime!createdBy: InitiatorlastModifiedBy: Initiator}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"type ProductSelectionCreated implements MessagePayload {productSelection: ProductSelectionCreatedPayload!type: String!}interface ProductSelectionCreatedPayload {name("String is defined for different locales. This argument specifies the desired locale."locale: Locale,"List of languages the client is able to understand, and which locale variant is preferred."acceptLanguage: [Locale!]): StringnameAllLocales: [LocalizedString!]!type: String!}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"type ProductSelectionDeleted implements MessagePayload {type: String!}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"type ProductSelectionProductAdded implements MessagePayload {product: ProductproductRef: Reference!type: String!}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"type ProductSelectionProductRemoved implements MessagePayload {product: ProductproductRef: Reference!type: String!}"Fields to access product selection assignments. BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"interface ProductSelectionQueryInterface {"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"productSelectionAssignments(where: String, sort: [String!], limit: Int, offset: Int): ProductAssignmentQueryResult!}type ProductSelectionQueryResult {offset: Int!count: Int!total: Long!"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"exists: Boolean!results: [ProductSelection!]!}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"type ProductSelectionSetting {productSelectionRef: Reference!productSelection: ProductSelectionactive: Boolean!}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"input ProductSelectionSettingDraft {productSelection: ResourceIdentifierInput!active: Boolean!}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"input ProductSelectionSettingInActionInput {productSelection: ResourceIdentifierInput!active: Boolean}input ProductSelectionUpdateAction {addProduct: AddProductSelectionProductchangeName: ChangeProductSelectionNameremoveProduct: RemoveProductSelectionProductsetKey: SetProductSelectionKey}input RemoveProductSelectionProduct {product: ResourceIdentifierInput!}input RemoveStoreProductSelection {productSelection: ResourceIdentifierInput!}type SelectionOfProduct {productSelectionRef: Reference!productSelection: ProductSelection}type SelectionOfProductQueryResult {offset: Int!count: Int!total: Long!"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"exists: Boolean!results: [SelectionOfProduct!]!}input SetProductSelectionKey {key: String}input SetStoreProductSelections {productSelections: [ProductSelectionSettingInActionInput!]}"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"type StoreProductSelectionsChanged implements MessagePayload {addedProductSelections: [ProductSelectionSetting!]removedProductSelections: [ProductSelectionSetting!]updatedProductSelections: [ProductSelectionSetting!]type: String!}