Discover our combined Release Notes page and stay updated with the latest features and improvements! Get comprehensive details on all updates, quickly find specific updates and enhancements with our new search and filter options, and easily browse through different versions and sections.
Incremental indexing for Product Search is now available in Google Cloud North America and Australia
- North America Google Cloud
- Australia Google Cloud
Added 'CartFrozen' and 'CartUnfrozen' Messages
CartFrozen and CartUnfrozen Messages which are triggered when the corresponding update actions are applied to a Cart.Changes:
- [API] Added the CartFrozen Message.
- [API] Added the CartUnfrozen Message.
- [GraphQL API] Added the following types to the GraphQL schema:
CartFrozen,CartUnfrozen.
The following changes were introduced in terms of GraphQL SDL:
type CartFrozen implements MessagePayload {
type: String!
}
type CartUnfrozen implements MessagePayload {
type: String!
}
Facets in Product Search are now generally available
- All types of Facets, except for Facets in GraphQL.
- The
facetsfield in ProductSearchRequest and ProductPagedSearchResponse.
Expanded Audit Log coverage of Change Types
Deprecated Change Types (listed below) will no longer be included in new records but remain filterable for historical records.
Changes:
- For Change Types related to Associate Roles:
- [API] Added the
addedItemsandremovedItemsfields to SetPermissionsChange.
- [API] Added the
- For Change Types related to Business Units:
- [API] Added the following: ChangeApprovalRuleModeChange, SetInheritedAssociatesChange, SetInheritedStoresChange, ChangeTopLevelUnitChange, SetUnitTypeChange, SetAssociatesChange.
- [API] Added the
addedItemsandremovedItemsfields to the following: SetStoresChange. - [API] Deprecated
addAssociateChangeandremoveAssociateChangein favor ofsetAssociatesChange.
- For Change Types related to Cart Discounts:
- [API] Added the
addedItemsandremovedItemsfields to the following: SetStoresChange.
- [API] Added the
- For Change Types related to Categories:
- [API] Added the following: SetAncestorsChange.
- For Change Types related to Channels:
- [API] Added the following: SetAddressCustomFieldChange, SetAddressCustomTypeChange.
- [API] Added the
addedItemsandremovedItemsfields to the following: SetChannelRolesChange.
- For Change Types related to Customers:
- [API] Added the following: SetPasswordChange, SetCustomerGroupAssignmentsChange, SetAddressCustomFieldChange, SetAddressCustomTypeChange.
- [API] Added the
addedItemsandremovedItemsfields to the following: SetStoresChange.
- For Change Types related to Discount Codes:
- [API] Added the following: SetKeyChange.
- [API] Added the
addedItemsandremovedItemsfields to the following: ChangeCartDiscountsChange, ChangeGroupsChange.
- For Change Types related to Inventories:
- [API] Added the following: SetKeyChange, SetMaxCartQuantityChange, SetMinCartQuantityChange.
- [API] Added the
addedItemsandremovedItemsfields to the following: SetReservationsChange.
- For Change Types related to Orders:
- [API] Added the following: AddShippingChange, RemoveShippingChange, SetBillingAddressCustomFieldChange, SetBillingAddressCustomTypeChange, SetCustomLineItemDiscountedPriceChange, SetCustomLineItemDiscountedPricePerQuantityChange, SetDeliveryCustomFieldChange, SetDeliveryCustomTypeChange, SetDeliveryAddressCustomFieldChange, SetDeliveryAddressCustomTypeChange, SetDiscountOnTotalPriceChange, SetItemShippingAddressCustomFieldChange, SetItemShippingAddressCustomTypeChange, SetParcelCustomFieldChange, SetParcelCustomTypeChange, SetReturnInfoChange, SetReturnItemCustomLineItemCustomFieldChange, SetReturnItemCustomLineItemCustomTypeChange, SetReturnItemLineItemCustomFieldChange, SetReturnItemLineItemCustomTypeChange, SetShippingAddressCustomFieldChange, SetShippingAddressCustomTypeChange, SetShippingCustomFieldChange, SetShippingCustomTypeChange, ChangePriceRoundingModeChange, UpdateItemShippingAddressChange.
- [API] Added the
customTypeIdfield to the following: SetCustomLineItemCustomFieldChange. - [API] Added the
customLineItemfield to the following: SetCustomLineItemShippingDetailsChange. - [API] Added the
customLineItemIdfield to the following: TransitionCustomLineItemStateChange. - [API] Added the
variantfield to the following: SetLineItemShippingDetailsChange, SetLineItemTaxedPriceChange, SetLineItemTotalPriceChange. - [API] Added the
lineItemfield to the following: SetLineItemShippingDetailsChange. - [API] Added the
lineItemIdfield to the following: SetLineItemTotalPriceChange, SetLineItemDiscountedPriceChange, SetLineItemDiscountedPricePerQuantityChange, SetLineItemPriceChange, SetLineItemProductSlugChange, SetLineItemTaxAmountChange, SetLineItemTaxRateChange, SetOrderLineItemCustomFieldChange, SetOrderLineItemCustomTypeChange.
- For Change Types related to Payments:
- [API] Added the following: SetTransactionCustomFieldChange, SetTransactionCustomTypeChange.
- [API] Deprecated
changeAmountAuthorizedChange.
- For Change Types related to Products:
- [API] Added the following: ChangeLastVariantIdChange, RevertStagedChangesChange, RevertStagedVariantChangesChange, SetPriceKeyChange, SetPriceModeChange, SetProductAttributeChange
- [API] Added the
pricefield to the following: SetDiscountedPriceChange. - [API] Added the
addedItemsandremovedItemsfields to the following: SetPricesChange. - [API] Added the
catalogDatafield to the following: AddToCategoryChange, SetMetaDescriptionChange, SetMetaKeywordsChange, SetMetaTitleChange, ChangeSlugChange, RemoveFromCategoryChange, AddAssetChange, ChangeAssetNameChange, ChangeAssetOrderChange, RemoveAssetChange, SetAssetCustomFieldChange, SetAssetCustomTypeChange, SetAssetDescriptionChange, SetAssetKeyChange, SetAssetSourcesChange, SetAssetTagsChange. - [API] Added the
variantfield to the following: AddAssetChange, ChangeAssetNameChange, ChangeAssetOrderChange, RemoveAssetChange, SetAssetCustomFieldChange, SetAssetCustomTypeChange, SetAssetDescriptionChange, SetAssetKeyChange, SetAssetSourcesChange, SetAssetTagsChange, AddExternalImageChange, ChangePriceChange, MoveImageToPositionChange, RemoveImageChange, SetAttributeChange, SetImageLabelChange, SetSkuChange, SetProductVariantKeyChange, SetProductPriceCustomFieldChange, SetProductPriceCustomTypeChange, - [API] Added the
customTypeIdandnamefield to the following: SetProductPriceCustomFieldChange. - [API] Added the
priceIdfield to the following: SetProductPriceCustomFieldChange, SetProductPriceCustomTypeChange. - [API] Deprecated
addPriceChangeandremovePriceChangein favor ofsetPricesChange.
- For Change Types related to Product Selections:
- [API] Added the following: SetVariantExclusionChange, ExcludeProductChange.
- For Change Types related to Product Types:
- [API] Added the
attributeNamefield to the following: ChangeEnumValueLabelChange, ChangeEnumValueOrderChange.
- [API] Added the
- For Change Types related to Quotes:
- [API] Added the following: ChangeCustomerChange.
- For Change Types related to Quote Requests:
- [API] Added the following: ChangeCustomerChange.
- For Change Types related to Reviews:
- [API] Added the following: ChangeIncludedInStatisticsChange.
- For Change Types related to Shopping Lists:
- [API] Added the following: SetBusinessUnitChange, ChangeLineItemNameChange, ChangeLineItemPublishedChange.
- For Change Types related to States:
- [API] Added the
addedItemsandremovedItemsfields to the following: SetStateRolesChange, SetTransitionsChange. - [API] Deprecated
addRolesChangeandremoveRolesChangein favor ofsetRolesChange.
- [API] Added the
- For Change Types related to Stores:
- [API] Added the
addedItemsandremovedItemsfields to the following: SetCountriesChange, SetDistributionChannelsChange, SetLanguagesChange, SetProductSelectionsChange, SetSupplyChannelsChange. - [API] Deprecated
addProductSelectionChangeandremoveProductSelectionChangein favor ofsetProductSelectionsChange.
- [API] Added the
- For Change Types related to Tax Categories:
- [API] Added the following: ReplaceTaxRateChange.
- For Change Types related to Types:
- [API] Added the
attributeNamefield to the following: AddEnumValueChange.
- [API] Added the
Aligned behavior of Merge Cart endpoints
ResourceNotFound error when no active Cart exists; the anonymous Cart becomes the Customer's active Cart instead.Changes:
- [API] Changed behavior of the Merge Cart endpoint.
- [API] Changed behavior of the Merge Cart in Store endpoint.
Introduced new Message for Recurring Order failure
Changes:
- [API] Added the RecurringOrderFailed Message and RecurringOrderFailure Error.
- [GraphQL API] Added the following types to the GraphQL schema:
RecurringOrderFailed,RecurringOrderFailureError.
The following changes were introduced in terms of GraphQL SDL:
type RecurringOrderFailed implements MessagePayload {
cartId: String!
failedAt: DateTime!
failureReason: String!
orderScheduledAt: DateTime!
errors: [RecurringOrderFailureError!]
type: String!
}
type RecurringOrderFailureError {
"Error identifier"
code: String!
"Plain text description of the cause of the error."
message: String!
"Information about the cause of the error."
details: Json!
}
Added 'sku' field to InventoryEntryQuantitySet Message
sku field to the InventoryEntryQuantitySet Message. This field lets you identify which Product Variant inventory changed without resolving the inventoryEntry reference, removing an extra API call for subscriber services.Changes:
- [API] Added the
skufield to the InventoryEntryQuantitySet Message. - [GraphQL API] Added the
skufield to theInventoryEntryQuantitySettype.
The following changes were introduced in terms of GraphQL SDL:
extend type InventoryEntryQuantitySet {
sku: String
}
Changed validation for removeLineItem update action quantity
quantity must now be at least 1. Previously, 0 was accepted but produced no change.removeLineItem with a quantity of 0 will return a 400 Bad Request error with an InvalidInput code.quantity field remains optional. If you omit it, the entire Line Item will be removed, as before.quantity of 0 is extremely rare. Additionally, since this operation previously had no effect on the Cart, there is no impact on your shoppers' checkout experience.Changes:
- [API] Changed
minimumforquantityfrom 0 to 1 in CartRemoveLineItemAction. - [API] Changed
minimumforquantityfrom 0 to 1 in MyCartRemoveLineItemAction. - [API] Removed
default: 0and setminimum: 1forquantityin StagedOrderRemoveLineItemAction.
Customer Groups for B2B is now available in early access
With this feature, you can:
- Assign up to 500 Customer Groups to a Business Unit using the Merchant Center or API.
- Create prices and discounts targeting these Customer Groups for B2B.
- Filter Business Units by their Customer Groups using the Business Unit Search API.
Early access gives you the opportunity to evaluate new features before their general release. Participants can also provide feedback directly to our product teams to help improve the experience. Early access features are not intended for production use.
To request access and try out this feature, reach out to your Customer Success Manager (CSM).
Added support for correlation ID to API Extensions
By receiving and logging the correlation ID in your API Extension's logs, you can now seamlessly follow a single request's complete lifecycle; from the initial API call to Composable Commerce, through its execution in your API Extension, and any subsequent calls your service makes.
Improved indexing performance for Product Search
To enhance the freshness of storefront data, we are introducing a new incremental indexing process for product and price updates. This new architecture significantly reduces the latency between a change made in the product catalog and its visibility to customers on the storefront.
Previously, changes to product catalogs and price books were processed in fixed intervals. This could result in a delay of at least 15 minutes, and over an hour for larger, more complex catalogs. With the new incremental approach, these updates are processed as individual events, enabling near real-time reflection in the search index.
Change:
- Introduced incremental indexing that avoids full reindexing for many cases of product catalog updates.
Cart merge is now available for externally authenticated Customers
We've introduced new endpoints in the Carts API to manually merge anonymous Carts for Customers who authenticate using external OAuth providers.
Previously, Cart merging was only available during sign-in or sign-up for Customers using the Composable Commerce OAuth 2.0 service.
With this enhancement, you can now ensure that any shopper who adds items to their Cart while browsing anonymously can retain their Cart contents after signing in—regardless of how they authenticate.
Changes:
- [API] Added the Merge Cart and Merge Cart in Store endpoints.
- [API] Added the MergeCartDraft type.
- [API] Added the CartMergeMode enum.
- [GraphQL API] Added the following types to the GraphQL schema:
CartMergeMode,MergeCartDraft. - [GraphQL API] Added the
mergeCartfield to theMutationtype.
enum CartMergeMode {
MergeWithExistingCustomerCart
UseAsNewActiveCustomerCart
}
input MergeCartDraft {
anonymousCart: ResourceIdentifierInput
mergeMode: CartMergeMode = MergeWithExistingCustomerCart
anonymousId: String
updateProductData: Boolean = false
}
extend type Mutation {
mergeCart(customerId: String!, draft: MergeCartDraft!, storeKey: KeyReferenceInput): Cart
}
Carts are now preserved when a Customer is deleted
Carts are now preserved when a Customer is deleted. Previously, B2C Carts (those owned by a Customer) were automatically deleted along with the Customer account. B2B Carts (those owned by a Business Unit) were already preserved and continue to be.
This change allows merchants to process pending Orders and Payments even if the associated Customer is deleted before the Order is completed.
Product Search in GraphQL now available in public beta
Previously, the process required two distinct API calls:
- to the Product Search endpoint to get a list of Product IDs.
- to the GraphQL endpoint to fetch the specific data needed for those Products.
This two-call pattern placed the responsibility of data aggregation on the client and could introduce additional network round-trips. Our new approach removes this requirement.
Changes:
- [GraphQL API] Changed the
Querytype:- Added the
productsSearchfield to theQuerytype.
- Added the
- [GraphQL API] Added the following types to the GraphQL schema:
ProductPagedSearchResponse,ProductSearchFacetResultBucket,ProductSearchFacetResultBucketEntry,ProductSearchFacetResultCount,ProductSearchFacetResultStats, andProductSearchResult. - [GraphQL API] Added the following input types to the GraphQL schema:
ProductSearchFacetCountExpressionInput,ProductSearchFacetDistinctBucketSortExpressionInput,ProductSearchFacetDistinctExpressionInput,ProductSearchFacetExpressionInput,ProductSearchFacetRangesExpressionInput,ProductSearchFacetRangesFacetRangeInput,ProductSearchFacetStatsExpressionInput,SearchAnyValueExpressionInput,SearchDateRangeExpressionInput,SearchDateTimeRangeExpressionInput,SearchExistsInput,SearchFilterExpressionInput,SearchFullTextExpressionInput,SearchFullTextPrefixInput,SearchFuzzyExpressionInput,SearchLongRangeExpressionInput,SearchNumberRangeExpressionInput,SearchQueryInput,SearchQueryRangeExpressionInput,SearchSortingInput, andSearchTimeRangeExpressionInput. - [GraphQL API] Added the following enums to the GraphQL schema:
ProductSearchFacetCountLevelEnum,ProductSearchFacetDistinctBucketSortBy,ProductSearchFacetScopeEnum,SearchFieldType,SearchMatchType,SearchSortMode, andSearchSortOrder. - [GraphQL API] Added the
ProductSearchFacetResultinterface to the GraphQL schema. - [GraphQL API] Added the following scalar to the GraphQL schema:
SearchValueType.
The following changes were introduced in terms of GraphQL SDL:
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type ProductPagedSearchResponse {
total: Long!
offset: Int
limit: Int
results: [ProductSearchResult!]!
facets: [ProductSearchFacetResult!]!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input ProductSearchFacetCountExpressionInput {
name: String!
scope: ProductSearchFacetScopeEnum = all
filter: SearchQueryInput
level: ProductSearchFacetCountLevelEnum = products
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
enum ProductSearchFacetCountLevelEnum {
"ProductSearchFacetCountLevelEnum 'products' type."
products
"ProductSearchFacetCountLevelEnum 'variants' type."
variants
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
enum ProductSearchFacetDistinctBucketSortBy {
"ProductSearchFacetDistinctBucketSortBy 'count' type."
count
"ProductSearchFacetDistinctBucketSortBy 'key' type."
key
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input ProductSearchFacetDistinctBucketSortExpressionInput {
by: ProductSearchFacetDistinctBucketSortBy!
order: SearchSortOrder
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input ProductSearchFacetDistinctExpressionInput {
name: String!
scope: ProductSearchFacetScopeEnum
filter: SearchQueryInput
level: ProductSearchFacetCountLevelEnum
field: String!
includes: [String!]
sort: ProductSearchFacetDistinctBucketSortExpressionInput
limit: Int
language: String
fieldType: SearchFieldType
missing: String
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input ProductSearchFacetExpressionInput {
count: ProductSearchFacetCountExpressionInput
distinct: ProductSearchFacetDistinctExpressionInput
ranges: ProductSearchFacetRangesExpressionInput
stats: ProductSearchFacetStatsExpressionInput
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input ProductSearchFacetRangesExpressionInput {
name: String!
scope: ProductSearchFacetScopeEnum
filter: SearchQueryInput
level: ProductSearchFacetCountLevelEnum
field: String!
ranges: [ProductSearchFacetRangesFacetRangeInput!]!
language: String
fieldType: SearchFieldType
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input ProductSearchFacetRangesFacetRangeInput {
from: String
to: String
key: String
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
interface ProductSearchFacetResult {
name: 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 ProductSearchFacetResultBucket implements ProductSearchFacetResult {
name: String!
buckets: [ProductSearchFacetResultBucketEntry!]!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type ProductSearchFacetResultBucketEntry {
key: String!
count: Int!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type ProductSearchFacetResultCount implements ProductSearchFacetResult {
name: String!
value: Long!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type ProductSearchFacetResultStats implements ProductSearchFacetResult {
name: String!
min: Json!
max: Json!
mean: Json
sum: Json
count: Long!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
enum ProductSearchFacetScopeEnum {
"ProductSearchFacetScopeEnum 'all' type."
all
"ProductSearchFacetScopeEnum 'query' 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"
input ProductSearchFacetStatsExpressionInput {
name: String!
scope: ProductSearchFacetScopeEnum
filter: SearchQueryInput
field: String!
fieldType: SearchFieldType
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type ProductSearchResult {
id: String!
product: Product!
}
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"
productsSearch(query: SearchQueryInput, postFilter: SearchQueryInput, sort: [SearchSortingInput!], limit: Int, offset: Int, markMatchingVariants: Boolean, facets: [ProductSearchFacetExpressionInput!]): ProductPagedSearchResponse
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SearchAnyValueExpressionInput {
field: String!
boost: Float
fieldType: SearchFieldType
gte: Float
value: SearchValueType!
language: String
caseInsensitive: 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 SearchDateRangeExpressionInput {
field: String!
boost: Float
fieldType: SearchFieldType
gte: Date
gt: Date
lte: Date
lt: Date
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SearchDateTimeRangeExpressionInput {
field: String!
boost: Float
fieldType: SearchFieldType
gte: DateTime
gt: DateTime
lte: DateTime
lt: DateTime
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SearchExistsInput {
field: String!
boost: Float
fieldType: SearchFieldType
language: String
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
enum SearchFieldType {
"Field type for boolean values."
boolean
"Field type for text values."
text
"Field type for localized text values."
ltext
"Field type for enum values."
enum
"Field type for localized enum values."
lenum
"Field type for number values."
number
"Field type for money values."
money
"Field type for date values."
date
"Field type for datetime values."
datetime
"Field type for time values."
time
"Field type for reference values."
reference
"Field type for set of boolean values."
set_boolean
"Field type for set of text values."
set_text
"Field type for set of localized text values."
set_ltext
"Field type for set of enum values."
set_enum
"Field type for set of localized enum values."
set_lenum
"Field type for set of number values."
set_number
"Field type for set of money values."
set_money
"Field type for set of date values."
set_date
"Field type for set of datetime values."
set_datetime
"Field type for set of time values."
set_time
"Field type for set of reference values."
set_reference
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SearchFilterExpressionInput {
range: SearchQueryRangeExpressionInput
fullText: SearchFullTextExpressionInput
fullTextPrefix: SearchFullTextPrefixInput
exists: SearchExistsInput
prefix: SearchAnyValueExpressionInput
wildcard: SearchAnyValueExpressionInput
exact: SearchAnyValueExpressionInput
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SearchFullTextExpressionInput {
field: String!
boost: Float
fieldType: SearchFieldType
value: String!
language: String
mustMatch: SearchMatchType
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SearchFullTextPrefixInput {
field: String!
boost: Float
fieldType: SearchFieldType
value: String!
language: String
mustMatch: SearchMatchType
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SearchFuzzyExpressionInput {
field: String!
boost: Float
fieldType: SearchFieldType
value: String!
level: Int!
language: String
mustMatch: SearchMatchType
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SearchLongRangeExpressionInput {
field: String!
boost: Float
fieldType: SearchFieldType
gte: Long
gt: Long
lte: Long
lt: Long
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
enum SearchMatchType {
"Any match type."
any
"All match type."
all
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SearchNumberRangeExpressionInput {
field: String!
boost: Float
fieldType: SearchFieldType
gte: Float
gt: Float
lte: Float
lt: Float
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SearchQueryInput {
and: [SearchQueryInput!]
or: [SearchQueryInput!]
not: [SearchQueryInput!]
filter: [SearchFilterExpressionInput!]
range: SearchQueryRangeExpressionInput
fullText: SearchFullTextExpressionInput
fullTextPrefix: SearchFullTextPrefixInput
exists: SearchExistsInput
prefix: SearchAnyValueExpressionInput
wildcard: SearchAnyValueExpressionInput
exact: SearchAnyValueExpressionInput
fuzzy: SearchFuzzyExpressionInput
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SearchQueryRangeExpressionInput {
date: SearchDateRangeExpressionInput
datetime: SearchDateTimeRangeExpressionInput
time: SearchTimeRangeExpressionInput
long: SearchLongRangeExpressionInput
float: SearchNumberRangeExpressionInput
}
"BETA: This feature can be subject to change and should be used carefully in production.
https://docs.commercetools.com/api/contract#public-beta"
enum SearchSortMode {
"Minimum value."
min
"Maximum value."
max
"Average value."
avg
"Sum value."
sum
}
"BETA: This feature can be subject to change and should be used carefully in production.
https://docs.commercetools.com/api/contract#public-beta"
enum SearchSortOrder {
"Ascending order."
asc
"Descending order."
desc
}
"BETA: This feature can be subject to change and should be used carefully in production.
https://docs.commercetools.com/api/contract#public-beta"
input SearchSortingInput {
field: String!
language: String
order: SearchSortOrder!
mode: SearchSortMode
fieldType: SearchFieldType
filter: SearchFilterExpressionInput
}
"BETA: This feature can be subject to change and should be used carefully in production.
https://docs.commercetools.com/api/contract#public-beta"
input SearchTimeRangeExpressionInput {
field: String!
boost: Float
fieldType: SearchFieldType
gte: Time
gt: Time
lte: Time
lt: Time
}
scalar SearchValueType
Discount Groups are now generally available
The following associated API features are now generally available:
- [API] Discount Groups Messages
- [API]
discountGroupfield in CartDiscount and CartDiscountDraft types in Cart Discounts API - [API] Set DiscountGroup update action in Cart Discounts API
- [API] MaxDiscountGroupsReachedError
Added DiscountsConfiguration to Project configuration
Changes:
-
[API] Added DiscountsConfiguration to Project.
-
[API] Added DiscountCombinationMode enum.
-
[API] Added Set Discounts Configuration update action.
-
[GraphQL API] Added the following types to the GraphQL schema:
DiscountCombinationMode,DiscountsConfiguration,DiscountsConfigurationInput,SetProjectSettingsDiscountsConfiguration. -
[GraphQL API] Added the
setDiscountsConfigurationinput field to theProjectSettingsUpdateActiontype.
The following changes were introduced in terms of GraphQL SDL:
extend type ProjectProjection {
discounts: DiscountsConfiguration!
}
extend input ProjectSettingsUpdateAction {
setDiscountsConfiguration: SetProjectSettingsDiscountsConfiguration
}
enum DiscountCombinationMode {
Stacking
BestDeal
}
type DiscountsConfiguration {
discountCombinationMode: DiscountCombinationMode!
}
input DiscountsConfigurationInput {
discountCombinationMode: DiscountCombinationMode
}
input SetProjectSettingsDiscountsConfiguration {
discountsConfigurationDraft: DiscountsConfigurationInput!
}
Recurring Orders are now generally available
In addition, customers can combine one-time purchases and subscription items in a single checkout, creating a seamless and flexible shopping experience.
RecurringOrderDraft 'startsAt' field is now optional
startsAt when you want to create a Recurring Order that will start immediately.
With this change, the platform sets the current date and time as the default value for startsAt.Changes:
- [API] Changed the
startsAtfield to be optional in RecurringOrderDraft. - [GraphQL API] Changed the
startsAtfield to be optional in theRecurringOrderDraftinput type.
Added support for distributing relative discounts with Pattern Discount target
Changes:
- [API] Added
applicationModefield to CartDiscountValueRelative and CartDiscountValueRelativeDraft types in Cart Discounts API. - [GraphQL API] Added the following types to the GraphQL schema:
RelativeCartDiscountValue,RelativeCartDiscountValueInput. - [GraphQL API] Added the
relativeCartinput field to theCartDiscountValueInputtype.
The following changes were introduced in terms of GraphQL SDL:
extend input CartDiscountValueInput {
relativeCart: RelativeCartDiscountValueInput
}
type RelativeCartDiscountValue implements CartDiscountValue {
permyriad: Int!
applicationMode: DiscountApplicationMode!
type: String!
}
input RelativeCartDiscountValueInput {
permyriad: Int!
applicationMode: DiscountApplicationMode!
}
Inventory Management at Scale feature available in early access
This feature enables you to:
- Reserve stock when adding items to the Cart, ensuring availability throughout the shopping journey.
- Configure and extend reservation expiration times for greater flexibility.
- Support enterprise-scale demand by handling over 100,000 reservations per minute.
Early access allows you to evaluate new features before public beta or general availability. You can also provide feedback directly to our product teams. Please note that early access features are not intended for use in production projects.
If you’d like to try this feature, reach out to your Customer Success Manager (CSM) to learn more.
Added fuzzy search to Product Search
level distance.
For example, searching for "shurt" may now return "shirt" as a match, which improves the user experience when typos occur.Changes:
- [API] Added the
fuzzysearch expression to the search query language used in Product Search, Customer Search, and Business Unit Search.
Example query:
{
"query": {
"fuzzy": {
"field": "name",
"value": "shurt",
"level": 1,
"language": "en"
}
}
}
Introduced Attribute filtering for Product Projections
filter[attributes] query parameter to specify the Product Attributes that you want to include or exclude from the response.filter[attributes] parameter is available for the following Product Projections endpoints:- Query ProductProjections
- Get ProductProjection by ID
- Get ProductProjection by Key
- Get ProductProjection in Store by ID
- Get ProductProjection in Store by Key
Changes:
- [API] Added the
filter[attributes]query parameter to Product Projections endpoints. - [API] Added support for including specific Attributes by name.
- [API] Added support for excluding specific Attributes by using the dash (
-) prefix. - [API] Added Attribute filtering support for Product Attributes, Master Variant, and all other Product Variants.
Added 'interfaceId' field to Transaction
interfaceId field to Transaction. This field stores the reference provided by a Payment Service Provider (PSP) for specific payment operations, like authorization, capture, or refund. These references are sometimes required for subsequent operations, for example, when partially refunding a payment that was captured in multiple steps, you may need to specify which capture to refund.Changes:
- [API] Added the
interfaceIdfield to Transaction, TransactionDraft, and MyTransactionDraft. - [API] Added the
setTransactionInterfaceIdupdate action to the Payment resource. - [API] Added the PaymentTransactionInterfaceIdSetMessage message.
- [GraphQL API] Added the
setTransactionInterfaceIdupdate action to thePaymentUpdateActioninput type. - [GraphQL API] Added the
PaymentTransactionInterfaceIdSetmessage payload type. - [GraphQL API] Added the
SetPaymentTransactionInterfaceIdinput type. - [GraphQL API] Added
interfaceIdfield toTransaction,TransactionDraft, andMyTransactionDrafttypes.
The following changes were introduced in terms of GraphQL SDL:
extend input PaymentUpdateAction {
setTransactionInterfaceId: SetPaymentTransactionInterfaceId
}
type PaymentTransactionInterfaceIdSet implements MessagePayload {
transactionId: String!
newInterfaceId: String
oldInterfaceId: String
type: String!
}
input SetPaymentTransactionInterfaceId {
transactionId: String!
interfaceId: String
}
extend input TransactionDraft {
interfaceId: String
}
extend input MyTransactionDraft {
interfaceId: String
}
extend type Transaction {
interfaceId: String
}
Added Store fields to the RecurringOrder GraphQL type
store and storeRef fields to the RecurringOrder GraphQL type. With this change, the HTTP API and GraphQL API are now aligned.Changes:
- [GraphQL API] Changed the
RecurringOrdertype:- Added the
storefield to theRecurringOrdertype. - Added the
storeReffield to theRecurringOrdertype.
- Added the
The following changes were introduced in terms of GraphQL SDL:
extend type RecurringOrder {
store: Store
storeRef: KeyReference
}
Added filter for discounted prices to Product Search
variant.prices.discounted field at the Variant level to determine whether a Product qualifies.This makes it easier to:
- Highlight discounted products in storefronts.
- Build collections or categories of sale items.
- Improve promotional campaigns by surfacing discounted products first.
Changes:
- [API] Added the
variants.prices.discountedfield to the searchable Product fields.
Example query:
{
"query": {
"exact": {
"field": "variants.prices.discounted",
"value": true
}
}
}
Added Large Cart performance tips
This page covers:
- Factors that affect Cart size and performance.
- API limits and recommended approaches for large Carts.
- Data modeling and API usage strategies for efficiency.
- Performance tips and solutions for common challenges.
Added support to deactivate Discount Groups
You can now activate or deactivate a Discount Group in a Project. This enhancement lets you manage temporary promotions efficiently without deleting the Discount Group or reconfiguring Cart Discounts in a Project.
Changes:
- [API] Updated the following in the Discount Groups API:
- Added the
isActivefield to DiscountGroup and DiscountGroupDraft types. - Added the Set IsActive update action.
- Added the
- [API] Added the MaxDiscountGroupsReached error for Discount Groups.
- [API] Added the DiscountGroupIsActiveSet Message for Discount Groups.
- [GraphQL API] Added the
isActivefield to theDiscountGrouptype. - [GraphQL API] Added the
isActiveinput field to theDiscountGroupDrafttype. - [GraphQL API] Added the
setIsActiveinput field to theDiscountGroupUpdateActiontype. - [GraphQL API] Added the
DiscountGroupIsActiveSettype.
The following changes were introduced in terms of GraphQL SDL:
extend type DiscountGroup {
isActive: Boolean!
}
extend input DiscountGroupUpdateAction {
setIsActive: SetDiscountGroupIsActive
}
extend input DiscountGroupDraft {
isActive: Boolean = true
}
type DiscountGroupIsActiveSet implements MessagePayload {
isActive: Boolean!
discountGroupId: String!
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"
input SetDiscountGroupIsActive {
isActive: Boolean!
}
Added Delete endpoints for Recurrence Policies
Changes:
- [API] Added Delete RecurrencePolicy by ID and Delete RecurrencePolicy by Key endpoints to the Recurrence Policies API.
- [GraphQL API] Added the
deleteRecurrencePolicyfield to theMutationtype.
The following changes were introduced in terms of GraphQL SDL:
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"
deleteRecurrencePolicy(version: Long!,
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): RecurrencePolicy
}
Added Import Business Units endpoint in beta
You can now send a complete Business Unit snapshot to an Import Container, which then automatically calculates the difference to create and update Business Units in your Project.
Changes:
- [API] Added Import Business Units endpoint to Import API.
- [API] Added BusinessUnitImportRequest type to Import API.
- [API] Added CompanyBusinessUnitImport and related types to Import API.
- [API] Added DivisionBusinessUnitImport and related types to Import API.
Added guide about error handling through timeouts and retries
We've published a new guide to help you build more resilient applications by effectively handling API errors from Composable Commerce.
In this guide, you will find:
- Best practices for implementing robust timeout and retry logic.
- Our recommended timeout values for critical API interactions.
- Core principles for designing a resilient error-handling strategy.
Added Messages for Customer address and store changes
Changes:
- [API] Added the following Messages: CustomerDefaultBillingAddressSet, CustomerDefaultShippingAddressSet, and CustomerStoresSet.
- [GraphQL API] Added the following types to the GraphQL schema:
CustomerDefaultBillingAddressSet,CustomerDefaultShippingAddressSet,CustomerStoresSet.
The following changes were introduced in terms of GraphQL SDL:
type CustomerDefaultBillingAddressSet implements MessagePayload {
address: Address
type: String!
}
type CustomerDefaultShippingAddressSet implements MessagePayload {
address: Address
type: String!
}
type CustomerStoresSet implements MessagePayload {
stores: [Store!]!
oldStores: [Store!]!
storesRef: [KeyReference!]!
oldStoresRef: [KeyReference!]!
type: String!
}
Added quantity limits for Line Items
You can now set the minimum and maximum quantities allowed for a Line Item in a Cart. This is useful in cases where a customer can only order a minimum amount of an item, or when you want to ensure the availability of an item that has limited stock. In addition, this feature can help prevent denial of inventory scenarios by limiting the maximum quantity that can be added to a Cart.
Changes:
- [GraphQL API] Changed the
InventoryEntrytype:- Added the
minCartQuantityfield to theInventoryEntrytype. - Added the
maxCartQuantityfield to theInventoryEntrytype.
- Added the
- [GraphQL API] Changed the
InventoryEntryDrafttype:- Added the
minCartQuantityfield to theInventoryEntryDrafttype. - Added the
maxCartQuantityfield to theInventoryEntryDrafttype.
- Added the
- [GraphQL API] Changed the
InventoryEntryUpdateActiontype:- Input field
setInventoryLimitswas added to theInventoryEntryUpdateActiontype.
- Input field
- [GraphQL API] Added the following type to the GraphQL schema:
SetInventoryLimits.
Added support to set expiration date for Recurring Orders
You can now set an expiration date for Recurring Orders. This enhancement helps automate order lifecycle management and ensures orders do not persist beyond their intended period.
Changes:
- [API] Updated the following in the Recurring Orders API:
- Added the Set Expires At update action.
- Added the
expiresAtfield to the RecurringOrderDraft type.
- [API] Added the RecurringOrderExpiresAtSet Message to the Recurring Order Messages Type.
- [GraphQL API] Added the
setExpiresAtinput field to theRecurringOrderUpdateActiontype. - [GraphQL API] Added the following types to the GraphQL schema:
SetRecurringOrderExpiresAt,RecurringOrderExpiresAtSet
The following changes were introduced in terms of GraphQL SDL:
extend input RecurringOrderUpdateAction {
setExpiresAt: SetRecurringOrderExpiresAt
}
type RecurringOrderExpiresAtSet implements MessagePayload {
newExpiresAt: DateTime
oldExpiresAt: DateTime
type: String!
}
input SetRecurringOrderExpiresAt {
expiresAt: DateTime
}
Introduced rate limits for Change History
Added support for expanding references of nested Variant Attributes in GraphQL
Changes:
- [GraphQL API] Changed the
RawProductAttributetype:- Added the
attributesRawfield to theRawProductAttributetype.
- Added the
Added Delete endpoints for Recurring Orders
Changes:
- [API] Added Delete RecurringOrder by ID and Delete RecurringOrder by Key methods to the Recurring Orders API.
- [API] Added the RecurringOrderDeleted Message.
- [GraphQL API] Added the
RecurringOrderDeletedtype to the GraphQL schema. - [GraphQL API] Added the
deleteRecurringOrderfield to theMutationtype.
The following changes were introduced in terms of GraphQL SDL:
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"
deleteRecurringOrder(version: Long!, personalDataErasure: Boolean = false,
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): RecurringOrder
}
type RecurringOrderDeleted implements MessagePayload {
recurringOrder: RecurringOrder!
type: String!
}
Added facets about statistics to Product Search
{
"facets": {
"results": [
{
"name": "pricesStatsVariants",
"min": 100,
"max": 300,
"mean": 200,
"sum": 600,
"count": 3
}
]
}
}
Added Reference Expansion to Custom Objects in GraphQL
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
ReferencedResource - [GraphQL API] Changed the
CustomObjecttype:- Added the
referencedResourcesfield to theCustomObjecttype.
- Added the
The following changes were introduced in terms of GraphQL SDL:
extend type CustomObject {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
referencedResources(expand: [String!]): [ReferencedResource!]
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type ReferencedResource {
path: String!
objs: [ReferenceExpandable!]
}
Improved error handling for invalid Customers in Store-specific Carts
CartDraft.customerId) does not exist, the Carts API now returns a 400 Bad Request error with the InvalidInput code. Previously, the API returned a 404 Not Found error in this scenario.This change ensures the error response provides clearer feedback to developers and makes debugging easier.
Introduced Recurring Orders in public beta
In addition, Customers can combine one-time purchases and subscription items in a single checkout, creating a seamless and flexible shopping experience. This feature aims to reduce manual workload for Merchants while building customer loyalty through convenience and consistency.
Changes:
- [API] Added the Recurring Orders API and Recurrence Policies API.
- [API] Added
view_recurring_orders:{projectKey}andmanage_recurring_orders:{projectKey}OAuth scopes. - [API] Added Recurring Orders Messages.
- [API] Added the following to the Order Messages: OrderCreatedFromRecurringOrder.
- [API] Added
priceRecurrencePolicyprice selection parameter. - [API] Added
recurrencePolicyfield to the Price and PriceDraft types. - [API] Added
recurrence-policyandrecurring-orderenums to the ReferenceTypeId type. - [API] Updated the following in the Carts API:
- Added
RecurringOrderenum to the CartOrigin type. - Added
recurrenceInfofield to the LineItem, LineItemDraft, CustomLineItem, and CustomLineItemDraft types. - Added
recurrenceInfofield to the Add LineItem and Add CustomLineItem update action. - Added the Set LineItemRecurrenceInfo and Set CustomLineItemRecurrenceInfo update actions.
- Added
- [API] Updated the following in the My Carts API:
- Added
recurrenceInfofield to the Add LineItem update action in My Carts API. - Added the Set LineItemRecurrenceInfo and Set CustomLineItemRecurrenceInfo update actions.
- Added
- [API] Added
recurrenceInfofield to the Add LineItem and Add CustomLineItem update actions in Orders Edits API. - [API] Added
recurringOrderfield to the Order type in Orders API. - [API] Added
recurrencePricesfield to the ProductVariant type in Products API. - [API] Added
recurrencePolicyfield to the StandalonePrice and StandalonePriceDraft types in Standalone Prices API. - [API] Added
RecurringOrderStateenum to the StateTypeEnum type in States API. - [GraphQL API] Added the
recurringOrder,recurringOrders,recurrencePolicy, andrecurrencePoliciesfields to theQuerytype. - [GraphQL API] Added the
createRecurringOrder,updateRecurringOrder,createRecurrencePolicy, andupdateRecurrencePolicyfields to theMutationtype. - [GraphQL API] Added the following types to the GraphQL schema:
Counter,CounterInputDraft,CustomLineItemRecurrenceInfo,CustomLineItemRecurrenceInfoDraft,CustomLineItemRecurrenceInfoInputDraft,DayOfMonthSchedule,DayOfMonthScheduleInput,IntervalUnit,LineItemRecurrenceInfo,LineItemRecurrenceInfoDraft,LineItemRecurrenceInfoInputDraft,OrderCreatedFromRecurringOrder,PriceSelectionMode,RecurrencePolicy,RecurrencePolicyDraft,RecurrencePolicyQueryResult,RecurrencePolicyRef,RecurrencePolicyReferenceIdentifier,RecurrencePolicySchedule,RecurrencePolicyScheduleInput,RecurrencePolicyUpdateAction,RecurringOrder,RecurringOrderActiveInput,RecurringOrderCanceledInput,RecurringOrderCreated,RecurringOrderCustomFieldAdded,RecurringOrderCustomFieldChanged,RecurringOrderCustomFieldRemoved,RecurringOrderCustomTypeRemoved,RecurringOrderCustomTypeSet,RecurringOrderDeleted,RecurringOrderDraft,RecurringOrderExpiredInput,RecurringOrderKeySet,RecurringOrderPausedInput,RecurringOrderQueryResult,RecurringOrderScheduleSet,RecurringOrderStartsAtSet,RecurringOrderState,RecurringOrderStateChanged,RecurringOrderStateDraft,RecurringOrderStateTransition,RecurringOrderUpdateAction,SetCustomLineItemRecurrenceInfo,SetLineItemRecurrenceInfo,SetRecurrencePolicyDescription,SetRecurrencePolicyKey,SetRecurrencePolicyName,SetRecurrencePolicySchedule,SetRecurringOrderCustomField,SetRecurringOrderCustomType,SetRecurringOrderKey,SetRecurringOrderOrderSkipConfiguration,SetRecurringOrderSchedule,SetRecurringOrderStartsAt,SetRecurringOrderState,SkipConfiguration,SkipConfigurationInputDraft,StandardSchedule,StandardScheduleInput,TransitionRecurringOrderState. - [GraphQL API] Added the
allRecurrencePricesfield to theProductVarianttype. - [GraphQL API] Added the
allRecurrencePricesfield to theProductSearchVarianttype. - [GraphQL API] Added the
returnAllPricesByRecurrencePolicyandrecurrencePolicyIdarguments to theProductVariant.pricefield. - [GraphQL API] Added the
returnAllPricesByRecurrencePolicyandrecurrencePolicyIdarguments to theProductSearchVariant.pricefield. - [GraphQL API] Changed the
AddCartCustomLineItem.priceModedefault value fromStandardto none. - [GraphQL API] Changed the
AddStagedOrderCustomLineItem.priceModedefault value fromStandardto none. - [GraphQL API] Added the
recurrencePolicyinput field to theProductPriceDataInputtype. - [GraphQL API] Added the
RecurringOrderenum value to theCartOriginenum. - [GraphQL API] Added the
recurrenceInfofield to theLineItemtype. - [GraphQL API] Added the
recurrenceInfoinput field to theLineItemDrafttype. - [GraphQL API] Added the
recurrenceInfofield to theLineItemDraftOutputtype. - [GraphQL API] Added the
recurrenceInfoinput field to theAddCartLineItemtype. - [GraphQL API] Added the
recurrenceInfoinput field to theMyLineItemDrafttype. - [GraphQL API] Added the
recurrenceInfoinput field to theAddMyCartLineItemtype. - [GraphQL API] Added the
recurrenceInfofield to theCustomLineItemtype. - [GraphQL API] Added the
recurrenceInfoinput field to theCustomLineItemDrafttype. - [GraphQL API] Added the
recurrenceInfofield to theCustomLineItemDraftOutputtype. - [GraphQL API] Added the
recurrenceInfoinput field to theAddCartCustomLineItemtype. - [GraphQL API] Added the
setLineItemRecurrenceInfoandsetCustomLineItemRecurrenceInfoinput fields to theCartUpdateActiontype. - [GraphQL API] Added the
setLineItemRecurrenceInfoandsetCustomLineItemRecurrenceInfoinput fields to theMyCartUpdateActiontype. - [GraphQL API] Added the
recurringOrderandrecurringOrderReffields to theOrdertype. - [GraphQL API] Added the
recurrenceInfoinput field to theAddStagedOrderLineItemtype. - [GraphQL API] Added the
recurrenceInfoinput field to theAddStagedOrderCustomLineItemtype. - [GraphQL API] Added the
RecurringOrderStateenum value to theStateTypeenum. - [GraphQL API] Added the
recurrencePolicyandrecurrencePolicyReffields to theProductPricetype. - [GraphQL API] Added the
recurrencePolicyandrecurrencePolicyReffields to theStandalonePricetype. - [GraphQL API] Added the
recurrencePolicyinput field to theCreateStandalonePricetype.
The following changes were introduced in terms of GraphQL SDL:
extend type LineItemDraftOutput {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: LineItemRecurrenceInfoDraft
}
extend type ProductVariant {
"Returns all recurrence prices based on the price selection rules."
allRecurrencePrices(currency: Currency!, country: Country, customerGroupId: String, channelId: String, date: DateTime, recurrencePolicyId: String, returnAllPricesByRecurrencePolicy: Boolean): [ProductPrice!]
}
extend type CustomLineItemDraftOutput {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: CustomLineItemRecurrenceInfoDraft
}
extend type ProductPrice {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrencePolicy: RecurrencePolicy
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrencePolicyRef: Reference
}
extend type ProductSearchVariant {
"Returns all recurrence prices based on the price selection rules."
allRecurrencePrices(currency: Currency!, country: Country, customerGroupId: String, channelId: String, date: DateTime, recurrencePolicyId: String, returnAllPricesByRecurrencePolicy: Boolean): [ProductPriceSearch!]
}
extend type Query {
"""
Recurrence policies are managed and queried through the Recurrence Policy API
and associated to a Price
"""
recurrencePolicies(where: String, sort: [String!], limit: Int, offset: Int): RecurrencePolicyQueryResult!
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrencePolicy(
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): RecurrencePolicy
recurringOrder(
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): RecurringOrder
recurringOrders(where: String, sort: [String!], limit: Int, offset: Int): RecurringOrderQueryResult!
}
extend type CustomLineItem {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: CustomLineItemRecurrenceInfo
}
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"
createRecurrencePolicy(draft: RecurrencePolicyDraft!): RecurrencePolicy
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
createRecurringOrder(draft: RecurringOrderDraft!): RecurringOrder
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
updateRecurrencePolicy(version: Long!, actions: [RecurrencePolicyUpdateAction!]!,
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): RecurrencePolicy
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
updateRecurringOrder(version: Long!, actions: [RecurringOrderUpdateAction!]!,
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): RecurringOrder
}
extend type Order {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurringOrder: RecurringOrder
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurringOrderRef: Reference
}
extend type LineItem {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: LineItemRecurrenceInfo
}
extend type StandalonePrice {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrencePolicy: RecurrencePolicy
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrencePolicyRef: Reference
}
extend input AddMyCartLineItem {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: LineItemRecurrenceInfoInputDraft
}
extend input AddStagedOrderLineItem {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: LineItemRecurrenceInfoInputDraft
}
extend input MyLineItemDraft {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: LineItemRecurrenceInfoInputDraft
}
extend input CreateStandalonePrice {
recurrencePolicy: ResourceIdentifierInput
}
extend input CartUpdateAction {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setCustomLineItemRecurrenceInfo: SetCustomLineItemRecurrenceInfo
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setLineItemRecurrenceInfo: SetLineItemRecurrenceInfo
}
extend input LineItemDraft {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: LineItemRecurrenceInfoInputDraft
}
extend input AddCartLineItem {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: LineItemRecurrenceInfoInputDraft
}
extend input AddCartCustomLineItem {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: CustomLineItemRecurrenceInfoInputDraft
}
extend input AddStagedOrderCustomLineItem {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: CustomLineItemRecurrenceInfoInputDraft
}
extend input MyCartUpdateAction {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setCustomLineItemRecurrenceInfo: SetCustomLineItemRecurrenceInfo
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setLineItemRecurrenceInfo: SetLineItemRecurrenceInfo
}
extend input CustomLineItemDraft {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: CustomLineItemRecurrenceInfoInputDraft
}
extend enum CartOrigin {
"The cart was created by the merchant as a recurring order."
RecurringOrder
}
extend enum StateType {
RecurringOrderState
}
type Counter implements SkipConfiguration {
totalToSkip: Int!
skipped: Int!
lastSkippedAt: DateTime
type: String!
}
input CounterInputDraft {
totalToSkip: Int!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type CustomLineItemRecurrenceInfo {
recurrencePolicy: RecurrencePolicy
recurrencePolicyRef: RecurrencePolicyRef!
expiresAt: DateTime
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type CustomLineItemRecurrenceInfoDraft {
recurrencePolicyRef: RecurrencePolicyReferenceIdentifier
expiresAt: DateTime
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input CustomLineItemRecurrenceInfoInputDraft {
recurrencePolicy: ResourceIdentifierInput!
expiresAt: DateTime
}
type DayOfMonthSchedule implements RecurrencePolicySchedule {
day: Int!
type: String!
}
input DayOfMonthScheduleInput {
day: Int!
}
enum IntervalUnit {
Days
Months
Weeks
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type LineItemRecurrenceInfo {
recurrencePolicy: RecurrencePolicy
recurrencePolicyRef: RecurrencePolicyRef!
expiresAt: DateTime
priceSelectionMode: PriceSelectionMode!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type LineItemRecurrenceInfoDraft {
recurrencePolicyRef: RecurrencePolicyReferenceIdentifier
expiresAt: DateTime
priceSelectionMode: PriceSelectionMode!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input LineItemRecurrenceInfoInputDraft {
recurrencePolicy: ResourceIdentifierInput!
expiresAt: DateTime
priceSelectionMode: PriceSelectionMode!
}
type OrderCreatedFromRecurringOrder implements MessagePayload & OrderMessagePayload {
order: Order
recurringOrderRef: 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"
enum PriceSelectionMode {
"Every time a new order is created from this recurring order, we will update to the latest price available"
Dynamic
"The price will stay the same until the recurring order expires or is cancelled"
Fixed
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type RecurrencePolicy implements Versioned {
id: String!
version: Long!
key: String!
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!]): String
nameAllLocales: [LocalizedString!]
description(
"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!]): String
descriptionAllLocales: [LocalizedString!]
schedule: RecurrencePolicySchedule!
createdAt: DateTime!
lastModifiedAt: DateTime!
createdBy: Initiator
lastModifiedBy: Initiator
}
input RecurrencePolicyDraft {
key: String!
name: [LocalizedStringItemInputType!]
description: [LocalizedStringItemInputType!]
schedule: RecurrencePolicyScheduleInput!
}
type RecurrencePolicyQueryResult {
offset: Int!
count: Int!
total: Long!
exists: Boolean!
results: [RecurrencePolicy!]!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type RecurrencePolicyRef {
typeId: String!
id: String!
}
type RecurrencePolicyReferenceIdentifier {
typeId: String!
id: String
key: String
}
interface RecurrencePolicySchedule {
type: String!
}
input RecurrencePolicyScheduleInput {
standard: StandardScheduleInput
dayOfMonth: DayOfMonthScheduleInput
}
input RecurrencePolicyUpdateAction {
setDescription: SetRecurrencePolicyDescription
setKey: SetRecurrencePolicyKey
setName: SetRecurrencePolicyName
setSchedule: SetRecurrencePolicySchedule
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type RecurringOrder implements Versioned {
key: String
recurringOrderState: RecurringOrderState!
cartRef: Reference!
cart: Cart
startsAt: DateTime!
resumesAt: DateTime
expiresAt: DateTime
lastOrderAt: DateTime
nextOrderAt: DateTime
skipConfiguration: SkipConfiguration
businessUnit: BusinessUnit
businessUnitRef: KeyReference
custom: CustomFieldsType
stateRef: Reference
state: State
originOrderRef: Reference
originOrder: Order
schedule: RecurrencePolicySchedule!
customerRef: Reference
customer: Customer
customerEmail: String
id: String!
version: Long!
createdAt: DateTime!
lastModifiedAt: DateTime!
createdBy: Initiator
lastModifiedBy: Initiator
}
input RecurringOrderActiveInput {
resumesAt: DateTime
}
input RecurringOrderCanceledInput {
reason: String
}
type RecurringOrderCreated implements MessagePayload {
recurringOrder: RecurringOrder!
type: String!
}
type RecurringOrderCustomFieldAdded implements MessagePayload {
name: String!
value: Json!
type: String!
}
type RecurringOrderCustomFieldChanged implements MessagePayload {
name: String!
value: Json!
previousValue: Json
type: String!
}
type RecurringOrderCustomFieldRemoved implements MessagePayload {
name: String!
type: String!
}
type RecurringOrderCustomTypeRemoved implements MessagePayload {
previousTypeId: String
type: String!
}
type RecurringOrderCustomTypeSet implements MessagePayload {
customFields: CustomFieldsType!
previousTypeId: String
type: String!
}
type RecurringOrderDeleted 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"
input RecurringOrderDraft {
key: String
custom: CustomFieldsDraft
cart: ResourceIdentifierInput!
cartVersion: Long!
startsAt: DateTime!
expiresAt: DateTime
state: ResourceIdentifierInput
recurringOrderState: RecurringOrderState
}
input RecurringOrderExpiredInput {
dummy: String
}
type RecurringOrderKeySet implements MessagePayload {
key: String
oldKey: String
type: String!
}
input RecurringOrderPausedInput {
dummy: String
}
type RecurringOrderQueryResult {
offset: Int!
count: Int!
total: Long!
exists: Boolean!
results: [RecurringOrder!]!
}
type RecurringOrderScheduleSet implements MessagePayload {
recurrencePolicySchedule: RecurrencePolicySchedule!
oldRecurrencePolicySchedule: RecurrencePolicySchedule!
type: String!
}
type RecurringOrderStartsAtSet implements MessagePayload {
startsAt: DateTime!
oldStartsAt: DateTime!
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"
enum RecurringOrderState {
Active
Canceled
Expired
Failed
Paused
}
type RecurringOrderStateChanged implements MessagePayload {
recurringOrderState: RecurringOrderState!
oldRecurringOrderState: RecurringOrderState!
type: String!
}
input RecurringOrderStateDraft {
active: RecurringOrderActiveInput
paused: RecurringOrderPausedInput
canceled: RecurringOrderCanceledInput
expired: RecurringOrderExpiredInput
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type RecurringOrderStateTransition implements MessagePayload {
force: Boolean!
state: State
oldState: State
stateRef: Reference!
oldStateRef: Reference
type: String!
}
input RecurringOrderUpdateAction {
setKey: SetRecurringOrderKey
setOrderSkipConfiguration: SetRecurringOrderOrderSkipConfiguration
setCustomField: SetRecurringOrderCustomField
setCustomType: SetRecurringOrderCustomType
setRecurringOrderState: SetRecurringOrderState
setSchedule: SetRecurringOrderSchedule
setStartsAt: SetRecurringOrderStartsAt
transitionState: TransitionRecurringOrderState
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetCustomLineItemRecurrenceInfo {
customLineItemId: String!
customLineItemKey: String
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: CustomLineItemRecurrenceInfoInputDraft
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetLineItemRecurrenceInfo {
lineItemId: String!
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurrenceInfo: LineItemRecurrenceInfoInputDraft
}
input SetRecurrencePolicyDescription {
description: [LocalizedStringItemInputType!]
}
input SetRecurrencePolicyKey {
key: String!
}
input SetRecurrencePolicyName {
name: [LocalizedStringItemInputType!]
}
input SetRecurrencePolicySchedule {
schedule: RecurrencePolicyScheduleInput!
}
input SetRecurringOrderCustomField {
name: String!
value: String
}
input SetRecurringOrderCustomType {
fields: [CustomFieldInput!]
type: ResourceIdentifierInput
typeKey: String
typeId: String
}
input SetRecurringOrderKey {
key: String
}
input SetRecurringOrderOrderSkipConfiguration {
skipConfigurationInputDraft: SkipConfigurationInputDraft
updatedExpiresAt: DateTime
}
input SetRecurringOrderSchedule {
recurrencePolicy: ResourceIdentifierInput!
}
input SetRecurringOrderStartsAt {
startsAt: DateTime!
}
input SetRecurringOrderState {
recurringOrderState: RecurringOrderStateDraft!
}
interface SkipConfiguration {
type: String!
}
input SkipConfigurationInputDraft {
Counter: CounterInputDraft
}
type StandardSchedule implements RecurrencePolicySchedule {
value: Int!
intervalUnit: IntervalUnit!
type: String!
}
input StandardScheduleInput {
value: Int!
intervalUnit: IntervalUnit!
}
input TransitionRecurringOrderState {
state: ResourceIdentifierInput!
force: Boolean = false
}
Added Import Product Selections endpoint in beta
Changes:
- [API] Added Import Product Selections endpoint to Import API.
- [API] Added ProductSelectionImportRequest type to Import API.
- [API] Added ProductSelectionImport and related types to Import API.
Fixed behavior of API Extensions with multiple triggers for the same resource type
Update could be triggered by the condition for a Create action.Update will now only evaluate the condition for the Update action.Introducing retention policy for Import Containers in public beta
Existing Import Containers are not affected by this enhancement.
- [API] Added
retentionPolicyfield to ImportContainerDraft in public beta. - [API] Added
retentionPolicyandexpiresAtfields to ImportContainer in public beta. - [API] Added the RetentionPolicy, TimeToLiveRetentionPolicy, and TimeToLiveConfig types to [ImportContainer](/import-export/import-container in public beta.
Added support to convert inherited Associates into explicit Associates
ExplicitAndFromParent to Explicit, inherited Associates can now be retained as explicit Associates. This enhancement helps maintain access and preserve Associate relationships during organizational restructuring.Changes:
- [API] Added the
makeInheritedAssociatesExplicitfield to the Change Associate Mode update action in the Business Units API. - [GraphQL API] Added the
makeInheritedAssociatesExplicitinput field to theChangeBusinessUnitAssociateModetype.
The following changes were introduced in terms of GraphQL SDL:
extend input ChangeBusinessUnitAssociateMode {
makeInheritedAssociatesExplicit: Boolean = false
}
Introduced Payment Methods API in beta
Changes:
- [API] Added the Payment Methods API.
- [API] Added
view_payment_methods:{projectKey}andmanage_payment_methods:{projectKey}OAuth scopes. - [API] Added the Payment Method Messages.
- [API] Updated the following in the Payments API:
- Added the
token,interfaceAccount, andcustomfields to the PaymentMethodInfo type. - Added the PaymentMethodInfoDraft type.
- Updated the PaymentDraft
paymentMethodInfofield type to PaymentMethodInfoDraft. - Added the following update actions: Set MethodInfo, Set MethodInfo InterfaceAccount, Set MethodInfo Token, Set MethodInfo Custom Type, and Set MethodInfo CustomField.
- Added the
- [API] Updated the following in the My Payments API:
- Updated the MyPaymentDraft
paymentMethodInfofield type to PaymentMethodInfoDraft. - Added the following update actions: Set MethodInfo InterfaceAccount, Set MethodInfo Custom Type and Set MethodInfo CustomField.
- Updated the MyPaymentDraft
- [API] Added the following Messages for Payments: PaymentInterfaceIdSet, PaymentMethodInfoInterfaceSet, PaymentMethodInfoMethodSet, PaymentMethodInfoNameSet, PaymentMethodInfoCustomFieldAdded, PaymentMethodInfoCustomFieldChanged, PaymentMethodInfoCustomFieldRemoved, PaymentMethodInfoCustomTypeSet, PaymentMethodInfoCustomTypeRemoved, PaymentMethodInfoInterfaceAccountSet, and PaymentMethodInfoTokenSet.
- [GraphQL API] Added the following types to the GraphQL schema:
PaymentInterfaceIdSet,PaymentMethod,PaymentMethodCreated,PaymentMethodCustomFieldAdded,PaymentMethodCustomFieldChanged,PaymentMethodCustomFieldRemoved,PaymentMethodCustomTypeRemoved,PaymentMethodCustomTypeSet,PaymentMethodDefaultSet,PaymentMethodDeleted,PaymentMethodDraft,PaymentMethodInfoCustomFieldAdded,PaymentMethodInfoCustomFieldChanged,PaymentMethodInfoCustomFieldRemoved,PaymentMethodInfoCustomTypeRemoved,PaymentMethodInfoCustomTypeSet,PaymentMethodInfoInterfaceAccountSet,PaymentMethodInfoInterfaceSet,PaymentMethodInfoMethodSet,PaymentMethodInfoNameSet,PaymentMethodInfoTokenSet,PaymentMethodInterfaceAccountSet,PaymentMethodKeySet,PaymentMethodMethodSet,PaymentMethodNameSet,PaymentMethodPaymentInterfaceSet,PaymentMethodQueryResult,PaymentMethodStatus,PaymentMethodPaymentMethodStatusSet,PaymentMethodToken,PaymentMethodTokenDraft,PaymentMethodUpdateAction,SetPaymentMethodCustomField,SetPaymentMethodCustomType,SetPaymentMethodDefault,SetPaymentMethodInfo,SetPaymentMethodInfoCustomField,SetPaymentMethodInfoCustomType,SetPaymentMethodInfoInterfaceAccount,SetPaymentMethodInfoToken,SetPaymentMethodInterfaceAccount,SetPaymentMethodKey,SetPaymentMethodMethod,SetPaymentMethodName,SetPaymentMethodPaymentInterface, andSetPaymentMethodStatus. - [GraphQL API] Added the
paymentMethodandpaymentMethodsfield to theQuerytype. - [GraphQL API] Added the
createPaymentMethod,updatePaymentMethod, anddeletePaymentMethodfields to theMutationtype. - [GraphQL API] Added the
setMethodInfo,setMethodInfoInterfaceAccount,setMethodInfoToken,setMethodInfoCustomType, andsetMethodInfoCustomFieldinput fields to thePaymentUpdateActiontype. - [GraphQL API] Added the
setMethodInfoInterfaceAccount,setMethodInfoCustomType, andsetMethodInfoCustomFieldinput fields to theMyPaymentUpdateActiontype. - [GraphQL API] Added the
token,interfaceAccount, andcustomfields to thePaymentMethodInfotype. - [GraphQL API] Added the
token,interfaceAccount, andcustominput fields to thePaymentMethodInfoInputtype.
The following changes were introduced in terms of GraphQL SDL:
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"
paymentMethod(
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): PaymentMethod
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
paymentMethods(where: String, sort: [String!], limit: Int, offset: Int): PaymentMethodQueryResult!
}
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"
createPaymentMethod(draft: PaymentMethodDraft!): PaymentMethod
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
deletePaymentMethod(version: Long!, personalDataErasure: Boolean = false,
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): PaymentMethod
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
updatePaymentMethod(version: Long!, actions: [PaymentMethodUpdateAction!]!,
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): PaymentMethod
}
extend type PaymentMethodInfo {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
custom: CustomFieldsType
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
interfaceAccount: String
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
token: PaymentMethodToken
}
extend input PaymentMethodInfoInput {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
custom: CustomFieldsDraft
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
interfaceAccount: String
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
token: PaymentMethodTokenDraft
}
extend input MyPaymentUpdateAction {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setMethodInfoCustomField: SetPaymentMethodInfoCustomField
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setMethodInfoCustomType: SetPaymentMethodInfoCustomType
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setMethodInfoInterfaceAccount: SetPaymentMethodInfoInterfaceAccount
}
extend input PaymentUpdateAction {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setMethodInfo: SetPaymentMethodInfo
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setMethodInfoCustomField: SetPaymentMethodInfoCustomField
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setMethodInfoCustomType: SetPaymentMethodInfoCustomType
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setMethodInfoInterfaceAccount: SetPaymentMethodInfoInterfaceAccount
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setMethodInfoToken: SetPaymentMethodInfoToken
}
type PaymentInterfaceIdSet implements MessagePayload {
interfaceId: String
oldInterfaceId: String
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 PaymentMethod implements Versioned & ReferenceExpandable {
key: String
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!]): String
nameAllLocales: [LocalizedString!]
customer: Customer
customerRef: Reference
businessUnit: BusinessUnit
businessUnitRef: KeyReference
token: PaymentMethodToken
method: String
paymentInterface: String
interfaceAccount: String
paymentMethodStatus: PaymentMethodStatus!
default: Boolean!
custom: CustomFieldsType
id: String!
version: Long!
createdAt: DateTime!
lastModifiedAt: DateTime!
createdBy: Initiator
lastModifiedBy: Initiator
}
type PaymentMethodCreated implements MessagePayload {
paymentMethod: PaymentMethod!
type: String!
}
type PaymentMethodCustomFieldAdded implements MessagePayload {
name: String!
value: Json!
type: String!
}
type PaymentMethodCustomFieldChanged implements MessagePayload {
name: String!
value: Json!
oldValue: Json
type: String!
}
type PaymentMethodCustomFieldRemoved implements MessagePayload {
name: String!
type: String!
}
type PaymentMethodCustomTypeRemoved implements MessagePayload {
oldTypeId: String
type: String!
}
type PaymentMethodCustomTypeSet implements MessagePayload {
customFields: CustomFieldsType!
oldTypeId: String
type: String!
}
type PaymentMethodDefaultSet implements MessagePayload {
default: Boolean!
oldDefault: Boolean!
type: String!
}
type PaymentMethodDeleted implements MessagePayload {
paymentMethod: PaymentMethod!
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"
input PaymentMethodDraft {
key: String
name: [LocalizedStringItemInputType!]
customer: ResourceIdentifierInput
businessUnit: ResourceIdentifierInput
token: PaymentMethodTokenDraft
method: String
paymentInterface: String
interfaceAccount: String
paymentMethodStatus: PaymentMethodStatus
default: Boolean
custom: CustomFieldsDraft
}
type PaymentMethodInfoCustomFieldAdded implements MessagePayload {
name: String!
value: Json!
type: String!
}
type PaymentMethodInfoCustomFieldChanged implements MessagePayload {
name: String!
value: Json!
type: String!
}
type PaymentMethodInfoCustomFieldRemoved implements MessagePayload {
name: String!
type: String!
}
type PaymentMethodInfoCustomTypeRemoved implements MessagePayload {
oldTypeId: String
type: String!
}
type PaymentMethodInfoCustomTypeSet implements MessagePayload {
customFields: CustomFieldsType!
oldTypeId: String
type: String!
}
type PaymentMethodInfoInterfaceAccountSet implements MessagePayload {
interfaceAccount: String
oldInterfaceAccount: String
type: String!
}
type PaymentMethodInfoInterfaceSet implements MessagePayload {
interface: String
oldInterface: String
type: String!
}
type PaymentMethodInfoMethodSet implements MessagePayload {
method: String
oldMethod: String
type: String!
}
type PaymentMethodInfoNameSet implements MessagePayload {
nameAllLocales: [LocalizedString!]
oldNameAllLocales: [LocalizedString!]
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!]): String
oldName(
"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!]): String
type: String!
}
type PaymentMethodInfoTokenSet implements MessagePayload {
token: PaymentMethodToken
oldToken: PaymentMethodToken
type: String!
}
type PaymentMethodInterfaceAccountSet implements MessagePayload {
interfaceAccount: String
oldInterfaceAccount: String
type: String!
}
type PaymentMethodKeySet implements MessagePayload {
key: String
oldKey: String
type: String!
}
type PaymentMethodMethodSet implements MessagePayload {
method: String
oldMethod: String
type: String!
}
type PaymentMethodNameSet implements MessagePayload {
nameAllLocales: [LocalizedString!]
oldNameAllLocales: [LocalizedString!]
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!]): String
oldName(
"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!]): String
type: String!
}
type PaymentMethodPaymentInterfaceSet implements MessagePayload {
paymentInterface: String
oldPaymentInterface: String
type: String!
}
type PaymentMethodQueryResult {
offset: Int!
count: Int!
total: Long!
exists: Boolean!
results: [PaymentMethod!]!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
enum PaymentMethodStatus {
Active
Inactive
}
type PaymentMethodPaymentMethodStatusSet implements MessagePayload {
status: PaymentMethodStatus!
oldStatus: PaymentMethodStatus!
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 PaymentMethodToken {
value: String!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input PaymentMethodTokenDraft {
value: String!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input PaymentMethodUpdateAction {
setCustomField: SetPaymentMethodCustomField
setCustomType: SetPaymentMethodCustomType
setDefault: SetPaymentMethodDefault
setInterfaceAccount: SetPaymentMethodInterfaceAccount
setKey: SetPaymentMethodKey
setMethod: SetPaymentMethodMethod
setName: SetPaymentMethodName
setPaymentInterface: SetPaymentMethodPaymentInterface
setPaymentMethodStatus: SetPaymentMethodStatus
}
input SetPaymentMethodCustomField {
name: String!
value: String
}
input SetPaymentMethodCustomType {
fields: [CustomFieldInput!]
type: ResourceIdentifierInput
typeKey: String
typeId: String
}
input SetPaymentMethodDefault {
default: 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 SetPaymentMethodInfo {
paymentInterface: String
method: String
name: [LocalizedStringItemInputType!]
token: PaymentMethodTokenDraft
interfaceAccount: String
custom: CustomFieldsDraft
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetPaymentMethodInfoCustomField {
name: String!
value: String
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetPaymentMethodInfoCustomType {
fields: [CustomFieldInput!]
type: ResourceIdentifierInput
typeKey: String
typeId: String
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetPaymentMethodInfoInterfaceAccount {
interfaceAccount: String
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetPaymentMethodInfoToken {
token: PaymentMethodTokenDraft
}
input SetPaymentMethodInterfaceAccount {
interfaceAccount: String
}
input SetPaymentMethodKey {
key: String
}
input SetPaymentMethodMethod {
method: String
}
input SetPaymentMethodName {
name: [LocalizedStringItemInputType!]
}
input SetPaymentMethodPaymentInterface {
paymentInterface: String
}
input SetPaymentMethodStatus {
paymentMethodStatus: PaymentMethodStatus!
}
Introducing Commerce MCP
Commerce MCP is a lightweight, communication protocol that enables AI agents to understand and interact with commercetools domains. It provides standardized contracts for consistent behavior, allowing diverse AI agents to connect through a unified interface.
- Essentials MCP comes pre-built with an extensive set of tools for commercetools operations, giving it a deep understanding of commercetools API offerings.
- Developer MCP combines API schemas and documentation, together with developer prompts to generate higher quality code. With direct integrations for Cursor, GitHub Copilot, Visual Studio Code, JetBrains, and custom code generation tools, you can now enable AI-assisted development.
Configurable price rounding modes for Carts
priceRoundingMode field. This affects the calculation and rounding of the total price on Line Items and Custom Line Items. The field is available on Cart, CartDraft, and related resources: Order, OrderImportDraft, Quote, and QuoteRequest.priceRoundingMode and taxRoundingMode fields within CartsConfiguration which overrides the global default (HalfEven).Changes:
- [API] Added the
priceRoundingModefield to Cart. - [API] Added the
priceRoundingModefield to CartDraft. - [API] Added the
priceRoundingModefield to Order. - [API] Added the
priceRoundingModefield to OrderImportDraft. - [API] Added the
priceRoundingModefield to Quote. - [API] Added the
priceRoundingModefield to QuoteRequest. - [API] Added the
taxRoundingModeandpriceRoundingModefields to CartsConfiguration. - [API] Added the ChangePriceRoundingModeAction update action to the Carts API.
- [API] Added the ProjectChangePriceRoundingModeAction update action to the Projects API.
- [API] Added the ProjectChangeTaxRoundingModeAction update action to the Projects API.
- [GraphQL API] Added the
priceRoundingModefield to theCarttype. - [GraphQL API] Added the
priceRoundingModefield to theCartDrafttype. - [GraphQL API] Added the
priceRoundingModefield to theOrdertype. - [GraphQL API] Added the
priceRoundingModefield to theQuotetype. - [GraphQL API] Added the
priceRoundingModefield to theQuoteRequesttype. - [GraphQL API] Added the
priceRoundingModeandtaxRoundingModefields to theCartsConfigurationtype. - [GraphQL API] Added the
priceRoundingModeandtaxRoundingModefields to theCartsConfigurationInputtype. - [GraphQL API] Added the
changePriceRoundingModeinput field to theCartUpdateActiontype. - [GraphQL API] Added the
changePriceRoundingModeandchangeTaxRoundingModeinput fields to theProjectSettingsUpdateActiontype. - [GraphQL API] Added the
ChangeStagedOrderPriceRoundingModeOutputtype. - [GraphQL API] Added the
ChangeProjectSettingsPriceRoundingModetype. - [GraphQL API] Added the
ChangeProjectSettingsTaxRoundingModetype.
extend type Cart {
priceRoundingMode: RoundingMode!
}
extend type CartDraft {
priceRoundingMode: RoundingMode
}
extend type Order {
priceRoundingMode: RoundingMode!
}
extend type Quote {
priceRoundingMode: RoundingMode!
}
extend type QuoteRequest {
priceRoundingMode: RoundingMode!
}
extend type CartsConfiguration {
taxRoundingMode: RoundingMode!
priceRoundingMode: RoundingMode!
}
extend type CartsConfigurationInput {
taxRoundingMode: RoundingMode
priceRoundingMode: RoundingMode
}
extend input CartUpdateAction {
changePriceRoundingMode: ChangeCartPriceRoundingMode
}
input ChangeCartPriceRoundingMode {
priceRoundingMode: RoundingMode!
}
extend input ProjectSettingsUpdateAction {
changePriceRoundingMode: ChangeProjectSettingsPriceRoundingMode
changeTaxRoundingMode: ChangeProjectSettingsTaxRoundingMode
}
input ChangeProjectSettingsPriceRoundingMode {
priceRoundingMode: RoundingMode!
}
input ChangeProjectSettingsTaxRoundingMode {
taxRoundingMode: RoundingMode!
}
extend input StagedOrderUpdateAction {
changePriceRoundingMode: ChangeStagedOrderPriceRoundingMode
}
input ChangeStagedOrderPriceRoundingMode {
priceRoundingMode: RoundingMode!
}
type ChangeStagedOrderPriceRoundingModeOutput implements StagedOrderUpdateActionOutput {
type: String!
priceRoundingMode: RoundingMode!
}
Added support for Attributes at the Product level
sameforall constraint. This helps reduce the size of API response payloads, thereby improving data storage efficiency and enhancing performance.With this release, we have updated the following Attribute-related terminologies to improve clarity:
- Product Attributes: to refer to Attributes defined at the Product level.
- Variant Attributes: to refer to Attributes defined at the Variant level. They were previously known as "Product Attributes."
Product Attributes are supported across the following resources and features:
- Product Types, Products, Product Projections, Product Search
- Product Tailoring, Product Discounts
- Carts, Orders, Quotes, Shopping Lists
- Product Draft Import, Product Type Import, and Order Import in the Import API
Changes:
- [API] Added the
levelfield to AttributeDefinition and AttributeDefinitionDraft. - [API] Added the
attributesfield to ProductData and ProductDraft, and ProductProjection. - [API] Added the Set Product Attribute update action to the Product API.
- [API] Added the Set Product Attribute update action to the Product Tailoring API.
- [API] Added the
attributesfield to ProductTailoringData, ProductTailoringDraft, and ProductTailoringInStoreDraft. - [API] Added the
attributesfield to Product Tailoring Created Message. - [API] Added the
attributesfield to ProductImport, ProductDraftImport. - [API] Added the
levelfield to the AttributeDefinition in ProductTypeImport. - [GraphQL API] Added the
attributesRawfield to theProductData, theProductProjection, and theProductTailoringCreatedtype. - [GraphQL API] Added the
attributesfield to theProductDrafttype. - [GraphQL API] Added the
setProductAttributefield to theProductUpdateActiontype. - [GraphQL API] Added the
SetProductAttribute, theSetProductLevelAttribute, and theProductLevelAttributeInputtypes to the GraphQL schema.
Support for multiple Customer Groups per Customer is now generally available
Introduced best deal logic for Cart Discounts
Changes:
- [API] Added Messages for Discount Groups.
- [API] Added the
discountGroupfield to CartDiscount and CartDiscountDraft types in Cart Discounts API. - [API] Changed the
sortOrderfield of CartDiscountDraft type to optional. - [API] Added the Set DiscountGroup update action to Cart Discounts API.
- [API] Added the
ApplicationStoppedByGroupBestDealenum to the DiscountCodeState type in Carts API. - [GraphQL API] Added the following types to the GraphQL schema:
DiscountGroup,DiscountGroupDraft,DiscountGroupLimitWithCurrent,DiscountGroupLimitsProjection,DiscountGroupQueryResult,DiscountGroupUpdateAction,SetCartDiscountDiscountGroup,SetDiscountGroupKey,SetDiscountGroupName,SetDiscountGroupDescriptionSetDiscountGroupSortOrder,DiscountGroupCreated,DiscountGroupDeleted,DiscountGroupKeySet,DiscountGroupSortOrderSet. - [GraphQL API] Added the following fields to the
Querytype:discountGroupanddiscountGroups. - [GraphQL API] Added the following fields to the
Mutationtype:createDiscountGroup,updateDiscountGroup,deleteDiscountGroup. - [GraphQL API] Added the
discountGroupanddiscountGroupReffields to theCartDiscounttype. - [GraphQL API] Added the
discountGroupinput field toCartDiscountDrafttype. - [GraphQL API] Changed the
CartDiscountDraft.sortOrderinput field type fromString!toString. - [GraphQL API] Added the
setDiscountGroupinput field toCartDiscountUpdateActiontype. - [GraphQL API] Added the
ApplicationStoppedByGroupBestDealenum toDiscountCodeStatetype. - [GraphQL API] Added the
discountGroupsfield to theProjectCustomLimitsProjectiontype.
The following changes were introduced in terms of GraphQL SDL:
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"
discountGroup(
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): DiscountGroup
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
discountGroups(where: String, sort: [String!], limit: Int, offset: Int): DiscountGroupQueryResult!
}
extend type CartDiscount {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
discountGroup: DiscountGroup
discountGroupRef: Reference
}
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"
createDiscountGroup(
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
draft: DiscountGroupDraft!): DiscountGroup
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
deleteDiscountGroup(version: Long!,
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): DiscountGroup
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
updateDiscountGroup(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: [DiscountGroupUpdateAction!]!,
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): DiscountGroup
}
extend input CartDiscountDraft {
sortOrder: String
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
discountGroup: ResourceIdentifierInput
}
extend input CartDiscountUpdateAction {
setDiscountGroup: SetCartDiscountDiscountGroup
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type DiscountGroup implements Versioned {
id: String!
version: Long!
key: String!
sortOrder: String!
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!]): String
nameAllLocales: [LocalizedString!]
description(
"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!]): String
descriptionAllLocales: [LocalizedString!]
createdAt: DateTime!
lastModifiedAt: DateTime!
createdBy: Initiator
lastModifiedBy: Initiator
}
type DiscountGroupCreated implements MessagePayload {
discountGroup: DiscountGroup!
type: String!
}
type DiscountGroupDeleted implements MessagePayload {
discountGroupId: String!
type: String!
}
type DiscountGroupKeySet implements MessagePayload {
key: String!
discountGroupId: String!
oldKey: String
type: String!
}
type DiscountGroupSortOrderSet implements MessagePayload {
sortOrder: String!
discountGroupId: String!
oldSortOrder: String
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"
input DiscountGroupDraft {
key: String!
sortOrder: String!
name: [LocalizedStringItemInputType!]
description: [LocalizedStringItemInputType!]
}
type DiscountGroupLimitWithCurrent implements LimitWithCurrent {
limit: Long
current: Long!
}
type DiscountGroupLimitsProjection {
totalActive: DiscountGroupLimitWithCurrent!
}
type DiscountGroupQueryResult {
offset: Int!
count: Int!
total: Long!
exists: Boolean!
results: [DiscountGroup!]!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input DiscountGroupUpdateAction {
setKey: SetDiscountGroupKey
setSortOrder: SetDiscountGroupSortOrder
setName: SetDiscountGroupName
setDescription: SetDiscountGroupDescription
}
input SetCartDiscountDiscountGroup {
discountGroup: ResourceIdentifierInput
sortOrder: String
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetDiscountGroupDescription {
description: [LocalizedStringItemInputType!]
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetDiscountGroupKey {
key: String!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetDiscountGroupName {
name: [LocalizedStringItemInputType!]
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetDiscountGroupSortOrder {
sortOrder: String!
}
Sort filters in Search APIs now support multiple conditions
- [API] Changed type of
filterproperty in type SearchSorting from SearchQueryExpression to SearchQuery.
{
"sort": [
{
"field": "variants.prices.centAmount",
"filter": {
"and": [
{
"exact": {
"field": "variants.prices.channel",
"value": "fb16244b-3963-4b9e-9cb0-69a1f563a854"
}
},
{
"exact": {
"field": "variants.prices.currencyCode",
"value": "EUR"
}
}
]
},
"order": "asc"
}
]
}
Reference Expansion for Custom Fields and Product Attributes in the GraphQL API is now generally available
RawCustomField.referencedResourceRawCustomField.referencedResourceSetRawProductAttribute.referencedResourceRawProductAttribute.referencedResourceSetRawProductSearchAttribute.referencedResourceRawProductSearchAttribute.referencedResourceSet
Improved email verification and password reset flows
We've improved how email verification and password reset tokens are managed to support more secure login flows. The key changes are as follows:
- Password reset tokens are valid for 24 hours by default (down from 24 days).
- Older tokens for email verification or password reset can be invalidated when a new token is created.
- Older tokens for email verification or password reset are invalidated when a token is successfully redeemed.
- An error is returned when attempting to redeem an expired email verification or password reset token.
Additionally, if a token's validity is 60 minutes or less, the token is now included in the Message payload to help you build better asynchronous flows.
Changes:
- [API] Added
invalidateOlderTokensfield to CustomerToken, CustomerCreateEmailToken, and CustomerCreatePasswordResetToken in Customers API. - [API] Added
valueandinvalidateOlderTokensfields to CustomerEmailTokenCreated and CustomerPasswordTokenCreated Messages. - [API] Added ExpiredCustomerEmailToken and ExpiredCustomerPasswordToken errors.
- [GraphQL API] Added
invalidateOlderTokensfield to theCustomerEmailTokentype. - [GraphQL API] Added
invalidateOlderTokensfield to theCustomerPasswordTokentype. - [GraphQL API] Added
valueandinvalidateOlderTokensfields to theCustomerEmailTokenCreatedtype. - [GraphQL API] Added
valueandinvalidateOlderTokensfields to theCustomerPasswordTokenCreatedtype. - [GraphQL API] Added
invalidateOlderTokensargument to theMutation.customerCreateEmailVerificationTokenfield. - [GraphQL API] Added
invalidateOlderTokensargument to theMutation.customerCreatePasswordResetTokenfield. - [GraphQL API] Changed the
Mutation.customerCreatePasswordResetTokendescription.
The following changes were introduced in terms of GraphQL SDL:
extend type CustomerEmailToken {
invalidateOlderTokens: Boolean!
}
extend type CustomerPasswordToken {
invalidateOlderTokens: Boolean!
}
extend type CustomerEmailTokenCreated {
invalidateOlderTokens: Boolean!
value: String
}
extend type CustomerPasswordTokenCreated {
invalidateOlderTokens: Boolean!
value: String
}
Introduced Event notifications for Checkout in public beta
By subscribing to Checkout event notifications, you can improve your checkout experience with automatic, real-time status updates.
Changes:
- [API] Added the following Events in public beta:
- [API] Added the following values to the EventType enum type:
CheckoutOrderCreationFailedCheckoutPaymentAuthorizedCheckoutPaymentAuthorizationFailedCheckoutPaymentChargedCheckoutPaymentChargeFailedCheckoutPaymentRefundedCheckoutPaymentRefundFailedCheckoutPaymentAuthorizationCancelledCheckoutPaymentCancelAuthorizationFailed
- [API] Added
checkoutvalue to the EventSubscriptionResourceTypeId enum type.
Expand and collapse nested JSON object schemas in documentation
We've enhanced our API documentation to make understanding complex data structures easier.
You can now interactively expand and collapse nested JSON object schemas directly within the documentation pages. This allows you to focus on the specific parts of the schema you need without navigating away.
By reducing context-switching, it streamlines your workflow, making it easier to understand and integrate our APIs.
To see it in action, click the chevron icon next to any expandable object in the API documentation. The schema will open inline, showing nested objects as data types for the fields. To close the expanded schema, click the chevron icon again.
Enhanced Product Search with filter by Inventory Entry for Channel in public beta
supplyChannel.
Previously, filtering was limited to the current availability for the specific supply channel.
This enhancement allows you to easily identify Product Variants that are listed on a specific supply channel but are currently out of stock, providing better visibility into your channel-specific inventory.- [API] Added
variants.availability.hasInventoryEntryForChannelkeyword field in public beta.
{
"query": {
"and": [
{
"exact": {
"field": "variants.availability.hasInventoryEntryForChannel",
"value": "2b62dc25-7850-4fea-80f8-2c57c90649a5"
}
},
{
"not": [
{
"exact": {
"field": "variants.availability.isOnStockForChannel",
"value": "2b62dc25-7850-4fea-80f8-2c57c90649a5"
}
}
]
}
]
}
}
Added 'published' field to ShoppingListLineItem
published field to ShoppingListLineItem. This field lets you check the publication status of the associated Product without needing to retrieve it separately.All existing ShoppingListLineItems have been updated to include the new field.
Changes:
- [API] Added the
publishedfield to ShoppingListLineItem. - [GraphQL API] Added the
publishedfield to theShoppingListLineItemtype.
extend type ShoppingListLineItem {
published: Boolean!
}
Updated the format of Query Predicates for Product Attributes
attribute-name, then a 400 Bad Request error will occur. Existing queries that use the old format will continue to work; however, we recommend that you include the attribute-name details to enhance the performance of those queries.Incorrect Query Predicate format (no longer accepted):
variants(attributes(value="attribute-value"))
Correct Query Predicate format:
variants(attributes(name="attribute-name" and value="attribute-value"))
Introduced limits on Import Containers
Existing Projects exceeding this limit are not affected; however, we recommend reducing the number of Import Containers to stay within the limit. The limit can be increased on a per-Project basis after we review the performance impact.
Added support for moving Business Units to a new company
You can now move a Business Unit to a new company, providing greater flexibility for your organizational needs. With this enhancement, you can do the following:
- Convert a company into a sub-division of another company
- Convert a sub-division into a sub-division of another company
- Convert a sub-division into a new company
Changes:
- [API] Added the Set Unit Type update action to the Business Units API.
- [API] Added the BusinessUnitTopLevelUnitSet and BusinessUnitTypeSet Messages.
- [GraphQL API] Added the following types to the GraphQL schema:
SetBusinessUnitUnitType,BusinessUnitTopLevelUnitSet,BusinessUnitTypeSet. - [GraphQL API] Added
setUnitTypeinput field to theBusinessUnitUpdateActiontype.
The following changes were introduced in terms of GraphQL SDL:
extend input BusinessUnitUpdateAction {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setUnitType: SetBusinessUnitUnitType
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetBusinessUnitUnitType {
unitType: BusinessUnitType!
parentUnit: ResourceIdentifierInput
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type BusinessUnitTopLevelUnitSet implements MessagePayload {
oldTopLevelUnit: BusinessUnit!
topLevelUnit: BusinessUnit!
oldTopLevelUnitRef: KeyReference
topLevelUnitRef: KeyReference
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 BusinessUnitTypeSet implements MessagePayload {
oldUnitType: BusinessUnitType!
unitType: BusinessUnitType!
parentUnit: BusinessUnit
oldParentUnit: BusinessUnit
parentUnitRef: KeyReference
oldParentUnitRef: KeyReference
type: String!
}
Introduced Event notifications for Import API in public beta
By subscribing to Import API event notifications, you can improve your import experience with automatic, real-time status updates. This eliminates manual polling, and you receive proactive communication on the progress of your imports.
Changes:
- [API] Introduced Events in public beta.
- [API] Added the following Events in public beta:
- [API] Added the
eventsfield to Subscription and SubscriptionDraft in public beta. - [API] Added the EventSubscription and EventSubscriptionResourceTypeId types to the Subscriptions API in public beta.
- [API] Added the Set Events update action to the Subscriptions API in public beta.
Cross-cloud connectivity for Google Cloud API Extensions
To further enhance security, you can now let your API Extensions connect to the services running in your own cloud through a private connection.
Best deal discount is now generally available
Buy and Get Cart Discounts is now generally available
- CartDiscountPatternTarget, PatternComponent, CountOnLineItemUnits, and CountOnCustomLineItemUnits types in the Cart Discounts API.
- ChangeTargetPatternChangeValue in the Change History API.
With Buy and Get Cart Discounts, you can set up multi-purchase promotions such as Buy One, Get One (BOGO) with more flexibility and control, compared to Multi-buy Discount target.
Business Unit Search is now generally available
businessUnitsproperty on SearchIndexingConfiguration, BusinessUnitSearchStatus type, and Change Business Unit Search Status update action on the Projects API
Changed default value of 'withTotal' parameter on Product Tailoring query endpoint to false
total field in the query result by default.
If necessary, you can now request this field by setting the withTotal query parameter to true.
We have also corrected the documentation of other query endpoints to reflect this.Changes:
- [API] The
withTotalquery parameter on the Query ProductTailoring endpoint now defaults tofalse. - [Doc] The default value of the
withTotalquery parameter was incorrectly documented astrueinstead offalseon the Query ProductTailoring in Store, the Query Product Selections for Product, the Query Products assigned to a ProductSelection, and the Query Products assigned to active ProductSelections in a Store endpoints.
Introduced support for multiple Customer Groups per Customer in public beta
Changes:
- [API] Added the
customerGroupAssignmentsfield to the Customer and CustomerDraft types. - [API] Added the CustomerGroupAssignment and CustomerGroupAssignmentDraft types to the Customers API.
- [API] Added the Add CustomerGroupAssignment, Remove CustomerGroupAssignment, and Set CustomerGroupAssignments update actions to the Customers API.
- [API] Added the CustomerGroupAssignmentAdded, CustomerGroupAssignmentRemoved, and CustomerGroupAssignmentsSet Messages.
- [API] Added the
priceCustomerGroupAssignmentsfield to the ProductSearchProjectionParams type. - [API] Added
priceCustomerGroupAssignmentsandcustomerGroupAssignmentsas price selection parameters. - [API] Added
customerGroupAssignments.customerGroup.idas a searchable field in Customer Search API. - [API] Added
customer.customerGroupAssignments.customerGroup.idandcustomer.customerGroupAssignments.customerGroup.keyas field identifiers for Customer on Cart Predicates. - [GraphQL API] Added the
customerGroupAssignmentsfield to theCustomertype. - [GraphQL API] Added the
customerGroupAssignmentsinput field to theCustomerSignUpDrafttype. - [GraphQL API] Added the
addCustomerGroupAssignment,removeCustomerGroupAssignment, andsetCustomerGroupAssignmentsinput fields to theCustomerUpdateActiontype. - [GraphQL API] Added the following types to the GraphQL schema:
CustomerGroupAssignment,CustomerGroupAssignmentDraft,AddCustomerGroupAssignment,RemoveCustomerGroupAssignment,SetCustomerGroupAssignments,CustomerGroupAssignmentAdded,CustomerGroupAssignmentRemoved,CustomerGroupAssignmentsSet. - [GraphQL API] Added the
customerGroupAssignmentIdsargument to theProductVariant.pricefield.
The following changes were introduced in terms of GraphQL SDL:
extend type Customer {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
customerGroupAssignments: [CustomerGroupAssignment!]
}
extend input CustomerSignUpDraft {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
customerGroupAssignments: [CustomerGroupAssignmentDraft!]
}
extend input CustomerUpdateAction {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
addCustomerGroupAssignment: AddCustomerGroupAssignment
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
removeCustomerGroupAssignment: RemoveCustomerGroupAssignment
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
setCustomerGroupAssignments: SetCustomerGroupAssignments
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input AddCustomerGroupAssignment {
customerGroupAssignment: CustomerGroupAssignmentDraft!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type CustomerGroupAssignment {
customerGroupRef: Reference
customerGroup: CustomerGroup
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type CustomerGroupAssignmentAdded implements MessagePayload {
customerGroupAssignment: CustomerGroupAssignment!
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"
input CustomerGroupAssignmentDraft {
customerGroup: ResourceIdentifierInput!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type CustomerGroupAssignmentRemoved implements MessagePayload {
customerGroupAssignment: CustomerGroupAssignment!
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 CustomerGroupAssignmentsSet implements MessagePayload {
customerGroupAssignments: [CustomerGroupAssignment!]!
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"
input RemoveCustomerGroupAssignment {
customerGroup: ResourceIdentifierInput!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetCustomerGroupAssignments {
customerGroupAssignments: [CustomerGroupAssignmentDraft!]!
}
Introduced Shopping Lists for Business Units
You can now link a Shopping List to a Business Unit. Additionally, you can define permissions related to Shopping List for Associates assigned to the Business Unit and validate them using the new Associate Shopping Lists endpoints. This enhancement helps you, as merchants, to build flows that allows your B2B customers to create and collaborate on shopping lists.
Changes:
- [API] Added
businessUnitfield to ShoppingList and ShoppingListDraft. - [API] Added the Set Business Unit update action to the Shopping Lists API.
- [API] Added Associate Shopping Lists endpoints.
- [API] Added Shopping List Permissions.
- [GraphQL API] Added the
businessUnitandbusinessUnitRefinput fields to theShoppingListtype. - [GraphQL API] Added the
businessUnitinput field to theShoppingListDrafttype. - [GraphQL API] Added the
setBusinessUnitinput field to theShoppingListUpdateActiontype. - [GraphQL API] Added the
SetShoppingListBusinessUnittype to the GraphQL schema. - [GraphQL API] Added the
shoppingListandshoppingListsfields to theAsAssociatetype. - [GraphQL API]
AsAssociateobject type now implementsShoppingListQueryInterfaceinterface. - [GraphQL API] Added the
asAssociateargument to theMutation.createShoppingListfield. - [GraphQL API] Added the
asAssociateargument to theMutation.updateShoppingListfield. - [GraphQL API] Added the
asAssociateargument to theMutation.deleteShoppingListfield. - [GraphQL API] Added the
CreateMyShoppingLists,CreateOthersShoppingLists,DeleteMyShoppingLists,DeleteOthersShoppingLists,UpdateMyShoppingLists,UpdateOthersShoppingLists,ViewMyShoppingLists, andViewOthersShoppingListsenum values to thePermissionenum.
The following changes were introduced in terms of GraphQL SDL:
extend type AsAssociate {
shoppingList(
"Queries with specified ID"
id: String
"Queries with specified key"
key: String
): ShoppingList
shoppingLists(
where: String
sort: [String!]
limit: Int
offset: Int
): ShoppingListQueryResult!
}
extend enum Permission {
CreateMyShoppingLists
CreateOthersShoppingLists
DeleteMyShoppingLists
DeleteOthersShoppingLists
UpdateMyShoppingLists
UpdateOthersShoppingLists
ViewMyShoppingLists
ViewOthersShoppingLists
}
input SetShoppingListBusinessUnit {
businessUnit: ResourceIdentifierInput!
}
extend type ShoppingList {
businessUnit: BusinessUnit
businessUnitRef: KeyReference
}
extend input ShoppingListDraft {
businessUnit: ResourceIdentifierInput
}
extend input ShoppingListUpdateAction {
setBusinessUnit: SetShoppingListBusinessUnit
}
Added support to move Orders across Business Units
You can now assign an Order to another Business Unit. This enhancement helps you reorganize historical orders when you restructure or adopt new Business Unit structures. This action will not trigger any revalidation of the fields or recalculation of the price or discount.
Changes:
- [API] Added the Set Business Unit update action to Orders API.
- [API] Added the Set Business Unit update action to Orders Edits API.
- [API] Added the OrderBusinessUnitSet Message.
- [GraphQL API] Added the following types to the GraphQL schema:
OrderBusinessUnitSet,SetOrderBusinessUnit,SetStagedOrderBusinessUnit,SetStagedOrderBusinessUnitOutput. - [GraphQL API] Added the
setBusinessUnitinput field toOrderUpdateActiontype. - [GraphQL API] Added the
setBusinessUnitinput field toStagedOrderUpdateActiontype.
The following changes were introduced in terms of GraphQL SDL:
extend input StagedOrderUpdateAction {
setBusinessUnit: SetStagedOrderBusinessUnit
}
extend input OrderUpdateAction {
setBusinessUnit: SetOrderBusinessUnit
}
type OrderBusinessUnitSet implements MessagePayload & OrderMessagePayload {
businessUnit: KeyReferenceInput
oldBusinessUnit: KeyReferenceInput
type: String!
}
input SetOrderBusinessUnit {
businessUnit: ResourceIdentifierInput
}
input SetStagedOrderBusinessUnit {
businessUnit: ResourceIdentifierInput
}
type SetStagedOrderBusinessUnitOutput implements StagedOrderUpdateActionOutput {
type: String!
businessUnitResId: ResourceIdentifier
}
Announced deprecation of 'excludeCount' field
excludeCount field in CountOnLineItemUnits and CountOnCustomLineItemUnits is now deprecated and will be removed on 6 June 2025. With this enhancement, by default, units of (Custom) Line Items matched in the CartDiscountPatternTarget triggerPattern are excluded and not considered for the targetPattern, on every application of the Discount.Changes:
- [API] Deprecated the
excludeCountfield in the CountOnLineItemUnits and CountOnCustomLineItemUnits types. - [GraphQL API] Deprecated the
excludeCountfield in theCountOnCustomLineItemUnits,CountOnCustomLineItemUnitsInput,CountOnLineItemUnits, andCountOnLineItemUnitsInputtypes.
Introduced endpoints to retrieve all roles and permissions of an Associate
You can now retrieve all roles and permissions of an Associate within a Business Unit using a single query. This enhancement enables B2B merchants to efficiently fetch and validate buyer's associate permissions in their own applications, such as a B2B storefront. Previously, you could retrieve this information using multiple queries.
Changes:
- [API] Added Get Associate in BusinessUnit and Get Associate in BusinessUnit in Store methods to Business Units API.
- [API] Added BusinessUnitAssociateResponse type to Business Units API.
Improved discount validation for Product and Cart Discounts
Added 'discountTypeCombination' field to Cart and Order
discountTypeCombination, that allows you to check how discounts apply and interact on a Cart and Order. Additionally, the new field also indicates the discount type chosen when the best deal logic applies to the Cart or Order.Changes:
- [API] Added the
discountTypeCombinationfield to Cart and Order. - [API] Added DiscountTypeCombination, BestDeal, and Stacking types to Carts API.
- [GraphQL API] Added the
discountTypeCombinationfield to theCartandOrdertypes. - [GraphQL API] Added the following types to the GraphQL schema:
DiscountTypeCombination,Stacking,BestDeal,ChosenDiscountType.
extend type Cart {
discountTypeCombination: DiscountTypeCombination
}
extend type Order {
discountTypeCombination: DiscountTypeCombination
}
"Chosen discount type for the cart as part of best deal"
enum ChosenDiscountType {
CartDiscount
ProductDiscount
}
interface DiscountTypeCombination {
type: String!
}
type Stacking implements DiscountTypeCombination {
type: String!
}
type BestDeal implements DiscountTypeCombination {
type: String!
chosenDiscountType: ChosenDiscountType
}
Apache HTTP clients update to version 5.4.1 is no longer required by March 1, 2025
Therefore, the previously communicated deadline of March 1, 2025, is no longer applicable. However, we still recommend that you update your Apache HTTP client.
Added support to filter Business Units by status using the Business Unit Search API
Changes:
- [API] Added
statuskeyword field.
Apache HTTP clients must be updated to version 5.4.1 or newer
In March 2025, Google plans to implement changes to the Google Cloud service that are incompatible with older Apache HTTP client versions.
Check your Apache HTTP client if you meet the following criteria:
- Your commercetools Composable Commerce projects are hosted on GCP (Google Cloud).
- You are using an Apache HTTP client to communicate with the Composable Commerce APIs.
- Your Apache HTTP client is older than version
5.4.1. - Your Apache HTTP core component is older than version
5.3.1.
Added tutorial Modeling assortments with Product Selections
- How to use Product Selections and Stores to model assortments that you want to make available on your storefronts.
- How to use Store-specific API clients to access only the products available in that Store.
- How to include specific Product Variants in an assortment.
- How to temporarily exclude entire Products from the assortment.
- How to retrieve the Products in a Store using the Product Projection API and the Product Search API.
Fixed behavior of 'assets' and 'images' fields in Product Variant Tailorings
assets and images fields of entities related to Product Variant Tailoring optional to match the documented behavior.Changes:
-
[API] Made the
imagesfield in the Set Images update action optional. -
[GraphQL API] Made the
imagesandoldImagesfields in theProductTailoringImagesSettype optional. -
[GraphQL API] Made the
imagesinput field in theProductTailoringImagesSettype optional. -
[GraphQL API] Made the
imagesandassetsfields in theVariantTailoringandProductVariantTailoringtypes optional.
Introduced Store-based data fencing for Business Units Search
You can now search by Stores and restrict results based on store-scoped tokens with Business Unit Search. This allows you, as merchants, to ensure that your internal users only have access to Business Units they're allowed to view and edit.
Added support for Product Variant Selections to Product Search in public beta
- [API] Added
variants.productSelectionskeyword field in public beta. - [API] Added
variants.storeskeyword field in public beta.
Introduced Store-based data fencing for Business Units
in-store endpoints for Business Units. These endpoints give access only to Business Units associated with specific Stores. Additionally, the Business Units can now represent inherited Stores.Changes:
- [API] Added
in-storeendpoints for Business Units. - [API] Added
view_business_units:{projectKey}:{storeKey}andmanage_business_units:{projectKey}:{storeKey}scopes. - [API] Added
inheritedStoresfield to the BusinessUnit type. - [GraphQL API] Added the
businessUnitfield to theInStoretype. - [GraphQL API] Added the
storeKeyargument to theMutation.createBusinessUnit,Mutation.updateBusinessUnit, andMutation.deleteBusinessUnitfields.
The following changes were introduced in terms of GraphQL SDL:
extend type InStore {
businessUnit(
"Queries with specified ID"
id: String,
"Queries with specified key"
key: String): BusinessUnit
businessUnits(where: String, sort: [String!], limit: Int, offset: Int): BusinessUnitQueryResult!
}
Added filter for matching Product Variants in Product Projection Search in GraphQL
productProjectionSearch GraphQL query are included in the response. Previously, you had to filter for matching Product Variants on the client side.Changes:
- [GraphQL API] Added the
onlyMatchingargument to theProductProjection.variantsand theProductProjection.allVariantsfield.
ImpEx is now deprecated
Added support for multiple values in 'exact' Product Search expressions in public beta
exact expression in Product Search queries.
This allows simpler query expressions to search for multiple values on the same field.
Previously, you had to use an or compound expression to formulate such queries.
The exact expression with multiple values helps reduce the number of expressions that count toward the 50-expression limit for queries.- [API] Added
valuesfield to exact query expression for Product Search in public beta.
Introduced Business Unit Search in beta
Changes:
- [API] Introduced Business Unit Search API in public beta.
- [API] Added the BusinessUnitSearchStatus type and Change Business Unit Search Status update action to the Projects API.
- [API] Added
businessUnitsfield to SearchIndexingConfiguration. - [GraphQL API] Added the following types to the GraphQL schema:
BusinessUnitSearchConfiguration,BusinessUnitSearchStatus,ChangeProjectSettingsBusinessUnitSearchStatus. - [GraphQL API] Added
changeBusinessUnitSearchStatusinput field to theProjectSettingsUpdateActiontype. - [GraphQL API] Added
businessUnitsfield to theSearchIndexingConfigurationtype.
The following changes were introduced in terms of GraphQL SDL:
extend type SearchIndexingConfiguration {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
businessUnits: BusinessUnitSearchConfiguration
}
extend input ProjectSettingsUpdateAction {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
changeBusinessUnitSearchStatus: ChangeProjectSettingsBusinessUnitSearchStatus
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type BusinessUnitSearchConfiguration {
status: BusinessUnitSearchStatus!
lastModifiedAt: DateTime!
lastModifiedBy: Initiator
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
enum BusinessUnitSearchStatus {
Activated
Deactivated
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input ChangeProjectSettingsBusinessUnitSearchStatus {
status: BusinessUnitSearchStatus!
}
Added support to query all Product Variants in Product Projection Search in GraphQL
productProjectionSearch queries in the GraphQL API. Previously, you had to use the masterVariant and variants separately to fetch all Product Variants.Changes:
- [GraphQL API] Added the
allVariantsfield to theProductProjectiontype.
The following changes were introduced in terms of GraphQL SDL:
extend type ProductProjection {
"Fetch all variants, including the master variant in first position."
allVariants: [ProductSearchVariant!]!
}
Enhanced control over Discount interactions
{/* vale Google.OxfordComma = NO */}
Added additional support for Custom Fields on Custom Shipping Method update actions
Changes:
-
[API] Added optional
customfield to Set Custom ShippingMethod on Carts. -
[API] Added optional
customfield to Set Custom ShippingMethod and Set ShippingAddress and Custom ShippingMethod on Order Edits. -
[GraphQL API] Changed the
SetCartCustomShippingMethodtype:- Input field
customwas added toSetCartCustomShippingMethodtype
- Input field
-
[GraphQL API] Changed the
SetStagedOrderCustomShippingMethodtype:- Input field
customwas added toSetStagedOrderCustomShippingMethodtype
- Input field
-
[GraphQL API] Changed the
SetStagedOrderShippingAddressAndCustomShippingMethodtype:- Input field
customwas added toSetStagedOrderShippingAddressAndCustomShippingMethodtype
- Input field
-
[GraphQL API] Changed the
SetStagedOrderShippingAddressAndCustomShippingMethodOutputtype:- Added the
customfield to theSetStagedOrderShippingAddressAndCustomShippingMethodOutputtype
- Added the
-
[GraphQL API] Changed the
SetStagedOrderCustomShippingMethodOutputtype:- Added the
customfield to theSetStagedOrderCustomShippingMethodOutputtype
- Added the
Product Tailoring of Attributes for Product Variants achieved general availability status
After collecting feedback during the beta phase, we have moved Product Tailoring of Attributes for Product Variants out of beta.
Added Messages for changes on Shopping Lists
Changes:
- [API] Added the ShoppingListLineItemAdded and ShoppingListLineItemRemoved Messages.
- [GraphQL API] Added the following types to the GraphQL schema:
ShoppingListLineItemAdded,ShoppingListLineItemRemoved.
Added 'Canceled' ShipmentState to Orders
Canceled option to ShipmentState. You can use this state in situations where you cannot deliver an order to a customer. Previously, this status could only be set using Custom Fields.Changes:
- [API] Added
Canceledto ShipmentState enum. - [GraphQL API] Added the
Canceledenum value to theShipmentStateenum.
Enhanced behavior for auto-deletion of Product Selection Assignments
Introduced 'CartDiscountPatternTarget' in beta
Changes:
- [API] Added CartDiscountPatternTarget, PatternComponent, CountOnLineItemUnits, and CountOnCustomLineItemUnits to the Cart Discounts API.
- [API] Added ChangeTargetPatternChangeValue to the Change History API.
- [API] Added
applicationModefield to CartDiscountValueFixed and CartDiscountValueFixedDraft - [GraphQL API] Added the following types to the GraphQL schema:
CartDiscountPatternTarget,CartDiscountPatternTargetInput,PatternComponent,PatternComponentInput,CountOnLineItemUnits,CountOnLineItemUnitsInput,CountOnCustomLineItemUnits,CountOnCustomLineItemUnitsInput,FixedPriceCartDiscountValue,FixedPriceCartDiscountValueInput. - [GraphQL API] Added
patterninput field to theCartDiscountTargetInputtype. - [GraphQL API] Added
fixedCartinput field to theFixedPriceCartDiscountValueInputtype.
The following changes were introduced in terms of GraphQL SDL:
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type CartDiscountPatternTarget implements CartDiscountTarget {
triggerPattern: [PatternComponent!]!
targetPattern: [PatternComponent!]!
maxOccurrence: Int
selectionMode: SelectionMode!
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"
input CartDiscountPatternTargetInput {
triggerPattern: [PatternComponentInput!]!
targetPattern: [PatternComponentInput!]!
maxOccurrence: Int
selectionMode: SelectionMode
}
extend input CartDiscountTargetInput {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
pattern: CartDiscountPatternTargetInput
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type CountOnCustomLineItemUnits implements PatternComponent {
predicate: String!
minCount: Int
maxCount: Int
excludeCount: Int
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"
input CountOnCustomLineItemUnitsInput @ignoreDraftConventionValidation {
predicate: String!
minCount: Int = 1
maxCount: Int
excludeCount: Int
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type CountOnLineItemUnits implements PatternComponent {
predicate: String!
minCount: Int
maxCount: Int
excludeCount: Int
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"
input CountOnLineItemUnitsInput @ignoreDraftConventionValidation {
predicate: String!
minCount: Int = 1
maxCount: Int
excludeCount: Int
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
interface PatternComponent {
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"
input PatternComponentInput {
CountOnLineItemUnits: CountOnLineItemUnitsInput
CountOnCustomLineItemUnits: CountOnCustomLineItemUnitsInput
}
extend input CartDiscountValueInput {
fixedCart: FixedPriceCartDiscountValueInput
}
type FixedPriceCartDiscountValue implements CartDiscountValue {
type: String!
money: [BaseMoney!]!
applicationMode: DiscountApplicationMode!
}
input FixedPriceCartDiscountValueInput {
money: [CartDiscountValueBaseMoneyInput!]!
applicationMode: DiscountApplicationMode!
}
Added ability to retrieve and manage Channels by key
Changes:
- [API] Added Get Channel by Key to Channels.
- [API] Added Check if Channel exists by Key to Channels.
- [API] Added Update Channel by Key to Channels.
- [API] Added Delete Channel by Key to Channels.
- [GraphQL API] Added the
keyfield to theupdateChannelanddeleteChannelfields of theMutationtype.
TypeScript SDK v2 client is now deprecated
The v2 client will not receive any future updates to fix bugs or security vulnerabilities. If you are currently using the v2 client, you should migrate to the v3 client.
Approval Rules can now be extended with Custom Fields
Changes:
- [API] Added optional
customfield to the ApprovalRule type. - [API] Added Set Custom Type and Set CustomField update actions to Approval Rules.
- [API] Added
approval-ruleto CustomFieldReferenceValue enum. - [API] Added
approval-ruleto ResourceTypeId enum. - [GraphQL API] Added the following types to the GraphQL schema:
SetApprovalRuleCustomField,SetApprovalRuleCustomType. - [GraphQL API] Changed the
ApprovalRuleUpdateActiontype:- Input field
setCustomFieldwas added toApprovalRuleUpdateActiontype - Input field
setCustomTypewas added toApprovalRuleUpdateActiontype
- Input field
- [GraphQL API] Changed the
ApprovalRuletype:- Added the
customfield to theApprovalRuletype.
- Added the
Added the NewMasterVariantAdditionNotAllowed error code
isMasterVariant=true).Only an existing Product Variant can be set as the Master Variant. To resolve the error, you can either update the existing Master Variant or create a new Product Variant and then set it as the Master Variant.
Changes:
- [API] Added the NewMasterVariantAdditionNotAllowed error code.
Added endpoint for checking if ProductTailoring exists
Changes:
- [API] Added Check if ProductTailoring exists by query predicate endpoint.
Added sort capability for categoryOrderHints to Product Search
categoryOrderHints specified on Products.
In combination with a filter on a category, you can now tell the API to sort the Product Search result by category order hint.
This lets you present the products on a category page in the desired order.Changes:
- [API] Added
categoryOrderHints.{categoryID}to the searchable Product fields.
Customer Search achieved general availability status
Changes:
- [API] Added
customersfield to SearchIndexingConfiguration on Projects. - [API] Added the SearchNotReady error code.
- [GraphQL API] Added the following types to the GraphQL schema:
ChangeProjectSettingsCustomerSearchStatus,CustomerSearchConfiguration,CustomerSearchStatus. - [GraphQL API] Added the
changeCustomerSearchStatusinput field to theProjectSettingsUpdateActiontype. - [GraphQL API] Added the
customersfield to theSearchIndexingConfigurationtype.
API Extensions now support Customer Groups
Changes:
- [API] Added
customer-groupto ExtensionResourceTypeId.
Introduced Product Tailoring of Attributes for Product Variants in public beta
Changes:
- [API] Added ProductTailoringAttribute to the Product Tailoring API.
- [API] Added optional
attributesfield to ProductVariantTailoring and ProductVariantTailoringDraft. - [API] Added ProductTailoringSetAttributeAction and ProductTailoringSetAttributeInAllVariantsAction update actions to the Product Tailoring API.
- [API] Added optional
attributesfield to ProductTailoringAddVariantAction. - [GraphQL API] Added the
attributesRawfield to theProductVariantTailoringtype. - [GraphQL API] Added the
attributesfield to theProductVariantTailoringInputtype. - [GraphQL API] Added the
SetProductTailoringAttributeandSetProductTailoringAttributeInAllVariantstypes to the GraphQL schema. - [GraphQL API] Added the
setAttributeInAllVariantsandsetAttributefields to theProductTailoringUpdateActiontype. - [GraphQL API] Added the
attributesfield to theAddProductVariantTailoringtype.
Enhanced behavior of the image upload endpoint for Products and Product Tailoring
When uploading Product or Product Tailoring images, the API now returns different status codes that indicate the status of the image upload at the time the API responds:
- A
200 OKresponse is returned when all sizes of the image have been successfully uploaded to the CDN. - A
202 Acceptedresponse is returned when thesmallsize of the image has been successfully uploaded to the CDN, but the upload of the other sizes is still ongoing. These other sizes will be available soon thereafter.
200 OK, and if the image is larger, it responds with 202 Accepted.200 OK status code after only the small image size has been successfully created.If you wish to learn more about this change, contact your Customer Success Manager.
Announcing deprecation of ImpEx
Replacement functionality, including CSV import/export, the API Explorer, and the GraphQL IDE, will become available in the Merchant Center between now and the deprecation date.
Product Tailoring of images and assets achieved general availability status
Added discount distribution modes for absolute Cart Discounts
You can now choose how absolute discounts are applied to (Custom) Line Items in a Cart. Discounts can be distributed evenly or applied individually to each (Custom) Line Item, giving you more flexibility when creating promotions. Previously, discounts were only distributed proportionately to (Custom) Line Items.
Changes:
- [API] Added DiscountApplicationMode to the Cart Discounts API.
- [API] Added
applicationModefield to CartDiscountValueAbsoluteDraft and CartDiscountValueAbsolute. - [GraphQL API] Added the following types to the GraphQL schema:
AbsoluteCartDiscountValue,AbsoluteCartDiscountValueInput, andDiscountApplicationMode. - [GraphQL API] Added
absoluteCartinput field to theCartDiscountValueInputtype.
Added support for Custom Fields on Customers to Customer Search
Added Messages for changes on Custom Fields and Types on Order Deliveries
Changes:
- [API] Added the following Messages: DeliveryCustomFieldAdded, DeliveryCustomFieldChanged, DeliveryCustomFieldRemoved, DeliveryCustomTypeSet, and DeliveryCustomTypeRemoved.
- [GraphQL API] Added the following types to the GraphQL schema:
DeliveryCustomFieldAdded,DeliveryCustomFieldChanged,DeliveryCustomFieldRemoved,DeliveryCustomTypeSet, andDeliveryCustomTypeRemoved.
The following changes were introduced in terms of GraphQL SDL:
Removed 'publish' field on EmbeddedPriceImport and ProductVariantImport
publish field on EmbeddedPriceImport and ProductVariantImport.staged field to control whether the imported data should be applied to the current and/or staged representation of the Product.Import API is now available on AWS in North America and Europe
API Extensions now support Shopping Lists
Changes:
- [API] Added
shopping-listto ExtensionResourceTypeId.
Deprecation of the TypeScript SDK v2 client
To make the TypeScript SDK consistent with other Composable Commerce SDKs, we are replacing the v2 client with the v3 client.
Added capability to query Shopping Lists by TextLineItem key
key in queries.Changes:
- [API] Added
textLineItems(key)to Query Predicates on Shopping Lists for the Query ShoppingLists endpoint.
Added support for changing Line Items' order on Carts
You can now change the order of Line Items in a Cart. This enhancement helps Customers identify which Line Items belong together. Previously, the order of Line Items in a Cart was based on the sequence in which the Line Items were added to the Cart.
Changes:
Added Cart Predicate field identifier 'store.key'
store.key field identifier to Cart Predicates, merchants can now create certain Store-specific Shipping Methods with predicates. This enhancement is valuable in cases where several Stores ship to the same country and use different shipping rates per Store.Changes:
- [API] Added
store.keypredicate field identifier to Cart Predicates.
Added 'active' field to Shipping Methods
active field to ShippingMethod. With this addition, you can now activate or deactivate individual Shipping Methods, as needed. This change helps you to manage Shipping Methods more efficiently by allowing you to temporarily deactivate them when not in use. Previously, you had to remove the Shipping Methods and create them again.active field has been set to true. Now, when you create or update a Cart or Order, you can only use an active Shipping Method.Changes:
- [API] Added the Change Active update action to Shipping Methods.
- [API] Added
activefield to ShippingMethod and ShippingMethodDraft types. - [GraphQL API] Added
ChangeShippingMethodActivetype to the GraphQL schema. - [GraphQL API] Added
changeActiveinput field to theShippingMethodUpdateActiontype. - [GraphQL API] Added
activefield to theShippingMethodtype. - [GraphQL API] Added
activeinput field to theShippingMethodDrafttype.
Added 'addressId' field to Messages related to changes on Custom Fields of Addresses
You can now identify the address that was updated in Messages about changes to Custom Fields on Addresses. Previously, the Message did not identify which address was updated.
Changes:
- [API] Added an optional field,
addressId, to the following Messages:- for Customers: CustomerAddressCustomTypeSet, CustomerAddressCustomTypeRemoved, CustomerAddressCustomFieldAdded, CustomerAddressCustomFieldChanged, CustomerAddressCustomFieldRemoved, BusinessUnitAddressCustomTypeSet
- for Business Units: BusinessUnitAddressCustomTypeRemoved, BusinessUnitAddressCustomFieldAdded, BusinessUnitAddressCustomFieldChanged, BusinessUnitAddressCustomFieldRemoved
- [GraphQL API] Added the
addressIdfield to the following types:CustomerAddressCustomTypeSet,CustomerAddressCustomTypeRemoved,CustomerAddressCustomFieldAdded,CustomerAddressCustomFieldChanged,CustomerAddressCustomFieldRemoved,BusinessUnitAddressCustomTypeSet,BusinessUnitAddressCustomTypeRemoved,BusinessUnitAddressCustomFieldAdded,BusinessUnitAddressCustomFieldChanged,BusinessUnitAddressCustomFieldRemoved.
Added Cart Predicate field identifier 'origin'
origin field identifier to Cart Predicates, you can now target the value of the CartOrigin field. This enhancement lets you match against Carts originating from Customers, Merchants, or Quotes. For example, you can use this predicate to create Shipping Methods that are only available for Carts with a specific origin, such as those created by a Merchant.Changes:
- [API] Added
originpredicate field identifier to Cart Predicates.
Added Messages for changes on Custom Fields and Types on Embedded Prices
Changes:
- [API] Added the following Messages: ProductPriceCustomFieldAdded, ProductPriceCustomFieldChanged, ProductPriceCustomFieldRemoved, ProductPriceCustomFieldsSet, and ProductPriceCustomFieldsRemoved.
- [GraphQL API] Added the following types to the GraphQL schema:
ProductPriceCustomFieldAdded,ProductPriceCustomFieldChanged,ProductPriceCustomFieldRemoved,ProductPriceCustomFieldsSet, andProductPriceCustomFieldsRemoved.
Business Units now support Approval Rules inheritance
Changes:
- [API] Added
approvalRuleModefield to BusinessUnit, BusinessUnitDraft, Company, Division, and DivisionDraft. - [API] Added BusinessUnitApprovalRuleMode type to Business Units.
- [API] Added Change Approval Rule Mode update action to Business Units.
- [API] Added
BusinessUnitApprovalRuleModeChangedMessageMessage. - [GraphQL API] Added the following types to the GraphQL schema:
BusinessUnitApprovalRuleMode,BusinessUnitApprovalRuleModeChanged,ChangeBusinessUnitApprovalRuleMode. - [GraphQL API] Changed the
BusinessUnitDrafttype:- Input field
approvalRuleModewas added toBusinessUnitDrafttype
- Input field
- [GraphQL API] Changed the
BusinessUnittype:- Added the
approvalRuleModefield to theBusinessUnittype.
- Added the
- [GraphQL API] Changed the
BusinessUnitUpdateActiontype:- Input field
changeApprovalRuleModewas added toBusinessUnitUpdateActiontype
- Input field
Introduced Product Tailoring of images and assets in beta
Changes:
-
[API] Added ProductVariantTailoring and ProductVariantTailoringDraft to the Product Tailoring API.
-
[API] Added
variantsfield to ProductTailoringData, ProductTailoringDraft, and ProductTailoringInStoreDraft. -
[API] Added Upload Product Tailoring Image endpoint to the Product Tailoring API.
-
[API] Added Add Variant, Remove Variant, Add External Image, Move Image To Position, Remove Image, Set Images, Set Image Label, Add Asset, Remove Asset, Set Asset Key, Change Asset Order, Change Asset Name, Set Asset Description, Set Asset Tags, Set Asset Sources, Set Asset Custom Type, and Set Asset CustomField update actions to the Product Tailoring API.
-
[API] Added ProductVariantTailoringAdded, ProductVariantTailoringRemoved, ProductTailoringImageAdded, and ProductTailoringImagesSet Messages.
-
[GraphQL API] Added the
variantsfield to theProductTailoringCreated, theHasProductTailoringData, and theProductTailoringDatatype. -
[GraphQL API] Added input field
variantstoProductTailoringDrafttype.
Introduced Customer Search in beta
Changes:
- [API] Introduced Customer Search API in public beta.
- [API] Added Change Customer Search Status update action on Projects.
Product Search achieved general availability status
Introduced support for Private Service Connect
{/* vale commercetools.Acronyms = NO */}
Introduced Store-based data fencing for Quotes
in-store endpoints for Quotes, Quote Requests, and Staged Quotes. These endpoints give access only to Quotes associated with specific Stores. In addition, we've added the Create Order in Store from Quote endpoint to the Orders API.Changes:
- [API] Added
in-storeendpoints for Quotes, Quote Requests, and Staged Quotes. - [API] Added Create Order in Store from Quote endpoint.
- [API] Added optional field
storeto StagedQuote. - [GraphQL API] Changed the
InStoretype:- Added the
stagedQuote,stagedQuotes,quoteRequest,quoteRequests,quote, andquotesfields to theInStoretype.
- Added the
- [GraphQL API] Changed the
StagedQuotetype:- Added the
storeRefandstorefields to theStagedQuotetype.
- Added the
- [GraphQL API] Changed the
Mutationtype:- Argument
storeKeywas added toMutation.createQuote,Mutation.createQuoteRequest,Mutation.createStagedQuote,Mutation.createOrderFromQuote,Mutation.deleteQuote,Mutation.deleteQuoteRequest,Mutation.deleteStagedQuote,Mutation.updateQuote,Mutation.updateQuoteRequest, andMutation.updateStagedQuotefields.
- Argument
Added support for Custom Fields on PaymentInfo to Order Search
Changes:
- [API] Added
paymentInfo.payments.customandpaymentInfo.payments.transactions.customfields to Searchable Order fields. - [API] Added
returnInfo.items.shipmentState,returnInfo.items.paymentState,returnInfo.items.createdAt, andreturnInfo.items.lastModifiedAtfields to Searchable Order fields.
Product Tailoring achieved general availability status
Improved logic of the success response for the upload of Product images
200 OK response is now returned only after all image sizes have been successfully uploaded to the Content Delivery Network (CDN). Previously, the response was returned after the successful upload of the
small size only. This meant errors were not returned if there were issues uploading the other image sizes.The new logic enhances the quality of the response because it ensures that all image sizes have been uploaded successfully and will be available on the CDN.
To deliver optimal performance, the change will be released gradually over the next two weeks. Therefore, for some projects, the response will still be returned following the previous logic for a while.
If you wish to learn more about this change, contact your Customer Success Manager.
Increased the limit of Customer Groups in a Project to 10,000
The limit of Customer Groups you can have in a Project has been increased from 1,000 to 10,000.
Added 'staged' field and deprecated 'publish' field on EmbeddedPriceImport and ProductVariantImport
staged field to EmbeddedPriceImport and ProductVariantImport. With this new staged field you can control whether the imported data should be applied to the current and/or staged representation of the Product to update.staged field replaces the publish field, which is now deprecated and will be removed on 1 August 2024.publish field to import Embedded Prices and Product Variants, you should use staged instead and adjust the value based on your use case.Changes:
- [API] Added
stagedto EmbeddedPriceImport. - [API] Added
stagedto ProductVariantImport. - [API] Deprecated
publishfield on EmbeddedPriceImport. - [API] Deprecated
publishfield on ProductVariantImport.
Postponed changes to publishing Products using the Import API
publish field when importing Product data. This change helps you to prevent accidental publishing of Products, which can negatively impact customer satisfaction and brand reputation due to poor/incomplete product information, or can lead to the premature exposure of products to customers.As this may break existing implementations, we have postponed the implementation to 1 August 2024. This gives you additional time to prepare for this change.
Please reach out to your contact at commercetools if you have any questions.
Announcing changes to how the Import API publishes Products
publish field when importing Product data. The following changes will reduce the complexity of importing Product data, and will prevent unintended publishing:- You can only use the
publishfield to publish or unpublish Products when importing Products or Product drafts. - When importing Embedded Prices, Product Variants, or Product Variant Patches:
- If a Product is currently unpublished, then it will not be published even if
publishistrue. - The Product's
currentprojection will not be replaced by thestagedprojection.
- If a Product is currently unpublished, then it will not be published even if
Added attribution in Client Logging
You can now view the client and source that created or updated resources indirectly. This new feature will help improve the auditability of changes that were made to resources through methods such as importing and exporting.
Changes:
- [API] Added the
attributedToproperty to Client Logging. This field is only present on resources created or modified after 1 April 2024. - [GraphQL API] Added the following types to the GraphQL schema:
Attribution,AttributionSource. - [GraphQL API] Added field
attributedToto theInitiatortype.
Added Import Discount Codes endpoint in beta
You can now send us the whole Discount Code snapshot and we will create/update resources in your Project by calculating the delta.
Changes:
- [API] Added Import Discount Codes endpoint.
Introduced Product Search in beta
Changes:
- [API] Introduced Product Search API in public beta.
- [API] Added ProductSearchIndexingMode to Project.
- [API] Added
productsSearchfield to SearchIndexingConfiguration. - [API] Added
modefield to Change Product Search Indexing Enabled update action on Project.
Introduced 'ManuallySuspended' health status for Subscriptions
Healthy to ConfigurationErrorDeliveryStopped, you needed to delete and recreate a Subscription. Now when the issue is resolved, the Composable Commerce support team can manually change the status to Healthy again, so you no longer need to delete and recreate the Subscription.ManuallySuspended status when there is an issue with the Destination queue. The Subscription does not automatically return to a Healthy status. You must contact the Composable Commerce support team to manually change the status to Healthy again.Changes:
- [API] Added
ManuallySuspendedhealth status.
Order Edits achieved general availability status
Fixed tax subrate calculation for Line Items and Custom Line Items
We fixed the calculation and rounding of tax subrates on (Custom) Line Items to provide a more consistent experience.
Previously, individual (Custom) Line Item taxes were calculated once based on the sum of the combined subrates. If the calculation of a subrate resulted in a fractional tax amount, it could cause discrepancies between the total price of the (Custom) Line Item(s) and the total price of the Cart.
Now, each tax subrate is calculated and rounded separately. This change ensures that the sum of the tax portions is identical to the (Custom) Line Item's total tax amount. As a result, the total price of all (Custom) Line Items will now match the total price of the Cart.
Added 'taxPortions' field to TaxedItemPrice
taxPortions field to TaxedItemPrice to be consistent and align with the tax information available on TaxedPrice. Now, you can use the taxPortions field to view the individual tax subrate amounts for (Custom) Line Items and shipping-related information on a Cart.Changes:
- [API] Added
taxPortionsto TaxedItemPrice. - [GraphQL API] Changed the
TaxedItemPricetype:- Added the
taxPortionsfield to theTaxedItemPricetype.
- Added the
Introduced Product Tailoring in beta
By defining tailored product data, you can adapt product information to appeal to different markets and, in turn, increase visibility, customer loyalty, and order volumes.
Changes:
- [API] Added Product Tailoring API.
- [API] Added Product Tailoring Messages.
- [GraphQL API] Added following types to the GraphQL schema:
ProductTailoringDraft,ProductTailoring,ProductTailoringCreated,ProductTailoringData,ProductTailoringDeleted,ProductTailoringDescriptionSet,ProductTailoringNameSet,ProductTailoringPublished,ProductTailoringQueryResult,ProductTailoringSlugSet,ProductTailoringUnpublished,ProductTailoringUpdateAction,PublishTailoring,SetProductTailoringDescription,SetProductTailoringMetaAttributes,SetProductTailoringMetaDescription,SetProductTailoringMetaKeywords,SetProductTailoringMetaTitle,SetProductTailoringName,SetProductTailoringSlug,UnpublishTailoring. - [GraphQL API] Added fields
productTailoringandproductTailoringListto theInStoretype. - [GraphQL API] Added fields
productTailoringandproductTailoringListto theQuerytype. - [GraphQL API] Added fields
createProductTailoring,updateProductTailoring, anddeleteProductTailoringto theMutationtype.
Added support for key and Messages for Discount Codes
key value, allowing you to update Discount Code keys efficiently without the need to bulk import Discount Codes with the updated keys.Changes:
- [API]
- Added
keyto DiscountCode and DiscountCodeDraft. - Added the Set Key update action to Discount Codes.
- Added
DiscountCodeCreated,DiscountCodeDeleted,DiscountCodeKeySetMessages.
- Added
- [GraphQL API]
- Input field
keywas added toDiscountCodeandDiscountCodeDrafttype. - Input field
setKeywas added toDiscountCodeUpdateActiontype. - Argument
keywas added toQuery.discountCodefield and changedQuery.discountCode(id)from required to optional. - Argument
keywas added toMutation.updateDiscountCodefield and changedMutation.updateDiscountCode(id)from required to optional. - Argument
keywas added toMutation.deleteDiscountCodefield that changedMutation.deleteDiscountCode(id)from required to optional. - Added the following types to the GraphQL schema:
SetDiscountCodeKey,DiscountCodeCreated,DiscountCodeDeleted,DiscountCodeKeySet.
- Input field
Introducing commercetools Foundry
What's included:
- Tailored resources for B2C commerce: a set of resources specifically designed for B2C retail, offering best practice guides for various use cases, along with a Blueprint for B2C Retail, a step-by-step plan that explains how to set up your commerce with commercetools and covers topics from solution architecture overview and project planning to discovery, demo flow, and more.
- AI-powered developer assistant: helping engineering teams with an AI-powered documentation assistant and code generator.
- Store Launchpad for B2C Retail: a quick start for commercetools Projects, ensuring a faster and more efficient go-live.
- Expert services: access to specialized knowledge to accelerate your time to value. Contact your Customer Success Manager to learn more.
AuthenticationMode on Customer achieved general availability status
authenticationModeproperty on Customer.- Set AuthenticationMode update action.
Added Messages for changes on Cart Discounts
Changes:
- [API] Added
CartDiscountCreated,CartDiscountDeleted,CartDiscountStoreAdded,CartDiscountStoreRemoved,CartDiscountStoresSetMessages. - [GraphQL API] Added the following types to the GraphQL schema:
CartDiscountCreated,CartDiscountDeleted,CartDiscountStoreAdded,CartDiscountStoreRemoved,CartDiscountStoresSet.
Approval Flows can now be extended with Custom Fields
Changes:
- [API] Added optional
customfield to the ApprovalFlow type. - [API] Added Set Custom Type and Set CustomField update actions to Approval Flows.
- [API] Added
approval-flowto CustomFieldReferenceValue enum. - [API] Added
approval-flowto ResourceTypeId enum. - [GraphQL API] Added the following types to the GraphQL schema:
SetApprovalFlowCustomField,SetApprovalFlowCustomType. - [GraphQL API] Changed the
ApprovalFlowUpdateActiontype:- Input field
setCustomFieldwas added toApprovalFlowUpdateActiontype - Input field
setCustomTypewas added toApprovalFlowUpdateActiontype
- Input field
- [GraphQL API] Changed the
ApprovalFlowtype:- Added the
customfield to theApprovalFlowtype.
- Added the
Buyer Approval Flows achieved general availability status
- Approval Rules, which define the conditions under which an Order must go through an approval process.
- Approval Flows, which manage the overall state of the approval process.
Deprecation of Java v1 SDK
VPC Service Controls for Google Cloud Pub/Sub and Google Cloud Functions
{/* vale commercetools.Acronyms = NO */}
Enabling VPC Service Controls offers an additional layer of security for Google Cloud services. This layer is independent of Identity and Access Management (IAM) and provides a broader, context-based security perimeter, ensuring that resources are accessible exclusively within the Google Cloud Platform (GCP) infrastructure of commercetools.
We recommend enabling VPC Service Controls for:
- Google Cloud Pub/Sub Subscription Destinations: ensuring that only commercetools Subscription Messages can reach your Pub/Sub resources.
- Google Cloud Functions API Extension Destinations: ensuring that only API Extension requests from commercetools can access your Cloud Function resources.
Store-specific Cart Discounts achieved general availability status
manage_cart_discounts:{projectKey}:{storeKey}andview_cart_discounts:{projectKey}:{storeKey}scopesstoresfield on CartDiscount and CartDiscountDraft- Get, Query, Check, Create, Update, and Delete CartDiscount in Store endpoints
- Add Store, Remove Store, and Set Stores update actions on the Cart Discounts API
- StoreCartDiscountsLimitReached and MaxStoreReferencesReached errors
Cart total discount achieved general availability status
- CartDiscountTotalPriceTarget type on the Cart Discounts API
- DiscountOnTotalPrice and DiscountedTotalPricePortion types on the Carts API
discountOnTotalPricefield on Cart and Order
API Extensions achieved general availability status
Updated structure for HTTP API documentation
We've reorganized our HTTP API documentation to better accommodate our growing number of APIs. The new structure is tailored to make navigation more intuitive, improving productivity and facilitating a more effective integration and use of our APIs.
Updated the implementation of SetNameChange in Audit Log
previousValue and nextValue fields on the Audit Log Change Type SetNameChange from LocalizedString to String.SetLocalizedNameChange instead of SetNameChange:- Set Name on Discount Codes.
- Set State Name on States.
- Set Name on Stores.
SetNameChange.Changes:
- [API] Changed type of
previousValueandnextValuefields onSetNameChangefromLocalizedStringtoString. - [API] Changed the following update actions to trigger
SetLocalizedNameChangeinstead ofSetNameChange:- Set Name on Discount Codes.
- Set State Name on States.
- Set Name on Stores.
- [API] Added support for the Set Name update action on Associate Roles to the Change History API.
Added new endpoints for checking if a resource exists
key, ID, or Query Parameter, exists. These endpoints are available for all resources, allowing for a consistent and efficient method to verify whether a particular resource is present without retrieving the full data.Added CustomerEmailTokenCreated and CustomerPasswordTokenCreated Messages
Changes:
- [API] Added CustomerEmailTokenCreated Message.
- [API] Added CustomerPasswordTokenCreated Message.
- [GraphQL API] Added the following types to the GraphQL schema:
CustomerEmailTokenCreated,CustomerPasswordTokenCreated.
Fixed field types on OrderFromCartDraft, OrderFromQuoteDraft, and PaymentDraft
state field on OrderFromCartDraft and OrderFromQuoteDraft, as well as the customer field on PaymentDraft, from Reference to ResourceIdentifier. The HTTP API now behaves as documented, and we also aligned the GraphQL API with this behavior.Changes:
- [API] Changed type of
statefield on OrderFromCartDraft and OrderFromQuoteDraft from Reference to ResourceIdentifier. - [API] Changed type of
customerfield on PaymentDraft from Reference to ResourceIdentifier. - [GraphQL API] Changed the
OrderCartCommandtype:OrderCartCommand.stateinput field type changed fromReferenceInputtoResourceIdentifierInput.
- [GraphQL API] Changed the
OrderQuoteCommandtype:OrderQuoteCommand.stateinput field type changed fromReferenceInputtoResourceIdentifierInput.
- [GraphQL API] Changed the
SetPaymentCustomertype:SetPaymentCustomer.customerinput field type changed fromReferenceInputtoResourceIdentifierInput
Added 'product' field to ProductVariantPatch
product field on ProductVariantPatch. This field allows you to reference the Product which contains the Product Variant, and batches import operations to help prevent concurrency errors.Changes:
- [Import API] Added the
productfield to [ProductVariantPatch]((/../api/import-export/import-resources#productvariantpatch).
Product Selections of mode Exclusion achieved general availability status
variantExclusionfield on ProductSelectionAssignment, on AssignedProductSelection, and on AssignedProductReference for Product Selections withIndividualExclusionProductSelectionMode.- ProductVariantExclusion type.
- Exclude Product and Set Variant Exclusion update actions.
- Product Selection Product Excluded and Product Selection Variant Exclusion Changed Messages.
Added support for discounting the Cart total
Changes:
- [API] Added
discountOnTotalPricefield to Cart and Order. - [API] Added DiscountOnTotalPrice and DiscountedTotalPricePortion to the Carts API.
- [API] Added CartDiscountTotalPriceTarget type to the Cart Discounts API.
- [GraphQL API] Added the following types to the GraphQL schema:
DiscountOnTotalPrice,DiscountedTotalPricePortion,CartDiscountTotalPriceTarget. - [GraphQL API] Changed the
CartDiscountTargetInputtype:- Input field
totalPricewas added toCartDiscountTargetInputtype
- Input field
- [GraphQL API] Changed the
CartandOrdertype:- Added the
discountOnTotalPricefield to theCartandOrdertype.
- Added the
Introduced Buyer Approval Flows in beta
With the help of Buyer Approval Flows, you can control each step of the Order approval process, based on the requirements of your organization.
Changes:
- [API] Added Approval Rules and Approval Flows APIs.
- [API] Added
ApprovalFlowApprovedMessage,ApprovalFlowCompletedMessage,ApprovalFlowCreatedMessage,ApprovalFlowRejectedMessageMessages. - [API] Added
ApprovalRuleApproversSetMessage,ApprovalRuleCreatedMessage,ApprovalRuleDescriptionSetMessage,ApprovalRuleKeySetMessage,ApprovalRuleNameSetMessage,ApprovalRulePredicateSetMessage,ApprovalRuleRequestersSetMessage,ApprovalRuleStatusSetMessageMessages. - [API] Added
CreateApprovalRules,UpdateApprovalRules, andUpdateApprovalFlowsPermissions. - [GraphQL API] Changed the
Permissiontype:- Enum values
CreateApprovalRules,UpdateApprovalRulesandUpdateApprovalFlowswere added to enumPermission.
- Enum values
Added Messages for changes on Custom Fields and Types on Customer Groups
Changes:
- [API] Added CustomerGroupCustomFieldAdded Message.
- [API] Added CustomerGroupCustomFieldChanged Message.
- [API] Added CustomerGroupCustomFieldRemoved Message.
- [API] Added CustomerGroupCustomTypeSet Message.
- [API] Added CustomerGroupCustomTypeRemoved Message.
- [GraphQL API] Added the following types to the GraphQL schema:
CustomerGroupCustomFieldAdded,CustomerGroupCustomFieldChanged,CustomerGroupCustomFieldRemoved,CustomerGroupCustomTypeRemoved,CustomerGroupCustomTypeSet.
Get ProductProjection in Store endpoints achieved general availability status
Audit Log now identifies changes linked to a specific Business Unit for Orders, Quote Requests, and Quotes.
businessUnit query parameter to the Query Records endpoint. This allows you to filter Records by key for three specific resource types: orders, quote-requests, and quotes.Changes:
- [API] Added query parameter
businessUnitto the Query Records endpoint. - [API] Added
businessUnitfield to Record. - [GraphQL API] Added
KeyReferencetype. - [GraphQL API] Changed the
ChangeHistorytype:- Added
businessUnitfield toChangeHistory.
- Added
- [GraphQL API] Added
businessUnitquery parameter fororders,order,quotes,quote,quoteRequests,quoteRequestqueries.
Added Cart Predicate functions 'shippingInfoExists' and 'forAllShippingInfos'
shippingInfoExists and forAllShippingInfos functions to Cart Predicates you can now construct predicates that match against ShippingInfo on Carts with multiple Shipping Methods.Changes:
- [API] Added functions
shippingInfoExistsandforAllShippingInfosto Cart Predicates.
Added Messages for changes on Custom Fields and Types on Business Units
Changes:
- [API] Added BusinessUnitCustomFieldAdded Message.
- [API] Added BusinessUnitCustomFieldChanged Message.
- [API] Added BusinessUnitCustomFieldRemoved Message.
- [API] Added BusinessUnitCustomTypeSet Message.
- [API] Added BusinessUnitCustomTypeRemoved Message.
- [API] Added BusinessUnitAddressCustomFieldAdded Message.
- [API] Added BusinessUnitAddressCustomFieldChanged Message.
- [API] Added BusinessUnitAddressCustomFieldRemoved Message.
- [API] Added BusinessUnitAddressCustomTypeSet Message.
- [API] Added BusinessUnitAddressCustomTypeRemoved Message.
- [GraphQL API] Added the following types to the GraphQL schema:
BusinessUnitAddressCustomFieldAdded,BusinessUnitAddressCustomFieldChanged,BusinessUnitAddressCustomFieldRemoved,BusinessUnitAddressCustomTypeRemoved,BusinessUnitAddressCustomTypeSet,BusinessUnitCustomFieldAdded,BusinessUnitCustomFieldChanged,BusinessUnitCustomFieldRemoved,BusinessUnitCustomTypeRemoved,BusinessUnitCustomTypeSet.
Added Messages for changes on Custom Fields and Types on Customers and Customer Addresses
Changes:
- [API] Added Customer Custom Field Added Message.
- [API] Added Customer Custom Field Changed Message.
- [API] Added Customer Custom Field Removed Message.
- [API] Added Customer Custom Type Set Message.
- [API] Added Customer Custom Type Removed Message.
- [API] Added Customer Address Custom Field Added Message.
- [API] Added Customer Address Custom Field Changed Message.
- [API] Added Customer Address Custom Field Removed Message.
- [API] Added Customer Address Custom Type Set Message.
- [API] Added Customer Address Custom Type Removed Message.
- [GraphQL API] Added the following types to the GraphQL schema:
CustomerCustomFieldAdded,CustomerCustomFieldChanged,CustomerCustomFieldRemoved,CustomerCustomTypeSet,CustomerCustomTypeRemoved,CustomerAddressCustomFieldAdded,CustomerAddressCustomFieldChanged,CustomerAddressCustomFieldRemoved,CustomerAddressCustomTypeSet,CustomerAddressCustomTypeRemoved.
Added support for creating and deleting staged values in Standalone Prices
You can now create staged values while creating Standalone Prices. Previously, you could only set staged values on existing Standalone Prices after they have been created. Additionally, you can now delete staged values in Standalone Prices. Previously, you could only delete staged values by applying the staged changes to the Standalone Price, or by deleting the respective Standalone Price.
Changes:
- [API] Added
stagedfield to StandalonePriceDraft. - [API] Added StagedPriceDraft type to the Standalone Prices API.
- [API] Added Remove Staged Values update action to the Standalone Prices API.
- [API] Added
StandalonePriceStagedChangesRemovedMessage. - [GraphQL API] Added the following types to the GraphQL schema:
StagedPriceDraft,RemoveStagedChanges,StandalonePriceStagedChangesRemoved. - [GraphQL API] Changed the
CreateStandalonePricetype:- Added the
stagedfield to theStandalonePriceUpdateActiontype.
- Added the
- [GraphQL API] Changed the
StandalonePriceUpdateActiontype:- Input field
removeStagedChangeswas added toStandalonePriceUpdateActiontype.
- Input field
Quotes achieved general availability status
- Creating Quote Requests.
- Creating Staged Quotes with the ability to modify discounts, product quantity, expiration date, and add a note to the Buyer.
- Creating a Quote from a Staged Quote as the offer the Seller makes to the Buyer.
- Creating an Order from a Quote.
- Renegotiation of a Quote between the Buyer and Seller.
Failed value from the QuoteState and MyQuoteState enums, as it is an unused value that the API does not return.Changes:
- [API] Removed
Failedvalue from QuoteState enum. - [API] Removed
Failedvalue from MyQuoteState enum. - [GraphQL API] Changed the
QuoteStatetype:- Enum value
Failedwas removed from enumQuoteState
- Enum value
- [GraphQL API] Changed the
MyQuoteStatetype:- Enum value
Failedwas removed from enumMyQuoteState
- Enum value
Added 'perMethodExternalTaxRate' field to LineItemDraft
perMethodExternalTaxRate on LineItemDraft, you can now set individual external Tax Rates for multiple Shipping Methods within a Line Item. Previously, you had to issue the Set LineItem Tax Rate update action for each Shipping Method.Changes:
- [API] Added the
perMethodExternalTaxRatefield to LineItemDraft. - [API] Added the
MethodExternalTaxRateDrafttype to the Carts API. - [GraphQL API] Added the following types to the GraphQL schema:
MethodExternalTaxRateDraft,MethodExternalTaxRateDraftOutput. - [GraphQL API] Changed the
LineItemDraftOutputtype:- Added the
perMethodExternalTaxRatefield to theLineItemDraftOutputtype.
- Added the
- [GraphQL API] Changed the
AddStagedOrderLineItemtype:- Input field
perMethodExternalTaxRatewas added toAddStagedOrderLineItemtype.
- Input field
- [GraphQL API] Changed the
AddCartLineItemtype:- Input field
perMethodExternalTaxRatewas added toAddCartLineItemtype.
- Input field
Added GraphQL support for Messages on QuoteRequests, StagedQuotes, and Quotes
Changes:
- [API] added QuoteRenegotiationRequested Message.
- [GraphQL API] Added the following types to the GraphQL schema:
QuoteCreated,QuoteCustomerChanged,QuoteDeleted,QuoteRenegotiationRequested,QuoteRequestCreated,QuoteRequestCustomerChanged,QuoteRequestDeleted,QuoteRequestStateChanged,QuoteRequestStateTransition,QuoteStateChanged,QuoteStateTransition,StagedQuoteCreated,StagedQuoteDeleted,StagedQuoteSellerCommentSet,StagedQuoteStateChanged,StagedQuoteStateTransition,StagedQuoteValidToSet. - [GraphQL API] Changed the
Quotetype:- Added the
customerGroupfield to theQuotetype. - Added the
customerGroupReffield to theQuotetype.
- Added the
- [GraphQL API] Changed the
QuoteRequesttype:- Added the
customerGroupfield to theQuoteRequesttype. - Added the
customerGroupReffield to theQuoteRequesttype.
- Added the
Added GraphQL support for querying Quotes and Quote Requests as an Associate
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
QuoteQueryInterface,QuoteRequestQueryInterface. - [GraphQL API] Changed the
AsAssociatetype:AsAssociateobject type now implementsQuoteRequestQueryInterfaceinterfaceAsAssociateobject type now implementsQuoteQueryInterfaceinterface
Business Units achieved general availability status
- Creating, managing, and querying Business Units.
- Linking Carts, Orders, Quote Requests, Staged Quotes, and Quotes to Business Units.
- Creating Associate Roles with granular permissions.
- Assigning Associate Roles to Associates in Business Units.
- Validating that an Associate has sufficient Permissions on a given resource with associate endpoints.
Audit Log now identifies changes made by Associates on Business Units, Orders, Quote Requests, and Quotes.
associateId query parameter to the Query Records endpoint. This allows you to filter Records by key for the following resource types: business-units, orders, quote-requests, and quotes.Changes:
- [API] Added query parameter
associateIdto the Query Records endpoint. - [API] Added
associatefield to themodifiedByproperty of Record. - [API] Updated enum
typefield ofmodifiedByproperty of Record to includeassociateoption. - [GraphQL API] Changed the Query type:
- Added the
associateIdproperty to the following fields:businessUnits,businessUnit,orders,order,quotes,quote,quoteRequests,quoteRequest.
- Added the
- [GraphQL API] Changed the
ChangeHistorytype:- Added
associatefield tomodifiedByproperty ofChangeHistory.
- Added
- [GraphQL API] Changed the
ModifiedByTypeenum:- Added
associateoption.
- Added
Introduced 'cart' field on QuoteRequest
cart field on QuoteRequest, you can now know the Cart from which a Quote was requested.Changes:
- [API] Added the
cartfield to QuoteRequest. - [GraphQL API] Changed the
QuoteRequesttype:- Added the
cartReffield to theQuoteRequesttype.
- Added the
Introduced 'key' field on ShoppingListLineItem and TextLineItem
key field on ShoppingListLineItem, ShoppingListLineItemDraft, TextLineItem, and TextLineItemDraft. We also added lineItemKey and textLineItemKey on update actions referencing Shopping List Line Items and Text Line Items. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.Changes:
- [API] Added
keyto the following Shopping List types: - [API] Added the optional
keyfield on the following update actions on Shopping Lists and My Shopping Lists: - [API] Added
lineItemKeyand madelineItemIdoptional on the following update actions on ShoppingLists and My Shopping Lists:- Change ShoppingListLineItem Quantity, Remove ShoppingListLineItem, Set ShoppingListLineItem Custom Type, Set ShoppingListLineItem CustomField, Set TextLineItem Description, Set TextLineItem Custom Type, Set TextLineItem Custom Field, Change TextLineItem Name, Change TextLineItem Quantity, and Remove TextLine Item.
- [GraphQL API] Changed the
SetShoppingListTextLineItemDescriptiontype:SetShoppingListTextLineItemDescription.textLineItemIdinput field type changed fromString!toString- Input field
textLineItemKeywas added toSetShoppingListTextLineItemDescriptiontype
Removed deprecated ProductSelectionType
type field from ProductSelection and its draft, alongside the deprecated ProductSelectionType. The feature has been replaced by ProductSelectionMode kept in the mode field of the ProductSelection.Changes:
- [API] Removed the
typefield from Product Selection and ProductSelectionDraft. - [API] Removed
ProductSelectionTypeEnum,IndividualProductSelectionType, andIndividualExclusionProductSelectionTypefrom the Product Selections API. - [GraphQL API] Removed the
typefield from theProductSelectiontype. - [GraphQL API] Removed the input field
typefrom theCreateProductSelectionDrafttype.
Added 'taxedPricePortions' field to CustomLineItem
taxedPricePortions field on CustomLineItem to add additional support for Carts containing multiple Shipping Methods.Changes:
- [API] Added the
taxedPricePortionsfield to CustomLineItem. - [API] Added the
shippingKeyfield to Set CustomLineItem TaxAmount and Set CustomLineItem TaxRate update actions on Carts. - [API] Added the
shippingKeyfield to Set CustomLineItem TaxAmount and Set CustomLineItem TaxRate update actions on Order Edits. - [GraphQL API] Changed the
CustomLineItemtype:- Added the
taxedPricePortionsfield to theCustomLineItemtype.
- Added the
- [GraphQL API] Changed the
SetCartCustomLineItemTaxAmounttype:- Added the
shippingKeyfield to theSetCartCustomLineItemTaxAmounttype.
- Added the
- [GraphQL API] Changed the
SetCartCustomLineItemTaxRatetype:- Added the
shippingKeyfield to theSetCartCustomLineItemTaxRatetype.
- Added the
- [GraphQL API] Changed the
SetStagedOrderCustomLineItemTaxAmounttype:- Added the
shippingKeyfield to theSetStagedOrderCustomLineItemTaxAmounttype.
- Added the
- [GraphQL API] Changed the
SetStagedOrderCustomLineItemTaxRatetype:- Added the
shippingKeyfield to theSetStagedOrderCustomLineItemTaxRatetype.
- Added the
Removed deprecated roles on Associates in Business Units
Buyer and Admin values as well as the roles field on Associate and AssociateDraft.associateRoleAssignments property to assign Associate Roles to Associates.Changes:
- [API] Removed
rolesfrom Associate and AssociateDraft. - [API] Removed AssociateRole enum with
BuyerandAdminvalues.
Added Messages for changes on Custom Fields and Types on Orders
Changes:
- [API] Added OrderCustomFieldAdded Message.
- [API] Added OrderCustomFieldChanged Message.
- [API] Added OrderCustomFieldRemoved Message.
- [API] Added OrderCustomTypeSet Message.
- [API] Added OrderCustomTypeRemoved Message.
- [GraphQL API] Added the following types to the GraphQL schema:
OrderCustomFieldAdded,OrderCustomFieldChanged,OrderCustomFieldRemoved,OrderCustomTypeRemoved,OrderCustomTypeSet.
Changed EmbeddedPriceDraftImport key field to be required
key in EmbeddedPriceDraftImport when importing Embedded Prices using the Import Product drafts endpoint.Changes:
- [API] Changed
keyof EmbeddedPriceDraftImport to be required on the Import Product drafts endpoint.
Introduced 'key' field on Return Items
key field on LineItemReturnItem, CustomLineItemReturnItem, and ReturnItemDraft. We also introduced returnItemKey on update actions referencing Return Items for Orders and Order Edits. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.Changes:
- [API] Added
keyto the following Order types: - [API] Added
returnItemKeyand madereturnItemIdoptional on the following update actions on Orders: - [API] Added
returnItemKeyand madereturnItemIdoptional on the following update actions on Orders Edits: - [GraphQL API] Changed the
SetStagedOrderReturnPaymentStateOutputtype:- Added the
returnItemKeyfield to theSetStagedOrderReturnPaymentStateOutputtype. SetStagedOrderReturnPaymentStateOutput.returnItemIdfield type changed fromString!toString
- Added the
- [GraphQL API] Changed the
SetStagedOrderReturnItemCustomTypetype:- Input field
returnItemKeywas added toSetStagedOrderReturnItemCustomTypetype SetStagedOrderReturnItemCustomType.returnItemIdinput field type changed fromString!toString
- Input field
Added support for high precision money on fixed price Cart Discounts
With this enhancement, fixed price Cart Discounts now support money values in high precision to support your business needs. Previously, you could use money values in cent precision only for fixed price Cart Discounts.
Changes:
- [API] Changed the type of
moneyfield on CartDiscountValueFixed from CentPrecisionMoney to TypedMoney. - [API] Changed the type of
moneyfield on CartDiscountValueFixedDraft from Money to TypedMoneyDraft. - [GraphQL API] Added the following types to the GraphQL schema:
CartDiscountValueBaseMoneyInput. - [GraphQL API] Changed the
FixedPriceDiscountValuetype:FixedPriceDiscountValue.moneyfield type changed from[Money!]!to[BaseMoney!]!
- [GraphQL API] Changed the
FixedPriceDiscountValueInputtype:FixedPriceDiscountValueInput.moneyinput field type changed from[MoneyInput!]!to[CartDiscountValueBaseMoneyInput!]!
Added Get QuoteRequest endpoints to My Quote Requests
Buyers can now retrieve QuoteRequests by ID or key using the My Quote Requests API.
Changes:
- [API] Added Get QuoteRequest by ID endpoint.
- [API] Added Get QuoteRequest by Key endpoint.
Introduced 'customLineItemKey' field on Orders Messages and update actions
customLineItemKey on Order Messages referencing Custom Line Items. The customLineItemKey field is now also available on Transition LineItem State and Import LineItem State update actions on Orders and Order Edits. In addition, we introduced the key field on CustomLineItemImportDraft and LineItemImportDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.Changes:
- [API] Added
customLineItemKeyto the following Order Messages:- CustomLineItemStateTransition Message, OrderCustomLineItemDiscountSet Message, OrderCustomLineItemQuantityChanged Message, and OrderCustomLineItemRemoved Message.
- [API] Added
keyto the following Order Import types: - [API] Added
customLineItemKeyand madecustomerLineItemIdoptional on the following update actions on Orders: - [API] Added
customLineItemKeyand madecustomerLineItemIdoptional on the following update actions on Order Edits: - [GraphQL API] Changed the
TransitionStagedOrderCustomLineItemStateOutputtype:TransitionStagedOrderCustomLineItemStateOutput.customLineItemIdfield type changed fromString!toString
Addresses field is now optional on Customer Import
addresses field in CustomerImport on the Import Customers endpoint has changed from required to optional. This change aligns the Import API with the HTTP API and makes it easier for users to create and update Customers with the Import API.Audit Log now tracks changes on Associate Roles
SetNameChange and introducing SetLocalizedNameChange.From 18 October 2023:
SetNameChangefieldspreviousValueandnextValuewill change to typeString.- The following update actions will trigger
SetLocalizedNameChangeinstead ofSetNameChange:- Set Name on Discount Codes.
- Set State Name on States.
- Set Name on Stores.
Changes:
- [API] Added the following Change Types:
- Associate Roles: ChangeBuyerAssignableChange, SetPermissionsChange.
- Business Units: AddInheritedAssociateChange, ChangeInheritedAssociateChange, RemoveInheritedAssociateChange.
- [API] Added Label
AssociateRoleLabel. - [API] Added
associate-roleto ChangeHistoryResourceType enum. - [GraphQL API] Added the following types to the GraphQL schema:
AssociateRoleChangeInput,AssociateRoleLabel.
Added ChangeSubscriptions for Associate Roles
Changes:
- [API] Added the
associate-rolestype to ChangeSubscriptionResourceTypeId.
Enhanced Client Logging to include changes of Associates
createdBy and lastModifiedBy properties of affected resources now contain the associate field, referencing the Customer who performed the change. This brings greater visibility into the operations Associates perform within a Business Unit.- [API] Added
associateto CreatedBy. - [API] Added
associateto LastModifiedBy. - [GraphQL API] Changed the
Initiatortype:- Added the
associateReffield to theInitiatortype.
- Added the
Introduced 'lineItemKey' field on Messages related to Order Line Items
lineItemKey on Order Messages referencing Line Items. The lineItemKey field is now also available on Transition LineItem State and Import LineItem State update actions on Orders and Order Edits. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.Changes:
- [API] Added
lineItemKeyand madelineItemIdoptional on the following update actions on Orders: - [API] Added
lineItemKeyand madelineItemIdoptional on the following update actions on Order Edits: - [API] Added
lineItemKeyto the following Order Messages:- LineItemStateTransition Message, OrderLineItemRemoved Message, OrderLineItemDistributionChannelSet Message, and OrderLineItemDiscountSet Message.
- [GraphQL API] Changed the
ImportStagedOrderLineItemStatetype:ImportStagedOrderLineItemState.lineItemIdinput field type changed fromString!toString- Input field
lineItemKeywas added toImportStagedOrderLineItemStatetype
Introduced 'customLineItemKey' field on update actions related to CustomLineItem
customLineItemKey field on update actions referencing Custom Line Items on Carts, Orders, and Order Edits. The customLineItemId field is now optional on the affected update actions. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.Changes:
- [API] Added
customLineItemKeyand madecustomLineItemIdoptional on the following update actions on Carts:- Remove CustomLineItem, Change CustomLineItem Quantity, Set CustomLineItem TaxRate, Set CustomLineItem TaxAmount, Change CustomLineItem Price Mode, Change CustomLineItem Money, Set CustomLineItem ShippingDetails, Apply DeltaToCustomLineItemShippingDetailsTargets, Set CustomLineItem Custom Type, Set CustomLineItem CustomField.
- [API] Added
customLineItemKeyand madecustomLineItemIdoptional on the following update actions on Orders: - [API] Added
customLineItemKeyand madecustomLineItemIdoptional on the following update actions on Order Edits: - [GraphQL API] Changed the
RemoveStagedOrderCustomLineItemOutputtype:RemoveStagedOrderCustomLineItemOutput.customLineItemIdfield type changed fromString!toString- Added the
customLineItemKeyfield to theRemoveStagedOrderCustomLineItemOutputtype.
Extended the date when the EmbeddedPriceDraftImport key field changes from optional to required
key field on EmbeddedPriceDraftImport is changing from optional to required.Introduced Store-specific Cart Discounts in beta
You can restrict the permissions of API Clients to view and manage Cart Discounts in a specific Store only. Previously, such permissions could only be managed globally for all Cart Discounts in a Project at the same time. However, the permissions set are not exclusive in the following instances:
- Cart Discounts requiring a Discount Code can be linked to a Discount Code created by any user.
- When using Custom Fields, if any Custom Field references Cart Discounts, all Cart Discounts will be visible.
Introduced 'key' field on CustomLineItem
key field on CustomLineItem and CustomLineItemDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.Changes:
- [API] Added the
keyfield to CustomLineItem and CustomLineItemDraft. - [API] Added
keyfield to Add CustomLineItem update action on Carts. - [API] Added
keyfield to Add CustomLineItem update action on Order Edits. - [GraphQL API] Changed the
CustomLineItemDraftOutputtype:- Added the
keyfield to theCustomLineItemDraftOutputtype.
- Added the
- [GraphQL API] Changed the
AddCartCustomLineItemtype:- Input field
keywas added toAddCartCustomLineItemtype.
- Input field
- [GraphQL API] Changed the
AddStagedOrderCustomLineItemtype:- Input field
keywas added toAddStagedOrderCustomLineItemtype.
- Input field
- [GraphQL API] Changed the
CustomLineItemtype:- Added the
keyfield to theCustomLineItemtype.
- Added the
- [GraphQL API] Changed the
CustomLineItemDrafttype:- Input field
keywas added toCustomLineItemDrafttype.
- Input field
Audit Log AWS Regions achieved general availability status
Increased the limit of Associates in a Business Unit to 2000
Removed deprecated names of Product Variant Selection types
type field of ProductVariantSelection.
To assign Variants to Product Selections, use the IncludeOnly and IncludeAllExcept types instead.Changes:
- [API] Removed
inclusionandexclusionvalues from thetypefield of ProductVariantSelection. - [GraphQL API] Removed the following types on the GraphQL schema:
ProductVariantSelectionExclusion,ProductVariantSelectionInclusion.
Audit Log now tracks changes on Business Units
resourceKey query parameter to the Query Records endpoint. This allows you to filter Records by key for three specific resource types: business-units, products, and stores.Changes:
- [API] Added the following Change Types:
- Business Units: AddAssociateChange, ChangeAssociateChange, ChangeAssociateModeChange, ChangeParentUnitChange, ChangeStatusChange, RemoveAssociateChange, SetAddressCustomFieldChange, SetAddressCustomTypeChange, SetContactEmailChange, SetStoreModeChange.
- Stores: AddProductSelectionChange, ChangeProductSelectionActiveChange, RemoveProductSelectionChange.
- Product Selections: AddProductChange, SetVariantSelectionChange.
- Quotes: RequestQuoteRenegotiationChange.
- [API] Added Label
BusinessUnitLabel. - [API] Added query parameter
resourceKeyto the Query Records endpoint. - [API] Added
keyfield toresourceproperty of Record. - [API] Added
business-unitto ChangeHistoryResourceType enum. - [GraphQL API] Added the following types to the GraphQL schema:
BusinessUnitChangeInput,ResourceIdentifier,BusinessUnitLabel. - [GraphQL API] Changed the
ResourceTypestype:- Added
BusinessUnitto the enumResourceTypes.
- Added
- [GraphQL API] Changed the Query type:
- Added the
businessUnitsfield to the Query type. - Added the
businessUnitfield to the Query type. - Added the
resourceKeyproperty to theproductsfield. - Added the
resourceKeyproperty to thestoresfield.
- Added the
- [GraphQL API] Changed the
ChangeHistorytype:- Added
keyfield toresourceproperty ofChangeHistory.
- Added
The following change was introduced in terms of GraphQL SDL:
Staged and active Standalone Prices achieved general availability status
staged and active fields on StandalonePrice out of beta. The status of the following features has been changed to general availability:stagedandactivefields on StandalonePrice.activefield on StandalonePriceDraft.stagedfield on Change Value update action.- Apply Staged Changes and Change Active update actions.
- Standalone Price Value Changed, Standalone Price Active Changed, and Standalone Price Staged Changes Applied Messages.
Added 'lineItemKey' to Cart, Order, and Order Edit update actions
lineItemKey field on update actions referencing Line Items on Carts, Orders, and Order Edits. The lineItemId field is now optional on the affected update actions. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.Changes:
- [API] Added
lineItemKeyand madelineItemIdoptional on the following update actions on Carts:- Remove LineItem, Change LineItem Quantity, Set LineItem TaxRate, Set LineItem TaxAmount, Set LineItem Price, Set LineItem TotalPrice, Set LineItem DistributionChannel, Set LineItem SupplyChannel, Set LineItem ShippingDetails, Apply DeltaToLineItemShippingDetailsTargets, Set LineItem Custom Type, Set LineItem CustomField, and Set LineItem InventoryMode.
- [API] Added
lineItemKeyand madelineItemIdoptional on the following update actions on My Carts: - [API] Added
lineItemKeyand madelineItemIdoptional on the following update actions on Orders: - [API] Added
lineItemKeyand madelineItemIdoptional on the following update actions on Order Edits: - [GraphQL API] Changed the
SetCartLineItemTaxAmounttype:SetCartLineItemTaxAmount.lineItemIdinput field type changed fromString!toString- Input field
lineItemKeywas added toSetCartLineItemTaxAmounttype
- [GraphQL API] Changed the
SetStagedOrderLineItemCustomTypetype:- Input field
lineItemKeywas added toSetStagedOrderLineItemCustomTypetype SetStagedOrderLineItemCustomType.lineItemIdinput field type changed fromString!toString
- Input field
Fixed 'InventoryEntryCreated' type in the GraphQL API
InventoryEntryCreated type in the GraphQL API. The type of the field inventoryEntry was incorrectly marked as InventoryEntryCreatedContent! instead of InventoryEntry!. This was not in line with the documentation of the InventoryEntryCreated Message and caused the SDKs to not work correctly.InventoryEntryCreatedContent and MessageId from the GraphQL schema since they are no longer required.Changes:
- [GraphQL API] Removed the following types from the GraphQL schema:
InventoryEntryCreatedContent,MessageId. - [GraphQL API] Changed the
InventoryEntryCreatedtype:InventoryEntryCreated.inventoryEntryfield type changed fromInventoryEntryCreatedContent!toInventoryEntry!
Added 'perMethodTaxRate' field to CustomLineItems
perMethodTaxRate field on CustomLineItems to the GraphQL API.Changes:
- [GraphQL API] Added the
perMethodTaxRatefield to theCustomLineItemtype.
Added 'sku' field to Standalone Price Deleted Message
sku, which helps you identify the associated SKU when you delete a Standalone Price.Changes:
- [API] Added field
skuto Standalone Price Deleted Message. - [GraphQL API] Changed the
StandalonePriceDeletedtype:- Added the
skufield to theStandalonePriceDeletedtype.
- Added the
Added update actions to set Price tiers on Standalone Prices
Changes:
- [API] Added Add Price Tier, Remove Price Tier, and Set Price Tiers update actions to the Standalone Prices API.
- [API] Added Standalone Price Tier Added, Standalone Price Tier Removed, and Standalone Price Tiers Set Messages.
- [GraphQL API] Added the following types to the GraphQL schema:
AddStandalonePriceTier,RemoveStandalonePriceTier,SetStandalonePriceTiers,StandalonePriceTierAdded,StandalonePriceTierRemoved,StandalonePriceTiersSet - [GraphQL API] Changed the
StandalonePriceUpdateActiontype:- Input field
removePriceTierwas added toStandalonePriceUpdateActiontype - Input field
addPriceTierwas added toStandalonePriceUpdateActiontype - Input field
setPriceTierswas added toStandalonePriceUpdateActiontype
- Input field
Removed deprecated fields from Remove Price update action
variantId, sku and price fields from the Remove Price update action on the Products API.
The Price to be removed is now identified by the priceId field, respectively by RemoveProductPrice.priceId in the GraphQL API.Added update actions to set validity dates on Standalone Prices
Changes:
- [API] Added Set Valid From, Set Valid Until, and Set Valid From and Until update actions to the Standalone Prices API.
- [API] Added StandalonePriceValidFromSet, StandalonePriceValidUntilSet, and StandalonePriceValidFromAndUntilSet Messages.
- [GraphQL API] Added the following types to the GraphQL schema:
SetStandalonePriceValidFrom,SetStandalonePriceValidFromAndUntil,SetStandalonePriceValidUntil,StandalonePriceValidFromAndUntilSet,StandalonePriceValidFromSet,StandalonePriceValidUntilSet.
Added 'key' to Cart Line Item
key field on LineItem and LineItemDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.Changes:
- [GraphQL API] Changed the
AddStagedOrderLineItemtype:- Input field
keywas added toAddStagedOrderLineItemtype
- Input field
- [GraphQL API] Changed the
MyLineItemDrafttype:- Input field
keywas added toMyLineItemDrafttype
- Input field
- [GraphQL API] Changed the
LineItemDrafttype:- Input field
keywas added toLineItemDrafttype
- Input field
- [GraphQL API] Changed the
AddCartLineItemtype:- Input field
keywas added toAddCartLineItemtype
- Input field
- [GraphQL API] Changed the
LineItemtype:- Added the
keyfield to theLineItemtype.
- Added the
- [GraphQL API] Changed the
LineItemDraftOutputtype:- Added the
keyfield to theLineItemDraftOutputtype.
- Added the
- [GraphQL API] Changed the
AddMyCartLineItemtype:- Input field
keywas added toAddMyCartLineItemtype
- Input field
Confluent Cloud added as Subscription destination
With the introduction of Confluent Cloud support, customers can now natively use Apache Kafka across their preferred cloud platforms, whether it's Google Cloud, Azure, or AWS. This integration not only eliminates the necessity for intermediary gateways to consume messages from Kafka but also reduces the associated resources and costs.
Changes:
- [API] Added ConfluentCloudDestination to Subscriptions.
- [GraphQL API] Added the following types to the GraphQL schema:
ConfluentCloudDestination,ConfluentCloudDestinationInput - [GraphQL API] Changed the
DestinationInputtype:- Input field
ConfluentCloudwas added toDestinationInputtype
- Input field
Added 'business-unit' and 'associate-role' to CustomFieldReferenceValue
associate-role and business-unit values are supported on all customizable data types providing full flexibility in extending B2B features.Changes:
- [API] Added
business-unitandassociate-roleto CustomFieldReferenceValue.
Introduced GraphQL support for creating Associates using My Business Units
UpdateAssociates Permission to create a new Associate, assigning them roles specific to the given Business Unit.Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
SignUpInMyBusinessUnitDraft. - [GraphQL API] Changed the
Mutationtype:- Added the
signUpInMyBusinessUnitfield to theMutationtype.
- Added the
Introduced 'key' field on Parcel
key field on Parcel and ParcelDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.Changes:
- [API] Added the
keyfield to Parcel and ParcelDraft. - [API] Added the
parcelKeyfield and changed theparcelIdfield to be optional on the following Order and StagedOrderUpdateAction update actions: - [API] Added the
parcelKeyfield to the Add Parcel update action on Order and StagedOrderUpdateAction. - [GraphQL API] Changed the
Parceltype:- Added the
keyfield to theParceltype.
- Added the
- [GraphQL API] Changed the
ParcelDrafttype:- Input field
keywas added toParcelDrafttype
- Input field
- [GraphQL API] Changed the
SetStagedOrderParcelCustomTypeOutputtype:- Added the
parcelKeyfield to theSetStagedOrderParcelCustomTypeOutputtype. SetStagedOrderParcelCustomTypeOutput.parcelIdfield type changed fromString!toString
- Added the
- [GraphQL API] Changed the
SetOrderParcelMeasurementstype:SetOrderParcelMeasurements.parcelIdinput field type changed fromString!toString- Input field
parcelKeywas added toSetOrderParcelMeasurementstype
- [GraphQL API] Changed the
SetStagedOrderParcelCustomTypetype:SetStagedOrderParcelCustomType.parcelIdinput field type changed fromString!toString- Input field
parcelKeywas added toSetStagedOrderParcelCustomTypetype
- [GraphQL API] Changed the
SetStagedOrderParcelTrackingDatatype:SetStagedOrderParcelTrackingData.parcelIdinput field type changed fromString!toString- Input field
parcelKeywas added toSetStagedOrderParcelTrackingDatatype
- [GraphQL API] Changed the
SetStagedOrderParcelCustomFieldtype:SetStagedOrderParcelCustomField.parcelIdinput field type changed fromString!toString- Input field
parcelKeywas added toSetStagedOrderParcelCustomFieldtype
- [GraphQL API] Changed the
SetStagedOrderParcelMeasurementstype:- Input field
parcelKeywas added toSetStagedOrderParcelMeasurementstype SetStagedOrderParcelMeasurements.parcelIdinput field type changed fromString!toString
- Input field
- [GraphQL API] Changed the
AddOrderParcelToDeliverytype:- Input field
parcelKeywas added toAddOrderParcelToDeliverytype
- Input field
- [GraphQL API] Changed the
SetStagedOrderParcelTrackingDataOutputtype:SetStagedOrderParcelTrackingDataOutput.parcelIdfield type changed fromString!toString- Added the
parcelKeyfield to theSetStagedOrderParcelTrackingDataOutputtype.
- [GraphQL API] Changed the
SetStagedOrderParcelMeasurementsOutputtype:SetStagedOrderParcelMeasurementsOutput.parcelIdfield type changed fromString!toString- Added the
parcelKeyfield to theSetStagedOrderParcelMeasurementsOutputtype.
- [GraphQL API] Changed the
SetOrderParcelTrackingDatatype:SetOrderParcelTrackingData.parcelIdinput field type changed fromString!toString- Input field
parcelKeywas added toSetOrderParcelTrackingDatatype
- [GraphQL API] Changed the
RemoveOrderParcelFromDeliverytype:RemoveOrderParcelFromDelivery.parcelIdinput field type changed fromString!toString- Input field
parcelKeywas added toRemoveOrderParcelFromDeliverytype
- [GraphQL API] Changed the
ParcelDatatype:- Added the
keyfield to theParcelDatatype.
- Added the
- [GraphQL API] Changed the
AddStagedOrderParcelToDeliverytype:- Input field
parcelKeywas added toAddStagedOrderParcelToDeliverytype
- Input field
- [GraphQL API] Changed the
SetStagedOrderParcelItemstype:SetStagedOrderParcelItems.parcelIdinput field type changed fromString!toString- Input field
parcelKeywas added toSetStagedOrderParcelItemstype
- [GraphQL API] Changed the
SetOrderParcelCustomTypetype:SetOrderParcelCustomType.parcelIdinput field type changed fromString!toString- Input field
parcelKeywas added toSetOrderParcelCustomTypetype
- [GraphQL API] Changed the
ParcelDataDraftTypetype:- Input field
keywas added toParcelDataDraftTypetype
- Input field
- [GraphQL API] Changed the
SetStagedOrderParcelItemsOutputtype:SetStagedOrderParcelItemsOutput.parcelIdfield type changed fromString!toString- Added the
parcelKeyfield to theSetStagedOrderParcelItemsOutputtype.
- [GraphQL API] Changed the
RemoveStagedOrderParcelFromDeliveryOutputtype:- Added the
parcelKeyfield to theRemoveStagedOrderParcelFromDeliveryOutputtype. RemoveStagedOrderParcelFromDeliveryOutput.parcelIdfield type changed fromString!toString
- Added the
- [GraphQL API] Changed the
SetOrderParcelItemstype:- Input field
parcelKeywas added toSetOrderParcelItemstype SetOrderParcelItems.parcelIdinput field type changed fromString!toString
- Input field
- [GraphQL API] Changed the
SetOrderParcelCustomFieldtype:- Input field
parcelKeywas added toSetOrderParcelCustomFieldtype SetOrderParcelCustomField.parcelIdinput field type changed fromString!toString
- Input field
- [GraphQL API] Changed the
RemoveStagedOrderParcelFromDeliverytype:RemoveStagedOrderParcelFromDelivery.parcelIdinput field type changed fromString!toString- Input field
parcelKeywas added toRemoveStagedOrderParcelFromDeliverytype
- [GraphQL API] Changed the
SetStagedOrderParcelCustomFieldOutputtype:SetStagedOrderParcelCustomFieldOutput.parcelIdfield type changed fromString!toString- Added the
parcelKeyfield to theSetStagedOrderParcelCustomFieldOutputtype.
- [GraphQL API] Changed the
AddStagedOrderParcelToDeliveryOutputtype:- Added the
parcelKeyfield to theAddStagedOrderParcelToDeliveryOutputtype.
- Added the
Added update action for setting the InventoryMode of Line Items
Changes:
- [API] Added Set LineItem InventoryMode update action to the Carts API.
- [GraphQL API] Added the following types to the GraphQL schema:
SetCartLineItemInventoryMode. - [GraphQL API] Changed the
CartUpdateActiontype:- Input field
setLineItemInventoryModewas added toCartUpdateActiontype
- Input field
Added RenegotiationAddressed state to QuoteState
RenegotiationAddressed has been added to QuoteState. With this new state, Sellers can see Quotes where renegotiations requested by the respective buyer have been addressed.Changes:
- [API] Added
RenegotiationAddressedfield to QuoteState. - [GraphQL API] Changed the
QuoteStatetype:- Enum value
RenegotiationAddressedwas added to enumQuoteState
- Enum value
Countries on Stores achieved general availability status
- Adding a country to a Store.
- Removing a country from a Store.
- Setting the countries on a Store.
- The StoreCountriesChanged Message.
Added the MoneyOverflow error code
centAmount (applicable to all money types), as well as preciseAmount (for high precision money types) are represented as 64-bit integers. If a Money operation results in either object exceeding the 64-bit limit, the API returns a 400 Bad Request with the MoneyOverflow error code.Changes:
- [API] Added the MoneyOverflow error code.
Attribute Groups achieved general availability status
- Querying and managing Attribute Groups.
Direct Discounts achieved general availability status
Added support for updating a Customer on Quotes and Quote Requests
ReassignMyQuotes and ReassignOthersQuotes Permissions determine the ability to reassign a Quote within the context of a Business Unit. To enhance visibility and tracking, we have introduced two new Messages: QuoteRequestCustomerChanged and QuoteCustomerChanged. These Messages are triggered whenever a Quote or Quote Request's Customer is modified.These enhancements improve the management of B2B Quotes within Composable Commerce, ensuring that Quotes and Quote Requests remain connected to the appropriate Associates even during organizational changes.
Changes:
- [API] Added the Change Customer update action to Quote.
- [API] Added the Change Customer update action to Quote Requests.
- [API] Added
ReassignMyQuotesandReassignOthersQuotesPermissions. - [API] Added QuoteRequestCustomerChanged and QuoteCustomerChanged Messages.
- [GraphQL API] Added the following types to the GraphQL schema:
ChangeQuoteCustomer,ChangeQuoteRequestCustomer. - [GraphQL API] Changed the
Permissiontype:- Enum value
ReassignOthersQuoteswas added to enumPermission - Enum value
ReassignMyQuoteswas added to enumPermission
- Enum value
- [GraphQL API] Changed the
QuoteRequestUpdateActiontype:- Input field
changeCustomerwas added toQuoteRequestUpdateActiontype
- Input field
- [GraphQL API] Changed the
QuoteUpdateActiontype:- Input field
changeCustomerwas added toQuoteUpdateActiontype
- Input field
Added Replicate Cart in Business Unit endpoint
- [API] Added Replicate Cart in Business Unit as Associate endpoint.
- [GraphQL API] Changed the
Mutationtype:- Argument
asAssociatewas added toMutation.replicateCartfield
- Argument
Added support for external tax on multiple Shipping Methods
shippingKey when using the Set ShippingMethod TaxAmount and Set ShippingMethod TaxRate update actions for Carts and Order Edits.Changes:
-
[API] Added the
shippingKeyfield to the following update actions on Carts: -
[API] Added the
shippingKeyfield to the following update actions on Order Edits: -
[GraphQL API] Changed the
SetStagedOrderShippingMethodTaxRateOutputtype:- Added the
shippingKeyfield to theSetStagedOrderShippingMethodTaxRateOutputtype.
- Added the
-
[GraphQL API] Changed the
SetStagedOrderShippingMethodTaxAmounttype:- Input field
shippingKeywas added toSetStagedOrderShippingMethodTaxAmounttype
- Input field
-
[GraphQL API] Changed the
SetCartShippingMethodTaxRatetype:- Input field
shippingKeywas added toSetCartShippingMethodTaxRatetype
- Input field
-
[GraphQL API] Changed the
SetStagedOrderShippingMethodTaxRatetype:- Input field
shippingKeywas added toSetStagedOrderShippingMethodTaxRatetype
- Input field
-
[GraphQL API] Changed the
SetCartShippingMethodTaxAmounttype:- Input field
shippingKeywas added toSetCartShippingMethodTaxAmounttype
- Input field
-
[GraphQL API] Changed the
SetStagedOrderShippingMethodTaxAmountOutputtype:- Added the
shippingKeyfield to theSetStagedOrderShippingMethodTaxAmountOutputtype.
- Added the
commercetools Composable Commerce for China is now available on AWS Ningxia
commercetools Composable Commerce is now available in China on AWS Ningxia in addition to our existing Regions in North America, Europe, and Australia. The China Region is available as part of Composable Commerce for China. Please reach out to your commercetools contact person to learn more.
When configuring a Project in the China Region, note that external links (for example, URLs used for images, external OAuth, and API Extensions) may be blocked due to firewall restrictions.
Added observability to Composable Commerce SDKs
New Relic is an observability platform which monitors your application's performance. This integration helps you analyze your application to identify potential improvements for performance and user experience.
With this update, you can:
- Trace and profile application performance directly from the SDK.
- View and analyze your application's performance.
- Get real-time insights and alerts about your application's performance and issues.
Introduced 'key' field on Delivery
key field on Delivery and DeliveryDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.Changes:
-
[API] Added the
deliveryKeyfield to the following update actions on Orders: -
[API] Added the
deliveryKeyfield to the following update actions on Order Edits: -
[API] Changed the
deliveryIdfield to be optional on the following update actions on Orders: -
[API] Changed the
deliveryIdfield to be optional on the following update actions on Order Edits: -
[GraphQL API] Changed the
SetStagedOrderDeliveryCustomFieldtype:- Input field
deliveryKeywas added toSetStagedOrderDeliveryCustomFieldtype SetStagedOrderDeliveryCustomField.deliveryIdinput field type changed fromString!toString
- Input field
-
[GraphQL API] Changed the
AddStagedOrderDeliveryOutputtype:- Added the
deliveryKeyfield to theAddStagedOrderDeliveryOutputtype.
- Added the
-
[GraphQL API] Changed the
SetStagedOrderDeliveryAddressOutputtype:SetStagedOrderDeliveryAddressOutput.deliveryIdfield type changed fromString!toString- Added the
deliveryKeyfield to theSetStagedOrderDeliveryAddressOutputtype.
-
[GraphQL API] Changed the
Deliverytype:- Added the
keyfield to theDeliverytype.
- Added the
-
[GraphQL API] Changed the
SetStagedOrderDeliveryAddressCustomTypetype:- Input field
deliveryKeywas added toSetStagedOrderDeliveryAddressCustomTypetype SetStagedOrderDeliveryAddressCustomType.deliveryIdinput field type changed fromString!toString
- Input field
-
[GraphQL API] Changed the
AddStagedOrderDeliverytype:- Input field
deliveryKeywas added toAddStagedOrderDeliverytype
- Input field
-
[GraphQL API] Changed the
SetStagedOrderDeliveryItemsOutputtype:- Added the
deliveryKeyfield to theSetStagedOrderDeliveryItemsOutputtype. SetStagedOrderDeliveryItemsOutput.deliveryIdfield type changed fromString!toString
- Added the
-
[GraphQL API] Changed the
SetStagedOrderDeliveryAddresstype:- Input field
deliveryKeywas added toSetStagedOrderDeliveryAddresstype SetStagedOrderDeliveryAddress.deliveryIdinput field type changed fromString!toString
- Input field
-
[GraphQL API] Changed the
SetStagedOrderDeliveryAddressCustomTypeOutputtype:- Added the
deliveryKeyfield to theSetStagedOrderDeliveryAddressCustomTypeOutputtype. SetStagedOrderDeliveryAddressCustomTypeOutput.deliveryIdfield type changed fromString!toString
- Added the
-
[GraphQL API] Changed the
SetOrderDeliveryAddressCustomFieldtype:SetOrderDeliveryAddressCustomField.deliveryIdinput field type changed fromString!toString- Input field
deliveryKeywas added toSetOrderDeliveryAddressCustomFieldtype
-
[GraphQL API] Changed the
SetStagedOrderDeliveryCustomTypetype:SetStagedOrderDeliveryCustomType.deliveryIdinput field type changed fromString!toString- Input field
deliveryKeywas added toSetStagedOrderDeliveryCustomTypetype
-
[GraphQL API] Changed the
DeliveryDrafttype:- Input field
keywas added toDeliveryDrafttype
- Input field
-
[GraphQL API] Changed the
RemoveStagedOrderDeliveryOutputtype:- Added the
deliveryKeyfield to theRemoveStagedOrderDeliveryOutputtype. RemoveStagedOrderDeliveryOutput.deliveryIdfield type changed fromString!toString
- Added the
-
[GraphQL API] Changed the
RemoveStagedOrderDeliverytype:RemoveStagedOrderDelivery.deliveryIdinput field type changed fromString!toString- Input field
deliveryKeywas added toRemoveStagedOrderDeliverytype
-
[GraphQL API] Changed the
AddOrderDeliverytype:- Input field
deliveryKeywas added toAddOrderDeliverytype
- Input field
-
[GraphQL API] Changed the
SetStagedOrderDeliveryCustomFieldOutputtype:- Added the
deliveryKeyfield to theSetStagedOrderDeliveryCustomFieldOutputtype. SetStagedOrderDeliveryCustomFieldOutput.deliveryIdfield type changed fromString!toString
- Added the
-
[GraphQL API] Changed the
SetStagedOrderDeliveryAddressCustomFieldOutputtype:SetStagedOrderDeliveryAddressCustomFieldOutput.deliveryIdfield type changed fromString!toString- Added the
deliveryKeyfield to theSetStagedOrderDeliveryAddressCustomFieldOutputtype.
-
[GraphQL API] Changed the
AddStagedOrderParcelToDeliverytype:- Input field
deliveryKeywas added toAddStagedOrderParcelToDeliverytype AddStagedOrderParcelToDelivery.deliveryIdinput field type changed fromString!toString
- Input field
-
[GraphQL API] Changed the
SetOrderDeliveryAddresstype:SetOrderDeliveryAddress.deliveryIdinput field type changed fromString!toString- Input field
deliveryKeywas added toSetOrderDeliveryAddresstype
-
[GraphQL API] Changed the
AddOrderParcelToDeliverytype:AddOrderParcelToDelivery.deliveryIdinput field type changed fromString!toString- Input field
deliveryKeywas added toAddOrderParcelToDeliverytype
-
[GraphQL API] Changed the
RemoveOrderDeliverytype:RemoveOrderDelivery.deliveryIdinput field type changed fromString!toString- Input field
deliveryKeywas added toRemoveOrderDeliverytype
-
[GraphQL API] Changed the
SetOrderDeliveryCustomTypetype:- Input field
deliveryKeywas added toSetOrderDeliveryCustomTypetype SetOrderDeliveryCustomType.deliveryIdinput field type changed fromString!toString
- Input field
-
[GraphQL API] Changed the
SetOrderDeliveryCustomFieldtype:SetOrderDeliveryCustomField.deliveryIdinput field type changed fromString!toString- Input field
deliveryKeywas added toSetOrderDeliveryCustomFieldtype
-
[GraphQL API] Changed the
SetStagedOrderDeliveryItemstype:SetStagedOrderDeliveryItems.deliveryIdinput field type changed fromString!toString- Input field
deliveryKeywas added toSetStagedOrderDeliveryItemstype
-
[GraphQL API] Changed the
SetStagedOrderDeliveryCustomTypeOutputtype:- Added the
deliveryKeyfield to theSetStagedOrderDeliveryCustomTypeOutputtype. SetStagedOrderDeliveryCustomTypeOutput.deliveryIdfield type changed fromString!toString
- Added the
-
[GraphQL API] Changed the
SetOrderDeliveryAddressCustomTypetype:- Input field
deliveryKeywas added toSetOrderDeliveryAddressCustomTypetype SetOrderDeliveryAddressCustomType.deliveryIdinput field type changed fromString!toString
- Input field
-
[GraphQL API] Changed the
SetStagedOrderDeliveryAddressCustomFieldtype:SetStagedOrderDeliveryAddressCustomField.deliveryIdinput field type changed fromString!toString- Input field
deliveryKeywas added toSetStagedOrderDeliveryAddressCustomFieldtype
-
[GraphQL API] Changed the
AddStagedOrderParcelToDeliveryOutputtype:- Added the
deliveryKeyfield to theAddStagedOrderParcelToDeliveryOutputtype. AddStagedOrderParcelToDeliveryOutput.deliveryIdfield type changed fromString!toString
- Added the
-
[GraphQL API] Changed the
SetOrderDeliveryItemstype:SetOrderDeliveryItems.deliveryIdinput field type changed fromString!toString- Input field
deliveryKeywas added toSetOrderDeliveryItemstype
Announced deprecation of 'sku', 'variantId' and 'price' fields in Remove Price update action
variantId, sku and price fields are now deprecated in the Remove Price update action on Products. Please use priceId instead.
For the GraphQL API, please use RemoveProductPrice.priceId instead.Changes:
- [GraphQL API] Changed the
RemoveProductPricetype:RemoveProductPrice.variantIdis deprecatedRemoveProductPrice.skuis deprecatedRemoveProductPrice.priceis deprecated
Added Product Projections on locales to the GraphQL API
product and products queries on the GraphQL API. With this projection, your response contains the translation on Products (also in a Store) you have specified in your query only. All other locales are filtered out from the product information.
Furthermore, the projection can also be applied to Products expanded on Reference Type Attributes.Changes:
- [GraphQL API] Changed the
Querytype:- Argument
localeProjectionwas added toQuery.productsfield - Argument
localeProjectionwas added toQuery.productfield - Argument
projectExpandedProductswas added toQuery.productProjectionSearchfield - Argument
projectExpandedProductswas added toQuery.productfield - Argument
projectExpandedProductswas added toQuery.productsfield
- Argument
- [GraphQL API] Changed the
InStoretype:- Arguments
localeProjectionwas added toInStore.productfield - Argument
projectExpandedProductswas added toInStore.productfield
- Arguments
Added Type import endpoint
You can now send us the whole Type snapshot and we will create/update the entry in your Project by calculating the delta.
Changes:
- [API] Added Type Import endpoint.
Changed the fields ‘BusinessUnit.associateMode’, ‘Associate.associateRoleAssignments’, and ‘AssociateRoleAssignment.inheritance’ to be mandatory in responses
BusinessUnit.associateMode, Associate.associateRoleAssignments, and AssociateRoleAssignment.inheritance mandatory in responses. They were previously optional during the closed beta period.Changes:
- [GraphQL API] Changed the
BusinessUnittype:BusinessUnit.associateModefield type changed fromBusinessUnitAssociateModetoBusinessUnitAssociateMode!
- [GraphQL API] Changed the
Associatetype:Associate.associateRoleAssignmentsfield type changed from[AssociateRoleAssignment!]to[AssociateRoleAssignment!]!
- [GraphQL API] Changed the
AssociateRoleAssignmenttype:AssociateRoleAssignment.inheritancefield type changed fromAssociateInheritanceModetoAssociateInheritanceMode!
Added AssociateMissingPermissionError for Associate Roles
Changes:
- [API] Added AssociateMissingPermissionError.
Added 'inheritedStores' field to Business Units in GraphQL
Changes:
- [GraphQL API] Changed the
BusinessUnittype:- Added the
inheritedStoresfield to theBusinessUnittype.
- Added the
Enhanced permissions management for companies
Buyer and Admin values. This type alongside the roles field on Associate and AssociateDraft is now deprecated and will be completely removed on 02 August 2023.associate endpoints can be used to validate that an Associate has sufficient permissions on a given resource. These endpoints are available for Business Units, Carts, Orders, Quotes, and Quote Requests and perform permission evaluation checks based on an associateId.These features are part of Composable Commerce for B2B and will be subject to additional terms and pricing.
Changes:
- [API] Added Associate Roles API.
- [API] Added Associate Carts, Associate Orders, Associate Quote Requests, Associate Quotes, and Associate BusinessUnit endpoints.
- [API] Added BusinessUnitAssociateMode, AssociateRoleInheritanceMode, AssociateRoleAssignment, and AssociateRoleAssignmentDraft, InheritedAssociate, and InheritedAssociateRoleAssignment types to BusinessUnit.
- [API] Added
inheritedAssociatesandassociateModefields to BusinessUnit. - [API] Added
associateModefields to BusinessUnitDraft. - [API] Added
associateRoleAssignmentsfield to Associate and AssociateDraft. - [API] Added
associateRoleAssignmentsto MyBusinessUnitAssociateDraft. - [API] Deprecated AssociateRole enum with
AdminandBuyervalues. - [API] Deprecated
rolesandinheritedAssociatesfield on Associate and AssociateDraft. - [API] Added Associate Role Messages.
- [API] Added BusinessUnitAssociateModeChanged Message.
- [API] Added
myBusinessUnitAssociateRoleOnCreationto BusinessUnitConfiguration in Project settings. - [GraphQL API] Added the following types to the GraphQL schema:
AddAssociateRolePermission,AsAssociate,AsAssociateArgument,AssociateInheritanceMode,AssociateRole,AssociateRoleAssignment,AssociateRoleAssignmentDraft,AssociateRoleBuyerAssignableChanged,AssociateRoleCreated,AssociateRoleDeleted,AssociateRoleDraft,AssociateRoleNameSet,AssociateRolePermissionAdded,AssociateRolePermissionRemoved,AssociateRolePermissionsSet,AssociateRoleQueryResult,AssociateRoleUpdateAction,BusinessUnitAssociateMode,BusinessUnitAssociateModeChanged,ChangeAssociateRoleBuyerAssignable,ChangeBusinessUnitAssociateMode,InheritedAssociate,InheritedAssociateRoleAssignment,Permission,RemoveAssociateRolePermission,SetAssociateRoleCustomField,SetAssociateRoleCustomType,SetAssociateRoleName,SetAssociateRolePermissions,SetProjectSettingsMyBusinessUnitAssociateRoleOnCreation. - [GraphQL API] Changed the
BusinessUnitDrafttype:- Input field
associateModewas added toBusinessUnitDrafttype
- Input field
- [GraphQL API] Changed the
BusinessUnittype:- Added the
inheritedAssociatesfield to theBusinessUnittype. - Added the
associateModefield to theBusinessUnittype.
- Added the
- [GraphQL API] Changed the
Associatetype:- Added the
associateRoleAssignmentsfield to theAssociatetype. - Field
roleswas deprecated inAssociatetype
- Added the
- [GraphQL API] Changed the
AssociateDrafttype:- Input field
associateRoleAssignmentswas added toAssociateDrafttype - Input field
roleswas deprecated inAssociateDrafttype
- Input field
- [GraphQL API] Changed the
BusinessUnitConfigurationtype:- Added the
myBusinessUnitAssociateRoleOnCreationfield to theBusinessUnitConfigurationtype. - Added the
myBusinessUnitAssociateRoleOnCreationReffield to theBusinessUnitConfigurationtype.
- Added the
- [GraphQL API]
SimpleAssociateRoletype was deprecated - [GraphQL API] Changed the
Querytype:- Added the
asAssociatefield to theQuerytype. - Added the
associateRolefield to theQuerytype. - Added the
associateRolesfield to theQuerytype.
- Added the
- [GraphQL API] Changed the
Mutationtype:- Argument
asAssociatewas added toMutation.updateBusinessUnitfield - Added the
updateAssociateRolefield to theMutationtype. - Argument
asAssociatewas added toMutation.createOrderFromCartfield - Argument
asAssociatewas added toMutation.deleteCartfield - Argument
asAssociatewas added toMutation.createBusinessUnitfield - Argument
asAssociatewas added toMutation.updateQuoteRequestfield - Argument
asAssociatewas added toMutation.createOrderFromQuotefield - Argument
asAssociatewas added toMutation.createCartfield - Argument
asAssociatewas added toMutation.updateOrderfield - Added the
deleteAssociateRolefield to theMutationtype. - Argument
asAssociatewas added toMutation.updateQuotefield - Argument
asAssociatewas added toMutation.createQuoteRequestfield - Added the
createAssociateRolefield to theMutationtype. - Argument
asAssociatewas added toMutation.updateCartfield
- Argument
- [GraphQL API] Changed the
ProjectSettingsUpdateActiontype:- Input field
setMyBusinessUnitAssociateRoleOnCreationwas added toProjectSettingsUpdateActiontype
- Input field
- [GraphQL API] Changed the
BusinessUnitUpdateActiontype:- Input field
changeAssociateModewas added toBusinessUnitUpdateActiontype
- Input field
Product Selections achieved general availability status
- Querying and managing Product Selections.
- Adding and removing Products from Product Selections.
Replaced ProductSelectionType with ProductSelectionMode
Individual and IndividualExclusion Product Selections remains the same. We adjusted the naming of the type and the enums to ensure a consistent experience when working with the Composable Commerce APIs.individual and individualExclusion enums defined by the type field on ProductSelection, you can now use the mode field with the values Individual and IndividualExclusion. The type field, alongside ProductSelectionType is now deprecated and will be completely removed on 18 July 2023.Changes:
- [API] Added the
modefield to ProductSelection and ProductSelectionDraft. - [API] Deprecated
ProductSelectionTypeEnum,IndividualProductSelectionType,IndividualExclusionProductSelectionTypefrom ProductSelection. - [API] Deprecated the
typefield from ProductSelection and ProductSelectionDraft. - [API] Changed the type of
productSelectionfield on ProductSelectionCreated Message from ProductSelectionType to ProductSelection. - [GraphQL API] Removed the following types from the GraphQL schema:
ProductSelectionType,IndividualExclusionProductSelectionCreatedPayload,IndividualProductSelectionCreatedPayload,ProductSelectionCreatedPayload. - [GraphQL API] Changed the
ProductSelectiontype:- Removed the
typefield from theProductSelectiontype. - Added the
modefield to theProductSelectiontype.
- Removed the
- [GraphQL API] Changed the
CreateProductSelectionDrafttype:- Input field
typewas removed fromCreateProductSelectionDrafttype - Input field
modewas added toCreateProductSelectionDrafttype
- Input field
- [GraphQL API] Changed the
ProductSelectionCreatedtype:ProductSelectionCreated.productSelectionfield type changed fromProductSelectionCreatedPayload!toProductSelection!
Audit Log available for AWS Regions in beta
Added 'shippingCustomFields' and 'shippingKey' fields on Cart and Order
shippingCustomFields and shippingKey fields on Carts and Orders with Single ShippingMode.Changes:
- [API] Added the
shippingCustomFieldsfield to Cart and Order. - [API] Added the
shippingKeyfield to Cart and Order. - [GraphQL API] Changed the
Carttype:- Added the
shippingKeyfield to theCarttype. - Added the
shippingCustomFieldsfield to theCarttype.
- Added the
- [GraphQL API] Changed the
Ordertype:- Added the
shippingKeyfield to theOrdertype. - Added the
shippingCustomFieldsfield to theOrdertype.
- Added the
EmbeddedPriceDraftImport key field changing from optional to required
key field on EmbeddedPriceDraftImport from optional to required.key when importing Prices using EmbeddedPriceDraftImport.Introduced 'key' field on TaxRate
key field on TaxRate and TaxRateDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.Changes:
- [API] Added the
keyfield to TaxRate and TaxRateDraft. - [API] Added the
taxRateKeyfield to Remove TaxRate and Replace TaxRate update actions. - [API] Changed the
taxRateIdfield to be optional on Remove TaxRate and Replace TaxRate update actions. - [GraphQL API] Changed the
TaxRatetype:- Added the
keyfield to theTaxRatetype.
- Added the
- [GraphQL API] Changed the
TaxRateInputtype:- Input field
keywas added toTaxRateInputtype
- Input field
- [GraphQL API] Changed the
TaxRateDrafttype:- Input field
keywas added toTaxRateDrafttype
- Input field
- [GraphQL API] Changed the
TaxCategoryRemoveTaxRatetype:- Input field
taxRateKeywas added toTaxCategoryRemoveTaxRatetype TaxCategoryRemoveTaxRate.taxRateIdinput field type changed fromString!toString
- Input field
- [GraphQL API] Changed the
TaxCategoryReplaceTaxRatetype:TaxCategoryReplaceTaxRate.taxRateIdinput field type changed fromString!toString- Input field
taxRateKeywas added toTaxCategoryReplaceTaxRatetype
Fixed Reference Expansion input types for Business Unit Messages in the GraphQL API
BusinessUnitConfiguration to align it with the HTTP API. We have also made the roles field optional on AssociateDraft in the HTTP and GraphQL API to allow creating Associates without having to assign roles.Changes:
- [API] Changed
rolesfield to be optional on AssociateDraft. - [GraphQL API] Changed the
AssociateDrafttype:AssociateDraft.rolesinput field type changed from[SimpleAssociateRole!]!to[SimpleAssociateRole!]
- [GraphQL API] Added the following types to the GraphQL schema:
BusinessUnitConfigurationStatus. - [GraphQL API] Changed the
BusinessUnitConfigurationtype:BusinessUnitConfiguration.myBusinessUnitStatusOnCreationfield type changed fromBusinessUnitStatus!toBusinessUnitConfigurationStatus!
- [GraphQL API] Changed the
BusinessUnitStoreAddedtype:BusinessUnitStoreAdded.storefield type changed fromKeyReference!toStore!- Added the
storeReffield to theBusinessUnitStoreAddedtype.
- [GraphQL API] Changed the
BusinessUnitStoresSettype:BusinessUnitStoresSet.storesfield type changed from[KeyReference!]!to[Store!]!- Added the
storesReffield to theBusinessUnitStoresSettype.
- [GraphQL API] Changed the
BusinessUnitStoreModeChangedtype:- Added the
oldStoresReffield to theBusinessUnitStoreModeChangedtype. - Added the
storesReffield to theBusinessUnitStoreModeChangedtype. BusinessUnitStoreModeChanged.storesfield type changed from[KeyReference!]to[Store!]BusinessUnitStoreModeChanged.oldStoresfield type changed from[KeyReference!]to[Store!]
- Added the
- [GraphQL API] Changed the
BusinessUnitParentChangedtype:- Added the
oldParentUnitReffield to theBusinessUnitParentChangedtype. - Added the
newParentUnitReffield to theBusinessUnitParentChangedtype. BusinessUnitParentChanged.newParentUnitfield type changed fromKeyReferencetoBusinessUnitBusinessUnitParentChanged.oldParentUnitfield type changed fromKeyReferencetoBusinessUnit
- Added the
- [GraphQL API] Changed the
ChangeProjectSettingsMyBusinessUnitStatusOnCreationtype:ChangeProjectSettingsMyBusinessUnitStatusOnCreation.statusinput field type changed fromBusinessUnitStatus!toBusinessUnitConfigurationStatus!
- [GraphQL API] Changed the
BusinessUnitStoreRemovedtype:BusinessUnitStoreRemoved.storefield type changed fromKeyReference!toStore!- Added the
storeReffield to theBusinessUnitStoreRemovedtype.
Introduced Product Selection of type Individual Exclusion in Beta
Changes:
-
[API] Added
individualExclusionvalue to ProductSelectionTypeEnum. -
[API] Added IndividualExclusionProductSelectionType.
-
[API] Added Exclude Product update action for Product Selections.
-
[API] Added Set Variant Exclusion update action for Product Selections.
-
[API] Added ProductSelectionProductExcluded and ProductSelectionVariantExclusionChanged Message.
-
[GraphQL API] Added the following types to the GraphQL schema:
ExcludeProductSelectionProduct,IndividualExclusionProductSelectionCreatedPayload,ProductSelectionProductExcluded,ProductSelectionType,ProductSelectionVariantExclusionChanged,ProductVariantExclusion,ProductVariantExclusionDraft,SetProductSelectionVariantExclusion. -
[GraphQL API] Added the
typefield to theProductSelectiontype. -
[GraphQL API] Added the
typeinput field to theCreateProductSelectionDrafttype. -
[GraphQL API] Added the
excludeProductinput field toProductSelectionUpdateActiontype. -
[GraphQL API] Added the
setVariantExclusioninput field toProductSelectionUpdateActiontype. -
[GraphQL API] Added the
stagedfield to theProductVariantDeletedtype.
Fixed type for 'state' field in PaymentStatusDraft
state field in PaymentStatusDraft from Reference to ResourceIdentifier allowing you to reference a State by key when creating a new Payment. The HTTP API now behaves as documented, and we aligned the GraphQL API with this behavior also.Changes:
- [GraphQL API] Changed the
PaymentStatusInput.stateinput field type fromReferenceInputtoResourceIdentifierInput.
Changed names of Product Variant Selection types
The previous types have now been deprecated and will be migrated to the new types automatically on 30 June 2023 without any disruption of services.
Changes:
- [API] Added
includeOnlyandincludeAllExceptvalues to thetypefield of Product Variant Selection. - [API] Deprecated
inclusionandexclusionvalues on thetypefield of Product Variant Selection. - [GraphQL API] Changed the
ProductVariantSelectionDrafttype:- Added input field
includeOnlyandincludeAllExcepttoProductVariantSelectionDrafttype. - Deprecated input field
inclusionandexclusiononProductVariantSelectionDrafttype.
- Added input field
- [GraphQL API] Added the following types to the GraphQL schema:
ProductVariantSelectionIncludeOnly,ProductVariantSelectionIncludeAllExcept. - [GraphQL API] Deprecated the following types on the GraphQL schema:
ProductVariantSelectionExclusion,ProductVariantSelectionInclusion.
External OAuth achieved general availability status
- Requesting an access token using an External OAuth server.
- Configuring external OAuth through Project settings using the Set ExternalOAuth update action.
Added support for AuthenticationMode in Customer import and support for Custom Fields and State in Order import fields.
shippingAddress, and [DeliveryParcels](/../api/import-export/import-resources#deliveryparcel) fields.These additions provide more options and greater flexibility when importing Customers and Orders.
Changes:
- [API] Added
authenticationModeto CustomerImport on the Import Customers endpoint. - [API] Added Custom Fields to
shippingAddressin OrderImport on the Import Orders endpoint. - [API] Added Custom Fields to DeliveryParcel in OrderImport on the Import Orders endpoint.
- [API] Added state to OrderImport on the Import Orders endpoint.
Introducing Google Cloud Function destination for API Extensions
{/* vale commercetools.Acronyms = NO */}
Changes:
- [API] Added GoogleCloudFunctionDestination to API Extensions.
- [GraphQL API] Added the following types to the GraphQL schema:
GoogleCloudFunctionDestination,GoogleCloudFunctionDestinationInput. - [GraphQL API] Changed the
ExtensionDestinationInputtype:- Input field
GoogleCloudFunctionwas added toExtensionDestinationInputtype.
- Input field
Improvements to working with Business Units in the GraphQL API
Changes:
- [GraphQL API] Changed the
StagedQuotetype:- Added the
businessUnitReffield to theStagedQuotetype. StagedQuote.businessUnitfield type changed fromKeyReferencetoBusinessUnit
- Added the
- [GraphQL API] Changed the
Quotetype:- Added the
businessUnitReffield to theQuotetype. Quote.businessUnitfield type changed fromKeyReferencetoBusinessUnit
- Added the
- [GraphQL API] Changed the
QuoteRequesttype:- Added the
businessUnitReffield to theQuoteRequesttype. QuoteRequest.businessUnitfield type changed fromKeyReferencetoBusinessUnit
- Added the
Added 'discounted' field to 'ProductPriceDataInput' type in GraphQL
discounted field to the ProductPriceDataInput type in the GraphQL schema.
Furthermore, we fixed the field type for the DiscountedProductPriceValueInput type in the GraphQL API.Changes:
- [GraphQL API] Added
discountedfield to theProductPriceDataInputtype. - [GraphQL API] Changed the
DiscountedProductPriceValueInput.discountfield type fromReferenceInput!toResourceIdentifierInput!.
Added 'oldValue' field to Standalone Price Value Changed Message
oldValue field to the Standalone Price Value Changed Message that contains the StandalonePrice value as it was before the change.
You can now see how much the value of your updated Standalone Price has changed by comparing the Message fields value and oldValue.Changes:
- [API] Added field
oldValueto Standalone Price Value Changed Message. - [GraphQL API] Changed the
StandalonePriceValueChangedtype:- Added the
oldValuefield to theStandalonePriceValueChangedtype.
- Added the
CloudEventsFormat achieved general availability status
1.0.2 specification. This will ensure consistency when using CloudEvents across different services.Added GraphQL support for multiple shipping methods
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
AddCartCustomShippingMethod,AddCartShippingMethod,CustomShippingDraft,MethodTaxRate,RemoveCartShippingMethod,Shipping,ShippingDraft,ShippingMode. - [GraphQL API] Changed the
MyCartDrafttype:- Input field
shippingModewas added toMyCartDrafttype - Input field
customShippingwas added toMyCartDrafttype - Input field
shippingwas added toMyCartDrafttype
- Input field
- [GraphQL API] Changed the
CartDrafttype:- Input field
customShippingwas added toCartDrafttype - Input field
shippingwas added toCartDrafttype - Input field
shippingModewas added toCartDrafttype
- Input field
- [GraphQL API] Changed the
CartUpdateActiontype:- Input field
addCustomShippingMethodwas added toCartUpdateActiontype - Input field
removeShippingMethodwas added toCartUpdateActiontype - Input field
addShippingMethodwas added toCartUpdateActiontype
- Input field
- [GraphQL API] Changed the
Carttype:- Added the
taxedShippingPricefield to theCarttype. - Added the
shippingfield to theCarttype. - Added the
shippingModefield to theCarttype.
- Added the
- [GraphQL API] Changed the
Ordertype:- Added the
taxedShippingPricefield to theOrdertype. - Added the
shippingfield to theOrdertype. - Added the
shippingModefield to theOrdertype.
- Added the
- [GraphQL API] Changed the
LineItemtype:- Added the
perMethodTaxRatefield to theLineItemtype. - Added the
taxedPricePortionsfield to theLineItemtype.
- Added the
- [GraphQL API] Changed the
ShippingTargetDrafttype:- Added the
shippingMethodKeyfield to theShippingTargetDrafttype.
- Added the
Added 'purchaseOrderNumber' field to Quotes- and Order-related types
purchaseOrderNumber field, Buyers are now able to track their purchase throughout the order creation process with their Purchase Order Number. To support B2B scenarios, this new field is also supported on all types related to Quotes.Changes:
- [API] Added optional field
purchaseOrderNumberto OrderFromCartDraft, OrderImportDraft, QuoteRequestDraft, QuoteRequest, StagedQuote, Quote, Order. - [API] Added
setPurchaseOrderNumberupdate action to Orders and Order Edits APIs. - [API] Added PurchaseOrderNumberSet message.
- [GraphQL API] Changed the
QuoteRequestDrafttype:- Input field
purchaseOrderNumberwas added toQuoteRequestDrafttype
- Input field
- [GraphQL API] Changed the
OrderCartCommandtype:- Input field
purchaseOrderNumberwas added toOrderCartCommandtype
- Input field
- [GraphQL API] Changed the
ImportOrderDrafttype:- Input field
purchaseOrderNumberwas added toImportOrderDrafttype
- Input field
- [GraphQL API] Changed the
StagedOrderUpdateActiontype:- Input field
setPurchaseOrderNumberwas added toStagedOrderUpdateActiontype
- Input field
- [GraphQL API] Changed the
StagedQuotetype:- Added the
purchaseOrderNumberfield to theStagedQuotetype.
- Added the
- [GraphQL API] Changed the
OrderUpdateActiontype:- Input field
setPurchaseOrderNumberwas added toOrderUpdateActiontype
- Input field
- [GraphQL API] Changed the
Quotetype:- Added the
purchaseOrderNumberfield to theQuotetype.
- Added the
- [GraphQL API] Changed the
Ordertype:- Added the
purchaseOrderNumberfield to theOrdertype.
- Added the
- [GraphQL API] Changed the
QuoteRequesttype:- Added the
purchaseOrderNumberfield to theQuoteRequesttype.
- Added the
Automatic updates of SKU changes in Product Selection Assignments
Discontinued support for IronMQ
Retrieve applicable Shipping Methods for a Cart and Location
shippingAddress defined. For example, this allows you to retrieve applicable Shipping Methods for a Cart with multiple Shipping Methods.Changes:
- [API] added Get ShippingMethods for a Cart and Location endpoint.
API Extensions for AWS Lambda destinations now support the use of function aliases
Changes:
- [API] The
arnfield of AWSLambdaDestination now accepts AWS Lambda function aliases.
Introducing pattern and length validation for keys of Embedded Prices and Standalone Prices
key field on Embedded Prices, we have aligned pattern and length constraints accordingly so that there are no inconsistencies for imported Prices.key field in EmbeddedPriceDraftImport, EmbeddedPriceImport, and StandalonePriceImport should now match the pattern ^[A-Za-z0-9_-]+$ and be 2-256 characters in length. The key value will be validated when processing import requests with the following objects:- Product draft import endpoints having Price keys.
- StandalonePriceImport on Importing Standalone Prices.
- EmbeddedPriceImport on Importing Embedded Prices.
Added Cart freeze option
Changes:
- [API] Added FreezeCart and UnfreezeCart update actions to Carts API.
- [API] Added
Frozenfield to CartState. - [GraphQL API] Added the following types to the GraphQL schema:
FreezeCart,UnfreezeCart. - [GraphQL API] Added input fields
freezeCartandunfreezeCartto theCartUpdateActiontype. - [GraphQL API] Added
Frozenvalue to theCartStateenum type.
Announced removal of non-standard GraphQL error field
code field under the extensions map as shown in this example.code will no longer be returned as a top-level field of the errors array, but under the extensions map.Added key to Embedded Prices and Embedded PriceDrafts, and an update action to set keys for both Standalone and Embedded Prices
id, you can now use key as a user-defined unique identifier. By assigning a human-readable key to Embedded Prices, you have greater flexibility for referencing Embedded Prices.key field was already available for StandalonePrices and this allowed us to assess and confirm its usefulness. Implementing the key field in Embedded Prices ensures consistency in offerings for both Standalone Prices and Embedded Prices.key value has also been added for both Embedded Prices and Standalone Prices, allowing you to efficiently update Price keys without needing to bulk import Prices with the updated price keys.Changes:
- [API] Added
keyfield to Price and PriceDraft. - [API] Added Set Price Key update action.
- [API] Added Set Standalone Price Key update action.
- [API] Added the error code DuplicatePriceKey.
- [API] Added ProductPriceKeySet Message.
- [API] Added StandalonePriceKeySet Message.
- [GraphQL API] Changed the
ProductPricetype:- Added the
keyfield to theProductPricetype.
- Added the
- [GraphQL API] Changed the
ProductPriceSearchtype:- Added the
keyfield to theProductPriceSearchtype.
- Added the
- [GraphQL API] Changed the
ProductPriceDataInputtype:- Input field
keywas added toProductPriceDataInputtype
- Input field
- [GraphQL API] Added the following types to the GraphQL schema:
SetProductPriceKey,SetStandalonePriceKey,StandalonePriceKeySet,ProductPriceKeySet. - [GraphQL API] Changed the
ProductUpdateActiontype:- Input field
setPriceKeywas added toProductUpdateActiontype
- Input field
- [GraphQL API] Changed the
StandalonePriceUpdateActiontype:- Input field
setKeywas added toStandalonePriceUpdateActiontype
- Input field
Improvements to working with Business Units in the GraphQL API
- Carts and Orders now support Reference Expansion on Business Unit.
- Added support for creating Carts that reference a Business Unit.
- Changed the naming of the type
AssociateRoleto free up the namespace for new functionality.
Changes:
- [GraphQL API] Changed the
Carttype:- Added the
businessUnitReffield to theCarttype. Cart.businessUnitfield type changed fromKeyReferencetoBusinessUnit
- Added the
- [GraphQL API] Changed the
Ordertype:Order.businessUnitfield type changed fromKeyReferencetoBusinessUnit- Added the
businessUnitReffield to theOrdertype.
- [GraphQL API] Changed the
CartDrafttype:- Input field
businessUnitwas added toCartDrafttype
- Input field
- [GraphQL API] Changed the
MyCartDrafttype:- Input field
businessUnitwas added toMyCartDrafttype
- Input field
- [GraphQL API] Added the following types to the GraphQL schema:
SimpleAssociateRole - [GraphQL API] Removed the following types from the GraphQL schema:
AssociateRole. - [GraphQL API] Changed the
Associatetype:Associate.rolesfield type changed from[AssociateRole!]!to[SimpleAssociateRole!]!
- [GraphQL API] Changed the
AssociateDrafttype:AssociateDraft.rolesinput field type changed from[AssociateRole!]!to[SimpleAssociateRole!]!
Added Messages for changes on Embedded Prices and PriceMode on Products
Changes:
- [API] Added ProductPriceAdded Message.
- [API] Added ProductPriceChanged Message.
- [API] Added ProductPricesSet Message.
- [API] Added ProductPriceRemoved Message.
- [API] Added ProductPriceModeSet Message.
- [GraphQL API] Added the following types to the GraphQL schema:
ProductPriceAdded,ProductPriceChanged,ProductPriceModeSet,ProductPriceRemoved,ProductPricesSet.
Audit Log now tracks changes on Store's Product Selections
Added support for expanded Channel and Customer Group to GraphQL query for StandalonePrice
Changes:
- [GraphQL API] Changed the
StandalonePricetype:- Added the
channelfield to theStandalonePricetype. - Added the
customerGroupfield to theStandalonePricetype.
- Added the
Introduced Countries to Stores
countries on Stores and filter prices by country in Product Projections and Cart/Order/Shopping List Line Items.Changes:
- [API] Added type StoreCountry to Stores.
- [API] Added
countriesfield to Store and StoreDraft. - [API] Added Add Country, Remove Country, and Set Countries update actions to Stores.
- [API] Added optional
countriesfield to StoreCreated Message. - [API] Added StoreCountriesChanged Message.
- [API] Added the error code CountryNotConfiguredInStore.
- [GraphQL API] Added the following types to the GraphQL schema:
AddStoreCountry,RemoveStoreCountry,SetStoreCountries,StoreCountriesChanged,StoreCountry,StoreCountryInput. - [GraphQL API] Changed the
StoreUpdateActiontype:- Input field
addCountrywas added toStoreUpdateActiontype - Input field
setCountrieswas added toStoreUpdateActiontype - Input field
removeCountrywas added toStoreUpdateActiontype
- Input field
- [GraphQL API] Changed the
CreateStoretype:- Input field
countrieswas added toCreateStoretype
- Input field
- [GraphQL API] Changed the
StoreCreatedtype:- Added the
countriesfield to theStoreCreatedtype.
- Added the
- [GraphQL API] Changed the
Storetype:- Added the
countriesfield to theStoretype.
- Added the
Correction to the `ChangeQuoteState` type in the GraphQL API
ChangeQuoteState type in the GraphQL API. The type of the input field quoteState was incorrectly marked as MyQuoteState instead of QuoteState. This caused certain QuoteStates, for example, the Withdrawn state, to be unavailable through the GraphQL API. With this correction in place, the ChangeQuoteState type now supports all QuoteStates in GraphQL.Changes:
- [GraphQL API] Changed the
ChangeQuoteStatetype:ChangeQuoteState.quoteStateinput field type changed fromMyQuoteState!toQuoteState!
Introduced Attribute Groups in beta
Changes:
- [API] Added Attribute Groups API.
- [API] Added the
view_attribute_groupsandmanage_attribute_groupsOAuth scopes. - [GraphQL API] Added the following types to the GraphQL schema:
AddAttributeGroupAttribute,AttributeGroup,AttributeGroupDraft,AttributeGroupQueryResult,AttributeGroupUpdateAction,ChangeAttributeGroupName,RemoveAttributeGroupAttribute,SetAttributeGroupAttributes,SetAttributeGroupDescription,SetAttributeGroupKey,AttributeReference.
Added functionality to automatically transition states for Quote Requests, Staged Quotes, and Quotes
- When creating a Staged Quote you can transition the referenced Quote Request to the
Acceptedstate using thequoteRequestStateToAcceptedfield on StagedQuoteDraft. - When creating a Quote you can transition the referenced Staged Quote to the
Sentstate using thestagedQuoteStateToSentfield on QuoteDraft. - When creating an Order you can transition the referenced Quote to the
Acceptedstate using thequoteStateToAcceptedfield on OrderFromQuoteDraft. The same functionality is available on the My Order endpoint using MyOrderFromQuoteDraft.
Support for IAM-based authentication in the Subscriptions API
{/* vale commercetools.Acronyms = NO */}
authenticationMode is available on SQSDestination and SNSDestination and defines the mode of authentication. IAM-based authentication allows the Subscriptions API to send messages to a queue or publish to a topic, without explicitly providing credentials in the form of an accessKey and accessSecret. This simplifies key management for customers who maintain hundreds of queues and rotate credentials regularly. By providing permissions to an IAM user instead, the access needs to be set up once per topic and requires no additional key management. For backwards compatibility, the authenticationMode field is set to Credentials by default.Changes:
- [API] Added fields
authenticationModeto SQSDestination and SNSDestination. - [API] Added AwsAuthenticationMode.
- [GraphQL API] Added the following types to the GraphQL schema:
AwsAuthenticationMode. - [GraphQL API] Changed the
SQSDestinationInputtype:SQSDestinationInput.accessSecretinput field type changed fromString!toStringSQSDestinationInput.accessKeyinput field type changed fromString!toString- Input field
authenticationModewas added toSQSDestinationInputtype
- [GraphQL API] Changed the
SNSDestinationInputtype:SNSDestinationInput.accessSecretinput field type changed fromString!toStringSNSDestinationInput.accessKeyinput field type changed fromString!toString- Input field
authenticationModewas added toSNSDestinationInputtype
- [GraphQL API] Changed the
SQSDestinationtype:SQSDestination.accessSecretfield type changed fromString!toString- Added the
authenticationModefield to theSQSDestinationtype. SQSDestination.accessKeyfield type changed fromString!toString
- [GraphQL API] Changed the
SNSDestinationtype:SNSDestination.accessSecretfield type changed fromString!toStringSNSDestination.accessKeyfield type changed fromString!toString- Added the
authenticationModefield to theSNSDestinationtype.
Order import now supports Store key reference
Changes:
- [API] Added StoreKeyReference on the Import Orders endpoint.
Introduced My Quotes in beta
Changes:
- [API] Added My Quotes API.
- [API] Added MyOrderFromQuoteDraft to My Orders.
- [API] Added Create Order from My Quote endpoint to My Orders.
- [GraphQL API] Added the following types to the GraphQL schema:
ChangeMyQuoteMyQuoteState,MyQuoteState,MyQuoteUpdateAction,OrderMyQuoteCommand - [GraphQL API] Changed the
Metype:- Added the
quotefield to theMetype. - Added the
quotesfield to theMetype.
- Added the
- [GraphQL API] Changed the
Mutationtype:- Added the
updateMyQuotefield to theMutationtype.
- Added the
Introduced Business Units in beta
Announced removal of non-standard GraphQL variables format
variables only as a JSON objects from 1 December 2022.variables to be passed as String containing a JSON object.variables on our GraphQL API page.Added Line Item inventoryMode to the GraphQL schema
Changes:
- [GraphQL API] Added the
inventoryModefield to theLineItemtype. - [GraphQL API] Added Enum value
QuotetoCartOrigintype . - [GraphQL API] Added the
sellerCommentfield to theStagedQuotetype.
Introducing the Standalone Price import endpoint
You can now:
- Send us the whole StandalonePrice snapshot and we will create/update the entry in your Project by calculating the delta.
Using the Standalone Prices endpoint is the same as using other Import API endpoints. For more information:
- View the best practices guide for the Import API.
- Discover how Import Containers work.
Changes:
- [API] Added Standalone Price Import endpoint.
Added 'productSelections' to Store limits query in the GraphQL API
Changes:
- [GraphQL API] Changed the
StoreLimitsProjectiontype:- Added the
productSelectionsfield to theStoreLimitsProjectiontype.
- Added the
Added Message for changes on supply channels on Stores
Changes:
- [API] Added StoreSupplyChannelsChanged Message.
- [GraphQL API] Added the following type to the GraphQL schema:
StoreSupplyChannelsChanged.
Increased the limit of Line Items in Shopping Lists to 250.
Added new state 'Delivered' to Order ShipmentState
Delivered, you can now track the orders that are received by the customer.Previously, this was only possible by using a custom state on the Order, or on the Line Item if they have more shipments per Order.
Added 'active' field to Standalone Prices
Added Message for name changes on Stores
Changes:
- [API] Added StoreNameSet Message.
- [GraphQL API] Added the following type to the GraphQL schema:
StoreNameSet.
Raised limit for Stores in a Project
After successful experiences with Projects having up to 50,000 Stores, we have now raised this limit to 300,000. With this, we provide better support for B2B scenarios now in which separate product catalogs with pricing for business units of companies are required.
Added support for Direct Discounts in the GraphQL API
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
DirectDiscount,DirectDiscountDraft,DirectDiscountDraftOutput,SetCartDirectDiscounts,SetStagedOrderDirectDiscounts,SetStagedOrderDirectDiscountsOutput. - [GraphQL API] Changed the
Quotetype:- Added the
directDiscountsfield to theQuotetype.
- Added the
- [GraphQL API] Changed the
QuoteRequesttype:- Added the
directDiscountsfield to theQuoteRequesttype.
- Added the
- [GraphQL API] Changed the
CartUpdateActiontype:- Input field
setDirectDiscountswas added toCartUpdateActiontype
- Input field
- [GraphQL API] Changed the
Carttype:- Added the
directDiscountsfield to theCarttype.
- Added the
- [GraphQL API] Changed the
StagedOrderUpdateActiontype:- Input field
setDirectDiscountswas added toStagedOrderUpdateActiontype
- Input field
- [GraphQL API] Changed the
Ordertype:- Added the
directDiscountsfield to theOrdertype.
- Added the
Deprecation of PHP and .NET Core v1 SDKs
Fixed ChangeDiscountCodeCartDiscounts type in GraphQL schema
key in addition to id also in the GraphQL API.
Furthermore, we made the Channel-related fields optional in the Store Distribution Channels Changed
Message.Multiple Shipping Methods for Carts and Orders
You can now add multiple Shipping Methods to a Cart and Order. This is useful for cases where you want to have individual Shipping Methods for each Line Item ordered from a Cart.
shippingMode on Cart and Order controls whether Carts and Orders can have single or multiple Shipping Methods. The default ShippingMode is Single for backwards compatibility. For Carts and Orders with multiple Shipping Methods, all shipping-related information (such as address, rate, deliveries) are wrapped in a newly introduced Shipping object per Shipping Method. The Shipping object can also be extended with Custom Fields.Additionally, you can add deliveries to Carts during Cart creation, which was previously only possible on Orders.
Order import now supports Custom Fields on Line Items
Changes:
- [API] Added Custom Fields to LineItemImportDraft on the Import Orders endpoint.
Added Message for language changes on Stores
Changes:
- [API] Added StoreLanguagesChanged Message.
- [GraphQL API] Added the following type to the GraphQL schema:
StoreLanguagesChanged.
Buyers can now request Quote renegotiation
Customer import now supports Custom Fields on addresses
Changes:
- [API] Added Custom Fields to CustomerAddress on the Import Customers endpoint.
Added 'priceMode' field to CustomLineItemDraft and CustomLineItemImportDraft
You can now set the price mode for a Custom Line Item when adding the Custom Line Item to a Cart.
Standard price mode set by default for backwards compatibility. You could only change the price mode on an existing Custom Line Item with the Change CustomLineItem Price Mode update action.Added Reference Expansion for Product Search Attributes in the GraphQL API
Changes:
- [GraphQL API] Changed the
RawProductSearchAttributetype:- Added the
referencedResourceSetfield to theRawProductSearchAttributetype. - Added the
referencedResourcefield to theRawProductSearchAttributetype.
- Added the
Staged Standalone Prices Available in Beta
Changes:
- [API] Added StagedStandalonePrice to Standalone Prices API.
- [API] Added field
stagedto StandalonePrice. - [API] Added
applyStagedChangesupdate action to StandalonePrice. - [API] Added
StandalonePriceStagedChangesAppliedMessage. - [API] Added field
stagedtoStandalonePriceValueChangedMessage - [GraphQL API] Added the following types to the GraphQL schema:
ApplyStagedChanges,StagedStandalonePrice,StandalonePriceStagedChangesApplied. - [GraphQL API] Changed the
StandalonePriceUpdateActiontype:- Input field
applyStagedChangeswas added toStandalonePriceUpdateActiontype
- Input field
- [GraphQL API] Changed the
ChangeStandalonePriceValuetype:- Input field
stagedwas added toChangeStandalonePriceValuetype
- Input field
- [GraphQL API] Changed the
StandalonePricetype:- Added the
stagedfield to theStandalonePricetype.
- Added the
- [GraphQL API] Changed the
StandalonePriceValueChangedtype:- Added the
stagedfield to theStandalonePriceValueChangedtype.
- Added the
Added 'state' to QuoteRequest, StagedQuote, and Quote
Removed closed beta features from GraphQL schema
We made a correction to the schema file and the original release note to remove the closed beta features listed below. This does not change the availability of the features. They remain discoverable through introspection and are intended for selected customers taking part in closed beta programs.
If you are interested in evaluating a closed beta feature, please reach out to your contact at commercetools.
API Extensions now support Quote Requests, Staged Quotes and Quotes
Changes:
- [API] Added
quote-request,staged-quote, andquoteto ExtensionResourceTypeId.
Added inventory mode to Line Items
Changes:
- [API] Added optional
inventoryModefield to LineItem, LineItemDraft, and LineItemImportDraft. - [GraphQL API] Changed the
LineItemDraftOutputtype:- Added the
inventoryModefield to theLineItemDraftOutputtype.
- Added the
- [GraphQL API] Changed the
AddStagedOrderLineItemtype:- Input field
inventoryModewas added toAddStagedOrderLineItemtype
- Input field
- [GraphQL API] Changed the
AddCartLineItemtype:- Input field
inventoryModewas added toAddCartLineItemtype
- Input field
- [GraphQL API] Changed the
LineItemDrafttype:- Input field
inventoryModewas added toLineItemDrafttype
- Input field
Added 'priceMode' to Custom Line Item
Standard is the default price mode for newly created Custom Line Items, that allows application of Cart Discounts. For cases where Cart Discounts should not be considered on a Custom Line Item, you can change its price mode to External via new update action. You can still overwrite the price for a Custom Line Item via Change CustomLineItem Money update action.Changes:
- [API] Added field
priceModeto CustomLineItem. - [API] Added Change CustomLineItem Price Mode update action to Carts.
- [GraphQL API] Added the following types to the GraphQL schema:
ChangeCartCustomLineItemPriceMode,CustomLineItemPriceMode. - [GraphQL API] Changed the
CartUpdateActiontype:- Input field
changeCustomLineItemPriceModewas added toCartUpdateActiontype
- Input field
- [GraphQL API] Changed the
CustomLineItemtype:- Added the
priceModefield to theCustomLineItemtype.
- Added the
- [GraphQL API] Changed the
TypeDefinitiontype:TypeDefinitiontype description is changed
PriceMode can now be set on Products using the Import API
Consult the Import API reference documentation to learn how to set the PriceMode when importing (creating or updating) a Product:
Audit Log now tracks changes on Quote Request, Staged Quotes and Quotes
Changes:
- [API] Added scopes
view_quotes:{projectKey},view_quotes:{projectKey}, andview_quotes:{projectKey}. - [API] Added
quote,quote-request, andstaged-quoteto ChangeHistoryResourceType. - [API] Added ChangeQuoteRequestStateChange, ChangeQuoteStateChange, ChangeStagedQuoteStateChange, SetSellerCommentChange, and SetValidToChange.
- [API] Added StagedQuoteLabel, QuoteRequestLabel, QuoteLabel, and StagedQuoteLabel.
- [GraphQL API] Added the following types to the graphQL schema:
QuoteRequestChangeInput,QuoteChangeInputandStagedQuoteChangeInput. - [GraphQL API] Added
QuoteRequestLabel,QuoteLabel, andStagedQuoteLabeltype. - [GraphQL API] Added queries
quoteRequestandquoteRequests. - [GraphQL API] Added queries
quoteandquotes. - [GraphQL API] Added queries
stagedQuoteandstagedQuotes. - [GraphQL API] Added
QuoteRequest,Quote, andStagedQuoteto the ResourceType enum.
Added Message for changes on distribution channels on Stores
Changes:
- [API] Added StoreDistributionChannelsChanged Message.
- [GraphQL API] Added the following type to the GraphQL schema:
StoreDistributionChannelsChanged.
Added existence check for Product Types
id, key or a query predicate. These methods are useful if you are only interested in the existence of a certain Product Type without the need of fetching its information.- [API] Added HEAD methods for Product Types by ID, by Key, and by Query Predicate.
Added OrderImport GraphQL mutation
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
CustomLineItemImportDraft,DeliveryDraft,DiscountedLineItemPriceDraft,ImportOrderDraft,LineItemImportDraft,ParcelDraft,ProductVariantImportDraft,ShippingInfoImportDraft,TaxRateInput,TaxedPriceDraft. - [GraphQL API] Changed the
Mutationtype:- Added the
importOrderfield to theMutationtype.
- Added the
Audit Log now tracks changes on Product Selections
Changes:
- [API] Added the
view_product_selections:{projectKey}scope. - [API] Added
product-selectionto ChangeHistoryResourceType. - [API] Added AddProductChange.
- [API] Added RemoveProductChange.
- [API] Added SetProductCountChange.
- [GraphQL API] Added the following types to the graphQL schema:
ProductSelectionChangeInput. - [GraphQL API] Added queries
productSelectionandproductSelections. - [GraphQL API] Added
ProductSelectionto the ResourceType enum.
Introducing the Inventory import endpoint
You can now:
- Send us the whole InventoryEntry snapshot and we will create/update the entry in your Project by calculating the delta.
- Use the Inventory endpoint to schedule hourly/daily/nightly/weekly bulk inventory import processes.
Using the Inventory endpoint is the same as using other Import API endpoints. For more information:
- View the best practices guide for the Import API.
- Discover how Import Containers work.
Changes:
- [API] Added Inventory Import endpoint.
Introduced Quotes in beta
Changes:
- [API] Added Quote Requests and My Quote Requests APIs.
- [API] Added Staged Quotes API.
- [API] Added Quotes API.
- [API] Added QuoteRequestCreated, QuoteRequestStateChanged, and QuoteRequestDeleted Messages.
- [API] Added StagedQuoteCreated, StagedQuoteStateChanged, StagedQuoteValidToSet, StagedQuoteSellerCommentSet, and StagedQuoteDeleted Messages.
- [API] Added QuoteCreated, QuoteStateChanged, and QuoteDeleted Messages.
- [API] Added
Quoteto CartOrigin. - [API] Added DirectDiscount and DirectDiscountDraft to Carts API.
- [API] Added
directDiscountsfield to Cart and Order. - [API] Added
setDirectDiscountsupdate action to Carts and Orders via OrderEdit. - [API] Added OrderFromQuoteDraft and Create Order from Quote endpoint to Orders API.
- [API] Added
quotefield to Order. - [API] Added OAuth scopes
manage_quote_requests,view_quote_requests,manage_my_quote_requests,manage_staged_quotes,view_staged_quotes,manage_quotes, andview_quotes. - [GraphQL API] Added the following types to the GraphQL schema:
CancelQuoteRequest,ChangeMyQuoteMyQuoteState,ChangeQuoteRequestState,ChangeQuoteState,ChangeStagedQuoteState,MyQuoteRequestDraft,MyQuoteRequestUpdateAction,MyQuoteState,MyQuoteUpdateAction,OrderMyQuoteCommand,OrderQuoteCommand,Quote,QuoteDraft,QuoteQueryResult,QuoteRequest,QuoteRequestDraft,QuoteRequestQueryResult,QuoteRequestState,QuoteRequestUpdateAction,QuoteState,QuoteUpdateAction,SetMyQuoteRequestCustomField,SetMyQuoteRequestCustomType,SetQuoteCustomField,SetQuoteCustomType,SetQuoteRequestCustomField,SetQuoteRequestCustomType,SetStagedQuoteCustomField,SetStagedQuoteCustomType,SetStagedQuoteSellerComment,SetStagedQuoteValidTo,StagedQuote,StagedQuoteDraft,StagedQuoteQueryResult,StagedQuoteState,StagedQuoteUpdateAction.
Product Selections can now operate on Product Variant level
You can now include or exclude particular Product Variants in/from a Product Selection. Formerly it was only possible to add Products as a whole to a Product Selection meaning that all existing Product Variants of the Product are included.
Changes:
- [API] You can now specify a Product Variant Selection when you Add a Product to the Product Selection.
- [API] You can now specify a Product Variant Selection for an existing Product in the Product Selection by the new Set Variant Selection update action.
- [API] When you query a Product Selection for Products assigned to a Product Selection the response now also contains Product Variant Selections.
- [API] When you query for Products available in a Store through active Product Selections the response now also contains Product Variant Selections.
- [API] When you Get Product Projection in Store by ID or by Key you can now project by Product Selection assignments for Product Variants.
- [API] Added
variantSelectionfield to ProductSelectionProductAdded Message. - [API] Added ProductSelectionVariantSelectionChanged Message.
- [API] Added
ProductAssignmentMissingandProductPresentWithDifferentVariantSelectionerrors. - [GraphQL API] Added the following types to the GraphQL schema:
ProductSelectionVariantSelectionChanged,ProductVariantSelection,ProductVariantSelectionDraft,ProductVariantSelectionExclusion,ProductVariantSelectionInclusion,SetProductSelectionVariantSelection. - [GraphQL API] Changed the
ProductOfSelectiontype:- Added the
variantSelectionfield to theProductOfSelectiontype.
- Added the
- [GraphQL API] Changed the
SelectionOfProducttype:- Added the
variantSelectionfield to theSelectionOfProducttype.
- Added the
- [GraphQL API] Changed the
ProductSelectionUpdateActiontype:- Input field
setVariantSelectionwas added toProductSelectionUpdateActiontype
- Input field
- [GraphQL API] Changed the
AddProductSelectionProducttype:- Input field
variantSelectionwas added toAddProductSelectionProducttype
- Input field
- [GraphQL API] Changed the
ProductSelectionProductAddedtype:- Added the
variantSelectionfield to theProductSelectionProductAddedtype.
- Added the
Standalone Prices achieved general availability status
- Querying and managing Standalone Prices through the Standalone Prices API
- Adding Custom Fields on Standalone Prices
- Setting the
priceModeon the Product
Extended long-term support plan for Java v1 SDK
Changes in the GraphQL schema
Changes:
- [GraphQL API] Changed the
AuthenticationModetype:AuthenticationModetype description is changed
- [GraphQL API] Changed the
StandalonePriceCustomFieldtype:StandalonePriceCustomFieldtype description is changed
- [GraphQL API] Changed the
ProductPricetype:- Added the
keyfield to theProductPricetype.
- Added the
- [GraphQL API] Changed the
RoundingModetype:RoundingMode.HalfDowndescription changed
- [GraphQL API] Changed the
ProductPriceSearchtype:- Added the
keyfield to theProductPriceSearchtype.
- Added the
- [GraphQL API] Changed the
Paymenttype:Paymenttype description is changed
- [GraphQL API] Changed the
SelectionOfProducttype:- Added the
createdAtfield to theSelectionOfProducttype.
- Added the
- [GraphQL API] Changed the
MyPaymenttype:MyPaymenttype description is changed
- [GraphQL API] Changed the
Querytype:Query.standalonePricesdescription is changedQuery.standalonePricedescription is changed
- [GraphQL API] Changed the
ProductPriceDataInputtype:- Input field
keywas added toProductPriceDataInputtype
- Input field
- [GraphQL API] Changed the
Carttype:- Argument
idwas added toCart.lineItemsfield
- Argument
- [GraphQL API] Changed the
PriceModetype:PriceModetype description is changed
- [GraphQL API] Changed the
StandalonePriceQueryResulttype:StandalonePriceQueryResult.existsdescription is changed
- [GraphQL API] Changed the
TriggerInputtype:- Input field
conditionwas added toTriggerInputtype
- Input field
- [GraphQL API] Changed the
Mutationtype:Mutation.replicateMyCartdescription is changed
- [GraphQL API] Changed the
Ordertype:Ordertype description is changed- Argument
idwas added toOrder.lineItemsfield
- [GraphQL API] Changed the
Triggertype:- Added the
conditionfield to theTriggertype.
- Added the
- [GraphQL API] Changed the
StandalonePricetype:StandalonePricetype description is changed
Added update action for setting external discounts on Standalone Prices
discounted value of a Standalone Price via update action also. Before, it was only possible to set that value during creation of the Standalone Price.Changes:
- [API] Added SetStandalonePriceDiscountedPrice update action to Standalone Prices.
- [API] Added StandalonePriceExternalDiscountSet Message.
- [GraphQL API] Added the following types to the GraphQL schema:
SetStandalonePriceDiscountedPrice,StandalonePriceExternalDiscountSet. - [GraphQL API] Changed the
StandalonePriceUpdateActiontype:- Input field
setDiscountedPricewas added toStandalonePriceUpdateActiontype
- Input field
Conditional API Extensions in Beta
Changes:
- [API] Added
conditionfield to ExtensionTrigger. - [GraphQL API] Changed the
TriggerInputtype:- Input field
conditionwas added toTriggerInputtype
- Input field
- [GraphQL API] Changed the
Triggertype:- Added the
conditionfield to theTriggertype.
- Added the
extend type Trigger {
condition: String
}
extend input TriggerInput {
condition: String
}
Added Messages for Standalone Prices
Changes:
- [API] Added StandalonePriceCreated Message, StandalonePriceDeleted Message, StandalonePriceValueChanged Message, and StandalonePriceDiscountSet Message.
- [GraphQL API] Added the following types to the GraphQL schema:
StandalonePriceCreated,StandalonePriceDeleted,StandalonePriceDiscountSet,StandalonePriceValueChanged.
Removed 'lastMessageSequenceNumber' from Order
lastMessageSequenceNumber field is deprecated from Order, as it is an internal field that should not be used in customer logic.
For processing Messages in the correct order, a message processor can continue to use the id field of the resource alongside the sequenceNumber of the Message.Changes:
- [API] Removed
lastMessageSequenceNumberfrom Order. - [GraphQL API] Changed the
Ordertype:- Field
lastMessageSequenceNumberwas deprecated inOrdertype.
- Field
Introduced Standalone Prices in Beta
priceMode has been introduced on the Product that controls whether the Prices of the ProductVariants are embedded into the Product resource or stored separately as Standalone Prices.Changes:
- [API] Added Standalone Prices API.
- [API] Added
view_standalone_pricesandmanage_standalone_pricesOAuth scopes. - [API] Added optional field
priceModeto Product and ProductDraft. - [API] Added Set PriceMode update action to Product.
- [API] Added
DuplicateStandalonePriceScopeandOverlappingStandalonePriceValidity400 Bad Request errors specific to Standalone Prices. - [GraphQL API] Added the following types to the GraphQL schema:
ChangeStandalonePriceValue,CreateStandalonePrice,PriceMode,SetProductPriceMode,SetStandalonePriceCustomFields,StandalonePrice,StandalonePriceCustomField,StandalonePriceQueryResult,StandalonePriceUpdateAction. - [GraphQL API] Changed the
Querytype:- Added the
standalonePricefield to theQuerytype. - Added the
standalonePricesfield to theQuerytype.
- Added the
- [GraphQL API] Changed the
Mutationtype:- Added the
createStandalonePricefield to theMutationtype. - Added the
deleteStandalonePricefield to theMutationtype. - Added the
updateStandalonePricefield to theMutationtype.
- Added the
- [GraphQL API] Changed the
Producttype:- Added the
priceModefield to theProducttype.
- Added the
- [GraphQL API] Changed the
ProductDrafttype:- Input field
priceModewas added toProductDrafttype
- Input field
- [GraphQL API] Changed the
ProductUpdateActiontype:- Input field
setPriceModewas added toProductUpdateActiontype
- Input field
OrderFromCartDraft Custom Fields now merge with Cart Custom Fields.
With this, you can enrich the Custom Fields that already exist on the Cart and store them in the Order with a single API call.
Changes:
- [API] The
customfield on OrderFromCartDraft is now used for adding extra Custom Fields on Create Order from Cart.
Added Cart replication to My Carts
Changes:
- [API] Added Replicate My Cart endpoint.
- [API] Added ReplicaMyCartDraft.
- [GraphQL API] Changed the
Mutationtype:- Added the
replicateMyCartfield to theMutationtype.
- Added the
Added 'deleteAt' and 'deleteDaysAfterCreation' fields to API Clients in the GraphQL API
Changes:
- [GraphQL API] Changed the
APIClientWithoutSecrettype:- Added the
deleteAtfield to theAPIClientWithoutSecrettype.
- Added the
- [GraphQL API] Changed the
APIClientWithSecrettype:- Added the
deleteAtfield to theAPIClientWithSecrettype.
- Added the
- [GraphQL API] Changed the
CreateApiClienttype:- Input field
deleteDaysAfterCreationwas added toCreateApiClienttype
- Input field
Added total tax to Carts, Orders, and Line Items
Changes:
- [API] Added optional
totalTaxfield to TaxedPrice and TaxedItemPrice. - [GraphQL API] Changed the
TaxedPricetype:- Added the
totalTaxfield to theTaxedPricetype. - Added the
totalTaxfield to theTaxedItemPricetype.
- Added the
Added Reference Expansion for Product Attributes in the GraphQL API
Changes:
- [GraphQL API] Changed the
RawProductAttributetype:- Added the
referencedResourceSetfield to theRawProductAttributetype. - Added the
referencedResourcefield to theRawProductAttributetype.
- Added the
OrderFromCartDraft can now be extended with Custom Fields.
Changes:
- [API] Added optional
customfield to OrderFromCartDraft. - [GraphQL API] Changed the
OrderCartCommandtype:- Added the
customfield toOrderCartCommandtype.
- Added the
Audit Log now supports Stores
Changes:
- [API] Adds
storesattribute toRecordresponse. - [API] Adds filter for
storekeys to all available endpoints. - [GraphQL API] Adds
storesattribute toChangeHistorytype. - [GraphQL API] Adds filter for
storekeys to all queries for supported resources.
Added 'paymentInfo' and 'state' fields to OrderImportDraft
Changes:
- [API] Added optional field
paymentInfoto OrderImportDraft. - [API] Added optional field
stateto OrderImportDraft.
Added Reference Expansion for Custom Fields in the GraphQL API
We appreciate your feedback on this new in public beta feature; for an example query, please refer to the respective section in the GraphQL API documentation.
Changes:
- [GraphQL API] Changed the
RawCustomFieldtype:- Added the
referencedResourceSetfield to theRawCustomFieldtype. - Added the
referencedResourcefield to theRawCustomFieldtype.
- Added the
- [GraphQL API] Changed the
Carttype:Cartobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
CartDiscounttype:CartDiscountobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
Categorytype:Categoryobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
Channeltype:Channelobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
Customertype:Customerobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
CustomerGrouptype:CustomerGroupobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
CustomObjecttype:CustomObjectobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
DiscountCodetype:DiscountCodeobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
Extensiontype:Extensionobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
InventoryEntrytype:InventoryEntryobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
Messagetype:Messageobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
Ordertype:Orderobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
Producttype:Productobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
ProductDiscounttype:ProductDiscountobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
ProductTypeDefinitiontype:ProductTypeDefinitionobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
Reviewtype:Reviewobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
ShippingMethodtype:ShippingMethodobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
ShoppingListtype:ShoppingListobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
Statetype:Stateobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
Storetype:Storeobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
TaxCategorytype:TaxCategoryobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
TypeDefinitiontype:TypeDefinitionobject type now implementsReferenceExpandableinterface
- [GraphQL API] Changed the
Zonetype:Zoneobject type now implementsReferenceExpandableinterface
Introduced AuthenticationMode for Customer
password field is required for a Customer in public beta. The Password authentication mode is the default mode for backwards compatibility that requires to set a password for the Customer. For use cases where Customers are authenticated externally, you can now set the authenticationMode to ExternalAuth to create Customers without a password.Changes:
- [API] Added
authenticationModefield to Customer and CustomerDraft. - [API] Changed
passwordfield to be optional on CustomerDraft whenauthenticationModeis set toExternalAuth. - [API] Removed
passwordfield from Customer whenauthenticationModeis set toExternalAuth. - [API] Added Set AuthenticationMode update action.
- [GraphQL API] Added the following types to the GraphQL schema:
AuthenticationMode,SetCustomerAuthenticationMode. - [GraphQL API] Changed the
Customertype:Customer.passwordfield type changed fromString!toString- Added the
authenticationModefield to theCustomertype.
- [GraphQL API] Changed the
CustomerSignUpDrafttype:CustomerSignUpDraft.passwordinput field type changed fromString!toString- Input field
authenticationModewas added toCustomerSignUpDrafttype
- [GraphQL API] Changed the
CustomerUpdateActiontype:- Input field
setAuthenticationModewas added toCustomerUpdateActiontype
- Input field
- [GraphQL API] Changed the
CustomerSignMeUpDrafttype:CustomerSignMeUpDraft.passwordinput field type changed fromString!toString
Added the 'key' field to InventoryEntry
key field. You can now retrieve, update, and delete InventoryEntry by user-defined key.Changes:
- [API] Added
keyfield to InventoryEntry and InventoryEntryDraft. - [API] Added Get, Update, and Delete by Key methods to InventoryEntry.
- [API] Added Set Key update action to InventoryEntry.
- [GraphQL API] Changed the
Querytype:Query.inventoryEntry(id)type changed fromString!toStringQuery.inventoryEntry(id)description is changed- Argument
keywas added toQuery.inventoryEntryfield
- [GraphQL API] Changed the
Mutationtype:Mutation.updateInventoryEntry(id)type changed fromString!toStringMutation.updateInventoryEntry(id)description is changed- Argument
keywas added toMutation.updateInventoryEntryfield Mutation.deleteInventoryEntry(id)type changed fromString!toStringMutation.deleteInventoryEntry(id)description is changed- Argument
keywas added toMutation.deleteInventoryEntryfield
Added 'messagePayloads' field to the 'PreviewSuccess' GraphQL type
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
OrderMessagePayload. - [GraphQL API] Changed the
OrderCustomLineItemQuantityChangedtype:OrderCustomLineItemQuantityChangedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderShippingRateInputSettype:OrderShippingRateInputSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderCustomLineItemRemovedtype:OrderCustomLineItemRemovedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderBillingAddressSettype:OrderBillingAddressSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
ParcelItemsUpdatedtype:ParcelItemsUpdatedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderEditAppliedtype:OrderEditAppliedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
DeliveryAddedtype:DeliveryAddedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
PreviewSuccesstype:- Added the
messagePayloadsfield to thePreviewSuccesstype.
- Added the
- [GraphQL API] Changed the
OrderPaymentStateChangedtype:OrderPaymentStateChangedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
ReturnInfoSettype:ReturnInfoSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderCustomerSettype:OrderCustomerSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderDiscountCodeStateSettype:OrderDiscountCodeStateSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderCustomerGroupSettype:OrderCustomerGroupSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderLineItemDiscountSettype:OrderLineItemDiscountSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderStateChangedtype:OrderStateChangedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderLineItemAddedtype:OrderLineItemAddedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderImportedtype:OrderImportedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderCustomerEmailSettype:OrderCustomerEmailSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderCustomLineItemDiscountSettype:OrderCustomLineItemDiscountSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderDiscountCodeAddedtype:OrderDiscountCodeAddedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
CustomLineItemStateTransitiontype:CustomLineItemStateTransitionobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderPaymentRemovedtype:OrderPaymentRemovedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
ParcelTrackingDataUpdatedtype:ParcelTrackingDataUpdatedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderDiscountCodeRemovedtype:OrderDiscountCodeRemovedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
DeliveryRemovedtype:DeliveryRemovedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderCreatedtype:OrderCreatedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderLineItemRemovedtype:OrderLineItemRemovedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
ParcelRemovedFromDeliverytype:ParcelRemovedFromDeliveryobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderDeletedtype:OrderDeletedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderStoreSettype:OrderStoreSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
DeliveryItemsUpdatedtype:DeliveryItemsUpdatedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
ReturnInfoAddedtype:ReturnInfoAddedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderReturnShipmentStateChangedtype:OrderReturnShipmentStateChangedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
ParcelMeasurementsUpdatedtype:ParcelMeasurementsUpdatedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderStateTransitiontype:OrderStateTransitionobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
LineItemStateTransitiontype:LineItemStateTransitionobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderLineItemDistributionChannelSettype:OrderLineItemDistributionChannelSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
ParcelAddedToDeliverytype:ParcelAddedToDeliveryobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
DeliveryAddressSettype:DeliveryAddressSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderCustomLineItemAddedtype:OrderCustomLineItemAddedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderShipmentStateChangedtype:OrderShipmentStateChangedobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderShippingInfoSettype:OrderShippingInfoSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderShippingAddressSettype:OrderShippingAddressSetobject type now implementsOrderMessagePayloadinterface
- [GraphQL API] Changed the
OrderPaymentAddedtype:OrderPaymentAddedobject type now implementsOrderMessagePayloadinterface
Supported GraphQL schema
If you are interested in evaluating a closed beta feature and you would like to provide us with feedback about it, please reach out to your contact person at commercetools.
Added sorting capability when retrieving Shipping Methods for a Location
price, when retrieving the Shipping Methods for a Location. Before, you had to implement this logic in the store front application.- [API] Added
sortquery parameter to Get ShippingMethods for a Location endpoint.
Product Selections can now be extended with Custom Fields
Changes:
- [API] Added optional
customfield to ProductSelection and ProductSelectionDraft. - [API] Added Set Custom Type and Set CustomField update actions to Product Selections.
- [GraphQL API] Added the following types to the GraphQL schema:
SetProductSelectionCustomField,SetProductSelectionCustomType. - [GraphQL API] Changed the
ProductSelectiontype:- Added the
customfield to theProductSelectiontype.
- Added the
- [GraphQL API] Changed the
ProductSelectionCreatedPayloadtype:- Added the
customfield to theProductSelectionCreatedPayloadtype.
- Added the
- [GraphQL API] Changed the
IndividualProductSelectionCreatedPayloadtype:- Added the
customfield to theIndividualProductSelectionCreatedPayloadtype.
- Added the
- [GraphQL API] Changed the
ProductSelectionUpdateActiontype:- Input field
setCustomFieldwas added toProductSelectionUpdateActiontype - Input field
setCustomTypewas added toProductSelectionUpdateActiontype
- Input field
- [GraphQL API] Changed the
CreateProductSelectionDrafttype:- Input field
customwas added toCreateProductSelectionDrafttype
- Input field
Expiration times on access and refresh tokens can now be configured.
accessTokenValiditySeconds and refreshTokenValiditySeconds fields. If specified, each access and refresh token created by the API Client will expire within the specified number of seconds. If not specified, the tokens will expire as per the default configuration.Changes:
- [API] Added
accessTokenValiditySecondsfield to API Client and APIClientDraft. - [API] Added
refreshTokenValiditySecondsfield to API Client and APIClientDraft. - [GraphQL API] Changed the
APIClientWithoutSecrettype:- Added the
refreshTokenValiditySecondsfield to theAPIClientWithoutSecrettype. - Added the
accessTokenValiditySecondsfield to theAPIClientWithoutSecrettype.
- Added the
- [GraphQL API] Changed the
APIClientWithSecrettype:- Added the
accessTokenValiditySecondsfield to theAPIClientWithSecrettype. - Added the
refreshTokenValiditySecondsfield to theAPIClientWithSecrettype.
- Added the
- [GraphQL API] Changed the
CreateApiClienttype:- Input field
refreshTokenValiditySecondswas added toCreateApiClienttype - Input field
accessTokenValiditySecondswas added toCreateApiClienttype
- Input field
Added field to Cart representing the total quantity of all Line Items
totalLineItemQuantity field to Cart that represents the sum of all Line Item quantities. Its value does not take the Cart's Custom Line Items into consideration. With this, there is no need for you any more to calculate this value on the client side.Changes:
- [API] Added
totalLineItemQuantityfield to Cart. - [GraphQL API] Changed the
Carttype:- Added the
totalLineItemQuantityfield to theCarttype.
- Added the
Added OrderPaymentAdded Message
Change:
- [API] Added OrderPaymentAdded Message.
Increased the limit of Customers in a Project to 10,000,000.
Introduced Product Selections in Beta
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_selectionsandmanage_product_selectionsOAuth 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
CreateStoretype:- Input field
productSelectionswas added toCreateStoretype
- Input field
- [GraphQL API] Changed the
Querytype:- Added the
productSelectionsfield to theQuerytype. Query.inStoresdescription is changedQueryobject type now implementsProductSelectionQueryInterfaceinterface- Added the
productSelectionAssignmentsfield to theQuerytype. - Added the
productSelectionfield to theQuerytype. Query.inStoredescription is changed
- Added the
- [GraphQL API] Changed the
Mutationtype:- Added the
updateProductSelectionfield to theMutationtype. - Added the
deleteProductSelectionfield to theMutationtype. - Added the
createProductSelectionfield to theMutationtype.
- Added the
- [GraphQL API] Changed the
Producttype:- Added the
productSelectionRefsfield to theProducttype.
- Added the
- [GraphQL API] Changed the
StoreCreatedtype:- Added the
productSelectionsfield to theStoreCreatedtype. - Added the
productSelectionsReffield to theStoreCreatedtype.
- Added the
- [GraphQL API] Changed the
Storetype:- Added the
productSelectionsfield to theStoretype.
- Added the
- [GraphQL API] Changed the
StoreUpdateActiontype:- Input field
changeProductSelectionActivewas added toStoreUpdateActiontype - Input field
setProductSelectionswas added toStoreUpdateActiontype - Input field
addProductSelectionwas added toStoreUpdateActiontype - Input field
removeProductSelectionwas added toStoreUpdateActiontype
- Input field
- [GraphQL API] Changed the
InStoretype:- Added the
productfield to theInStoretype. - Added the
productSelectionAssignmentsfield to theInStoretype.
- Added the
Return Items can now be extended with Custom Fields.
Changes:
- [API] Added
customfield to LineItemReturnItem and CustomLineItemReturnItem. - [API] Added
customfield to ReturnItemDraft. - [API] Added Set ReturnItem Custom Type and Set ReturnItem CustomField update actions to Orders and Order Edits.
- [GraphQL API] Added the following types to the GraphQL schema:
SetOrderReturnItemCustomField,SetOrderReturnItemCustomTypeSetStagedOrderReturnItemCustomField,SetStagedOrderReturnItemCustomFieldOutput,SetStagedOrderReturnItemCustomType,SetStagedOrderReturnItemCustomTypeOutput. - [GraphQL API] Changed the
CustomLineItemReturnItemtype:- Added the
customfield to theCustomLineItemReturnItemtype.
- Added the
- [GraphQL API] Changed the
ReturnItemtype:- Added the
customfield to theReturnItemtype.
- Added the
- [GraphQL API] Changed the
StagedOrderUpdateActiontype:- Input field
setReturnItemCustomFieldwas added toStagedOrderUpdateActiontype - Input field
setReturnItemCustomTypewas added toStagedOrderUpdateActiontype
- Input field
- [GraphQL API] Changed the
ReturnItemDraftTypetype:- Input field
customwas added toReturnItemDraftTypetype
- Input field
- [GraphQL API] Changed the
ReturnItemDraftTypeOutputtype:- Added the
customfield to theReturnItemDraftTypeOutputtype.
- Added the
- [GraphQL API] Changed the
OrderUpdateActiontype:- Input field
setReturnItemCustomFieldwas added toOrderUpdateActiontype - Input field
setReturnItemCustomTypewas added toOrderUpdateActiontype
- Input field
- [GraphQL API] Changed the
LineItemReturnItemtype:- Added the
customfield to theLineItemReturnItemtype.
- Added the
Parcels can now be extended with Custom Fields.
{/* vale commercetools.Acronyms = NO */}
Changes:
- [API] Added
customfield to Parcel and ParcelDraft. - [API] Added Set Parcel Custom Type and Set Parcel CustomField update actions to Orders and Order Edits.
- [GraphQL API] Added the following types to the GraphQL schema:
SetOrderParcelCustomField,SetOrderParcelCustomType,SetStagedOrderParcelCustomField,SetStagedOrderParcelCustomFieldOutput,SetStagedOrderParcelCustomType,SetStagedOrderParcelCustomTypeOutput. - [GraphQL API] Changed the
Parceltype:- Added the
customfield to theParceltype.
- Added the
- [GraphQL API] Changed the
ParcelDataDraftTypetype:- Input field
customwas added toParcelDataDraftTypetype
- Input field
- [GraphQL API] Changed the
StagedOrderUpdateActiontype:- Input field
setParcelCustomFieldwas added toStagedOrderUpdateActiontype - Input field
setParcelCustomTypewas added toStagedOrderUpdateActiontype
- Input field
- [GraphQL API] Changed the
AddOrderParcelToDeliverytype:- Input field
customwas added toAddOrderParcelToDeliverytype
- Input field
- [GraphQL API] Changed the
AddStagedOrderParcelToDeliveryOutputtype:- Added the
customfield to theAddStagedOrderParcelToDeliveryOutputtype.
- Added the
- [GraphQL API] Changed the
ParcelDatatype:- Added the
customfield to theParcelDatatype.
- Added the
- [GraphQL API] Changed the
AddStagedOrderParcelToDeliverytype:- Input field
customwas added toAddStagedOrderParcelToDeliverytype
- Input field
- [GraphQL API] Changed the
OrderUpdateActiontype:- Input field
setParcelCustomFieldwas added toOrderUpdateActiontype - Input field
setParcelCustomTypewas added toOrderUpdateActiontype
- Input field
Added key to ProductProjection GraphQL type
key field to the ProductProjection GraphQL type.Change:
- [GraphQL API] Changed the
ProductProjectiontype:- Added the
keyfield to theProductProjectiontype.
- Added the
Added token revocation endpoint
Revoking tokens prevents the abuse of abandoned tokens and contributes to the security of your applications. You might want to revoke the tokens associated with the Customer, for example, when the Customer logs out, changes identity or uninstalls your application.
Introduced Order Search
Changes:
- [API] Introduced Order Search API in public beta.
- [API] Added
ordersfield to Search Indexing Configuration on Projects. - [API] Added Change Order Search Status update action on Projects.
Added Price selection to Product Projection Search on GraphQL API
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
ScopedPrice. - [GraphQL API] Changed the
ProductSearchVarianttype:- Added the
scopedPricefield to theProductSearchVarianttype. - Added the
scopedPriceDiscountedfield to theProductSearchVarianttype.
- Added the
- [GraphQL API] Changed the
PriceSelectorInputtype:PriceSelectorInput.dateinput field type changed fromDateTime!toDateTime
Core part of the Import API achieves general availability status.
- Import Container
- All Processing States -
processing,validationFailed,rejected,unresolved,waitForMasterVariant,imported - Import Operations
- Import Summaries
Deliveries can now be extended with Custom Fields
{/* vale commercetools.Acronyms = NO */}
Changes:
- [API] Added
customfield to Delivery. - [API] Added update actions Set Delivery Custom Type and Set Delivery CustomField to the Order.
- [GraphQL API] Added the following types to the GraphQL schema:
SetOrderDeliveryCustomField,SetOrderDeliveryCustomType,SetStagedOrderDeliveryCustomField,SetStagedOrderDeliveryCustomFieldOutput,SetStagedOrderDeliveryCustomType,SetStagedOrderDeliveryCustomTypeOutput. - [GraphQL API] Changed the
AddOrderDeliverytype:- Input field
customwas added toAddOrderDeliverytype
- Input field
- [GraphQL API] Changed the
Deliverytype:- Added the
customfield to theDeliverytype.
- Added the
- [GraphQL API] Changed the
AddStagedOrderDeliverytype:- Input field
customwas added toAddStagedOrderDeliverytype
- Input field
- [GraphQL API] Changed the
StagedOrderUpdateActiontype:- Input field
setDeliveryCustomFieldwas added toStagedOrderUpdateActiontype - Input field
setDeliveryCustomTypewas added toStagedOrderUpdateActiontype
- Input field
- [GraphQL API] Changed the
AddStagedOrderDeliveryOutputtype:- Added the
customfield to theAddStagedOrderDeliveryOutputtype.
- Added the
- [GraphQL API] Changed the
OrderUpdateActiontype:- Input field
setDeliveryCustomTypewas added toOrderUpdateActiontype - Input field
setDeliveryCustomFieldwas added toOrderUpdateActiontype
- Input field
Added Product key to Line Item
Previously, the Line Items in Carts and Orders contained the Product ID only, to refer to the related Product. From now on, the Line Items have the user-defined Product key also, in case it exists for the related Product. The new field is present on Carts that were created or updated after 2 December 2021 and on Orders created after this date.
Changes:
- [API] Added
productKeyfield to LineItem. - [GraphQL API] Changed the
LineItemtype:- Added the
productKeyfield to theLineItemtype.
- Added the
Payment transactions can now be extended with Custom Fields
Changes:
- [API] Added
customfield to Transaction, TransactionDraft, and MyTransactionDraft . - [API] Added update actions Set Transaction Custom Type and Set Transaction CustomField to Payments.
- [API] Added Set Transaction CustomField update action to My Payments.
- [GraphQL API] Added the following types to the GraphQL schema:
SetPaymentTransactionCustomField,SetPaymentTransactionCustomType. - [GraphQL API] Changed the
Transactiontype:- Added the
customfield to theTransactiontype.
- Added the
- [GraphQL API] Changed the
MyTransactionDrafttype:- Input field
customwas added toMyTransactionDrafttype
- Input field
- [GraphQL API] Changed the
TransactionDrafttype:- Input field
customwas added toTransactionDrafttype
- Input field
- [GraphQL API] Changed the
PaymentUpdateActiontype:- Input field
setTransactionCustomTypewas added toPaymentUpdateActiontype - Input field
setTransactionCustomFieldwas added toPaymentUpdateActiontype
- Input field
Added update action for the supply channel of Line Items in a Cart
Changes:
- [API] Added Set LineItem SupplyChannel to Carts and My Carts.
- [GraphQL API] Added the following types to the GraphQL schema:
SetCartLineItemSupplyChannel. - [GraphQL API] Changed the
CartUpdateActiontype:- Input field
setLineItemSupplyChannelwas added toCartUpdateActiontype
- Input field
- [GraphQL API] Changed the
MyCartUpdateActiontype:- Input field
setLineItemSupplyChannelwas added toMyCartUpdateActiontype
- Input field
Increased maximum timeout for payment-related API Extensions
payment from 2 to 10 seconds what makes your integrations with payment service providers (PSPs) more reliable. You can set this timeout on the ExtensionDraft upon creation of the Extension or via Set TimeoutInMs update action (setTimeoutInMs mutation in the GraphQL API).Added AWS EventBridge as supported Subscription destination
- [API] Added EventBridge destination.
- [GraphQL API] Added the following types to the GraphQL schema:
EventBridgeDestination,EventBridgeDestinationInput,SetCartLineItemSupplyChannel. - [GraphQL API] Changed the
SearchIndexingConfigurationtype:- Added the
categoriesDisabledForInternalTestfield to theSearchIndexingConfigurationtype.
- Added the
- [GraphQL API] Changed the
CartUpdateActiontype:- Input field
setLineItemSupplyChannelwas added toCartUpdateActiontype
- Input field
- [GraphQL API] Changed the
MyCartUpdateActiontype:- Input field
setLineItemSupplyChannelwas added toMyCartUpdateActiontype
- Input field
- [GraphQL API] Changed the
SetStagedOrderReturnInfotype:SetStagedOrderReturnInfo.itemsdefault value changed from none to[]
- [GraphQL API] Changed the
DestinationInputtype:- Input field
EventBridgewas added toDestinationInputtype
- Input field
- [GraphQL API] Changed the
ProductProjectiontype:- Removed the
keyfield from theProductProjectiontype.
- Removed the
- [GraphQL API] Changed the
SetOrderReturnInfotype:SetOrderReturnInfo.itemsdefault value changed from none to[]
Error status code 400 for POST request
Added Product key to GraphQL API's Product Projection Search
key to the results of Product Projection Search queries in the GraphQL API.Changes:
- [GraphQL API] Added
keyfield to theProductProjectiontype.
Audit Log now tracks Custom Object Changes
Changes:
- [API] Added the
view_key_value_documents:{projectKey}scope. - [API] Added
key-value-documentto ChangeHistoryResourceType. - [API] Added AddPropertyChange.
- [API] Added RemovePropertyChange.
- [API] Added SetPropertyChange.
- [API] Added SetValueChange.
- [API] Added CustomObjectLabel.
- [GraphQL API] Added the following types to the graphQL schema:
CustomObjectLabel,CustomObjectChangeInput. - [GraphQL API] Added queries
customObjectandcustomObjects. - [GraphQL API] Added
CustomObjectto the ResourceType enum.
Added supplyChannel field to InventoryEntryQuantitySet Message
Changes:
- [API] Added the
supplyChannelfield to InventoryEntryQuantitySet Message. - [GraphQL API] Changed the
InventoryEntryQuantitySettype:- Added the
supplyChannelReffield to theInventoryEntryQuantitySettype. - Added the
supplyChannelfield to theInventoryEntryQuantitySettype.
- Added the
Added CustomerFirstNameSet, CustomerLastNameSet, and CustomerTitleSet Messages
firstName, lastName, and title fields on Customers specifically. Before, you had to use the generic ChangeSubscription for that.
These Messages are triggered by Set First Name, Set Last Name, and Set Title update actions.Changes:
- [API] Added CustomerFirstNameSet Message.
- [API] Added CustomerLastNameSet Message.
- [API] Added CustomerTitleSet Message.
- [GraphQL API] Added the following types to the GraphQL schema:
CustomerFirstNameSet,CustomerLastNameSet,CustomerTitleSet.
Added Set ReturnInfo update action and Message
returnInfo array field of Order in a single request.
Previously, to remove an entry from the returnInfo field, it was necessary to use the Add ReturnInfo update action with a negative quantity.
The Set ReturnInfo update action triggers the ReturnInfoSet Message.Changes:
- [API] Added Set ReturnInfo update action to Orders.
- [API] Added Set ReturnInfo update action to Order Edits.
- [API] Added ReturnInfoSet Message.
- [GraphQL API] Added the following types to the GraphQL schema:
ReturnInfoDraftType,ReturnInfoDraftTypeOutput,ReturnInfoSet,SetOrderReturnInfo,SetStagedOrderReturnInfo,SetStagedOrderReturnInfoOutput. - [GraphQL API] Changed the
StagedOrderUpdateActiontype:- Input field
setReturnInfowas added toStagedOrderUpdateActiontype
- Input field
- [GraphQL API] Changed the
OrderUpdateActiontype:- Input field
setReturnInfowas added toOrderUpdateActiontype
- Input field
Error status code 400 for POST request
For the users to be able to prepare for this change, we will update the SDK before the actual change to the API takes place. The next SDK release will reflect this change. Before 7 December 2021, this new part of the SDK cannot be used.
Fixed price Cart Discounts achieved general availability status
Added fixed price Cart Discounts on CustomLineItems Target
- [API] Added support for CustomLineItems Target when creating a fixed price Cart Discount.
Added support for Mark Matching Variants in GraphQL API's Product Projection Search
isMatchingVariant to the Product Variants in the result of productProjectionSearch queries. This field will only have a value when the argument markMatchingVariants (that we also added) is set to true.Changes:
- [GraphQL API] Changed the
ProductSearchVarianttype:- Added the
isMatchingVariantfield to theProductSearchVarianttype.
- Added the
- [GraphQL API] Changed the
Querytype:- Added argument
markMatchingVariantstoQuery.productProjectionSearchfield to align with the REST API. - Deprecated argument
Query.productProjectionSearch(markMatchingVariant)in favor ofmarkMatchingVariants.
- Added argument
Detailed error messages on the GraphQL API
- [Graphql API] Added the error response format to the GraphQL API.
Unpublish Products via Import API
publish field to false.Added existence check for Products
- [API] Added existence check methods for Products by ID, by Key, and by Query Predicate.
Enable sorting on Custom Fields
custom.fields.${fieldName} sort parameter.Localized name for Shipping Method
Changes:
- [API] Added
localizedNameto ShippingMethod. - [API] Added
localizedNameto ShippingMethodDraft. - [API] Added Set Localized Name Update Action.
- [GraphQL API] Changed the
ShippingMethodUpdateActiontype:- Input field
setLocalizedNamewas added toShippingMethodUpdateActiontype.
- Input field
- [GraphQL API] Changed the
ShippingMethodtype:- Added the
localizedNameAllLocalesfield to theShippingMethodtype. - Added the
localizedNamefield to theShippingMethodtype.
- Added the
- [GraphQL API] Changed the
ShippingMethodDrafttype:- Input field
localizedNamewas added toShippingMethodDrafttype.
- Input field
- [GraphQL API] Added the following type to the GraphQL schema:
SetShippingMethodLocalizedName.
Stores achieved general availability status
- Creating and managing Stores
- Custom fields on Stores
- Stores on Carts, Orders, Customers, and Shopping Lists
- Store-based OAuth scopes for orders, customers, and Shopping Lists
- Store-based Product Projection dimensions for filtering of locales, prices, and inventory based on Store settings.
Added Customer Deleted Message
Changes:
- [API] Added CustomerDeleted Message.
- [GraphQL API] Added the following types to the GraphQL schema:
CustomerDeleted.
Excluding Changes initiated by background processes from Audit log results
It is now possible to exclude Changes initiated by background processes from Audit Log response data sets.
Change:
- [API] Added
excludePlatformInitiatedChangesquery parameter to all Query Record endpoints that will allow Changes originated by background processes to be excluded from the response data set. - [GraphQL API] Added
excludePlatformInitiatedChangesfiltering parameter.
Align data type for 'date' field in PriceSelectorInput
date field on PriceSelectorInput to DateTime.Changes:
- [GraphQL API] Changed the
PriceSelectorInput.datetype fromInstant!toDateTime!
Added exists operator to GraphQL API
- it optimizes the query resulting in shorter response times and
- it avoids you finding workarounds with other query fields to achieve the same.
Changes:
- [GraphQL API] Added the Boolean
existsfield to allQueryResulttypes.
Custom Objects in Custom Fields and Attributes is now supported.
key-value-document are now supported.
This enables you to import Custom Objects in Custom Fields.
Custom Fields of this type can be imported for every resource that supports Custom Fields.
Attributes (of ProductVariant) of key-value-document Reference Type are also supported.
Please see CustomObjectKeyReference for more information.New Processing State structure introduced
The following changes were made:
- Introduced a new Processing State
processing. This is the initial state assigned to an Import Operation. - The
unresolvedstate will no longer be the initial state. - The
unresolvedstate continues to be used (but exclusively) as the state to indicate missing references. keyof ProductVariantDraftImport is now mandatory.
Added Correlation ID to calls to external OAuth server
Announced long-term support plan for Composable Commerce SDKs
We have set up a long-term support plan to actively support and maintain Version 1 (v1) SDKs until their end of life. Additionally, we have provided information about migration to our Version 2 (v2) SDKs that are constantly updated with the newest API features as soon as they are released. This support plan indicates when you could schedule the migration to v2 SDKs.
Renaming Import Sink to Import Container and restructuring URLs.
The following changes were made:
- Import Sink is deprecated and Import Container was introduced. This is a name change. All functionalities and behaviors of the Import Sink is succeeded by the Import Container.
keyis now mandatory in ProductVariantDraftImport.- Resource import POST request (for example, Import Categories and Import ProductTypes)
- previous:
/{projectKey}/{resourceType}/importSinkKey={importSinkKey} - current:
/{projectKey}/{resourceType}/importContainerKey/{importContainerKey}
- previous:
- Monitoring endpoints
- Get ImportSummary
- previous:
/{projectKey}/import-summaries/importSinkKey={importSinkKey} - current:
/{projectKey}/import-containers/{importContainerKey}/import-summaries
- previous:
- Get ImportOperation by ID
- previous:
/{projectKey}/{resourceType}/importSinkKey={importSinkKey}/import-operations/{id} - current:
/{projectKey}/import-operations/{id}
- previous:
- Query ImportOperations by Import Container ID
- previous:
/{projectKey}/{resourceType}/importSinkKey={importSinkKey}/import-operations - current:
/{projectKey}/import-containers/{importContainerKey}/import-operations
- previous:
- Get ImportSummary
Introduced limits on Store's Inventory Supply and Product Distribution Channels
- up to 100 Inventory Supply Channels and
- up to 100 Product Distribution Channels
by default.
Increased the limit of subscriptions to 50
Added Product Projection Search to GraphQL API
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
CategoryOrderHintProductSearch,DimensionsProductSearch,DiscountedProductSearchPriceValue,ExistsFilterInput,FacetResult,FacetResultValue,ImageProductSearch,MissingFacetInput,MissingFilterInput,PriceSelectorInput,ProductPriceSearch,ProductProjection,ProductProjectionSearchResult,ProductSearchPriceTier,ProductSearchVariant,ProductSearchVariantAvailabilitiesResult,ProductSearchVariantAvailability,ProductSearchVariantAvailabilityWithChannel,ProductSearchVariantAvailabilityWithChannels,RangeCount,RangeCountDouble,RangeCountLong,RangeElementInput,RangeFacetInput,RangeFacetResult,RangeFilterInput,RawProductSearchAttribute,SearchFacetInput,SearchFacetModelInput,SearchFilterInput,SearchFilterModelInput,SearchKeywordProductSearch,SearchKeywordsProductSearch,SuggestTokenizerProductSearch,CustomSuggestTokenizerProductSearch,WhitespaceSuggestTokenizerProductSearch,TermCount,TermsFacetInput,TermsFacetResult,TreeFacetInput,TreeFilterInput,ValueCountFacetInput,ValueFacetInput,ValueFacetResult,ValueFilterInput. - [GraphQL API] Changed the
Querytype:- Added the
productProjectionSearchfield to theQuerytype.
- Added the
Introducing a new Processing State structure
Processing will be added as a default state.
The Unresolved state will be reserved exclusively for unresolved references.Unresolved state has the following meaning:- It is the initial Processing State assigned by default to Import Operations when they are created.
- Import Operations remain in this state if there are missing references to complete the resource import.
Processing and the following changes will take place:Processingwill be the new default Processing State assigned to Import Operations when they are created.- The
Unresolvedstate will no longer be the initial state. - The
Unresolvedstate continues to be used (but exclusively) as the state to indicate missing references. A user's action will be required in this state to fix the missing references.
Added Store Created and Store Deleted Messages
You can now subscribe to messages triggered when Stores are created and deleted.
Changes:
- [API] Added StoreCreated Message
- [API] Added StoreDeleted Message
- [GraphQL API] Added the following types to the GraphQL schema:
StoreCreated, andStoreDeleted.
Introduced a limit on Product Types
- [API] Introduced an API Limit on Product Types.
Unresolved references can now be discovered with debug mode
Unresolved Processing State by listing which references exactly could not be resolved.true you will find the list of unresolved references in the respective additional field in the query response as shown in the following example.ImportSink is no longer specific to a ResourceType
Since an ImportSink is no longer specific to an ImportResourceType it is no longer mandatory to specify the ImportResourceType when creating an ImportSink.
The following change was made:
- Made the
resourceTypefield on the ImportSinkDraft optional.
Total field added to ImportOperationPagedResponse
The following change was made:
- Added the
totalfield to ImportOperationPagedResponse.
Staged field was added to ProductVariantPatch
staged field to ProductVariantPatch.
The field can be used to specify whether to apply ProductVariant updates to the current projection of a Product.The following change was made:
- Added the
stagedfield to ProductVariantPatch.
Added sort query parameter for ImportSinks
sort parameter.The following changes were made:
- Added
sortquery parameter to the query ImportSinks endpoint. - The query parameters
limitandoffsetare now optional at the query ImportSinks endpoint.
Introducing Order Patch endpoint
The following endpoint was added:
- Order Patch endpoint.
Extending Audit Log tracked Changes
- [API] Added AddDiscountCodeChange.
- [API] Added RemoveDiscountCodeChange.
- [API] Added ChangeTaxCalculationModeChange.
- [API] Added ChangeTaxModeChange.
- [API] Added ChangeTaxRoundingModeChange.
- [API] Added SetCountryChange.
- [API] Added SetCustomLineItemTaxAmountChange.
- [API] Added SetCustomShippingMethodChange.
- [API] Added SetLineItemDistributionChannelChange.
- [API] Added SetLineItemTaxAmountChange.
- [API] Added SetOrderTotalTaxChange.
- [API] Added SetShippingMethodChange.
- [API] Added SetShippingMethodTaxAmountChange.
- [API] Added SetShippingMethodTaxRateChange.
- [API] Added SetShippingRateInputChange.
- [API] Added SetCustomLineItemTaxCategoryChange.
- [API] Added SetShippingInfoPriceChange.
- [API] Added SetShippingRateChange.
- [API] Added SetShippingInfoTaxedPriceChange.
- [API] Added SetOrderTaxedPriceChange.
- [API] Added SetCustomLineItemTaxRateChange.
- [API] Added SetLineItemTaxRateChange.
- [API] Added
taxModeto SetOrderTaxedPriceChange. - [API] Added
taxModeto SetCustomLineItemTaxRateChange. - [API] Added
taxModeto SetLineItemTaxRateChange. - [GraphQL API] Added the
taxModefield to OrderChange.
Key as the identifier of Address at Customer Import endpoint
key of an Address as a mandatory identifier for Addresses, and id is no longer a supported identifier.
Said differently, the addresses field in CustomerImport now takes the CustomerAddress type, replacing the previous Address.The following changes were made:
addressesin CustomerImport is now a required field. (It can, however, be an empty array.)- added CustomerAddress.
Added client ID to OAuth Token Introspection response
client_id as optional field as defined in RFC 7662.Customer Import endpoint is temporarily under maintenance
Added restrictions on unsupported fields in payloads
Key field is removed from OrderImport
key field is deprecated from OrderImport of the Import API.
The existing field orderNumber is now a required identifier for any Order import or update.
The following changes were made at the Order Import endpoint:- Deprecated the
keyfield in OrderImport. - The existing (previously optional) field
orderNumberis now required.
Add Store to Shopping List
- [API] Added the
storefield to ShoppingList, ShoppingListDraft, and MyShoppingListDraft. - [API] Added new Store-related scopes,
view_shopping_lists,manage_shopping_lists, andmanage_my_shopping_lists - [API] Added Get ShoppingList in Store by ID method to Shopping Lists and My Shopping Lists.
- [API] Added Get ShoppingList in Store by Key method to Shopping Lists and My Shopping Lists.
- [API] Added Query ShoppingLists in Store method to Shopping Lists and My Shopping Lists.
- [API] Added Create ShoppingList in Store method to Shopping Lists and My Shopping Lists.
- [API] Added Update ShoppingList in Store by ID method to Shopping Lists and My Shopping Lists.
- [API] Added Update ShoppingList in Store by Key method to Shopping Lists and My Shopping Lists.
- [API] Added Set Store update action to Shopping Lists.
- [API] Added Delete ShoppingList in Store by ID method to Shopping Lists and My Shopping Lists.
- [API] Added Delete ShoppingList in Store by Key method to Shopping Lists and My Shopping Lists.
- [GraphQL API] The existing query fields
inStoreandinStorescan be used to query, update and delete Shopping Lists in one or more Stores. The query fields can also be used for My Shopping Lists. - [GraphQL API] Changed the
ShoppingListQuerytype:- Added the
storefield to theShoppingListQuerytype.
- Added the
Automatic deactivation of indexing of Product information for non-production Projects
- Product Projection Search
- Product Suggestions
- Project update with the action Change Product Search Indexing Enabled
The deactivation of Product information indexing will always happen on the day after a 30 day observation period.
The first deactivations will happen on 12 April 2021 and will include Projects that had no calls against the aforementioned API endpoints between 13 March 2021 and 11 April 2021. Please see the example below:
- Start date 30 days observation period: 13 March 2021
- End date 30 days observation period: 11 April 2021
- Last API call or day of activation (search indexing activated): 12 March 2021
- Day of automatic deactivation: 12 April 2021
Enhanced configuration for indexing Product information
- [API] Added
lastModifiedByandlastModifiedAtfields to SearchIndexingConfigurationValues - [GraphQL API] Changed the
SearchIndexingConfigurationValuestype:- Added the
lastModifiedByfield to theSearchIndexingConfigurationValuestype. - Added the
lastModifiedAtfield to theSearchIndexingConfigurationValuestype.
- Added the
Introduced Audit Log
Removed deprecated functionality from GraphQL API
X-DEPRECATION-NOTICE from now on.Added configuration for indexing of product information
- [API] Added
searchIndexingfield to Project. - [API] Added Search Indexing Configuration for
productsto Project. - [API] Added Search Indexing Configuration Values for
statusto Search Indexing Configuration. - [API] Added Change Product Search Indexing Enabled update action to Project endpoint.
- [API] Added
SearchDeactivatedandSearchIndexingInProgressErrors. - [GraphQL API] Added following types
ChangeProjectSettingsProductSearchIndexingEnabled,SearchIndexingConfiguration,SearchIndexingConfigurationValues,SearchIndexingStatus. - [GraphQL API] Added
searchIndexingfield toProjectProjectiontype. - [GraphQL API] Added input field
changeProductSearchIndexingEnabledtoProjectSettingsUpdateActiontype.
Changed default settings for new Projects
- via API using the Change Product Search Indexing Enabled update action on the Project endpoint.
- Contact the Composable Commerce support team and provide the region, project key(s), and use case(s).
Reference Customer Groups by key
key in addition to id when Creating a Product, Setting a Product's Price, or Adding or Changing Embedded Prices of a Product Variant.- [API] The
customerGroupfield of PriceDraft now takes a value of type Resource Identifier, instead of a Reference, to a Customer Group.
Use External User ID from an external OAuth token in Client Logging
lastModifiedBy and createdBy fields. Previously, this was only possible by specifying the X-External-User-ID header, which did not work well with the External OAuth flows.Introduced fixed price cart discounts as beta feature
With this new discount type, you can model cart promotions like these:
- Final Sale - all articles of the 'Sales' category in the cart for 15€ each
- Buy a pair of sunglasses for 10€ with coupon code SUNGLASSES (not limited to one pair, all pairs will become 10€)
- Phone accessories are only $10 with the purchase of any new phone (not limited to one accessory, all accessories will become $10)
- Get any 2 shirts for $50 each (not limited to two shirts, all shirts will become $50 if there are at least 2 shirts in the cart).
- [API] Added CartDiscountValue of type
fixedthat can be set on the CartDiscountValueDraft. - [GraphQL API] Added the
fixedfield to theCartDiscountValueInputtype.
Custom Fields for Addresses
- [API] Added a
customfield to the Address and AddressDraft. - [API] Added Set Shipping Address Custom Type and Set Shipping Address CustomField update actions for carts
- [API] Added Set Billing Address Custom Type and Set Billing Address CustomField update actions for carts
- [API] Added Set Item Shipping Address Custom Type and Set Item Shipping Address CustomField update actions for carts
- [API] Added Set Shipping Address Custom Type and Set Shipping Address CustomField update actions for orders
- [API] Added Set Billing Address Custom Type and Set Billing Address CustomField update actions for orders
- [API] Added Set Item Shipping Address Custom Type and Set Item Shipping Address CustomField update actions for orders
- [API] Added Set Delivery Address Custom Type and Set Delivery Address CustomField update actions for orders
- [API] Added Set Shipping Address Custom Type and Set Shipping Address CustomField update actions for order edits
- [API] Added Set Billing Address Custom Type and Set Billing Address CustomField update actions for order edits
- [API] Added Set Item Shipping Address Custom Type and Set Item Shipping Address CustomField update actions for order edits
- [API] Added Set Delivery Address Custom Type and Set Delivery Address CustomField update actions for order edits
- [API] Added Set Address Custom Type and Set Address CustomField update actions on customers
- [API] Added Set Address Custom Type and Set Address CustomField update actions on channels
Added GraphQL support for Replicate Cart in Store endpoint
- [GraphQL API] Added support for Replicate a Cart in a Store endpoint.
Added Custom Fields to Shipping Methods
- [API] Added
shipping-methodenumeration value to Customizable Resources. - [API] Added
customfield to ShippingMethodDraft and ShippingMethod. - [API] Added the setCustomType update action to the Update ShippingMethod endpoint.
- [API] Added the setCustomField update action to the Update ShippingMethod endpoint.
- [GraphQL API] Added the
customfield to theShippingMethodtype. - [GraphQL API] Added
setCustomTypeandsetCustomFieldstoShippingMethodUpdateActiontype.
Added variant.key to predicate field identifiers
variant.key as a Discount Predicate field identifier. This allows you to use the same Discount Predicate for your production environment as you have used on your staging environment. Before it was not always possible since you had to rely on the automatically generated product.id and variant.id instead that differ between Projects.- [API] Added
variant.keyfield to Product Field Identifiers. - [API] Added
variant.keyfield to LineItem Field Identifiers.
Added a reference to anonymous cart on customer
id or external key. The previously used anonymousCartId will soon be deprecated.- [API] Added
anonymousCartfield on customer authentication. - [API] Added
anonymousCartfield on customer authentication in-store. - [API] Added
anonymousCartfield on customer creation. - [API] Added
anonymousCartfield on customer creation in-store customer. - [API] Deprecated the
anonymousCartIdfield in the listed endpoints above in favor ofanonymousCartfield.
Added Customer Password Updated Message
You can now subscribe to messages triggered when Customers have changed their password.
- [API] Added Customer Password Updated Message.
- [API] Added Change Customer's Password in Store update action.
Added Replicate Cart in Store endpoint
- [API] Added endpoint Replicate cart in store.
Fixed validation on Products POST endpoint
Added key to Cart
id, it is now possible to use key as a user-defined identifier for the list of operations below. This gives you more flexibility when referencing Carts from commercetools-external systems.- [API] Added optional
keyfield to Cart and CartDraft. - [API] Added Get a Cart by Key method.
- [API] Added Update a Cart by Key method.
- [API] Added Delete a Cart by Key method.
- [API] Added Get a Cart in a Store by Key method.
- [API] Added Update a Cart in a Store by Key method.
- [API] Added Delete a Cart in a Store by Key method.
- [API] Added SetKey update action.
- [API] Added Replicate a Cart by Key method.
- [API] Added
cartfield to OrderFromCartDraft. - [API] Deprecated the
idfield in OrderFromCartDraft in favor of thecartfield.
Added sort query parameter in GET endpoints
sort, with which
you can sort the createdAt and lastModifiedAt fields with sort options asc (default) or desc. Multiple sorting is also allowed for up to three fields.Added endpoints for Product Variant Patches
Now you are able to update more than one ProductVariants belonging to different or the same Products with several small Patches.
Allow subscriptions to Customer Token events
- [API] Added types
customer-email-tokenandcustomer-password-tokento the list of supported resourceTypeIds.
Added 'oldSlug' field to CategorySlugChanged and ProductSlugChanged Messages
oldSlug to the CategorySlugChanged Message and ProductSlugChanged Message that contains the slug as it was before the change. This information makes it easier for you to track changes of your slugs and to implement auto-redirection strategies for those product and category pages that have moved temporarily or permanently. On the GraphQL API you can now also query for the oldSlugAllLocales field of the messages in the fragments CategorySlugChanged and ProductSlugChanged.- [API] Added optional field
oldSlugto CategorySlugChanged Message. - [API] Added optional field
oldSlugto ProductSlugChanged Message. - [GraphQL API] Added the
oldSlugandoldSlugAllLocalesfields toCategorySlugChangedtype ofmessagesquery. - [GraphQL API] Added the
oldSlugandoldSlugAllLocalesfields toProductSlugChangedtype tomessagesquery.
Added Product Suggestions GraphQL Query Schema
- [GraphQL API] Added the following types to the GraphQL schema:
SearchKeywordArgument,SuggestResult,SuggestResultEntry,Suggestion. - [GraphQL API] Changed the
Querytype:- Added the
productProjectionsSuggestfield to theQuerytype. - Argument
keywas added toQuery.productDiscountfield Query.productDiscount(id)type changed fromString!toString
- Added the
Added key field to PriceDraftImport
key field in EmbeddedPriceDraftImport as an optional input.Introduced a character limit for the full-text search query parameter on product projection search
New error codes for operations on a Store
ProjectNotConfiguredForLanguages error code is returned for the attempt to create a Store with languages that are not supported by the Store's project. The same error code is also returned if an attempt to add or set non-project languages on a Store is made. The MissingRoleOnChannel error code is returned for the attempt to create a Store with a supplyChannel or distributionChannel referencing a Channel that misses the respective ChannelRole. The same error code is also returned if the user attempts to add or set a supplyChannel or distributionChannel referencing a Channel without the required ChannelRole.- [API] Added the error code ProjectNotConfiguredForLanguages.
- [API] Added the error code MissingRoleOnChannel.
GraphQL out of beta | End of life for deprecated fields
During the beta phase, we gathered insights about operational complexity and usage and decided to make a few changes.
- Deprecated fields will be removed from the GraphQL API.
- Deprecated OAuth scopes will be removed from the GraphQL API. The deprecated scopes are often too broad to allow for meaningful access right restrictions.
Total prices for giftLineItems in cart predicates
lineItemTotal, lineItemNetTotal and lineItemGrossTotal now take the discounted price of a giftLineItem into account. This solves the issue of a giltLineItem remaining in a Cart after a cart update even if the predicate does not apply anymore.DataErasure parameter added to ResourceDeleted Subscription Notification
dataErasure parameter set to true on the DELETE request, the ResourceDeletedDeliveryPayload will also contain the dataErasure parameter. This allows downstream systems to erase the data as well.- [API] Added
dataErasureto the ResourceDeleted Payload.
Added Messages GraphQL Query Schema
- [GraphQL API] Added the following types to the GraphQL schema:
CategoryCreated,CategorySlugChanged,CustomLineItemStateTransition,CustomerAddressAdded,CustomerAddressChanged,CustomerAddressRemoved,CustomerCompanyNameSet,CustomerCreated,CustomerDateOfBirthSet,CustomerEmailChanged,CustomerEmailVerified,CustomerGroupSet,CustomerPasswordUpdated,DeliveryAdded,DeliveryAddressSet,DeliveryItemsUpdated,DeliveryRemoved,DummyLocalizedString,InventoryEntryCreated,InventoryEntryCreatedContent,InventoryEntryDeleted,InventoryEntryQuantitySet,LineItemStateTransition,Message,MessageId,MessagePayload,MessageQueryResult,OrderBillingAddressSet,OrderCreated,OrderCustomLineItemAdded,OrderCustomLineItemDiscountSet,OrderCustomLineItemQuantityChanged,OrderCustomLineItemRemoved,OrderCustomerEmailSet,OrderCustomerGroupSet,OrderCustomerSet,OrderDeleted,OrderDiscountCodeAdded,OrderDiscountCodeRemoved,OrderDiscountCodeStateSet,OrderEditApplied,OrderImported,OrderLineItemAdded,OrderLineItemDiscountSet,OrderLineItemDistributionChannelSet,OrderLineItemRemoved,OrderPaymentStateChanged,OrderReturnShipmentStateChanged,OrderShipmentStateChanged,OrderShippingAddressSet,OrderShippingInfoSet,OrderShippingRateInputSet,OrderStateChanged,OrderStateTransition,OrderStoreSet,ParcelAddedToDelivery,ParcelItemsUpdated,ParcelMeasurementsUpdated,ParcelRemovedFromDelivery,ParcelTrackingDataUpdated,PaymentCreated,PaymentInteractionAdded,PaymentStatusInterfaceCodeSet,PaymentStatusStateTransition,PaymentTransactionAdded,PaymentTransactionStateChanged,ProductAddedToCategory,ProductCreated,ProductDeleted,ProductImageAdded,ProductPriceDiscountUpdateMessagePayload,ProductPriceDiscountsSet,ProductPriceExternalDiscountSet,ProductProjectionMessagePayload,ProductPublished,ProductRemovedFromCategory,ProductRevertedStagedChanges,ProductSlugChanged,ProductStateTransition,ProductUnpublished,ProductVariantAdded,ProductVariantDeleted,ReferenceId,ReturnInfoAdded,ReviewCreated,ReviewRatingSet,ReviewStateTransition,UserProvidedIdentifiers. - [GraphQL API] Changed the
Querytype:- Added the
messagefield to theQuerytype. - Added the
messagesfield to theQuerytype.
- Added the
OAuth scopes for Custom Objects
- [API] Added scope
manage_key_value_documents:{projectKey}which grants access to all the APIs for creating, modifying, deleting and viewing Custom Objects. - [API] Added scope
view_key_value_documents:{projectKey}which grants access to the APIs for viewing Custom Objects.
Custom Objects are supported in Subscriptions and are now limited
- [API] Subscriptions can now deliver notifications for Custom Objects.
- [API] Introduced an API Limit on Custom Objects.
The total of PagedQueryResult is limited to the maximum offset
total field of PagedQueryResult is now limited to the maximum offset of 10000 when the results are filtered with a Query Predicate. This limit is not in place when no query predicate is applied.total field should be deactivated whenever possible by using the query parameter withTotal=false.
Please refer to the pagination section of the "General Concepts" documentation for details and recommendations.Changes in the GraphQL schema
- [GraphQL API] Changed the
Storetype:- Added the
customfield to theStoretype.
- Added the
Filtering for Store Order Imports
When Orders are imported to a Store, the languages, Prices, and InventoryEntries of the Orders are now filtered according to the Store settings. Also, the distribution and supply channels of the Store are matched against those of LineItems and CustomLineItems during import of the Orders.
- [API] Added Language, Price, and InventoryEntry filtering.
Added the QueryTimedOut error code
BadRequest with the QueryTimedOut error code instead of the General error code.- [API] Added the QueryTimedOut error code.
Added endpoints for Order and Customer imports
The new feature includes the following changes.
Orders import:
- New endpoint for Order import Request Order data to be imported.
- New endpoint for querying the status of Order ImportOperations by an ImportSink key Get ImportOperations by an ImportSink key.
- New endpoint for querying the status of Order ImportOperations by its id Get Import operation by its ID.
Customers import:
- New endpoint for Customer import Request customer data to be imported.
- New endpoint for querying the status of Customer ImportOperations by an ImportSink key Get ImportOperations by an ImportSink Key.
- New endpoint for querying the status of Customer ImportOperation by its id Get ImportOperation by its ID.
Product Variant Added Message
When a product variant is created, a message will be triggered.
- [API] Added ProductVariantAdded Message.
Correlation ID with cross-origin resource sharing
Access-Control-Allow-Headers, which allows you to include X-Correlation-ID header in browser apps, impacted by cross-origin resource sharing restrictions.
Additional information can be found in this tutorial.Query Custom Objects in a container
where parameter for it. Doing it this way improves the query performance and hence the previous way with the parameter has been deprecated. Since Custom Objects are now primarily identified by their container and key, access to and deletion of them by their id has been deprecated also.This feature includes the following changes:
- [API] Added the
/{projectKey}/custom-objects/{container}/endpoint to Query CustomObjects - [API] Deprecated the
/{projectKey}/custom-objects/endpoint from Query CustomObjects - [API] Deprecated the GET and the DELETE
/{projectKey}/custom-objects/{id}endpoints.
Adds lastModifiedAt to LineItem
- [API] Added a
lastModifiedAtfield to LineItem - [GraphQL API] Changed the
LineItemtype:- Added the
lastModifiedAtfield to theLineItemtype.
- Added the
Added Custom Fields to Stores
This feature includes the following changes:
- [API] Added
storeenumeration value to Customizable Resources - [API] Added
customfield to StoreDraft and Store - [API] Added the setCustomType update action to Update Store.
- [API] Added the setCustomField update action to Update Store.
Introduced the following changes to the GraphQL schema (in SDL format):
extend type Store {
custom: CustomFieldsType
}
extend input StoreUpdateAction {
setCustomType: SetCustomType
setCustomFields: SetCustomFields
}
Public beta release of Import API
Recently we introduced Import API to allow you to import your large amount of data into commercetools Composable Commerce using an API-first approach.
While the previous solutions for data importing still being relevant, we launch the import API as a beta solution and intend to understand your data import use cases. Import API is in public beta but it supports almost all the major resource types such as Product, Category, Product Type, Variants, and Prices.
Updates to the GraphQL schema
- [GraphQL API] Added the following types to the GraphQL schema:
CustomObject,CustomObjectDraft,CustomObjectQueryResult. - [GraphQL API] Changed the
Querytype:- Added the
customObjectfield to theQuerytype. - Added the
customObjectsfield to theQuerytype.
- Added the
- [GraphQL API] Changed the
Mutationtype:- Added the
createOrUpdateCustomObjectfield to theMutationtype. - Added the
deleteCustomObjectfield to theMutationtype.
- Added the
New deprecated fields on GraphQL
Deprecated additional fields on the GraphQL API and added new fields that should be used instead.
- [GraphQL API] Changed the
LineItemDraftOutputtype:- Field
supplyChannelwas deprecated inLineItemDraftOutputtype. - Field
distributionChannelwas deprecated inLineItemDraftOutputtype. - Added the
distributionChannelResIdfield to theLineItemDraftOutputtype. - Added the
supplyChannelResIdfield to theLineItemDraftOutputtype.
- Field
- [GraphQL API] Changed the
CustomLineItemDraftOutputtype:- Field
taxCategorywas deprecated inCustomLineItemDraftOutputtype - Added the
taxCategoryResIdfield to theCustomLineItemDraftOutputtype.
- Field
- [GraphQL API] Changed the
Initiatortype:- Field
customerwas deprecated inInitiatortype. - Field
userwas deprecated inInitiatortype. - Added the
customerReffield to theInitiatortype. - Added the
userReffield to theInitiatortype.
- Field
- [GraphQL API] Changed the
NestedAttributeDefinitionTypetype:- Field
typeReferencewas deprecated inNestedAttributeDefinitionTypetype - Added the
typeReffield to theNestedAttributeDefinitionTypetype.
- Field
- [GraphQL API] Changed the
CustomFieldsCommandtype:- Field
typewas deprecated inCustomFieldsCommandtype - Added the
typeResIdfield to theCustomFieldsCommandtype.
- Field
Added setDistributionChannel action for Carts and OrderEdits
setLineItemDistributionChannel on OrderEdit, Cart and My Cart to change the
Distribution Channel.- [API] Added the SetLineItemDistributionChannel action for order edits
- [API] Added the SetLineItemDistributionChannel action for carts
- [API] Added the SetLineItemDistributionChannel action for my carts
- [GraphQL API] Added the following types to the GraphQL schema:
SetCartLineItemDistributionChannel,SetStagedOrderLineItemDistributionChannel,SetStagedOrderLineItemDistributionChannelOutput. - [GraphQL API] Changed the
CartUpdateActiontype:- Input field
setLineItemDistributionChannelwas added toCartUpdateActiontype
- Input field
- [GraphQL API] Changed the
StagedOrderUpdateActiontype:- Input field
setLineItemDistributionChannelwas added toStagedOrderUpdateActiontype
- Input field
- [GraphQL API] Changed the
MyCartUpdateActiontype:- Input field
setLineItemDistributionChannelwas added toMyCartUpdateActiontype
- Input field
Added ReferencedResourceNotFound error type
In case of bad request due to a referenced resource not found, the new error code identifies this error and provides extra information about the resource not found.
- [API] Added
ReferencedResourceNotFounderror code
Added addedAt field to Cart's LineItems
addedAt, which contains the DateTime when the LineItem was added to the Cart. addedAt can be passed in through
the API, and if omitted, it is created on the Server with the current DateTime as default.- [API] Added
addedAtto LineItem - [API] Added
addedAtto LineItemDraft - [API] Added
addedAtto MyLineItemDraft - [API] Added
addedAtto Add LineItem action My Carts action - [API] Added
addedAtto LineItemDraft for Add LineItem on the Order Edits action - [GraphQL API] Changed the
AddStagedOrderLineItemtype:- Input field
addedAtwas added toAddStagedOrderLineItemtype
- Input field
- [GraphQL API] Changed the
LineItemDrafttype:- Input field
addedAtwas added toLineItemDrafttype
- Input field
- [GraphQL API] Changed the
AddCartLineItemtype:- Input field
addedAtwas added toAddCartLineItemtype
- Input field
- [GraphQL API] Changed the
LineItemtype:- Added the
addedAtfield to theLineItemtype.
- Added the
- [GraphQL API] Changed the
LineItemDraftOutputtype:- Added the
addedAtfield to theLineItemDraftOutputtype.
- Added the
- [GraphQL API] Changed the
AddMyCartLineItemtype:- Input field
addedAtwas added toAddMyCartLineItemtype
- Input field
- [GraphQL API] Changed the
MyLineItemDrafttype:- Input field
addedAtwas added toMyLineItemDrafttype
- Input field
Added Store based inventory filtering
storeProjection to remove all inventory entries from the response payload that don't correspond to the Inventory Supply Channels set in the Store.supplyChannel field on a line item can only be set to one of the inventory supply channels set in the store.To enable the configuration of inventory supply channels in Stores, the following changes have been made:
- [API] Added
supplyChannelsfield to StoreDraft - [API] Added
supplyChannelsfield to Store - [API] Added
setSupplyChannelsupdate action to Store - [API] Added
addSupplyChannelupdate action to Store - [API] Added
removeSupplyChannelupdate action to Store - [GraphQL API] Added the following types to the GraphQL schema:
SetStoreSupplyChannels,AddStoreSupplyChannel,RemoveStoreSupplyChannel. - [GraphQL API] Changed the
StoreUpdateActiontype:- Input field
setSupplyChannelswas added toStoreUpdateActiontype - Input field
addSupplyChannelwas added toStoreUpdateActiontype - Input field
removeSupplyChannelwas added toStoreUpdateActiontype
- Input field
- [GraphQL API] Changed the
CreateStoretype:- Input field
supplyChannelswas added toCreateStoretype
- Input field
- [GraphQL API] Changed the
Storetype:- Added the
supplyChannelsfield to theStoretype. - Added the
supplyChannelsReffield to theStoretype.
- Added the
GraphQL API to query project-specific limits
You can now check limits that are specific to a project with a GraphQL query.
Which limits are included?
- Limits that can be changed
- Limits that only apply to projects created after the introduction of the respective limit.
- If the total count of resources stored is limited, you can also access the current count
{/* */}
- [GraphQL API] Added the following types to the GraphQL schema:
CartDiscountLimitsProjection,CartLimitsProjection,CustomerGroupLimitsProjection,CustomerLimitsProjection,ExtensionLimitsProjection,Limit,LimitWithCurrent,OrderEditLimitsProjection,ProductDiscountLimitsProjection,ProductLimitsProjection,ProjectCustomLimitsProjection,QueryLimitsProjection,RefreshTokenLimitsProjection,ShippingMethodLimitsProjection,ShoppingListLimitsProjection,StoreLimitsProjection,TaxCategoryLimitsProjection,ZoneLimitsProjection. - [GraphQL API] Changed the
Querytype:- Added the
limitsfield to theQuerytype.
- Added the
Added OrderEdit GraphQL query and mutation schema
Order edits can now be queried, created, updated, and deleted using the GraphQL API.
Added QueryComplexityLimitExceeded Error Code to the GraphQL API
- [GraphQL API] Added the
QueryComplexityLimitExceedederror code.
Added Store based price filtering
storeProjection to remove all prices from the response payload that don't correspond to the Channels set in the Store.To enable the configuration of product distribution channels in Stores, the following changes have been made:
- [API] Added
distributionChannelsfield to StoreDraft - [API] Added
distributionChannelsfield to Store - [API] Added
setDistributionChannelsupdate action to Store - [API] Added
addDistributionChannelupdate action to Store - [API] Added
removeDistributionChannelupdate action to Store - [GraphQL API] Added the following types to the GraphQL schema:
SetStoreDistributionChannels - [GraphQL API] Changed the
StoreUpdateActiontype:- Input field
setDistributionChannelswas added toStoreUpdateActiontype - Input field
addDistributionChannelwas added toStoreUpdateActiontype - Input field
removeDistributionChannelwas added toStoreUpdateActiontype
- Input field
- [GraphQL API] Changed the
CreateStoretype:- Input field
distributionChannelswas added toCreateStoretype
- Input field
- [GraphQL API] Changed the
Storetype:- Added the
distributionChannelsReffield to theStoretype. - Added the
distributionChannelsfield to theStoretype.
- Added the
Added OrderEdit GraphQL query and mutation schema
Order edits can now be queried, created, updated, and deleted using the GraphQL API.
Introduced Limits on Zones, Tax Categories, Shipping Methods, Customer Groups, Customers, Shopping Lists and Order Edits
The new limits and their defaults are:
- Zones per project: 100
- Tax Categories per project: 100
- Shipping Methods per project: 100
- Customer Groups per project: 1000
- Customers per project: 1000000
- Shopping Lists per project: 10000000
- Carts per project: 10000000
- Order Edits per project: 100000
Projects created before 08 July 2020 are not subject to the new limits listed above.
- [API] If your project contains more than the maximum allowed amount of Carts or Shopping Lists, the automatic clean-up task will delete the resources least recently modified.
External total prices for line items in cart predicates
lineItemTotal are now taking the total prices for line items into account also when ExternalTotal LineItemPriceMode is used.Refresh tokens expiration
If your production project currently exceeds this limit, you will be contacted by us.
Specific error code for deleting language from project settings.
- [API] Added the
LanguageUsedInStoreserror code.
Project setting to use country tax rate fallback
countryTaxRateFallbackEnabled setting, the cart will fallback to the country-no state tax rate inside each tax category.The
countryTaxRateFallbackEnabled cart setting can be configured globally at project level.- [API] Added the changeCountryTaxRateFallbackEnabled update action to the project.
Get, update, and delete My Shopping Lists by key
Added GraphQL mutations for Payments and MyPayments
- [GraphQL API] Added the following types to the GraphQL schema:
AddMyPaymentTransaction,AddPaymentInterfaceInteraction,AddPaymentTransaction,ChangePaymentAmountPlanned,ChangePaymentTransactionInteractionId,ChangePaymentTransactionState,ChangePaymentTransactionTimestamp,MyPayment,MyPaymentDraft,MyPaymentQueryResult,MyPaymentUpdateAction,MyTransactionDraft,PaymentDraft,PaymentMethodInfoInput,PaymentStatusInput,PaymentUpdateAction,SetPaymentAmountPaid,SetPaymentAmountRefunded,SetPaymentAnonymousId,SetPaymentAuthorization,SetPaymentCustomField,SetPaymentCustomType,SetPaymentCustomer,SetPaymentExternalId,SetPaymentInterfaceId,SetPaymentKey,SetPaymentMethodInfoInterface,SetPaymentMethodInfoMethod,SetPaymentMethodInfoName,SetPaymentStatusInterfaceCode,SetPaymentStatusInterfaceText,SetStoreSupplyChannels,TransactionDraft,TransitionPaymentState. - [GraphQL API] Changed the
Metype:- Added the
paymentsfield to theMetype. - Added the
paymentfield to theMetype.
- Added the
- [GraphQL API] Changed the
StoreUpdateActiontype:- Input field
setSupplyChannelswas added toStoreUpdateActiontype
- Input field
- [GraphQL API] Changed the
CreateStoretype:- Input field
supplyChannelswas added toCreateStoretype
- Input field
- [GraphQL API] Changed the
Mutationtype:- Added the
createPaymentfield to theMutationtype. - Added the
createMyPaymentfield to theMutationtype. - Added the
updatePaymentfield to theMutationtype. - Added the
updateMyPaymentfield to theMutationtype. - Added the
deletePaymentfield to theMutationtype. - Added the
deleteMyPaymentfield to theMutationtype.
- Added the
Added Extension GraphQL query and mutation schema
Extensions can now be queried, created, updated, and deleted using the GraphQL API.
- [GraphQL API] Added the following types to the GraphQL schema:
AWSLambdaDestination,AWSLambdaDestinationInput,ActionType,AuthorizationHeader,AuthorizationHeaderInput,AzureFunctionsAuthentication,AzureFunctionsAuthenticationInput,ChangeExtensionDestination,ChangeExtensionTriggers,Extension,ExtensionDestination,ExtensionDestinationInput,ExtensionDraft,ExtensionQueryResult,ExtensionUpdateAction,HttpDestination,HttpDestinationAuthentication,HttpDestinationAuthenticationInput,HttpDestinationInput,SetExtensionKey,SetExtensionTimeoutInMs,Trigger,TriggerInput. - [GraphQL API] Changed the
Querytype:- Added the
extensionsfield to theQuerytype. - Added the
extensionfield to theQuerytype.
- Added the
- [GraphQL API] Changed the
Mutationtype:- Added the
deleteExtensionfield to theMutationtype. - Added the
updateExtensionfield to theMutationtype. - Added the
createExtensionfield to theMutationtype.
- Added the
Input Variables in Query Predicates
Customer address by key selection for updates
The address selection for updating customer addresses is now easier. In addition to select an address by its address ID it is now possible to select it by key.
- [API] Customers and My Customer Profile Address selection have been added to be able to specify an address by key, so additional updates could be done along adding a new address.
- [API] Customers Change Address endpoint supports Address selection.
- [API] Customers Remove Address endpoint supports Address selection.
- [API] Customers Set Default Shipping Address endpoint supports Address selection.
- [API] Customers Add Shipping Address ID endpoint supports Address selection.
- [API] Customers Remove Shipping Address ID endpoint supports Address selection.
- [API] Customers Set Default Billing Address endpoint supports Address selection.
- [API] Customers Add Billing Address ID endpoint supports Address selection.
- [API] Customers Remove Billing Address ID endpoint supports Address selection.
- [API] My Customer Profile Change Address endpoint supports Address selection.
- [API] My Customer Profile Remove Address endpoint supports Address selection.
- [API] My Customer Profile Set Default Shipping Address endpoint supports Address selection.
- [API] My Customer Profile Add Shipping Address ID endpoint supports Address selection.
- [API] My Customer Profile Remove Shipping Address ID endpoint supports Address selection.
- [API] My Customer Profile Set Default Billing Address endpoint supports Address selection.
- [API] My Customer Profile Add Billing Address ID endpoint supports Address selection.
- [API] My Customer Profile Remove Billing Address ID endpoint supports Address selection.
Added Subscription GraphQL query and mutation schema
Subscriptions can now be queried, created, updated, and deleted using the GraphQL API.
- [GraphQL API] Added the following types to the GraphQL schema:
AzureServiceBusDestination,AzureServiceBusDestinationInput,ChangeSubscription,ChangeSubscriptionDestination,ChangeSubscriptionInput,CloudEventsSubscriptionsFormat,CloudEventsSubscriptionsFormatInput,Destination,DestinationInput,EventGridDestination,EventGridDestinationInput,GoogleCloudPubSubDestination,GoogleCloudPubSubDestinationInput,MessageSubscription,MessageSubscriptionInput,NotificationFormat,PlatformFormat,PlatformFormatInput,SNSDestination,SNSDestinationInput,SQSDestination,SQSDestinationInput,SetSubscriptionChanges,SetSubscriptionKey,SetSubscriptionMessages,Subscription,SubscriptionDraft,SubscriptionFormatInput,SubscriptionHealthStatus,SubscriptionQueryResult,SubscriptionUpdateAction. - [GraphQL API] Changed the
Querytype:- Added the
subscriptionfield to theQuerytype. - Added the
subscriptionsfield to theQuerytype.
- Added the
- [GraphQL API] Changed the
Mutationtype:- Added the
updateSubscriptionfield to theMutationtype. - Added the
deleteSubscriptionfield to theMutationtype. - Added the
createSubscriptionfield to theMutationtype.
- Added the
OAuth scopes for categories
- [API] Added scope
manage_categories:{projectKey}which grants access to all the APIs for creating, deleting and viewing Categories - [API] Added scope
view_categories:{projectKey}which grants access to the APIs for viewing Categories
Inventory Entry Created Message
When an inventory is added to a product variant, an inventory entry created message will be triggered, making possible to respond to changes in availability information.
- [API] Added InventoryEntryCreated Message.
Changed endpoints to get the matching shipping methods for a location and an order edit
To streamline the API design, the endpoint to get matching shipping methods for a location and an order edit have been changed. For backwards compatibility the previous format is still in operation, but has now been deprecated.
- [API] Changed the Get ShippingMethods for a Location endpoint.
- [API] Changed the Get ShippingMethods for an OrderEdit endpoint.
- [API] Deprecated the query parameter
?country={country}on/shipping-methodsendpoints. - [API] Deprecated the query parameter
?orderEditId={orderEditId}on/shipping-methodsendpoints.
OAuth scopes for cart discounts, customer groups, tax categories and shipping methods
- [API] Added scope
manage_cart_discounts:{projectKey}which grants access to all the APIs for creating, deleting and viewing Cart Discounts - [API] Added scope
view_cart_discounts:{projectKey}which grants access to the APIs for viewing Cart Discounts - [API] Added scope
manage_customer_groups:{projectKey}which grants access to all the APIs for creating, deleting and viewing Customer Groups - [API] Added scope
view_customer_groups:{projectKey}which grants access to the APIs for viewing Customer Groups - [API] Added scope
manage_tax_categories:{projectKey}which grants access to all the APIs for creating, deleting and viewing Tax Categories - [API] Added scope
view_tax_categories:{projectKey}which grants access to the APIs for viewing Tax Categories - [API] Added scope
manage_shipping_methods:{projectKey}which grants access to all the APIs for creating, deleting and viewing Shipping Methods - [API] Added scope
view_shipping_methods:{projectKey}which grants access to the APIs for viewing Shipping Methods
Smaller product payloads projected on locales
storeProjection and localeProjection. In both cases the returned projections only contain values in the specified locales.storeProjection to fetch the list of locales automatically from that store. Another benefit of this approach is that line items of carts bound to the store are projected accordingly.localeProjection to specify the needed locales directly in the query.- [API] Stores can have languages configured. Only languages defined in the project can be used in stores.
- added
languagesto Store. - added
languagesto StoreDraft. - added update action
setLanguageson Store.
- added
- [API] Added query parameter
localeProjectionon Product Projections for locale-based projections without Store. This parameter can be used on Get ProductProjection by ID, Get ProductProjection by Key, Query ProductProjections and Product Projection Search. - [API] Added query parameter
storeProjectionon Product Projections for locale-based projections with Store. This parameter can be used on Get ProductProjection by ID, Get ProductProjection by Key, Query ProductProjections and Product Projection Search. - [API] If a Cart is bound to a Store, all LocalizedStrings are filtered according to the locales defined in the store.
Added Review GraphQL query and mutation schema
Reviews can now be queried, created, updated, and deleted using the GraphQL API.
- [GraphQL API] Added the following types to the GraphQL schema:
Review,ReviewQueryResult,ReviewTarget,ReviewDraft,ReviewUpdateAction,SetReviewAuthorName,SetReviewCustomField,SetReviewCustomType,SetReviewCustomer,SetReviewKey,SetReviewLocale,SetReviewRating,SetReviewTarget,SetReviewText,SetReviewTitle,TargetReferenceInput,TransitionReviewState. - [GraphQL API] Changed the
Channeltype:Channelobject type now implementsReviewTargetinterface
- [GraphQL API] Changed the
Producttype:Productobject type now implementsReviewTargetinterface
- [GraphQL API] Changed the
Querytype:- Added the
reviewsfield to theQuerytype. - Added the
reviewfield to theQuerytype.
- Added the
- [GraphQL API] Changed the
Mutationtype:- Added the
updateReviewfield to theMutationtype. - Added the
deleteReviewfield to theMutationtype. - Added the
createReviewfield to theMutationtype.
- Added the
Setting the store on existing orders
- [API] Added the SetStore update action
- [API] Added the OrderStoreSet Message
Add localized description field for shipping method
To be able to describe a shipping method in different languages, the following changes have been made:
- [API] Added the
localizedDescriptionattribute to the ShippingMethod and ShippingMethodDraft representations. - [API] Added setLocalizedDescription action.
- [API] The attribute
descriptionas well as the setDescription action has been deprecated.
Access States Using Key
You can now get, update, and delete a State using its key. This eases the implementation of configuration-as-code patterns where creation and updating of a project's configuration is automated using version controlled code.
- [API] Added the following methods to the HTTP API to access States:
States GraphQL Mutations
States can now be modified using the GraphQL API.
-
[GraphQL API] Added the following types to the GraphQL schema:
StateDraft,StateUpdateAction,AddStateRoles,ChangeStateInitial,ChangeStateKey,ChangeStateType,SetStateDescription,SetStateName,SetStateRoles,SetStateTransitions,RemoveStateRoles. -
[GraphQL API] Changed the
Mutationtype:- Added the
createStatefield to theMutationtype. - Added the
updateStatefield to theMutationtype. - Added the
deleteStatefield to theMutationtype.
- Added the
Types GraphQL mutations
- [GraphQL API] Added the following types to the GraphQL schema:
AddTypeEnumValue,AddTypeFieldDefinition,AddTypeLocalizedEnumValue,ChangeTypeEnumValueLabel,ChangeTypeEnumValueOrder,ChangeTypeFieldDefinitionOrder,ChangeTypeInputHint,ChangeTypeKey,ChangeTypeLabel,ChangeTypeLocalizedEnumValueLabel,ChangeTypeLocalizedEnumValueOrder,ChangeTypeName,EnumValueInput,FieldDefinitionInput,FieldTypeEnumTypeDraft,FieldTypeInput,FieldTypeLocalizedEnumTypeDraft,FieldTypeReferenceTypeDraft,FieldTypeSetTypeDraft,RemoveTypeFieldDefinition,SetTypeDescription,SimpleFieldTypeDraft,TypeDefinitionDraft,TypeUpdateAction. - [GraphQL API] Changed the
Mutationtype:- Added the
updateTypeDefinitionfield to theMutationtype. - Added the
createTypeDefinitionfield to theMutationtype. - Added the
deleteTypeDefinitionfield to theMutationtype.
- Added the
Changed endpoints to get the matching shipping methods for a cart by cart id
To streamline the API design, the endpoint to get matching shipping methods for a cart by cart ID has been changed. For backwards compatibility the previous format is still in operation, but has now been deprecated.
- [API] Changed the Get ShippingMethods for a Cart endpoint.
- [API] Changed the Get ShippingMethods for a Cart in Store endpoint.
- [API] Deprecated the query parameter
?cartId={id}on/shipping-methodsendpoints.
commercetools Composable Commerce on AWS, new API host names
commercetools Composable Commerce is now available on AWS in addition to the existing Regions which are operated on the Google Cloud Platform. All self sign-up accounts continue to be created in Google Cloud Regions.
api.sphere.io (Google Cloud, Belgium), api.commercetools.com (Google Cloud, Belgium) and api.commercetools.co (Google Cloud, Iowa) and their respective counterparts for the auth hosts remain intact as aliases, we strongly encourage changing your configuration to the new host name structure.Further Changes:
- [Documentation] Integrated ImpEx documentation content into the general "Developer Center" documentation section
Changed endpoints to get cart by customer id
To streamline the API design, the endpoint to get a cart by customer ID has been changed. For this, the customer ID is now specified as segment of the URI path and no longer as query parameter. For backwards compatibility the previous format is still in operation, but has now been deprecated.
- [API] Changed the Get a Cart by Customer ID endpoint.
- [API] Changed the Get a Cart in a Store by Customer ID endpoint.
- [API] Deprecated the query parameter
?customerId={id}on/cartsendpoints.
Updates to the GraphQL references
The reference fields on those resources now support querying for the data stored in referenced objects, similar to Reference Expansion on the HTTP API. The plain reference can now be queried with the corresponding
<fieldName>Ref field that has been introduced on the mentioned resources. If you, for example for performance reasons, want to continue using the plain references, you should amend your queries to use the corresponding <fieldName>Ref field instead of the <fieldName> field.For backward compatibility reasons, the
typeId field is still available on the <fieldName> queries, but it is now deprecated. It will be removed from the API after April 2020.- [GraphQL API] Changed the
ProductDiscounttype:- Added the
referenceRefsfield to theProductDiscounttype.
- Added the
- [GraphQL API] Changed the
ProductPricetype:ProductPrice.channelfield type changed fromReferencetoChannelProductPrice.customerGroupfield type changed fromReferencetoCustomerGroup- Added the
customerGroupReffield to theProductPricetype. - Added the
channelReffield to theProductPricetype.
- [GraphQL API] Changed the
ShippingInfotype:- Added the
taxCategoryReffield to theShippingInfotype. ShippingInfo.taxCategoryfield type changed fromReferencetoTaxCategory
- Added the
- [GraphQL API] Changed the
CartDiscounttype:- Added the
referenceRefsfield to theCartDiscounttype.
- Added the
- [GraphQL API] Changed the
InventoryEntrytype:InventoryEntry.supplyChannelfield type changed fromReferencetoChannel- Added the
supplyChannelReffield to theInventoryEntrytype.
- [GraphQL API] Changed the
DiscountCodetype:- Added the
referenceRefsfield to theDiscountCodetype.
- Added the
Project setting to automatically delete carts and shopping lists
deleteDaysAfterLastModification on each cart or shopping list individually, it can now be configured globally at project level. The carts and shopping lists are automatically deleted after they haven't been modified for the specified amount of days.deleteDaysAfterLastModification can still be set when creating or updating a cart or shopping list, which also overwrites the default value.For new projects created after this release, the project configuration is set to delete carts after 90 days, and shopping lists after 360 days.
- [API] Added the CartsConfiguration and ShoppingListsConfiguration to the project.
- [API] Added the changeCartsConfiguration and changeShoppingListsConfiguration update actions to the project.
Add Channel GraphQL mutations
- [GraphQL API] Changed the
Mutationtype:- Added the
createChannelfield to theMutationtype. - Added the
updateChannelfield to theMutationtype. - Added the
deleteChannelfield to theMutationtype.
- Added the
- [GraphQL API] Added the following types to the GraphQL schema:
ChannelDraft,GeometryInput,ChannelUpdateAction,SetChannelRoles,AddChannelRoles,RemoveChannelRoles,ChangeChannelDescription,ChangeChannelKey,ChangeChannelName,SetChannelAddress,SetChannelCustomField,SetChannelCustomType,SetChannelGeoLocation.
Subscriptions support CloudEvents version 1.0
{/* vale commercetools.DiscriminatoryWords = NO */}
1.0. CloudEvents is a specification for describing event data in a common way. CloudEvents seeks to ease event declaration and delivery across services, platforms, and beyond. It is hosted by the Cloud Native Computing Foundation.0.1 is deprecated and will not be supported after March 2020. Please update or replace your existing CloudEvent Subscriptions. The documentation around 0.1 has been removed.1.0 version of the spec has had several major changes, including renaming and lowercasing of all attributes, as well as the introduction of the subject field. We have removed all of the proprietary extensions and support two documented extension attributes: dataref and sequence/sequencetype.
The data field payload is now one of the known payloads (that means either a Message Payload, a ResourceCreated Payload, a ResourceUpdated Payload, or a ResourceDeleted Payload).- [API] Added the CloudEvents 1.0 Format to the Subscriptions API.
- [API] New Delivery Payload for the CloudEvents Format in accordance to the 1.0 version of the specification.
Added GraphQL support for ReviewRatingStatistics
- [GraphQL API] Added the following types to the GraphQL schema:
ReviewRatingStatistics. - [GraphQL API] Changed the
Channeltype:- Added the
reviewRatingStatisticsfield to theChanneltype.
- Added the
- [GraphQL API] Changed the
Producttype:- Added the
reviewRatingStatisticsfield to theProducttype.
- Added the
OAuth scopes for discount codes
- [API] Added scope
manage_discount_codes:{projectKey}which grants access to all the APIs for creating, updating, deleting and viewing discount codes. - [API] Added scope
view_discount_codes:{projectKey}which grants access to the APIs for retrieving and querying discount codes.
Shipping methods for a cart with store-based OAuth permissions
view_orders:{projectKey}:{storeKey}. The functionality itself is unchanged.- [API] Added an endpoint to Get ShippingMethods for a Cart in Store
- [GraphQL API] The existing query fields
inStoreandinStoresnow contain the fieldshippingMethodsByCart
ShoppingLists GraphQL mutations
- [GraphQL API] Added the following types to the GraphQL schema:
AddShoppingListLineItem,AddShoppingListTextLineItem,ChangeShoppingListLineItemQuantity,ChangeShoppingListLineItemsOrder,ChangeShoppingListName,ChangeShoppingListTextLineItemName,ChangeShoppingListTextLineItemQuantity,ChangeShoppingListTextLineItemsOrder,MyShoppingListDraft,MyShoppingListUpdateAction,RemoveShoppingListLineItem,RemoveShoppingListTextLineItem,SetShoppingListAnonymousId,SetShoppingListCustomField,SetShoppingListCustomType,SetShoppingListCustomer,SetShoppingListDeleteDaysAfterLastModification,SetShoppingListDescription,SetShoppingListKey,SetShoppingListLineItemCustomField,SetShoppingListLineItemCustomType,SetShoppingListSlug,SetShoppingListTextLineItemCustomField,SetShoppingListTextLineItemCustomType,SetShoppingListTextLineItemDescription,ShoppingListDraft,ShoppingListLineItemDraft,ShoppingListUpdateAction,TextLineItemDraft. - [GraphQL API] Changed the
Mutationtype:- Added the
updateMyShoppingListfield to theMutationtype. - Added the
createShoppingListfield to theMutationtype. - Added the
deleteShoppingListfield to theMutationtype. - Added the
createMyShoppingListfield to theMutationtype. - Added the
updateShoppingListfield to theMutationtype. - Added the
deleteMyShoppingListfield to theMutationtype.
- Added the
Retrieve ShoppingLists via GraphQL
- [GraphQL API] Added the following types to the GraphQL schema:
ShoppingList,ShoppingListLineItem,ShoppingListQueryInterface,ShoppingListQueryResult,TextLineItem. - [GraphQL API] Changed the
Metype:- Added the
shoppingListfield to theMetype. - Added the
shoppingListsfield to theMetype.
- Added the
- [GraphQL API] Changed the
InStoreMetype:- Added the
shoppingListfield to theInStoreMetype. - Added the
shoppingListsfield to theInStoreMetype.
- Added the
- [GraphQL API] Changed the
Querytype:- Added the
shoppingListfield to theQuerytype. Queryobject type now implementsShoppingListQueryInterfaceinterface- Added the
shoppingListsfield to theQuerytype.
- Added the
- [GraphQL API] Changed the
MeQueryInterfacetype:- Added the
shoppingListsfield to theMeQueryInterfacetype. - Added the
shoppingListfield to theMeQueryInterfacetype.
- Added the
My profile for Stores in Beta
manage_my_profile:acme-inc:luxury-brand.- [API] Added the following methods the HTTP API to access My Customer Profile in a specific Store:
- [GraphQL API] Changed the
Metype:Meobject type now implementsActiveCartInterfaceinterfaceMeobject type now implementsOrderQueryInterfaceinterfaceMeobject type now implementsCartQueryInterfaceinterface
- [GraphQL API] Changed the
CustomerSignMeUpDrafttype:- Input field
storeswas added toCustomerSignMeUpDrafttype
- Input field
- [GraphQL API] Changed the
InStoreMetype:InStoreMeobject type now implementsCartQueryInterfaceinterface- Added the
customerfield to theInStoreMetype. InStoreMeobject type now implementsOrderQueryInterfaceinterfaceInStoreMeobject type now implementsActiveCartInterfaceinterface
- [GraphQL API] Changed the
Mutationtype:- Argument
storeKeywas added toMutation.customerConfirmMyEmailfield - Argument
storeKeywas added toMutation.updateMyCustomerfield - Argument
storeKeywas added toMutation.customerChangeMyPasswordfield - Argument
storeKeywas added toMutation.customerResetMyPasswordfield - Argument
storeKeywas added toMutation.customerSignMeUpfield - Argument
storeKeywas added toMutation.deleteMyCustomerfield - Argument
storeKeywas added toMutation.customerSignMeInfield
- Argument
- [API] New store-based OAuth scopes
manage_my_profile:{projectKey}:{storeKey}.
Added `geoLocation` field to the `Channel` GraphQL type
- [GraphQL API] Added the following types to the GraphQL schema:
Geometry,Point. - [GraphQL API] Changed the
Channeltype:- Added the
geoLocationfield to theChanneltype.
- Added the
Publishing the Postman collection
It is autogenerated from the API reference and continuously updated in the GitHub repository.
Store in Order Import
- [API] Added the
storefield to the OrderImportDraft
OAuth 2.0 Scope for published product projections
view_published_products:{projectKey} OAuth scope. The view_published_products:{projectKey} is used with product projections endpoints. When used, it only retrieves published product projections- [API] Added the
view_published_products:{projectKey}OAuth scope - [API] Added the
view_published_products:{projectKey}OAuth scope to the following endpoints:
Introducing Stores for Customers in Beta
You can now assign customer accounts to stores. This allows you to restrict a customer's login and associated carts to a specific store. This is useful for multi-store setups.
manage_customers:acme-inc:luxury-brand.- [API] New store-based OAuth scopes
manage_customers:{projectKey}:{storeKey}andview_customers:{projectKey}:{storeKey}. - [API] Added the following methods to the HTTP API to access Customer in a specific Store:
- Get a Customer in a Store by ID
- Get a Customer in a Store by Key
- Query Customer in a Store
- Create Customer (Sign Up) in a Store
- Update Customer in a Store by ID
- Update Customer in a Store by Key
- Set Stores
- Add Store
- Remove Store
- Authenticate Customer (Sign In) in a Store
- Create a Token for Resetting the Customer’s Password in a Store
- Get Customer By Password Token in a Store
- Reset Customer’s Password in a Store
- Create a Token for verifying the Customer’s Email in a Store
- Get Customer By Email Token in a Store
- Verify Customer’s Email in a Store
- Delete Customer by ID in a Store
- Delete Customer by Key in a Store
- [API] Added the OAuth 2.0 Password Flow for Customer in a Store.
- [GraphQL API] Added the
storesfields on the typesCustomer,CustomerDraft. - [GraphQL API] The existing query fields
inStoreandinStorescan be used to query customers. - [GraphQL API] Added the
storeKeyargument to customer mutationscustomerSignUp,updateCustomer,deleteCustomer,customerChangePassword,customerCreatePasswordResetToken,customerResetPassword,customerCreateEmailVerificationToken,customerConfirmEmail
Additional key fields in Discount Predicates
key field in Discount Predicate Field Identifiers. You can now use the following in discount predicates:- ProductDiscount Predicate Field Identifiers
productType.keycategories.keycategoriesWithAncestors.keyprice.channel.key
- Cart Predicate Field Identifiers
customer.key<address-field>.keyshippingInfo.taxCategory.keyshippingInfo.shippingMethod.key
- Cart Target
- LineItemPredicate Identifiers
productType.keysupplyChannel.keyprice.channel.key
- CustomLineItemPredicate
taxCategory.key
- LineItemPredicate Identifiers
GraphQL new custom fields
customFields field on GraphQL queries is deprecated in favor of the new custom field. customFields is still available for use in queries, but we strongly encourage all users to switch to using custom in GraphQL queries. For more information about this change, see Beta Features.customFields graphQL field present on all fields having custom fields for a better alternative.custom field exposes the following sub-fields:type RawCustomField {
name: String!
value: Json!
}
type CustomFieldsType {
typeRef: Reference!
type: TypeDefinition
"This field contains non-typed data. For a typed alternative, have a look at `customFields`."
customFieldsRaw(
includeNames: [String!],
excludeNames: [String!]): [RawCustomField!]
"This field contains typed data"
customFields: Type!
}
customFields provides access to typed custom fields.custom field improves the performance of the query as long as you don't use typed fields. For example:fragment customFields on ProducePrice {
custom {
typeRef {
id
}
rawCustomFields {
name
value
}
}
}
custom.customFields then you won't profit from the better performance.- [GraphQL API] Added the following types to the GraphQL schema:
CustomFieldsType. - [GraphQL API] Changed the
Categorytype:- Added the
customfield to theCategorytype. - Field
customFieldsRawwas deprecated inCategorytype - Field
customFieldswas deprecated inCategorytype
- Added the
- [GraphQL API] Changed the
Channeltype:- Added the
customfield to theChanneltype. - Field
customFieldswas deprecated inChanneltype - Field
customFieldsRawwas deprecated inChanneltype
- Added the
- [GraphQL API] Changed the
ProductPricetype:- Added the
customfield to theProductPricetype. - Field
customFieldsRawwas deprecated inProductPricetype - Field
customFieldswas deprecated inProductPricetype
- Added the
- [GraphQL API] Changed the
Carttype:- Added the
customfield to theCarttype. - Field
customFieldsRawwas deprecated inCarttype - Field
customFieldswas deprecated inCarttype
- Added the
- [GraphQL API] Changed the
CustomerGrouptype:- Added the
customfield to theCustomerGrouptype. - Field
customFieldsRawwas deprecated inCustomerGrouptype - Field
customFieldswas deprecated inCustomerGrouptype
- Added the
- [GraphQL API] Changed the
Assettype:- Added the
customfield to theAssettype. - Field
customFieldswas deprecated inAssettype - Field
customFieldsRawwas deprecated inAssettype
- Added the
- [GraphQL API] Changed the
CustomLineItemtype:- Added the
customfield to theCustomLineItemtype. - Field
customFieldswas deprecated inCustomLineItemtype - Field
customFieldsRawwas deprecated inCustomLineItemtype
- Added the
- [GraphQL API] Changed the
Customertype:- Added the
customfield to theCustomertype. - Field
customFieldsRawwas deprecated inCustomertype - Field
customFieldswas deprecated inCustomertype
- Added the
- [GraphQL API] Changed the
CartDiscounttype:- Added the
customfield to theCartDiscounttype. - Field
customFieldswas deprecated inCartDiscounttype - Field
customFieldsRawwas deprecated inCartDiscounttype
- Added the
- [GraphQL API] Changed the
Paymenttype:- Added the
customfield to thePaymenttype. - Field
customFieldsRawwas deprecated inPaymenttype - Field
customFieldswas deprecated inPaymenttype
- Added the
- [GraphQL API] Changed the
CategorySearchtype:- Added the
customfield to theCategorySearchtype. - Field
customFieldswas deprecated inCategorySearchtype - Field
customFieldsRawwas deprecated inCategorySearchtype
- Added the
- [GraphQL API] Changed the
Ordertype:- Added the
customfield to theOrdertype. - Field
customFieldsRawwas deprecated inOrdertype - Field
customFieldswas deprecated inOrdertype
- Added the
- [GraphQL API] Changed the
InventoryEntrytype:- Added the
customfield to theInventoryEntrytype. - Field
customFieldswas deprecated inInventoryEntrytype - Field
customFieldsRawwas deprecated inInventoryEntrytype
- Added the
- [GraphQL API] Changed the
LineItemtype:- Added the
customfield to theLineItemtype. - Field
customFieldswas deprecated inLineItemtype - Field
customFieldsRawwas deprecated inLineItemtype
- Added the
- [GraphQL API] Changed the
DiscountCodetype:- Added the
customfield to theDiscountCodetype. - Field
customFieldswas deprecated inDiscountCodetype - Field
customFieldsRawwas deprecated inDiscountCodetype
- Added the
Added new messages for products
- [API] Added the ProductAddedToCategory Message to Product's Add to Category update action.
- [API] Added the ProductRemovedFromCategory Message to Product's Remove from Category update action.
Use Customer's key field in Cart Discount Predicates
key field in Cart Discount Predicates.- [API] Added
customer.keyto Customer Field Identifiers in Cart Predicates
User defined key attribute on Product Discount
key attribute. You can use the key attribute when querying, updating, or deleting a ProductDiscount.- [API] Added the
keyattribute on theProductDiscountandProductDiscountDraftrepresentations. - [API] You can now get, update, and delete a Product Discount by its key.
- [GraphQL API] Added the following types to the GraphQL schema:
SetProductDiscountKey. - [GraphQL API] Changed the
ProductDiscounttype:- Added the
keyfield to theProductDiscounttype.
- Added the
- [GraphQL API] Changed the
ProductDiscountUpdateActiontype:- Input field
setKeywas added toProductDiscountUpdateActiontype
- Input field
- [GraphQL API] Changed the
Mutationtype:Mutation.updateProductDiscount(id)description is changed- Argument
keywas added toMutation.updateProductDiscountfield Mutation.deleteProductDiscount(id)description is changedMutation.updateProductDiscount(id)type changed fromString!toStringMutation.deleteProductDiscount(id)type changed fromString!toString- Argument
keywas added toMutation.deleteProductDiscountfield
HTTP API methods for Stores in Beta
manage_orders:acme-inc:luxury-brand.- [API] Added the following methods the HTTP API to access Carts in a specific Store:
- [API] Added the following methods the HTTP API to access My Carts in a specific Store:
- [API] Added the following methods the HTTP API to access Orders for Stores:
- [API] Added the following methods the HTTP API to access My Orders for Stores:
- [API] New store-based OAuth scopes
manage_my_orders:{projectKey}:{storeKey}.
New update actions for custom types
inputHint of a FieldDefinition for StringType
and LocalizedStringType and their Set equivalents.
In addition, you can also update the labels of enum values.- [API] Added the ChangeInputHint update action
- [API] Added the ChangeEnumValueLabel update action
- [API] Added the ChangeLocalizedEnumValueLabel update action
User defined key attribute on Cart Discount
key attribute to CartDiscount. You can use the key attribute when creating or updating a CartDiscount.- [API] Added the
keyattribute to the CartDiscount and CartDiscountDraft representations. - [API] Added the Get CartDiscount by Key, Update CartDiscount by Key, and Delete CartDiscount by Key endpoints.
- [GraphQL API] The GraphQL API now supports queries and mutations of CartDiscount by the
keyattribute. - [GraphQL API] Added the following types to the GraphQL schema:
SetCartDiscountKey. - [GraphQL API] Changed the
CartDiscountDrafttype:- Input field
keywas added toCartDiscountDrafttype
- Input field
- [GraphQL API] Changed the
Querytype:Query.cartDiscount(id)description is changed- Argument
keywas added toQuery.cartDiscountfield Query.cartDiscount(id)type changed fromString!toString
- [GraphQL API] Changed the
CartDiscounttype:- Added the
keyfield to theCartDiscounttype.
- Added the
- [GraphQL API] Changed the
CartDiscountUpdateActiontype:- Input field
setKeywas added toCartDiscountUpdateActiontype
- Input field
- [GraphQL API] Changed the
Mutationtype:Mutation.updateCartDiscount(id)type changed fromString!toStringMutation.deleteCartDiscount(id)description is changed- Argument
keywas added toMutation.updateCartDiscountfield Mutation.deleteCartDiscount(id)type changed fromString!toString- Argument
keywas added toMutation.deleteCartDiscountfield Mutation.updateCartDiscount(id)description is changed
deleteDaysAfterLastModification field is out of Beta
deleteDaysAfterLastModification field has been taken out of Beta. The field's current functionality has not changed.- [API] Took the
deleteDaysAfterLastModificationout of Beta on the following representations:
Added the lastModifiedBy and createdBy fields
lastModifiedBy and createdBy fields to many representations in the API. These fields add change history information for API calls to these resources as of 2019-02-01. Resources created or last modified before 2019-02-01 will not contain these fields. The fields only track changes from direct API calls by the Merchant Center or client applications. The fields may not track changes from the Admin Center, or from internal background services, like product discount or inventory updates.X-External-User-ID, when making API calls to track changes initiated by a specific user's actions. The lastModifiedBy and createdBy fields return this ID if it is provided. Do not pass personally identifying information using the X-External-User-ID header. See Client Logging for more information.-
[API] Added the
lastModifiedByandcreatedByfields to the following representations: -
[API] Added support for the
X-External-User-IDHTTP header. -
[Docs] Created Client Logging documentation.
-
[Docs] Refactored Discount Predicate and Discount Predicate Field Identifiers documentation.
-
[Docs] Created Discounts Overview and Product Discounts documentation.
Added GraphQL support for Project
- [GraphQL API] The following types were added in the GraphQL schema:
ProjectProjection,ShippingRateInputType,MessagesConfiguration,ShippingRateInputType,CartScoreType,CartValueType,CartClassificationType,ShippingRateInputLocalizedEnumValue,LocalizedEnumValueInput,YearMonth. - [GraphQL API] Type
Querywas changed:- Field
projectwas added toQuerytype
- Field
- [GraphQL API] Type
Mutationwas changed:- Field
updateProjectwas added toMutationtype
- Field
Authorization Header Usage
Authorization header as follows:POST /{{projectKey}}/channels HTTP/1.1
Host: api.{region}.{cloudProvider}.commercetools.com
Authorization: Bearer {accesstoken}
...
For more information, see:
Introducing Stores in Beta
Stores let you model the context your customers shop in, for example physical retail locations, brand stores, or country-specific stores. Currently, a store holds carts and orders. During the Beta phase, we plan to let the store define what subset of resources within a project is available in the context of the store. For example, which products are sold at what price, and which currency or shipping methods can be used.
manage_orders:acme-inc:luxury-brand, an API client can only work with carts and orders inside the luxury-brand store, but not within the budget-brand store. See the GraphQL section for more details. Coming soon to the Merchant Center, a team can be given permission to only work with orders from one store.- [API] Added the new resource Store.
- [API] Added the type KeyReference.
- [API] Cart and Order have a new field
store. - [API] When creating a Cart, the
storecan be referenced by its ID or key. - [API] New OAuth scopes
manage_stores:{projectKey}andview_stores:{projectKey}. - [API] New store-based OAuth scopes
manage_orders:{projectKey}:{storeKey}andview_orders:{projectKey}:{storeKey}. - [GraphQL API] Added Stores, and the
storefields on the typesCart,CartDraftandOrder. - [GraphQL API] Added the query fields
inStoreandinStores, as well as astoreKeyargument to cart and order mutations. These can be used with the new store-based OAuth scopes.
External OAuth tokens (Beta)
customer_id:{id} and anonymous_id:{id} have been added for external OAuth tokens that are to be used with the /me endpoints. They are also added when a token is issued through the password flow or when an anonymous session is created.- [API] Added the ExternalOAuth configuration to the project.
- [API] Added the setExternalOAuth update action.
- [API] Added
customer_id:{id}andanonymous_id:{id}to the OAuth scope.
API Extension timeout is configurable
- [API] Added
timeoutInMsto Extension and ExtensionDraft. - [API] Added the
setTimeoutInMsupdate action.
Set discounted prices from an external service when creating a Price
- [API] Added
discountedfield to PriceDraft.
Introduced Limits on Products and Categories
The new limits and their defaults are:
- Product variants per product: 100
- Categories per project: 10000
The following existing limits have been lowered:
- Query maximum
offset: lowered from 100000 to 10000 - Search maximum
offset: lowered from 100000 to 10000 - Prices per product variant: lowered from 700 to 100
Projects created before 2019-02-21 are not subject to the new limits listed above.
- [API] Introduced new API Limits.
Cart and Order as Reference Type
- [API] Added the
cartandorderfields to ReferenceType.
Payments available in the GraphQL schema
You can now access payments and related information using the GraphQL schema.
- [GraphQL API] Added the following types to the GraphQL schema:
Payment,PaymentMethodInfo,PaymentQueryResult,PaymentStatus,Transaction,TransactionState,TransactionType. - [GraphQL API] Changed the
Querytype:- Added the
paymentsfield to theQuerytype. - Added the
paymentfield to theQuerytype.
- Added the
- [GraphQL API] Changed the
PaymentInfotype:- Added the
paymentsfield to thePaymentInfotype.
- Added the
Orders mutations available in the GraphQL schema
You can now update orders using the GraphQL schema.
- [GraphQL API] Added the following types to the GraphQL schema:
AddOrderDelivery,AddOrderItemShippingAddress,AddOrderParcelToDelivery,AddOrderPayment,AddOrderReturnInfo,ChangeOrderPaymentState,ChangeOrderShipmentState,ChangeOrderState,DeliveryItemDraftType,ImportOrderCustomLineItemState,ImportOrderLineItemState,ItemShippingDetailsDraftType,ItemStateDraftType,OrderCartCommand,OrderMyCartCommand,OrderUpdateAction,ParcelMeasurementsDraftType,RemoveOrderDelivery,RemoveOrderItemShippingAddress,RemoveOrderParcelFromDelivery,RemoveOrderPayment,ReturnItemDraftType,SetOrderBillingAddress,SetOrderCustomField,SetOrderCustomLineItemCustomField,SetOrderCustomLineItemCustomType,SetOrderCustomLineItemShippingDetails,SetOrderCustomType,SetOrderCustomerEmail,SetOrderCustomerId,SetOrderDeliveryAddress,SetOrderDeliveryItems,SetOrderLineItemCustomField,SetOrderLineItemCustomType,SetOrderLineItemShippingDetails,SetOrderLocale,SetOrderNumber,SetOrderParcelItems,SetOrderParcelMeasurements,SetOrderParcelTrackingData,SetOrderReturnPaymentState,SetOrderReturnShipmentState,SetOrderShippingAddress,ShippingTargetDraftType,TrackingDataDraftType,TransitionOrderCustomLineItemState,TransitionOrderLineItemState,TransitionOrderState,UpdateOrderItemShippingAddress,UpdateOrderSyncInfo. - [GraphQL API] Changed the
Mutationtype:- Added the
updateOrderfield to theMutationtype. - Added the
createOrderFromCartfield to theMutationtype. - Added the
createMyOrderFromCartto theMutationtype. - Added the
deleteOrderfield to theMutationtype.
- Added the
Change attribute definition order by name
- [API] Added the
"changeAttributeOrderByName"update action to ProductTypes. - [API] Removed the
"changeAttributeOrder"update action from documentation. Existing calls to the"changeAttributeOrder"update action are unaffected, but new projects should use"changeAttributeOrderByName".
Add ProductVariant update action now includes an assets field
assets field for providing images when creating a Product Variant.- [API] Added the
assetsfield to the Add ProductVariant update action.
External Tax Rate supports includedInPrice
taxMode External, it is now possible to set includedInPrice to either true or false in the ExternalTaxRateDraft.Manage API Clients using the GraphQL API and delete clients after a specified amount of time.
deleteDaysAfterCreation field, which lets you delete a client after a specified amount of days.- [API] Added the
deleteDaysAfterCreationfield to the APIClientDraft. - [API] Added the
deleteAtfield to the APIClient. - [GraphQL API] Added API Clients to the GraphQL API.
Reference Channels by their key
key field in the following scenarios:-
When updating the synchronization information of an Order.
-
When creating a Product, setting a Product's price, or Adding or Changing Embedded Prices of a Product Variant.
-
- LineItemDraft on Carts:
supplyChanneldistributionChannel
- MyLineItemDraft and Add LineItem on MyCarts:
supplyChanneldistributionChannel
- LineItemImportDraft on Order Import:
supplyChanneldistributionChannel
- PriceDraft on Products:
channel
- Update SyncInfo on Orders:
channel
- LineItemDraft on Carts:
Orders available in the GraphQL schema
You can now access orders and related information using the GraphQL schema.
- [GraphQL API] Added the following types to the GraphQL schema:
CustomLineItemReturnItem,LineItemReturnItem,Order,OrderQueryResult,OrderState,PaymentState,ReturnInfo,ReturnItem,ReturnPaymentState,ReturnShipmentState,ShipmentState,SyncInfo. - [GraphQL API] Changed the
Metype:- Added the
ordersfield to theMetype - Added the
orderfield to theMetype
- Added the
- [GraphQL API] Changed the
Querytype:- Added the
ordersfield to theQuerytype - Added the
orderfield to theQuerytype
- Added the
Introduced ShippingInfoImportDraft representation
key, instead of just their id value when performing a set or update action:- Channel on an InventoryEntry
- ShippingMethod on a Cart and Order
- TaxCategory on a Product, Cart, and Order
This lets you perform set and update actions with more flexibility.
- [API] Introduced the ShippingInfoImportDraft representation. ShippingInfoImportDraft is a new type that contains the following backwards compatible changes:
- The
taxCategoryfield on ShippingInfoImportDraft is a ResourceIdentifier to a TaxCategory. - The
shippingMethodfield on ShippingInfoImportDraft is a ResourceIdentifier to a ShippingMethod.
- The
- [API] Order Import - The
shippingInfofield on OrderImportDraft is now a ShippingInfoImportDraft instead of a ShippingInfo. - [API] The
supplyChannelfields on InventoryEntryDraft and on the Set SupplyChannel update action are now a ResourceIdentifier to a Channel instead of a Reference. - [API] The following
shippingMethodfields are now a ResourceIdentifier to a ShippingMethod instead of a Reference:- Carts:
- on CartDraft
- on the Set ShippingMethod update action
- Order Edits:
- on the Set ShippingMethod update action
- on the Set ShippingAddress and ShippingMethod update action
- Carts:
- [API] The following
taxCategoryfields are now a ResourceIdentifier to a TaxCategory instead of a Reference:- Products:
- on ProductDraft
- on the Set TaxCategory update action
- Carts:
- on CustomLineItemDraft
- on the Add CustomLineItem update action
- on the Set CustomShippingMethod update action
- Order Edits:
- on the Set ShippingAddress and Custom ShippingMethod update action
- on the Set CustomShippingMethod update action
- on the Add CustomLineItem update action
- Products:
Improved product projection search for several languages
- [API] Improved Product Projection Search, in particular text analysis during a full text search, for the following languages:
- Korean (language tag
ko) - Polish (language tag
pl) - Latvian (language tag
lv) - Slovak (language tag
sk)
- Korean (language tag
API for API Clients
Introduced a new API resource for managing API Clients. This is especially useful for infrastructure-as-code tooling, as well as for API secrets rotating on a regular basis.
- [API] New OAuth scopes
manage_api_clients:{projectKey}andview_api_clients:{projectKey} - [API] New endpoint for managing API Clients
Added Assets to Category Search
User defined key attribute on Shipping Zones
key attribute. The key attribute is used when creating or updating a ShippingMethod to identify a Zone.- [API] Added the
keyattribute on theZoneandZoneDraftrepresentations. - [API] You can now get, update, and delete a Shipping Zone by its key.
- [API] When creating a
ShippingMethod, the Shipping Zone can be referenced by its ID or its key. - [API]
addShippingRate,removeShippingRate,addZone, andremoveZone, can now reference a zone by its ID or its Key.
Introduced a customerNumber field in the UserProvidedIdentifiers
- [API] Added field
customerNumberin the UserProvidedIdentifiers of messages.
This field will only be filled if thecustomerNumberfield on the respective Customer has a value.
ReturnItems for CustomLineItems
customLineItemId on a ReturnItemDraft.{/*
*/}
Shipping Methods - set or update the Tax Category by Key
- [API] The
taxCategoryfields on ShippingMethodDraft and on the update action"changeTaxCategory"are now a ResourceIdentifier to a TaxCategory. (They were a Reference before)
Added new messages related to discounted price on products
- [API] Added ProductPriceDiscountsSet Message.
- [API] Added ProductPriceExternalDiscountSet Message.
Product projection search - explicit sorting by score
It is now possible to explicitly sort by relevance score in product projection search giving you more control over the order of search results.
- [API] Added
scoresorting criteria in Product Projection Search API.
OrderEdit dry run
dryRun to true.- [API] new field
dryRunat OrderEditDraft, update OrderEdit by ID and update OrderEdit by key
Documented TTL for token to reset customer password
- [Documentation] Added field
ttlMinutesto the documentation for API method Create a Token for Resetting the Customer’s Password.
The Messages HTTP API can delete old messages
- [API] The Messages Configuration has a new field
deleteDaysAfterCreation. - [API] A new update action to change the messages configuration has been added. This supersedes the previous update action
changeMessagesEnabled, which has been removed from the documentation (but can still be used for backwards compatibility reasons).
Category and Product Mutations added
- [GraphQL API] Type
Mutationwas changed:- Field
createCategorywas added toMutationtype - Field
updateCategorywas added toMutationtype - Field
deleteCategorywas added toMutationtype - Field
createProductwas added toMutationtype - Field
updateProductwas added toMutationtype - Field
deleteProductwas added toMutationtype
- Field
Additionally the following query fields where added:
-
[GraphQL API] Type
Categorywas changed:- Field
assetswas added toCategorytype
- Field
-
[GraphQL API] Type
ProductVariantwas changed:- Field
assetswas added toProductVarianttype
- Field
-
[GraphQL API] Type
ProductPricewas changed:- Field
tierswas added toProductPricetype
- Field
HTTPS security changes activated
Temporary URLs that we provided for application testing are not active anymore.
Add OAuth scope to manage project settings
- [API] The new
manage_project_settingsscope grants access to modifying and viewing the project settings. Previously, only themanage_projectscope did.
Added SetLineItemPrice for Orders and OrderCustomerGroupSet message
- [API] Added update action SetLineItemPrice.
- [API] Added field
refusedGiftsto Order. - [API] Added message OrderCustomerGroupSet Message.
Subscriptions out of Beta
Shopping List API out of Beta
Messages and Change Subscriptions now have user-provided identifiers
id field is), but provided by the API user (like the key or orderNumber fields). In particular the design goal of the key field is to allow client applications to only use the key field, and ignore the API-provided id field.key field among other user-provided identifiers into data structures commonly used in asynchronous processing by Subscriptions and the Messages Endpoint.- [API] Added
resourceUserProvidedIdentifiersto the common message fields - [API] Added
resourceUserProvidedIdentifiersto the subscription payload
Change Subscriptions now support ten more resource types
resourceTypeIds are now supported by Change Subscriptions:cart-discountchanneldiscount-codeextensionproduct-discountshopping-listsubscriptionstatetax-categorytype
Cart updates prices, taxes etc. on every update
- [API] The Update Cart section now contains a description of the updates
- [API] The description of the Recalculate update action has been changed to reflect the two remaining use cases for it
Added Order Edits
This feature is in beta so we do not guarantee that the API is in its final shape.
- [API] New types OrderEdit, OrderEditDraft, StagedOrderUpdateAction, OrderEditResult, OrderExcerpt and OrderMessagePayload
- [API] New OrderEdit endpoint with functionality to create, update by ID, update by key, query, get by ID, get by key, apply, delete by ID and delete by key.
- [API] New OrderUpdateActions which only be performed via OrderEdits: setCountry, setShippingMethod, setCustomShippingMethod, addDiscountCode, removeDiscountCode, setCustomerGroup, setShippingMethodTaxRate, setShippingMethodTaxAmount, setOrderTotalTax, changeTaxMode, changeTaxRoundingMode, setShippingRateInput, changeTaxCalculationMode, addShoppingList, setShippingAddressAndShippingMethod, setShippingAddressAndCustomShippingMethod, addLineItem, removeLineItem, changeLineItemQuantity, setLineItemTaxRate, setLineItemTaxAmount, setLineItemTotalPrice, addCustomLineItem, removeCustomLineItem, setCustomLineItemTaxAmount, setCustomLineItemTaxRate, changeCustomLineItemQuantity, changeCustomLineItemMoney
- [API] New error code EditPreviewFailed
- [API] New Scopes
manage_order_edits:{projectKey}andview_order_edits:{projectKey} - [API] Get ShippingMethods for an OrderEdit
Added new error codes and extended existing error information
We have introduced new error codes that should help you analyzing the root cause of 'Bad Request' type errors by giving more specific error messages.
- MatchingPriceNotFound for Orders and Carts
- MissingTaxRateForCountry for Orders, Carts and Customers
- DuplicateFieldWithConflictingResource for Zones
- DuplicateField for TaxCategories
We have enriched an existing error code with additional information to be more specific on the error cause.
- DiscountCodeNonApplicable for Orders and Carts
- [API] Added the
EnumValueIsUsederror code.
HTTPS security changes
For application testing, we offer temporary URLs that already support the new setup. These URLs are available now but only until end of September when the changes go into effect. The test URLs are:
For EU:
https://auth-tls12.commercetools.comhttps://api-tls12.commercetools.com
For US:
https://auth-tls12.commercetools.cohttps://api-tls12.commercetools.co
Please note again that these URLs are for testing purposes only and will be shut down as soon as the main setup has changed.
Added setValidFromAndUntil to cart discounts and discount codes
validFrom and validUntil values for CartDiscounts and DiscountCode in the same update action. We also added support for these update actions to the GraphQL API.- [API] Added update action Set Valid From and Until.
- [API] Added update action Set Valid From and Until.
- [GraphQL API] Added
CartDiscountUpdateAction.setValidFromAndUntil. - [GraphQL API] Added
DiscountCodeUpdateAction.setValidFromAndUntil.
Add GraphQL queries for State
-
[GraphQL API] Type
Querywas extended:- Field
stateswas added toQuerytype. - Field
statewas added toQuerytype.
- Field
-
[Documentation] Fix documentation of State:
- The field
nameis optional. - The field
descriptionis optional.
- The field
-
[Documentation] Fix documentation of StateDraft:
- Add missing field
rolesused in the Reviews tutorial.
- Add missing field
Order Deleted Message
You can now be notified about deletion of orders that have been created for test purposes, for instance.
- [API] Added OrderDeleted Message.
Added reference expansion on more shipping method related endpoints
- [API] Added
expandparameter to Get ShippingMethods for a Cart. - [API] Added
expandparameter to Get ShippingMethods for a Location.
Added GraphQL support for Carts
- [GraphQL API] The following types were added in the GraphQL schema:
AddCartCustomLineItem,AddCartDiscountCode,AddCartItemShippingAddress,AddCartLineItem,AddCartPayment,AddCartShoppingList,AddMyCartLineItem,ApplyCartDeltaToCustomLineItemShippingDetailsTargets,ApplyCartDeltaToLineItemShippingDetailsTargets,BaseMoneyInput,Cart,CartDraft,CartOrigin,CartQueryResult,CartState,CartUpdateAction,ChangeCartCustomLineItemMoney,ChangeCartCustomLineItemQuantity,ChangeCartLineItemQuantity,ChangeCartTaxCalculationMode,ChangeCartTaxMode,ChangeCartTaxRoundingMode,ChangeMyCartTaxMode,ClassificationShippingRateInput,ClassificationShippingRateInputDraft,CustomLineItem,CustomLineItemDraft,Delivery,DeliveryItem,DiscountCodeInfo,DiscountCodeState,DiscountedLineItemPortion,DiscountedLineItemPrice,DiscountedLineItemPriceForQuantity,ExternalLineItemTotalPriceDraft,ExternalTaxAmountDraft,ExternalTaxRateDraft,HighPrecisionMoneyInput,InventoryMode,ItemShippingDetails,ItemShippingDetailsDraft,ItemShippingTarget,ItemState,LineItem,LineItemDraft,LineItemMode,LineItemPriceMode,MyCartDraft,MyCartUpdateAction,MyLineItemDraft,Parcel,ParcelMeasurements,PaymentInfo,RecalculateCart,RemoveCartCustomLineItem,RemoveCartDiscountCode,RemoveCartItemShippingAddress,RemoveCartLineItem,RemoveCartPayment,RoundingMode,ScoreShippingRateInput,ScoreShippingRateInputDraft,SetCartAnonymousId,SetCartBillingAddress,SetCartCountry,SetCartCustomField,SetCartCustomLineItemCustomField,SetCartCustomLineItemCustomType,SetCartCustomLineItemShippingDetails,SetCartCustomLineItemTaxAmount,SetCartCustomLineItemTaxRate,SetCartCustomShippingMethod,SetCartCustomType,SetCartCustomerEmail,SetCartCustomerGroup,SetCartCustomerId,SetCartDeleteDaysAfterLastModification,SetCartLineItemCustomField,SetCartLineItemCustomType,SetCartLineItemPrice,SetCartLineItemShippingDetails,SetCartLineItemTaxAmount,SetCartLineItemTaxRate,SetCartLineItemTotalPrice,SetCartLocale,SetCartShippingAddress,SetCartShippingAddressAndCustomShippingMethod,SetCartShippingAddressAndShippingMethod,SetCartShippingMethod,SetCartShippingMethodTaxAmount,SetCartShippingMethodTaxRate,SetCartShippingRateInput,SetCartTotalTax,SetCustomerGroup,SetCustomerNumber,SetMyCartShippingMethod,ShippingInfo,ShippingMethodState,ShippingRateInput,ShippingRateInputDraft,ShippingTargetDraft,TaxCalculationMode,TaxMode,TaxPortion,TaxPortionDraft,TaxedItemPrice,TaxedPrice,TrackingData,UpdateCartItemShippingAddress. - [GraphQL API] The following types were removed from the GraphQL schema:
SetCustomerCustomerGroup,SetCustomerCustomerNumber. - [GraphQL API] Type
Mewas changed:- Field
cartswas added toMetype - Field
activeCartwas added toMetype - Field
cartwas added toMetype
- Field
- [GraphQL API] Type
Querywas changed:- Field
cartswas added toQuerytype - Field
cartwas added toQuerytype - Field
customerActiveCartwas added toQuerytype
- Field
- [GraphQL API] Type
CustomerSignInResultwas changed:- Field
cartwas added toCustomerSignInResulttype
- Field
- [GraphQL API] Type
CustomerUpdateActionwas changed:CustomerUpdateAction.setCustomerGroupinput field type changed fromSetCustomerCustomerGrouptoSetCustomerGroupCustomerUpdateAction.setCustomerNumberinput field type changed fromSetCustomerCustomerNumbertoSetCustomerNumber
- [GraphQL API] Type
Mutationwas changed:- Field
deleteCartwas added toMutationtype - Field
deleteMyCartwas added toMutationtype - Field
createMyCartwas added toMutationtype - Field
updateMyCartwas added toMutationtype - Field
updateCartwas added toMutationtype - Field
replicateCartwas added toMutationtype - Field
createCartwas added toMutationtype
- Field
Removed IronMQ from the documentation
Subscriptions indicate Health Status
ConfigurationError can be fixed (common causes are deleting the destination queue, deleting the access credentials, or removing the permission to push messages into the queue).ConfigurationErrors:- A production project has up to 24 hours to fix the configuration
- A development or staging project has up to an hour to fix the configuration
ConfigurationErrorDeliveryStopped. For more information, see the updated Delivery Guarantees.- [API] Added the SubscriptionHealthStatus, and a new field
statusto the subscription. - [API] Added the new update action changeDestination
- [API] Added a public endpoint to monitor the health of a subscription
The product discount limit was increased to 500
The product discount limit was increased to 500.
- [API] Increased limit on ProductDiscount to 500
Subscriptions and Extensions hide access secrets
Order Update Action - setCustomerId
- [API] Added update action SetCustomerId on Order.
- [API] Added OrderCustomerSet Message.
Changes in the GraphQL schema
- [GraphQL API] Following types were added in the GraphQL schema:
ChangeCustomerGroupName,CustomerGroupDraft,CustomerGroupUpdateAction,SetCustomerGroupCustomField,SetCustomerGroupCustomType,SetCustomerGroupKey. - [GraphQL API] Type
CustomerGroupwas changed:- Field
customFieldsRawwas added toCustomerGrouptype
- Field
- [GraphQL API] Type
Mutationwas changed:- Field
updateCustomerGroupwas added toMutationtype - Field
deleteCustomerGroupwas added toMutationtype - Field
createCustomerGroupwas added toMutationtype
- Field
Subscriptions support Google Cloud Pub/Sub
- [API] The Google Cloud Pub/Sub destination has been added.
Added orderState and state field to OrderFromCartDraft
- [API]
orderStateandstatecan now be set in the OrderFromCartDraft
Change Subscription payloads includes modifiedAt
modifiedAt.- [API] The Payloads ResourceCreated, ResourceUpdated and ResourceDeleted have a new field
modifiedAt.
Added setValidFromAndUntil to product discounts methods
setValidFromAndUntil to product discount update methods.- [API] Added update action Set Valid From and Until to ProductDiscount
- [GraphQL API] Added
ProductDiscountUpdateAction.setValidFromAndUntil
Changes in the GraphQL schema
- [GraphQL API] The following types were added in the GraphQL schema:
AddCustomerAddress,AddCustomerBillingAddressId,AddCustomerShippingAddressId,Address,AddressContactInfo,AddressInput,AnonymousCartSignInMode,ChangeCustomerAddress,ChangeCustomerEmail,Customer,CustomerQueryResult,CustomerSignInDraft,CustomerSignInResult,CustomerSignMeInDraft,CustomerSignMeUpDraft,CustomerSignUpDraft,CustomerToken,CustomerUpdateAction,Me,MyCustomerUpdateAction,RemoveCustomerAddress,RemoveCustomerBillingAddressId,RemoveCustomerShippingAddressId,SetCustomerCompanyName,SetCustomerCustomField,SetCustomerCustomType,SetCustomerCustomerGroup,SetCustomerCustomerNumber,SetCustomerDateOfBirth,SetCustomerDefaultBillingAddress,SetCustomerDefaultShippingAddress,SetCustomerExternalId,SetCustomerFirstName,SetCustomerKey,SetCustomerLastName,SetCustomerLocale,SetCustomerMiddleName,SetCustomerSalutation,SetCustomerTitle,SetCustomerVatId. - [GraphQL API] Type
Querywas changed:- Field
customerwas added toQuerytype - Field
customerswas added toQuerytype - Field
mewas added toQuerytype
- Field
- [GraphQL API] Type
Mutationwas changed:- Field
customerCreatePasswordResetTokenwas added toMutationtype - Field
customerCreateEmailVerificationTokenwas added toMutationtype - Field
customerSignMeUpwas added toMutationtype - Field
customerConfirmEmailwas added toMutationtype - Field
deleteMyCustomerwas added toMutationtype - Field
deleteCustomerwas added toMutationtype - Field
customerResetMyPasswordwas added toMutationtype - Field
updateMyCustomerwas added toMutationtype - Field
customerSignMeInwas added toMutationtype - Field
updateCustomerwas added toMutationtype - Field
customerChangeMyPasswordwas added toMutationtype - Field
customerChangePasswordwas added toMutationtype - Field
customerResetPasswordwas added toMutationtype - Field
customerConfirmMyEmailwas added toMutationtype - Field
customerSignInwas added toMutationtype - Field
customerSignUpwas added toMutationtype
- Field
Subscriptions support CloudEvents and Azure EventGrid (Preview)
{/* vale commercetools.DiscriminatoryWords = NO */}
Preview, with the goal to give feedback to the CloudEvents working group.- [API] Added Format to the Subscriptions API. The CloudEvents format can be used with all of the existing destinations.
- [API] Added the Azure Event Grid Destination. It can only be used with CloudEvents.
Added GraphQL support for Inventory
- [GraphQL API] The following types were added in the GraphQL schema:
AddInventoryEntryQuantity,ChangeInventoryEntryQuantity,InventoryEntry,InventoryEntryDraft,InventoryEntryQueryResult,InventoryEntryUpdateAction,RemoveInventoryEntryQuantity,SetInventoryEntryCustomField,SetInventoryEntryCustomType,SetInventoryEntryExpectedDelivery,SetInventoryEntryRestockableInDays,SetInventoryEntrySupplyChannel. - [GraphQL API] Type
Querywas changed:- Field
inventoryEntrieswas added toQuerytype - Field
inventoryEntrywas added toQuerytype
- Field
- [GraphQL API] Type
Mutationwas changed:- Field
deleteInventoryEntrywas added toMutationtype - Field
createInventoryEntrywas added toMutationtype - Field
updateInventoryEntrywas added toMutationtype
- Field
Added error messages
- [API] Added more specific error messages. Please find details in the Errors documentation.
Added filtering for stock and images on product variants in GraphQL
- [GraphQL API] Added filtering parameters
isOnStock,stockChannelIdsandhasImagestoProductData.variantsandProductData.allVariants.
Change a category parent by resource identifier instead of reference
- [API] The field
parentof the changeParent action is now a ResourceIdentifier instead of a Reference.
More info if the payload of a message subscription had to be dropped
type field is placed into the notification.- [API] The Message Subscription Payload has a new field called
payloadNotIncludedof type PayloadNotIncluded.
Set shipmentState when ordering a cart
The shipmentState can now be set when creating an order from a cart. Before, it was only settable by an update action, requiring an additional API call.
- [API] The OrderFromCartDraft has a new field called
shipmentState.
Changes in Cart Discounts StackingMode StopAfterThisDiscount Behavior
StopAfterThisDiscount.- [API] The StackingMode
StopAfterThisDiscountnow continues with further discounts if the discount could not be applied because the CartDiscountTarget did not match. Previously, the application of further discounts was stopped even if the target condition was not fulfilled.
Payment API out of Beta
As part of a Beta improvement initiative, we've announced breaking changes to the Payment API in September. The changes have been applied now, and the Payment API is out of Beta.
- [API] The
InitialTransactionState is now the defaultstatevalue in the TransactionDraft. - [API] TransactionType previously had "all capitals" values like
AUTHORIZATION,CHARGEetc., that have now been changed.
GraphQL support for custom fields on category and product price
Custom fields on category and product price are now supported on GraphQL endpoint.
- [GraphQL API] Added support for CustomFields on Category and Price on GraphQL API.
GDPR tutorial
We have published a tutorial about how commercetools Composable Commerce fulfills the requirements of the General Data Protection Regulations.
- [Tutorial] Added GDPR Tutorial.
Added GraphQL mutations for the CartDiscount and ProductDiscount
- [GraphQL API] Following types were added in the GraphQL schema:
AbsoluteDiscountValueInput,CartDiscountDraft,CartDiscountTargetInput,CartDiscountUpdateAction,CartDiscountValueInput,ChangeCartDiscountCartPredicate,ChangeCartDiscountIsActive,ChangeCartDiscountName,ChangeCartDiscountRequiresDiscountCode,ChangeCartDiscountSortOrder,ChangeCartDiscountStackingMode,ChangeCartDiscountTarget,ChangeCartDiscountValue,CustomLineItemsTargetInput,ExternalDiscountValueInput,GiftLineItemValueInput,LineItemsTargetInput,MoneyInput,MultiBuyCustomLineItemsTargetInput,MultiBuyLineItemsTargetInput,ProductDiscountDraft,ProductDiscountValueInput,RelativeDiscountValueInput,SetCartDiscountCustomField,SetCartDiscountCustomType,SetCartDiscountDescription,SetCartDiscountValidFrom,SetCartDiscountValidUntil,ShippingTargetInput.
- [GraphQL API] Type
ProductDiscountwas changed:ProductDiscounttype description is changed
- [GraphQL API] Type
Mutationwas changed:- Field
updateProductDiscountwas added toMutationtype - Field
updateCartDiscountwas added toMutationtype - Field
deleteProductDiscountwas added toMutationtype - Field
createProductDiscountwas added toMutationtype - Field
createCartDiscountwas added toMutationtype - Field
deleteCartDiscountwas added toMutationtype
- Field
Data Erasure of Personal Data
DELETE request may not clean up all data, both visible at the HTTP API layer (for example personal data may be part of messages) and invisible (commercetools Composable Commerce internally keeps logs for some time, to reconstruct data in case of faulty system behavior).DELETE requests called dataErasure. If set to true, commercetools Composable Commerce guarantees that all personal data related to the particular object, including invisible data, is erased, in compliance with the GDPR. You are, however, responsible for identifying and deleting all objects that belong to a customer, and deleting them.The parameter is available for:
High precision prices
- [API] BaseMoney - base polymorphic type which supports cent and high precision at the same time.
- [API] Money - added
fractionDigitsandtypefields. - [API] HighPrecisionMoney - supports definition of sub-cent amounts.
- Following types have been updated to support high precision prices while keeping everything compatible with cent precision Money:
- [API] Price
- [API] ScopedPrice
- [API] PriceTier
- [API] PriceDraft
- [API] CartPredicate
Customer Group Key can be used on Carts and Customers
key can now be used on Carts and Customers endpoints to identify a Customer Group.- [API] The CartDraft and Set Customer Group action accept a ResourceIdentifier to a CustomerGroup
- [API] The CustomerDraft and Set Customer Group action accept a ResourceIdentifier to a CustomerGroup
DiscountCode.applicationCount and ProductVariant.availability in GraphQL schema
- [GraphQL API] Added new field
DiscountCode.applicationCount. - [GraphQL API] Product variant info now includes availability information. Since the list of availability per sales channel can get quite big there is a support for pagination and inclusion and exclusion of sales channels.
Correlation ID
- [API] The API accepts a client-provided Correlation ID if sent with the
X-Correlation-IDHTTP header - [API] If the client does not provide one, the API generates one and the response contains the
X-Correlation-IDHTTP header
Authorization Header for HTTP API Extensions
headerValue when the HTTP API Extension is called.- HTTP Destination Authentication type Authorization Header added to API Extensions.
Update Multiple Shipping Addresses for Orders
We added the following update actions to Order to manage multiple shipping addresses:
- [API] AddItemShippingAddress
- [API] RemoveItemShippingAddress
- [API] UpdateItemShippingAddress
- [API] SetLineItemShippingDetails
- [API] SetCustomLineItemShippingDetails
AWS Lambda API Extensions
You can now create API Extensions natively with AWS Lambda. The AWS Lambda functions are invoked directly (and do not need to go through the AWS API Gateway).
- [API] API Extensions support the AWS Lambda Destination.
- [API] API Extensions Responses have been updated for use with AWS Lambda functions.
Matching Product Discount Endpoint
- [API] matching ProductDiscount endpoint added.
Orders API Extensions
- [API] API Extensions available for
order.
Product type attribute definition management
- [API] Added update action
"changeAttributeName"on ProductType. - [API] Added update action
"changeEnumKey"on ProductType.
Customer and Payment API Extensions
You can now extend the behavior of the Payment API and the Customer API with your business logic with the help of API Extensions. An API Extension gets called after the processing of a create or update request of an API call but before the result is persisted. The API Extension can validate the object or apply additional updates to it. It can, for example, validate that a payment in the given configuration can be processed, or trigger actions with the payment service provider (PSP). Or it can validate that a customer's account details don't look fraudulent, or set a customer group based on the email address.
- [API] API Extensions available for
payments. - [API] API Extensions available for
customer.
Simplified cart predicate language
- [API] A boolean value is now a valid predicate. For example if a cart discount should match all carts, the predicate
trueis now sufficient. Previously, one had to write1 = 1ortrue = true. - [API] A boolean function is now a valid predicate. For example
lineItemExists(...)is now sufficient. Previously, one had to writelineItemExists(...) = true.
Replicate existing cart or order to a new cart
We now support creating a new cart by replicating an existing cart or order.
- [API] Added endpoint replicate an existing cart or order to a new cart.
- [API] Added model ReplicaCartDraft.
Customer update messages
- [API] Added CustomerAddressChanged Message.
- [API] Added CustomerEmailChanged Message.
- [API] Added CustomerEmailVerified Message.
- [API] Added CustomerCompanyNameSet Message.
- [API] Added CustomerDateOfBirthSet Message.
- [API] Added CustomerGroupSet Message.
- [API] Added CustomerAddressRemoved Message.
- [API] Added CustomerAddressAdded Message.
Improvements in GraphQL API coverage
Multiple Shipping Addresses
We added following objects:
- [API] ItemShippingDetails and its draft object ItemShippingDetailsDraft
- [API] ItemShippingTarget
We added following fields:
- [API]
keyon Address - [API]
itemShippingAddresseson Cart, CartDraft, MyCartDraft, Order and OrderImportDraft - [API]
shippingDetailsof type ItemShippingDetails on LineItem and CustomLineItem - [API]
shippingDetailsof type ItemShippingDetailsDraft on LineItemDraft (also used by AddLineItem), MyLineItemDraft, MyCart AddLineItem, CustomLineItemDraft and LineItemImportDraft - [API]
shippingDetailsToRemoveof type ItemShippingDetailsDraft on RemoveLineItem
We added following update actions:
- [API] AddItemShippingAddress on Cart/MyCart
- [API] RemoveItemShippingAddress on Cart/MyCart
- [API] UpdateItemShippingAddress on Cart/MyCart
- [API] ApplyDeltaToLineItemShippingDetailsTargets on Cart/MyCart
- [API] ApplyDeltaToCustomLineItemShippingDetailsTargets on Cart
- [API] SetLineItemShippingDetails on Cart/MyCart
- [API] SetCustomLineItemShippingDetails on Cart
We added following error message:
- [API] InvalidItemShippingDetails which occurs on the creation of an order with invalid quantity distribution for the addresses.
Custom Fields for Customer Groups
- [API] Added a
customfield to the CustomerGroup and CustomerGroupDraft. - [API] Added Set Custom Type and Set CustomField update actions to manage the custom fields on a customer group.
- [API] Added predicate for custom fields on Query CustomerGroups endpoint.
New field origin on cart and order
- [API] Added enumeration CartOrigin.
- [API] Added field
originto Cart that can be set during creation of the cart. - [API] Added field
originto Order that is taken over from the cart or set during import of the order.
DiscountCode can now be grouped
Return StateRole can now be used to mark the state of those line items that belong to the return process of an order.- [API] Added field
groupsto DiscountCode and DiscountCodeDraft. - [API] Added Change Groups update action to manage the groups on a discount code.
- [API] Added
ReturnStateRole for LineItems.
Release API Extensions Tutorial
API Extensions can now return a localized description of the error. If available, the Merchant Center will use the correct localization to display the error.
- [Tutorial] Added tutorial on API Extensions.
- [API] Added
localizedMessageto the API Extension Error.
Reference a category parents by its key
- [API] The field
parentof CategoryDraft is now a ResourceIdentifier instead of a Reference (like it was before).
Release API Extensions
With API Extensions, you can extend the behavior of the cart API with your business logic. An API Extension gets called after the processing of a create or update request of an API call, but before the result is persisted. The API Extension can validate the object, or apply additional updates to it. Good use cases for API Extensions are: Validating the content of a cart (for example no more than 8 crates of beverages can be ordered at once), calculating custom shipping costs, or adding mandatory items, like insurance, to a cart.
- [API] New API Extensions endpoint with functionality to create, update, and delete extensions.
- [API] New error codes: ExtensionBadResponse, ExtensionUpdateActionsFailed and ExtensionNoResponse.
- [API] New Scope
manage_extensionsgranting access to API Extensions endpoint.
Deliveries with address information
Deliveries can now be given their own addresses. The delivery address is not to be confused with the shipping address. An order can only have one shipping address based on which the shipping rate is determined. With delivery addresses, however, it is possible to capture multiple fulfillment-related addresses, for example, a customer is stocking up on printing paper and has ordered 80 packages of printing paper; 20 packages are to be delivered to the main office building, 58 to the warehouse and 2 for their home office. This can be achieved by defining three deliveries for the order, each with its own address.
- [API] Added field
addressto Delivery and AddDelivery. - [API] Added update action SetDeliveryAddress to update the address on an existing delivery.
- [API] Added message DeliveryAddressSet Message that is produced when the address on an existing delivery has changed.
DiscountCode with validity period
We have introduced validity ranges on Discount Codes for limiting the time range in which a code can be applied to a cart. Setting a validity can also help to manage campaigns which are promoted via discount codes, also considering that one code may contain several different cart discounts with varying validity dates.
- [API] Added
validFromandvalidUntilfields in a DiscountCode. - [API] Added "setValidFrom" and "setValidUntil" update actions for a DiscountCode.
- [API] Added DiscountCodeState
NotValidandApplicationStoppedByPreviousDiscount.
"validFrom" and "validUntil" fields in a ProductDiscount
We have introduced validity periods on Product Discounts to support discounting a (range of) products within a given time frame. Instead of activating product discounts manually, we now allow promotion planning in advance. Please consider that it can take some time to recalculate product discount values. Many discounts with the same validity values may take up to a few minutes to being live.
- [API] Added
validFromandvalidUntilfields in a ProductDiscount. - [API] Added "setValidFrom" and "setValidUntil" update actions for a ProductDiscount.
Update Deliveries
- [API] Added the update actions
setDeliveryItems,removeParcelFromDelivery,removeDelivery,setParcelMeasurements,setParcelTrackingDataandsetParcelItemsto Orders. - [API] Added corresponding messages: DeliveryRemoved, DeliveryItemsUpdated, ParcelRemovedFromDelivery, ParcelTrackingdataUpdated, ParcelMeasurementsUpdated and ParcelItemsUpdated Message.
- [API] The changeShipmentState update action now produces the OrderShipmentStateChanged Message.
- [API] The setReturnShipmentState update action now produces the OrderReturnShipmentStateChanged Message.
New update action for changing Attribute Constraint on a ProductType
In case the 'SameForAll' and 'Unique' constraints on attributes of your product types prevent you from extending your products, you can now change them to 'None'.
- [API] Added new update action changeAttributeConstraint.
Select cart or target line items by custom type key
- [API] Added
custom.type.keyandcustom.type.idCart Predicate supported in- the LineItemPredicate to specify which line item a discount is applied to.
- and CustomLinteItemPredicate to specify which custom line item a discount is applied to.
Add key to assets and Add an asset at a specific position
key that is unique only within the asset's container (a product variant or a category). Before only the id of the assets could be used to identify them. Assets can now be placed at a specific position within the asset list when adding them to a ProductVariant or a Category.-
[API] Assets have a new optional
keyfield that can be set during creation of the asset or afterwards by the new update actionSetAssetKeyon products and on categories endpoints. -
[API] An Asset
keycan now be used as an alternative identifier to the asset ID on following update actions: -
[API] Added optional field
positionon update actions:
Revert staged variant
Changes on and deletions of product variants can now be reverted.
- [API] Added new update action on products Revert Staged Variant Changes.
Custom Fields for Cart Discount
- [API] Added a
customfield to the CartDiscount and CartDiscountDraft. - [API] Added Set Custom Type and Set CustomField update actions to manage the custom fields on a cart discount.
- [API] Added support for predicates like
custom(field(field_name="field_value"))on Query CartDiscounts endpoint.
Add Line Item by SKU in Shopping List
- [API] Added Product Variant identification by
skuon ShoppingListLineItemDraft.
Update of shipping method predicate
predicate can now be updated or removed on any existing ShippingMethod. Before it could only be set during creation of shipping methods.- [API] Added update action Set Predicate.
Cart Tax Calculation Mode
UnitPriceLevel TaxCalculationMode on carts to be able to calculate taxes per unit price and not only per line item as before. The opposite LineItemLevel mode is the default tax calculation mode on the cart so that this new feature does not break any existing application.- [API] Added
taxCalculationModeto Cart and Order. The TaxCalculationMode can be set during creation of the cart or afterwards by the new update action Change TaxCalculationMode. Carts can now be queried bytaxCalculationMode.
Improved customer Sign In
Keys in Cart and Product Discount predicates
We added the capability to use user-defined keys of categories, products, and customer groups in predicates for the specification of product and cart discounts. With this it is no longer required to use their IDs in the predicates.
- [API] Added the capability to use Category
keyin LineItemPredicate Fields. - [API] Added the capability to use Product
keyin LineItemPredicate Fields. - [API] Added the capability to use Product
keyin ProductDiscount Predicate Identifiers. - [API] Added the capability to use CustomerGroup
keyin LineItemPredicate Fields. - [API] Added the capability to use CustomerGroup
keyin Cart-related Predicate Fields. - [API] Added the capability to use CustomerGroup
keyin ProductDiscount Predicate Identifiers.
Multi-Buy Discounts for Custom Line Items
- [API] Added new MultiBuyCustomLineItems Target on CartDiscount.
Managing orders by order number
orderNumber instead of the id field of the order.- [API] Added Get Order by OrderNumber.
- [API] Added Update Order by OrderNumber.
- [API] Added Delete Order by OrderNumber.
Parcel Items
- [API] Added field
itemsto Parcel. - [API] Added field
itemsto Add Parcel update action. - [API] Changed field
itemson Add Delivery update action to be optional.
Added dynamic shipping rates
- [API] Added ShippingRatePriceTiers as an optional field on shipping rate.
- [API] Added the
shippingRateInputfield on the Cart and the CartDraft, as well as the corresponding update action SetShippingRateInput. - [API] Added the
shippingRateInputfield on the Order. - [API] Added the
shippingRateInputTypefield on the Project.
Remove enum values from attribute definitions
All attributes of all products using those enum keys will be removed in an eventually consistent way.
- [API] Add update action
removeEnumValuesto ProductTypes.
Improved Cart's recalculation update action
- [API] Instead of rejecting update requests to recalculate the cart when any of the line items became invalid (for example, because corresponding products don't exist anymore), the relevant items will now be dropped and the recalculation will be executed with only the remaining items.
Cart Discount Stacking Mode
sortOrder. Therefore, a new field stackingMode has been added. The former behaviour of always applying all matching discounts is now encapsulated in the default value of stackingMode: Stacking.- [API] Added stackingMode to CartDiscounts.
- [API] Allow users to set stackingMode when creating CartDiscounts.
- [API] Allow users to update stackingMode using the Change Stacking Mode update action.
Custom line items behavior improved
Payment API deprecating fields
As part of a Beta improvement initiative, the Payment API has been updated deprecating a series of fields.
- [API]
externalIdin PaymentDraft, Payment as well as under Update Payment
This field has been deprecated because theinterfaceIdcan be used for the ID set by the payment service provider (PSP), and the newly introducedkeyfield has taken over the role ofexternalID. - [API]
amountAuthorized,amountPaidandamountRefundedin PaymentDraft, Payment as well as under Update Payment
These fields have been deprecated because their value can be calculated from the total amounts saved in the Transactions.- Example 1: Two transactions, one with
type:Charge,state:Successandamount:2$and another one withtype:Charge,state:Successandamount:3$. TheamountPaidis5$. - Example 2: Two transactions, one with
type:Charge,state:Failureandamount:2$and another one withtype:Charge,state:Successandamount:3$. TheamountPaidis3$. - Example 3: Two transactions, one with
type:Charge,state:Successandamount:3$and another one withtype:Refund,state:Successandamount:2$. TheamountPaidis3$. TheamountRefundedis2$.
- Example 1: Two transactions, one with
- [API]
authorizedUntilin PaymentDraft, Payment as well as under Update Payment
We learned the field is of little practical value, as it is either not reliably known, or the authorization time is fixed for a PSP. - [API]
paymentIdin PaymentStatusInterfaceCodeSet Message
This field has been deprecated because theidin theresourcefield can be used instead. - [API] TransactionType previously had uppercase values like
AUTHORIZATION,CHARGEetc. These are deprecated.
- [API] The
InitialTransactionState has been added. It is used when the PSP has not accepted the transaction yet (including if the PSP has not been contacted yet). The existingPendingstate is from now on used when the PSP has accepted the transaction, but it is not completed yet.
In the future, we will change the defaultstatevalue in the TransactionDraft toInitial. Do not depend on the default value! Please set thestatefield explicitly as soon as possible.
Custom Fields for Discount Codes
- [API] Added a
customfield to the DiscountCode and DiscountCodeDraft. - [API] Added Set Custom Type and Set CustomField update actions to manage the custom fields on a discount code.
- [API] Support searching for DiscountCodes with predicates like
custom(field(field_name="field_value"))
Removed originalPrice field in LineItem Predicate
originalPrice field on the line item predicate was duplicating the behavior of the price field, the originalPrice field was removed.- [API] Removed
originalPricefield on LineItemPredicate. - [Documentation] Updated outdated description of
pricefield on LineItemPredicate
Project Updates
- [API] Project has a new field
version. - [API] Added Project Update Endpoint.
- [API] Added changeName to change the name of the project.
- [API] Added changeCurrencies to change the currencies of the project.
- [API] Added changeCountries to change the countries of the project.
- [API] Added changeLanguages to change the languages of the project.
- [API] Added changeMessagesEnabled to enable or deactivate messages for the project.
Multi-Buy Discounts
- [API] Discounts of type "Buy 4 car tires, get 2 of them 50% off" can now be defined using the MultiBuyLineItems Target in a CartDiscount.
ShippingMethod predicate
- [API] The field
predicatewas added to ShippingMethod. - [API] The field
shippingMethodStatewas added to ShippingInfo. - [API] The order-related error code
ShippingMethodDoesNotMatchCartwas added.
Payment Endpoints for Customers
- [API] Added My Payments Endpoints as feature.
Cancel limit for Cart Discount activated by Discount Code
We now removed the limit of cart discounts that are triggered by discount codes. Those discounts were limited to 100 before together with the cart discounts for which no discount code is required.
- [API] The limit of 100 active CartDiscounts now only applies to cart discounts that do not require a discount code.
- [API] The number of cart discounts in a DiscountCode is limited to 10.
- [API] The number of discount codes in a Cart is limited to 10.
External Tax Amount
ExternalAmount allows to set the totalGross, taxRate and taxPortions fields on cart's content externally by the client. This is useful in case you prefer to have those values calculated by a third party service.- [API] Added the TaxMode
ExternalAmount. - [API] With it, it is possible to set the line item tax amount, the custom line item tax amount, the shipping method tax amount as well as the cart total tax.
Changing mark Matching Variants default behavior
For performance improvements, the "mark-matching-Variants" feature on the Product Projection Search API will be deactivated by default during the week of 11 September 2017. If your project does not require the "mark-matching-Variants" feature for Product Projection Search, no further action is required from your side.
- [API] If you make use of this feature, you now have to enforce it by explicitly setting the
markMatchingVariantsparameter totrueon requests to this API from next week onwards. Please refer to the documentation on how to set the parameter accordingly.
Added My Shopping List Endpoints
- [API] Added My Shopping Lists endpoint for creating, updating, retrieving, querying and deleting shopping lists of a customer.
- [API] Added new scope
manage_my_shopping_listsgranting access to a customer's shopping lists.
Set Anonymous ID on a Cart
Added an update action to set und unset the anonymous ID of a cart.
- [API] Added new update action setAnonymousID.
Added time based product filters
Products can now be filtered by the times they were created or updated latest.
- [API] Product Projection Search now supports filtering by datetime.
Keys for Tax Categories
key field to TaxCategories- [API] TaxCategories have a new optional field
keythat allows clients to specify a unique user-specified identifier for the tax category. Keys can be set during creation of the tax category or afterwards by the new update action Set Key. Now tax categories can also be retrieved, updated and deleted by key.
Publish product prices only, Products can be added to a cart by SKU
It is now possible to publish only the prices of a product. This allows you to keep other product information you don't want to publish yet, like updates in the product description, in staged projection while the updated prices will be published already. Product variants to be added to a cart can now be specified by their SKU. Before, the only option was to specify them by their product ID plus variant ID.
- [API] The Product
publishupdate action has a new fieldscopecontrolling the publishing behavior. By default thisscopeis set to"All", but when set to"Prices" only the prices will be published. - [API]The ProductPublish Message also has a new field
scope, containing thescopethat was set during the correspondingpublishupdate action. - [API] The LineItemDraft Product Variant identification has been added to be able to add a product to a cart by SKU, either when creating the cart, or when adding a line item.
Keys for Customers
key field to CustomerCustomer Groups for Carts with no Customer assigned
We added the possibility to use customer group-specific price selection on carts with no customer assigned.
- [API] CartDraft has a new optional field
customerGroupthat can be set ifcustomerIdis not present. - [API] Added new update action setCustomerGroup to set the customer group to a cart if
customerIdis not present.
OAuth 2.0 Token Introspection
scope.- [API] OAuth 2.0 Token Introspection is available on the auth service.
- [API] The new
introspect_oauth_tokensscope allows a client to introspect tokens issued to other clients.
Keys for Shipping Methods
key field to ShippingMethods- [API] ShippingMethods have a new optional field
keythat allows clients to specify a unique user-specified identifier for the shipping method. Keys can be set during creation of the shipping method or afterwards by the new update action Set Key.
Now shipping methods can also be retrieved, updated and deleted by key.
Added key field on CustomerGroup
We introduced a new 'key' field on CustomerGroup that can be used to identify a customer group by a user-defined ID in addition to the 'id' field.
- [API] The CustomerGroup has a new field
keywhich is used as an external identifier. Thekeycan be used to get, update or delete a customer group.
Added possibility for product to be added to/removed from category by category key.
- [API] Products can now be added to category, removed from category and created with list of categories by ResourceIdentifier instead of Reference.
Added 'view' scopes to 'manage' scopes
Every 'manage' scope for a resource, like Product, Order, Customer, and so on, now also implies the respective 'view' scope automatically. Until now the 'view' scope had to be specified explicitly which is not needed anymore.
- [API] A manage resource OAuth scope now also implies the related view resource scope where resource is any of products, orders, customers, types, payments, states and shopping lists.
Added support for Azure Service Bus
We extended the number of supported message buses by adding the Azure Service Bus destination to the subscriptions endpoint.
- [API] Subscriptions can now deliver messages to Azure Service Bus.
Get customer by email token
/password-token={token}) should now be used in favor of the old query parameter (/?token={token}).- [API] Added get user by email token endpoint.
- [API] Changed get user by password token endpoint.
External Line Item Prices
We introduced the new Line Item price mode 'ExternalPrice' in which the prices for line items are set externally while eligible cart discounts will be applied. The external prices can now be set during creation of line items.
- [API] Added the
ExternalPriceLineItemPriceMode. - [API] Added the possibility to set an external total line item price when creating a line item or changing
the quantity of a line item with
ExternalTotalLineItemPriceMode.
Added update action to change Input Hint on Attribute Definition
inputHint on AttributeDefinition provides a hint to developers how text-based attribute values should be visually represented in the frontend. The two supported values for this field: SingleLine or MultiLine had to be set in the AttributeDefinitionDraft during creation of the attribute definition so far, but it can now be changed afterwards by introducing a new update action changing the value of this field.- [API] Added update action changeInputHint to update AttributeDefinitions of ProductTypes
Added salutation field on Customer
Added a new optional field on customer resource to store information about the salutation of the customers. Added two new cart discount functions that help specify whether the given predicate should match for at least one or for all line items in the cart.
- [API] Customer has a new optional field
salutationthat can be set during creation of the customer or changed afterwards by new update action setSalutation. - [API] Two new Cart discount predicate functions
lineItemExistsandforAllLineItemswere added.
Tutorial Handling Subscriptions
Product Deleted Message and more
Added and changed messages about changes on products
- [API] Added ProductRevertedStagedChanges Message.
- [API] Added ProductVariantDeleted Message.
- [API] Added ProductDeleted Message.
- [API] Changed ProductPublished Message to include image urls that were removed during publishing.
Release note archive
The release notes published before 02 June 2017 are archived below.