Platform Release Notes
Added field to Cart representing the total quantity of all Line Items
We added the 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
totalLineItemQuantity
field to Cart. - [GraphQL API] Changed the
Cart
type:- Added the
totalLineItemQuantity
field to theCart
type.
- Added the
Added OrderPaymentAdded Message
We added the Message that is published by the platform when the Add OrderPayment update action is performed on Orders or OrderEdits. To subscribe to Messages, see Subscriptions for Messages and Notifications.
Change:
- [API] Added OrderPaymentAddedMessage.
Increased the limit of Customers in a Project to 10,000,000.
The default limit of Customers you can have in a Project has been increased from 1 million to 10 million. This limit can be increased per Project after we reviewed the performance impact. Find more details in the documentation.
Introduced Product Selections in Beta
Product Selections let you model the availability of your products in different sales channels. Depending on your use case and by leveraging the existing Stores functionality you can create individual catalogs or assortments for your brand sites, regional shops or brick-and-mortar stores.
Currently, the feature allows you to create Product Selections, populate them with Products, add them to any of your Stores and activate them independently for each Store. We also introduced a new endpoint that returns a Product Projection available in a given Store's active Product Selections.
Please note that the focus of this first release lies in scenarios where assortment management happens in a commercetools-external Product Information Management system and a commercetools-external search provider is used for product discovery in the shop frontend. As a consequence, you currently can’t filter your search results by Product Selections or Stores in both, Product Projections and the Merchant Center Product list. We plan to close these gaps progressively and add more functionality to Product Selections during the public beta phase.
Read more on Product Selections and how to use them in the API reference.
Read more on how to integrate with an external search service providing product discovery for your Store-specific shop frontends in this guide.
Furthermore, you can now subscribe to Messages triggered when Product Selections are created, deleted, or updated or when the Store's Product Selections have changed.
Changes:
- [API] Added the
view_product_selections
andmanage_product_selections
OAuth scopes. - [API] Added ProductSelections.
- [API] Added query on Product Selections for a Product.
- [API] Added Get ProductProjection in a Store by ID or by Key.
- [API] Added ProductSelectionCreated and ProductSelectionDeleted message.
- [API] Added ProductSelectionProductAdded and ProductSelectionProductRemoved message.
- [API] Added StoreProductSelectionsChanged message.
- [GraphQL API] Added the following types to the GraphQL schema:
AddProductSelectionProduct
,AddStoreProductSelection
,ChangeProductSelectionName
,ChangeStoreProductSelectionActive
,CreateProductSelectionDraft
,IndividualProductSelectionCreatedPayload
,ProductAssignment
,ProductAssignmentQueryResult
,ProductOfSelection
,ProductOfSelectionQueryResult
,ProductSelection
,ProductSelectionCreated
,ProductSelectionCreatedPayload
,ProductSelectionDeleted
,ProductSelectionProductAdded
,ProductSelectionProductRemoved
,ProductSelectionQueryInterface
,ProductSelectionQueryResult
,ProductSelectionSetting
,ProductSelectionSettingDraft
,ProductSelectionSettingInActionInput
,ProductSelectionUpdateAction
,RemoveProductSelectionProduct
,RemoveStoreProductSelection
,SelectionOfProduct
,SelectionOfProductQueryResult
,SetProductSelectionKey
,SetStoreProductSelections
,StoreProductSelectionsChanged
. - [GraphQL API] Changed the
CreateStore
type:- Input field
productSelections
was added toCreateStore
type
- Input field
- [GraphQL API] Changed the
Query
type:- Added the
productSelections
field to theQuery
type. Query.inStores
description is changedQuery
object type now implementsProductSelectionQueryInterface
interface- Added the
productSelectionAssignments
field to theQuery
type. - Added the
productSelection
field to theQuery
type. Query.inStore
description is changed
- Added the
- [GraphQL API] Changed the
Mutation
type:- Added the
updateProductSelection
field to theMutation
type. - Added the
deleteProductSelection
field to theMutation
type. - Added the
createProductSelection
field to theMutation
type.
- Added the
- [GraphQL API] Changed the
Product
type:- Added the
productSelectionRefs
field to theProduct
type.
- Added the
- [GraphQL API] Changed the
StoreCreated
type:- Added the
productSelections
field to theStoreCreated
type. - Added the
productSelectionsRef
field to theStoreCreated
type.
- Added the
- [GraphQL API] Changed the
Store
type:- Added the
productSelections
field to theStore
type.
- Added the
- [GraphQL API] Changed the
StoreUpdateAction
type:- Input field
changeProductSelectionActive
was added toStoreUpdateAction
type - Input field
setProductSelections
was added toStoreUpdateAction
type - Input field
addProductSelection
was added toStoreUpdateAction
type - Input field
removeProductSelection
was added toStoreUpdateAction
type
- Input field
- [GraphQL API] Changed the
InStore
type:- Added the
product
field to theInStore
type. - Added the
productSelectionAssignments
field to theInStore
type.
- Added the
Return Items can now be extended with Custom Fields.
You can now extend the LineItemReturnItem as well as the CustomLineItemReturnItem object on the Order resource with Custom Fields. With these you can, for example, add the courier name or their shipment IDs to the return items of the Orders.
Changes:
- [API] Added
custom
field to LineItemReturnItem and CustomLineItemReturnItem. - [API] Added
custom
field to LineItemReturnItemDraft and CustomLineItemReturnItemDraft. - [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
,SetOrderReturnItemCustomType
SetStagedOrderReturnItemCustomField
,SetStagedOrderReturnItemCustomFieldOutput
,SetStagedOrderReturnItemCustomType
,SetStagedOrderReturnItemCustomTypeOutput
. - [GraphQL API] Changed the
CustomLineItemReturnItem
type:- Added the
custom
field to theCustomLineItemReturnItem
type.
- Added the
- [GraphQL API] Changed the
ReturnItem
type:- Added the
custom
field to theReturnItem
type.
- Added the
- [GraphQL API] Changed the
StagedOrderUpdateAction
type:- Input field
setReturnItemCustomField
was added toStagedOrderUpdateAction
type - Input field
setReturnItemCustomType
was added toStagedOrderUpdateAction
type
- Input field
- [GraphQL API] Changed the
ReturnItemDraftType
type:- Input field
custom
was added toReturnItemDraftType
type
- Input field
- [GraphQL API] Changed the
ReturnItemDraftTypeOutput
type:- Added the
custom
field to theReturnItemDraftTypeOutput
type.
- Added the
- [GraphQL API] Changed the
OrderUpdateAction
type:- Input field
setReturnItemCustomField
was added toOrderUpdateAction
type - Input field
setReturnItemCustomType
was added toOrderUpdateAction
type
- Input field
- [GraphQL API] Changed the
LineItemReturnItem
type:- Added the
custom
field to theLineItemReturnItem
type.
- Added the
Parcels can now be extended with Custom Fields.
You can now extend the Parcel object on the Order resource with Custom Fields. With these you can, for example, add meta data associated with your ERP system to the deliveries of the Orders.
Changes:
- [API] Added
custom
field to Parcel and ParcelDraft. - [API] Added Set Parcel CustomType 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
Parcel
type:- Added the
custom
field to theParcel
type.
- Added the
- [GraphQL API] Changed the
ParcelDataDraftType
type:- Input field
custom
was added toParcelDataDraftType
type
- Input field
- [GraphQL API] Changed the
StagedOrderUpdateAction
type:- Input field
setParcelCustomField
was added toStagedOrderUpdateAction
type - Input field
setParcelCustomType
was added toStagedOrderUpdateAction
type
- Input field
- [GraphQL API] Changed the
AddOrderParcelToDelivery
type:- Input field
custom
was added toAddOrderParcelToDelivery
type
- Input field
- [GraphQL API] Changed the
AddStagedOrderParcelToDeliveryOutput
type:- Added the
custom
field to theAddStagedOrderParcelToDeliveryOutput
type.
- Added the
- [GraphQL API] Changed the
ParcelData
type:- Added the
custom
field to theParcelData
type.
- Added the
- [GraphQL API] Changed the
AddStagedOrderParcelToDelivery
type:- Input field
custom
was added toAddStagedOrderParcelToDelivery
type
- Input field
- [GraphQL API] Changed the
OrderUpdateAction
type:- Input field
setParcelCustomField
was added toOrderUpdateAction
type - Input field
setParcelCustomType
was added toOrderUpdateAction
type
- Input field
Added key to ProductProjection GraphQL type
Added key
field to the ProductProjection GraphQL type.
Change:
- [GraphQL API] Changed the
ProductProjection
type:- Added the
key
field to theProductProjection
type.
- Added the
Added token revocation endpoint
You can now revoke your API access and refresh tokens compliant to Auth 2.0 Token Revocation.
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.
For more information, see Revoking tokens.
Introduced Order Search
With the new Order Search, merchants are able to perform faster search for their orders with enhanced performance, increased query capabilities, and in a scalable way as it supports Projects with a large number of Orders. The feature needs to be activated for the Project before it can be used.
The Order Search API is utilized by our Merchant Center, but you are also welcome to build your own applications with this API. This feature is meant to support back office use cases. It is not intended for searching through the customer's order history in a storefront application.
Changes:
- [API] Introduced Order Search API in public beta.
- [API] Added
orders
field 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
The Product Projection Search feature on the GraphQL API now supports Price Selection.
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
ScopedPrice
. - [GraphQL API] Changed the
ProductSearchVariant
type:- Added the
scopedPrice
field to theProductSearchVariant
type. - Added the
scopedPriceDiscounted
field to theProductSearchVariant
type.
- Added the
- [GraphQL API] Changed the
PriceSelectorInput
type:PriceSelectorInput.date
input field type changed fromDateTime!
toDateTime
Deliveries can now be extended with Custom Fields
You can now extend the Delivery object on the Order resource with Custom Fields. With these you can, for example, add meta data associated with your ERP system to the deliveries of the Orders.
Changes:
- [API] Added
custom
field to Delivery. - [API] Added update actions Set Delivery CustomType 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
AddOrderDelivery
type:- Input field
custom
was added toAddOrderDelivery
type
- Input field
- [GraphQL API] Changed the
Delivery
type:- Added the
custom
field to theDelivery
type.
- Added the
- [GraphQL API] Changed the
AddStagedOrderDelivery
type:- Input field
custom
was added toAddStagedOrderDelivery
type
- Input field
- [GraphQL API] Changed the
StagedOrderUpdateAction
type:- Input field
setDeliveryCustomField
was added toStagedOrderUpdateAction
type - Input field
setDeliveryCustomType
was added toStagedOrderUpdateAction
type
- Input field
- [GraphQL API] Changed the
AddStagedOrderDeliveryOutput
type:- Added the
custom
field to theAddStagedOrderDeliveryOutput
type.
- Added the
- [GraphQL API] Changed the
OrderUpdateAction
type:- Input field
setDeliveryCustomType
was added toOrderUpdateAction
type - Input field
setDeliveryCustomField
was added toOrderUpdateAction
type
- Input field
Added Product key to Line Item
Previously, the Line Items in Carts and Orders contained the platform-assigned 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
productKey
field to LineItem. - [GraphQL API] Changed the
LineItem
type:- Added the
productKey
field to theLineItem
type.
- Added the
Payment transactions can now be extended with Custom Fields
You can now extend the Transaction object on the Payment resource with Custom Fields. With this, you can now store additional information, like refund details and taxed amounts, on the specific payment transaction.
Changes:
- [API] Added
custom
field to Transaction, TransactionDraft, and MyTransactionDraft . - [API] Added update actions Set Transaction CustomType 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
Transaction
type:- Added the
custom
field to theTransaction
type.
- Added the
- [GraphQL API] Changed the
MyTransactionDraft
type:- Input field
custom
was added toMyTransactionDraft
type
- Input field
- [GraphQL API] Changed the
TransactionDraft
type:- Input field
custom
was added toTransactionDraft
type
- Input field
- [GraphQL API] Changed the
PaymentUpdateAction
type:- Input field
setTransactionCustomType
was added toPaymentUpdateAction
type - Input field
setTransactionCustomField
was added toPaymentUpdateAction
type
- Input field
Added update action for the supply channel of Line Items in a Cart
You can now update the inventory supply channel for Line Items that are already in a Cart. Before, you could only achieve this via replacing the existing Line Item with a new one.
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
CartUpdateAction
type:- Input field
setLineItemSupplyChannel
was added toCartUpdateAction
type
- Input field
- [GraphQL API] Changed the
MyCartUpdateAction
type:- Input field
setLineItemSupplyChannel
was added toMyCartUpdateAction
type
- Input field
Increased maximum timeout for payment-related API Extensions
We have increased the maximum timeout for API Extensions of resource type payment
from 2 to 10 seconds what makes your integrations with Payment Service Providers 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
AWS EventBridge is now supported as a Subscription destination. Configuring EventBridge as a destination allows your serverless event bus to receive message from the commercetools platform and forward them to a variety of targets based on forwarding rules. Please find more information in our tutorial.
- [API] Added EventBridge destination.
- [GraphQL API] Added the following types to the GraphQL schema:
EventBridgeDestination
,EventBridgeDestinationInput
,SetCartLineItemSupplyChannel
. - [GraphQL API] Changed the
SearchIndexingConfiguration
type:- Added the
categoriesDisabledForInternalTest
field to theSearchIndexingConfiguration
type.
- Added the
- [GraphQL API] Changed the
CartUpdateAction
type:- Input field
setLineItemSupplyChannel
was added toCartUpdateAction
type
- Input field
- [GraphQL API] Changed the
MyCartUpdateAction
type:- Input field
setLineItemSupplyChannel
was added toMyCartUpdateAction
type
- Input field
- [GraphQL API] Changed the
SetStagedOrderReturnInfo
type:SetStagedOrderReturnInfo.items
default value changed from none to[]
- [GraphQL API] Changed the
DestinationInput
type:- Input field
EventBridge
was added toDestinationInput
type
- Input field
- [GraphQL API] Changed the
ProductProjection
type:- Removed the
key
field from theProductProjection
type.
- Removed the
- [GraphQL API] Changed the
SetOrderReturnInfo
type:SetOrderReturnInfo.items
default value changed from none to[]
Added Product key to GraphQL API's Product Projection Search
You can now add the Product key
to the results of Product Projection Search queries in the GraphQL API.
Changes:
- [GraphQL API] Added
key
field to theProductProjection
type.
Audit Log now tracks Custom Object Changes
We have extended the abilities of Audit Log to include the tracking of changes made against Custom Objects. This enhancement will start tracking new Custom Object Changes made and these Changes will be automatically added into your Audit Log responses.
Changes:
- [API] Added the
view_key_value_documents:{projectKey}
scope. - [API] Added
key-value-document
to 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
customObject
andcustomObjects
. - [GraphQL API] Added
CustomObject
to the ResourceType enum.
Added CustomerFirstNameSet, CustomerLastNameSet, and CustomerTitleSet Messages
With the addition of three new Messages you can now use the MessageSubscription to subscribe to changes on the 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 CustomerFirstNameSetMessage.
- [API] Added CustomerLastNameSetMessage.
- [API] Added CustomerTitleSetMessage.
- [GraphQL API] Added the following types to the GraphQL schema:
CustomerFirstNameSet
,CustomerLastNameSet
,CustomerTitleSet
.
Added supplyChannel field to InventoryEntryQuantitySet Message
We added the field 'supplyChannel' to the InventoryEntryQuantitySet Message on the HTTP API and 'supplyChannel' and 'supplyChannelRef' fields to the GraphQL API. With these fields, you can check the Channel where changes took place.
Changes:
- [API] Added the
supplyChannel
field to InventoryEntryQuantitySetMessage. - [GraphQL API] Changed the
InventoryEntryQuantitySet
type:- Added the
supplyChannelRef
field to theInventoryEntryQuantitySet
type. - Added the
supplyChannel
field to theInventoryEntryQuantitySet
type.
- Added the
Added Set ReturnInfo update action and Message
With the Set ReturnInfo update action, you can now delete and overwrite multiple entries in the 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
StagedOrderUpdateAction
type:- Input field
setReturnInfo
was added toStagedOrderUpdateAction
type
- Input field
- [GraphQL API] Changed the
OrderUpdateAction
type:- Input field
setReturnInfo
was added toOrderUpdateAction
type
- Input field
Added fixed price Cart Discounts on CustomLineItems Target
We have added the ability to create a fixed price Cart Discount on a CustomLineItems target.
- [API] Added support for CustomLineItems Target when creating a fixed price Cart Discount.
Fixed price Cart Discounts achieved general availability status
After collecting feedback during the beta phase, we have moved Cart Discount type for fixed prices on Line Items out of beta. The status has been changed to general availability. With Fixed CartDiscountValue you can specify to which price you want to discount the Line Items.
Added support for Mark Matching Variants in GraphQL API's Product Projection Search
To support the marked matching Variants feature in the GraphQL API we have added the field 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
ProductSearchVariant
type:- Added the
isMatchingVariant
field to theProductSearchVariant
type.
- Added the
- [GraphQL API] Changed the
Query
type:- Added argument
markMatchingVariants
toQuery.productProjectionSearch
field to align with the REST API. - Deprecated argument
Query.productProjectionSearch(markMatchingVariant)
in favor ofmarkMatchingVariants
.
- Added argument
Detailed error messages on the GraphQL API
To assist you better in error analysis we have added an error response format to the GraphQL API. This format contains detailed information about the errors that should help you in identifying the root cause of the problem.
- [Graphql API] Added the error response format to the GraphQL API.
Added existence check for Products
We have added endpoints for checking whether a Product with certain ID, key or properties exists. These methods can be used if you are only interested in the existence of a certain Product without the need of fetching its product information.
- [API] Added existence check methods for Products by ID, by Key, and by Query Predicate.
Enable sorting on Custom Fields
It is now possible to sort on Custom Fields using custom.fields.${fieldName}
sort parameter.
Localized name for Shipping Method
Shipping Method now supports localized names. This enables displaying shipping methods in different languages.
Changes:
- [API] Added
localizedName
to ShippingMethod. - [API] Added
localizedName
to ShippingMethodDraft. - [API] Added Set Localized Name Update Action.
- [GraphQL API] Changed the
ShippingMethodUpdateAction
type:- Input field
setLocalizedName
was added toShippingMethodUpdateAction
type.
- Input field
- [GraphQL API] Changed the
ShippingMethod
type:- Added the
localizedNameAllLocales
field to theShippingMethod
type. - Added the
localizedName
field to theShippingMethod
type.
- Added the
- [GraphQL API] Changed the
ShippingMethodDraft
type:- Input field
localizedName
was added toShippingMethodDraft
type.
- Input field
- [GraphQL API] Added the following type to the GraphQL schema:
SetShippingMethodLocalizedName
.
Stores achieved general availability status
After collecting feedback during the beta phase, we have moved Stores out of beta. The status of the following features has been changed to general availability:
- 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.
In addition, to support use cases requiring a high number of Stores we have increased the limit on the number of Stores in a Project from 500 to 50000.
Added Customer Deleted Message
We have added a specific Message that is published by the platform whenever a Customer got deleted. That means, you can now subscribe to this particular message and do not need to use the generic ChangeSubscription anymore to implement such use cases.
Changes:
- [API] Added
CustomerDeleted
Message type. - [GraphQL API] Added the following types to the GraphQL schema:
CustomerDeleted
.
Excluding Platform Initiated Changes from Audit log results
It is now possible to exclude commercetools Platform initiated Changes from Audit Log response data sets.
Change:
- [API] Added
excludePlatformInitiatedChanges
query parameter to all Query Record endpoints that will allow Changes originated by the commercetools Platform to be excluded from the response data set. - [GraphQL API] Added
excludePlatformInitiatedChanges
filtering parameter.
Align data type for 'date' field in PriceSelectorInput
To align usage of data types on the GraphQL API we changed the type of the date
field on PriceSelectorInput
to DateTime
.
Changes:
- [GraphQL API] Changed the
PriceSelectorInput.date
type fromInstant!
toDateTime!
Added exists operator to GraphQL API
To improve the developer experience for you we have added an exists operator to our GraphQL API. This improvement to the API design is now the recommended way of checking the existence of query results because
- it allows the platform to optimize the query towards short response times and
- it avoids you finding workarounds with other query fields to achieve the same.
Changes:
- [GraphQL API] Added the Boolean
exists
field to allQueryResult
types.
Added Correlation ID to calls to external OAuth server
Calls to the introspection endpoint of an external OAuth server now include the correlation ID initially passed to the commercetools platform. This enables users to have a complete trace of the HTTP calls exchanged with the API and thus helps troubleshoot implementation issues.
Announced long-term support plan for commercetools SDKs
We have set up a long-term support plan to actively support and maintain Version 1 SDKs until their end of life. Additionally, we have provided information about migration to our Version 2 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 Version 2 SDKs.
Introduced limits on Store's Inventory Supply and Product Distribution Channels
To ensure best performance for your queries we have now limited the Channel settings for Stores. From now on each of your Stores can have
- up to 100 Inventory Supply Channels and
- up to 100 Product Distribution Channels
by default.
These default limits can be increased if needed after we have reviewed the performance impact on your project. To request a limit increase, contact us via the Support Portal, specifying your project region, project key and your use case.
Increased the limit of subscriptions to 50
The limit of Subscriptions per Project has been raised from 25 to 50.
Added Product Projection Search to GraphQL API
ProductProjection Search can now be performed using the 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
Query
type:- Added the
productProjectionSearch
field to theQuery
type.
- Added the
Added Store Created and Store Deleted Messages
You can now subscribe to messages triggered when Stores are created and deleted.
Changes:
- [API] Added StoreCreatedMessage
- [API] Added StoreDeletedMessage
- [GraphQL API] Added the following types to the GraphQL schema:
StoreCreated
, andStoreDeleted
.
Introduced a limit on Product Types
Introduced a limit on Product Types. For Projects created after 23 June 2021, the number of Product Types in a Project is limited to 1 000. To request a limit increase, please contact us via the Support Portal.
- [API] Introduced an API Limit on Product Types.
Extending Audit Log tracked Changes
Extended support for Audit Log Change tracking. The following Changes are now properly identified and displayed in the Change History API instead of being identified as an UnknownChange. This applies to both the REST and the GraphQL APIs.
- [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
taxMode
to SetOrderTaxedPriceChange. - [API] Added
taxMode
to SetCustomLineItemTaxRateChange. - [API] Added
taxMode
to SetLineItemTaxRateChange. - [GraphQL API] Added the
taxMode
field to OrderChange.
Added client ID to OAuth Token Introspection response
The response to an OAuth 2.0 Token Introspection request now provides the client_id
as optional field as defined in RFC 7662.
Add Store to Shopping List
You can now set a Store on Shopping Lists, and view and manage Shopping Lists and My Shopping Lists in a Store. When expanding the Line Items on a Shopping List in a Store, the prices, locales, and inventory are filtered to only include data for the specified Store.
- [API] Added the
store
field to ShoppingList, ShoppingListDraft, and MyShoppingListDraft. - [API] Added new Store-related scopes,
view_shopping_lists
,manage_shopping_lists
, andmanage_my_shopping_lists
- [API] Added Get a ShoppingList in a Store by ID method to Shopping Lists and My Shopping Lists.
- [API] Added Get a ShoppingList in a Store by Key method to Shopping Lists and My Shopping Lists.
- [API] Added Query ShoppingLists in a Store method to Shopping Lists and My Shopping Lists.
- [API] Added Create a ShoppingList in a Store method to Shopping Lists and My Shopping Lists.
- [API] Added Update a ShoppingList in a Store by ID method to Shopping Lists and My Shopping Lists.
- [API] Added Update a ShoppingList in a Store by Key method to Shopping Lists and My Shopping Lists.
- [API] Added Set Store update action to Shopping Lists.
- [API] Added Delete a ShoppingList in a Store by ID method to Shopping Lists and My Shopping Lists.
- [API] Added Delete a ShoppingList in a Store by Key method to Shopping Lists and My Shopping Lists.
- [GraphQL API] The existing query fields
inStore
andinStores
can 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
ShoppingListQuery
type:- Added the
store
field to theShoppingListQuery
type.
- Added the
Automatic deactivation of indexing of Product information for non-production Projects
Indexing of Product information for non-production Projects will automatically be deactivated if there have been no calls against the following API endpoints within the last 30 days:
- 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
Deactivation of Product information indexing means that calls to either of the above Product Projection Search or Product Suggestions endpoint will return a status code of 400 unless Product information indexing is explicitly re-activated. Please refer to API documentation for more details.
At the moment, this change does not apply to Projects that are marked as production Projects or any Projects hosted on AWS Hosts.
Enhanced configuration for indexing Product information
By adding Client Logging information to the Search Indexing Configuration you can now find out who changed this project configuration and when it was changed.
- [API] Added
lastModifiedBy
andlastModifiedAt
fields to SearchIndexingConfigurationValues - [GraphQL API] Changed the
SearchIndexingConfigurationValues
type:- Added the
lastModifiedBy
field to theSearchIndexingConfigurationValues
type. - Added the
lastModifiedAt
field to theSearchIndexingConfigurationValues
type.
- Added the
Introduced Audit Log
Introduced Audit Log, a new feature that tracks and stores changes made against resources in your Project. You can now view a historical log of these changes via the Change History API, including GraphQL, or the Merchant Center. The feature is currently available in our Google Cloud Regions.
Removed deprecated functionality from GraphQL API
As announced before, we have now removed deprecated fields and OAuth scopes from the GraphQL API.
Using those fields in your GraphQL API requests will yield to HTTP 400 errors with header X-DEPRECATION-NOTICE
from now on.
Changed default settings for new Projects
For new Projects created after 3 March 2021, indexing of product information for the Product Projection Search and the Product Suggestions endpoints will be deactivated per default. To activate the indexing of Product information for your new Project, please choose one of the following options:
- via API using the Change Product Search Indexing Enabled update action on the Project endpoint.
- Contact Support via the Support Portal and provide the region, project key(s), and use case(s).
Activation via the Merchant Center will be possible soon.
Added configuration for indexing of product information
Indexing of product information for the Product Projection Search and the Product Suggestions endpoints is now configurable via the Project endpoint. Using these endpoints is only possible if indexing has been activated for the Project and the search index has been built. Otherwise, the API replies with a 400 Bad Request error to requests on these endpoints.
- [API] Added
searchIndexing
field to Project. - [API] Added Search Indexing Configuration for
products
to Project. - [API] Added Search Indexing Configuration Values for
status
to Search Indexing Configuration. - [API] Added Change Product Search Indexing Enabled update action to Project endpoint.
- [API] Added
SearchDeactivated
andSearchIndexingInProgress
Errors. - [GraphQL API] Added following types
ChangeProjectSettingsProductSearchIndexingEnabled
,SearchIndexingConfiguration
,SearchIndexingConfigurationValues
,SearchIndexingStatus
. - [GraphQL API] Added
searchIndexing
field toProjectProjection
type. - [GraphQL API] Added input field
changeProductSearchIndexingEnabled
toProjectSettingsUpdateAction
type.
Reference Customer Groups by key
You can now reference a Customer Group using a user-defined field key
in addition to id
when Creating a Product, Setting a Product's Price, or Adding or Changing Prices of a ProductVariant.
- [API] The
customerGroup
field 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
With this enhancement, you can now use external OAuth to set the External User ID for the 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
Introduced a new Cart Discount type for fixed prices on line items. With this you can now specify to which price you want to discount the line items, so far you could define the amount or percentage to be deducted from the line item price only.
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
fixed
that can be set on the CartDiscountValueDraft. - [GraphQL API] Added the
fixed
field to theCartDiscountValueInput
type.
Custom Fields for Addresses
We now provide Custom Fields on Address. This enables users to customize Addresses for their needs. When fetching Addresses, the user can filter them by Custom fields.
- [API] Added a
custom
field to the Address and AddressDraft. - [API] Added Set Shipping Address Custom Type and Set Shipping Address Custom Field update actions for carts
- [API] Added Set Billing Address Custom Type and Set Billing Address Custom Field update actions for carts
- [API] Added Set Item Shipping Address Custom Type and Set Item Shipping Address Custom Field update actions for carts
- [API] Added Set Delivery Address Custom Type and Set Delivery Address Custom Field update actions for carts
- [API] Added Set Shipping Address Custom Type and Set Shipping Address Custom Field update actions for orders
- [API] Added Set Billing Address Custom Type and Set Billing Address Custom Field update actions for orders
- [API] Added Set Item Shipping Address Custom Type and Set Item Shipping Address Custom Field update actions for orders
- [API] Added Set Delivery Address Custom Type and Set Delivery Address Custom Field update actions for orders
- [API] Added Set Shipping Address Custom Type and Set Shipping Address Custom Field update actions for order edits
- [API] Added Set Billing Address Custom Type and Set Billing Address Custom Field update actions for order edits
- [API] Added Set Item Shipping Address Custom Type and Set Item Shipping Address Custom Field update actions for order edits
- [API] Added Set Delivery Address Custom Type and Set Delivery Address Custom Field update actions for order edits
- [API] Added Set Address Custom Type and Set Address Custom Field update actions on customers
- [API] Added Set Address Custom Type and Set Address Custom Field update actions on channels
Added GraphQL support for Replicate Cart in Store endpoint
You can now replicate any Cart or Order in a given Store to a new Cart bound to the same Store using the GraphQL API.
- [GraphQL API] Added support for Replicate a Cart in a Store endpoint.
Added Custom Fields to Shipping Methods
You can now add Custom Fields to Shipping Methods via the Shipping Methods API and the GraphQL API endpoints. This allows you to provide more information about your shipping services, for instance, the estimated delivery window, a carrier code, a pick-up point, or the 'track and trace URL format'.
- [API] Added
shipping-method
enumeration value to Customizable Resources. - [API] Added
custom
field 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
custom
field to theShippingMethod
type. - [GraphQL API] Added
setCustomType
andsetCustomFields
toShippingMethodUpdateAction
type.
Added variant.key to predicate field identifiers
It is now possible to use 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 platform generated product.id
and variant.id
instead that differ between Projects.
- [API] Added
variant.key
field to Product Field Identifiers. - [API] Added
variant.key
field to LineItem Field Identifiers.
Added a reference to anonymous cart on customer
It is now possible to identify an anonymous cart by using its id
or external key
. The previously used anonymousCartId
will soon be deprecated.
- [API] Added
anonymousCart
field on customer authentication. - [API] Added
anonymousCart
field on customer authentication in-store. - [API] Added
anonymousCart
field on customer creation. - [API] Added
anonymousCart
field on customer creation in-store customer. - [API] Deprecated the
anonymousCartId
field in the listed endpoints above in favor ofanonymousCart
field.
Added Customer Password Updated Message
You can now subscribe to messages triggered when Customers have changed their password.
- [API] Added CustomerPasswordUpdatedMessage.
- [API] Added Change Customer's Password in Store update action.
Added Replicate Cart in Store endpoint
Merchants may now replicate any Cart or Order in a given Store to a new Cart bound to the same Store.
- [API] Added endpoint Replicate cart in store.
Added key to Cart
Additionally to identifying Carts by their platform-generated 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
key
field 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
cart
field to OrderFromCartDraft. - [API] Deprecated the
id
field in OrderFromCartDraft in favor of thecart
field.
Added 'oldSlug' field to CategorySlugChanged and ProductSlugChanged Messages
We added the new field oldSlug
to the CategorySlugChangedMessage and ProductSlugChangedMessage 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
oldSlug
to CategorySlugChangedMessage. - [API] Added optional field
oldSlug
to ProductSlugChangedMessage. - [GraphQL API] Added the
oldSlug
andoldSlugAllLocales
fields toCategorySlugChanged
type ofmessages
query. - [GraphQL API] Added the
oldSlug
andoldSlugAllLocales
fields toProductSlugChanged
type tomessages
query.
Allow subscriptions to Customer Token events
You can now subscribe to changes on CustomerToken via a Change Subscription. This allows you to track if and how often the Customers in your commercetools Project change their passwords.
- [API] Added types
customer-email-token
andcustomer-password-token
to the list of supported resourceTypeIds.
Added Product Suggestions GraphQL Query Schema
Product suggestions can now be queried using the GraphQL API. Product discounts can now be retrieved by key, using the GraphQL API.
- [GraphQL API] Added the following types to the GraphQL schema:
SearchKeywordArgument
,SuggestResult
,SuggestResultEntry
,Suggestion
. - [GraphQL API] Changed the
Query
type:- Added the
productProjectionsSuggest
field to theQuery
type. - Argument
key
was added toQuery.productDiscount
field Query.productDiscount(id)
type changed fromString!
toString
- Added the
Introduced a character limit for the full-text search query parameter on product projection search
To ensure the best performance for your queries, product projection search results are based on the first 256 characters of the full-text search query parameter only. This change applies for projects created after 09 November 2020. Everything beyond 256 characters will be ignored. You can continue to pass longer query parameters, the API call will still be successful.
New error codes for operations on a Store
Two error codes were added for operations on a Store. The 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
We are moving the commercetools GraphQL API out of beta on 31 January 2021.
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.
Check the list of deprecated fields for suggestions what to use instead.
Total prices for giftLineItems in cart predicates
Cart Predicate Functions like 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
When a resource is deleted with the dataErasure
parameter set to true
, the ResourceDeleted Payload will contain the dataErasure
parameter as well to allow downstream systems to erase the data as well.
- [API] Added
dataErasure
to the ResourceDeleted Payload.
Added Messages GraphQL Query Schema
Messages can now be queried using the GraphQL API.
- [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
Query
type:- Added the
message
field to theQuery
type. - Added the
messages
field to theQuery
type.
- Added the
Custom Objects are supported in Subscriptions and are now limited
You can now subscribe to Custom Objects via a Change Subscription.
For Projects created after 07 October 2020, a maximum of 20000000 Custom Objects can be created.
- [API] Subscriptions can now deliver notifications for Custom Objects.
- [API] Introduced an API Limit on Custom Objects.
OAuth scopes for Custom Objects
Added new OAuth scopes for Custom Objects. This way you no longer need to grant scopes for Products on API clients if the clients should have access to this endpoint only.
- [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.
The total of PagedQueryResult is limited to the maximum offset
To ensure the best performance for your queries, the 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.
Calculation of the total
field should be deactivated whenever possible by using the query parameter withTotal=false
.
Please refer to the Paging section of the "General Concepts" documentation for details and recommendations.
Changes in the GraphQL schema
You can now add Custom Fields to Stores.
- [GraphQL API] Changed the
Store
type:- Added the
custom
field to theStore
type.
- Added the
Added the QueryTimedOut error code
When a query times out, the API now returns BadRequest
with the QueryTimedOut
error code instead of the General
error code.
- [API] Added the QueryTimedOut error code.
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.
Product Variant Added Message
When a product variant is created, a message will be triggered.
- [API] Added ProductVariantAddedMessage.
Correlation ID with cross-origin resource sharing
The Correlation ID is now a part of the 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
Custom Objects within a container can now be queried without an extra 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.
Added Custom Fields to Stores
You can now define custom fields on Stores.
This feature includes the following changes:
- [API] Added
store
enumeration value to Customizable Resources - [API] Added
custom
field 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
}
Adds lastModifiedAt to LineItem
A new field is introduced to LineItems of Carts, Orders and OrderEdits. This field is updated whenever one of setLineItemShippingDetails, addLineItem, removeLineItem, or changeLineItemQuantity changes the LineItem.
- [API] Added a
lastModifiedAt
field to LineItem - [GraphQL API] Changed the
LineItem
type:- Added the
lastModifiedAt
field to theLineItem
type.
- Added the
Updates to the GraphQL schema
Custom objects can now be created, updated, and deleted using the GraphQL API.
- [GraphQL API] Added the following types to the GraphQL schema:
CustomObject
,CustomObjectDraft
,CustomObjectQueryResult
. - [GraphQL API] Changed the
Query
type:- Added the
customObject
field to theQuery
type. - Added the
customObjects
field to theQuery
type.
- Added the
- [GraphQL API] Changed the
Mutation
type:- Added the
createOrUpdateCustomObject
field to theMutation
type. - Added the
deleteCustomObject
field to theMutation
type.
- 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
LineItemDraftOutput
type:- Field
supplyChannel
was deprecated inLineItemDraftOutput
type. - Field
distributionChannel
was deprecated inLineItemDraftOutput
type. - Added the
distributionChannelResId
field to theLineItemDraftOutput
type. - Added the
supplyChannelResId
field to theLineItemDraftOutput
type.
- Field
- [GraphQL API] Changed the
CustomLineItemDraftOutput
type:- Field
taxCategory
was deprecated inCustomLineItemDraftOutput
type - Added the
taxCategoryResId
field to theCustomLineItemDraftOutput
type.
- Field
- [GraphQL API] Changed the
Initiator
type:- Field
customer
was deprecated inInitiator
type. - Field
user
was deprecated inInitiator
type. - Added the
customerRef
field to theInitiator
type. - Added the
userRef
field to theInitiator
type.
- Field
- [GraphQL API] Changed the
NestedAttributeDefinitionType
type:- Field
typeReference
was deprecated inNestedAttributeDefinitionType
type - Added the
typeRef
field to theNestedAttributeDefinitionType
type.
- Field
- [GraphQL API] Changed the
CustomFieldsCommand
type:- Field
type
was deprecated inCustomFieldsCommand
type - Added the
typeResId
field to theCustomFieldsCommand
type.
- Field
Added setDistributionChannel action for Carts and OrderEdits
You can now use a new action 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
CartUpdateAction
type:- Input field
setLineItemDistributionChannel
was added toCartUpdateAction
type
- Input field
- [GraphQL API] Changed the
StagedOrderUpdateAction
type:- Input field
setLineItemDistributionChannel
was added toStagedOrderUpdateAction
type
- Input field
- [GraphQL API] Changed the
MyCartUpdateAction
type:- Input field
setLineItemDistributionChannel
was added toMyCartUpdateAction
type
- Input field
Added addedAt field to Cart's LineItems
LineItems of the Cart and My Cart
now have a field 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
addedAt
to LineItem - [API] Added
addedAt
to LineItemDraft - [API] Added
addedAt
to MyLineItemDraft - [API] Added
addedAt
to Add LineItem action My Carts action - [API] Added
addedAt
to LineItemDraft for Add LineItem on the Order Edits action - [GraphQL API] Changed the
AddStagedOrderLineItem
type:- Input field
addedAt
was added toAddStagedOrderLineItem
type
- Input field
- [GraphQL API] Changed the
LineItemDraft
type:- Input field
addedAt
was added toLineItemDraft
type
- Input field
- [GraphQL API] Changed the
AddCartLineItem
type:- Input field
addedAt
was added toAddCartLineItem
type
- Input field
- [GraphQL API] Changed the
LineItem
type:- Added the
addedAt
field to theLineItem
type.
- Added the
- [GraphQL API] Changed the
LineItemDraftOutput
type:- Added the
addedAt
field to theLineItemDraftOutput
type.
- Added the
- [GraphQL API] Changed the
AddMyCartLineItem
type:- Input field
addedAt
was added toAddMyCartLineItem
type
- Input field
- [GraphQL API] Changed the
MyLineItemDraft
type:- Input field
addedAt
was added toMyLineItemDraft
type
- 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
ReferencedResourceNotFound
error code
Added Store based inventory filtering
You can now add Inventory Supply Channels to Stores. When querying ProductProjections, you can then use the query parameter storeProjection
to remove all inventory entries from the response payload that don't correspond to the Inventory Supply Channels set in the Store.
Setting Inventory Supply Channels on Stores also affects cart line items. If a cart is bound to a store and the store has Inventory Supply Channels set, then only inventory entries from these channels (and inventory entries not linked to any channel) are included in the product variant information of the line item. Additionally, the 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
supplyChannels
field to StoreDraft - [API] Added
supplyChannels
field to Store - [API] Added
setSupplyChannels
update action to Store - [API] Added
addSupplyChannel
update action to Store - [API] Added
removeSupplyChannel
update action to Store - [GraphQL API] Added the following types to the GraphQL schema:
SetStoreSupplyChannels
,AddStoreSupplyChannel
,RemoveStoreSupplyChannel
. - [GraphQL API] Changed the
StoreUpdateAction
type:- Input field
setSupplyChannels
was added toStoreUpdateAction
type - Input field
addSupplyChannel
was added toStoreUpdateAction
type - Input field
removeSupplyChannel
was added toStoreUpdateAction
type
- Input field
- [GraphQL API] Changed the
CreateStore
type:- Input field
supplyChannels
was added toCreateStore
type
- Input field
- [GraphQL API] Changed the
Store
type:- Added the
supplyChannels
field to theStore
type. - Added the
supplyChannelsRef
field to theStore
type.
- 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
Query
type:- Added the
limits
field to theQuery
type.
- Added the
Added QueryComplexityLimitExceeded Error Code to the GraphQL API
Enhanced an error code for complex GraphQL queries to be more specific. The error code occurs when the GraphQL query is too complex to be executed.
- [GraphQL API] Added the
QueryComplexityLimitExceeded
error code.
Added OrderEdit GraphQL query and mutation schema
Order edits can now be queried, created, updated, and deleted using the GraphQL API.
Added Store based price filtering
You can now add Product Distribution Channels to Stores. When querying ProductProjections, you can then use the query parameter storeProjection
to remove all prices from the response payload that don't correspond to the Channels set in the Store.
Setting Product Distribution Channels on Stores also affects cart line items. If a cart is bound to a store and the store has Product Distribution Channels set, then only prices from these channels (and prices not linked not any channel) are included in the product variant information of the line item. Additionally, the distributionChannel field on the cart used for the LineItem Price Selection can only be set to one of the channels set in the store.
To enable the configuration of product distribution channels in Stores, the following changes have been made:
- [API] Added
distributionChannels
field to StoreDraft - [API] Added
distributionChannels
field to Store - [API] Added
setDistributionChannels
update action to Store - [API] Added
addDistributionChannel
update action to Store - [API] Added
removeDistributionChannel
update action to Store - [GraphQL API] Added the following types to the GraphQL schema:
SetStoreDistributionChannels
- [GraphQL API] Changed the
StoreUpdateAction
type:- Input field
setDistributionChannels
was added toStoreUpdateAction
type - Input field
addDistributionChannel
was added toStoreUpdateAction
type - Input field
removeDistributionChannel
was added toStoreUpdateAction
type
- Input field
- [GraphQL API] Changed the
CreateStore
type:- Input field
distributionChannels
was added toCreateStore
type
- Input field
- [GraphQL API] Changed the
Store
type:- Added the
distributionChannelsRef
field to theStore
type. - Added the
distributionChannels
field to theStore
type.
- 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
Introduced new limits for new projects on the commercetools platform.
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.
For newer projects, all of the limits listed above can be increased if needed after we have reviewed the performance impact on your project. To request a limit increase, contact us via the Support Portal, specifying your project region, project key and your use case.
- [API] If your project contains more than the maximum allowed amount of Carts or Shopping Lists, the commercetools platform will automatically delete the resources that have been least recently modified.
Refresh tokens expiration
The number of refresh tokens is now limited to 10 million. Please refer to our documentation on creating anonymous sessions only once necessary. If the limit is exceeded, the least recently used refresh tokens are deleted. Creating new refresh tokens continues to work. Therefore a refresh token that is frequently used will never expire.
This limit can be increased per project after we review the performance impact. Please contact Support via the Support Portal and provide the region, project key and use case.
If your production project currently exceeds this limit, you will be contacted by us.
External total prices for line items in cart predicates
Cart Predicate Functions like lineItemTotal
are now taking the total prices for line items into account also when ExternalTotal
LineItemPriceMode is used.
Specific error code for deleting language from project settings.
We added the specific error code for attempts to delete languages from a Project that are still in use by at least one Store.
- [API] Added the
LanguageUsedInStores
error code.
Project setting to use country tax rate fallback
Carts contain mismatched line item tax rates if no tax rate from the tax category rate list matches the country-state combination of the current shipping address. By using the 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
We now support getting, updating, and deleting My Shopping Lists by key.
Added GraphQL mutations for Payments and MyPayments
Payments and MyPayments can now be created, updated, and deleted using the GraphQL API.
- [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
Me
type:- Added the
payments
field to theMe
type. - Added the
payment
field to theMe
type.
- Added the
- [GraphQL API] Changed the
StoreUpdateAction
type:- Input field
setSupplyChannels
was added toStoreUpdateAction
type
- Input field
- [GraphQL API] Changed the
CreateStore
type:- Input field
supplyChannels
was added toCreateStore
type
- Input field
- [GraphQL API] Changed the
Mutation
type:- Added the
createPayment
field to theMutation
type. - Added the
createMyPayment
field to theMutation
type. - Added the
updatePayment
field to theMutation
type. - Added the
updateMyPayment
field to theMutation
type. - Added the
deletePayment
field to theMutation
type. - Added the
deleteMyPayment
field to theMutation
type.
- 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
Query
type:- Added the
extensions
field to theQuery
type. - Added the
extension
field to theQuery
type.
- Added the
- [GraphQL API] Changed the
Mutation
type:- Added the
deleteExtension
field to theMutation
type. - Added the
updateExtension
field to theMutation
type. - Added the
createExtension
field to theMutation
type.
- Added the
Added a project activation endpoint for the Image Search API
Up until now, the Image Search API required contact with our support team for activation. You can now facilitate user activation of the endpoint with the new ImageSearchConfig endpoint.
- [API] Added ImageSearchConfig endpoint.
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 Address selection 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.
Input Variables in Query Predicates
API endpoints that support query predicates now allow passing input variables as separate HTTP query parameters to simplify working with query strings that contain dynamic values.
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
Query
type:- Added the
subscription
field to theQuery
type. - Added the
subscriptions
field to theQuery
type.
- Added the
- [GraphQL API] Changed the
Mutation
type:- Added the
updateSubscription
field to theMutation
type. - Added the
deleteSubscription
field to theMutation
type. - Added the
createSubscription
field to theMutation
type.
- Added the
OAuth scopes for categories
Added new OAuth scopes for Categories. This way you are no longer required to grant scopes for Products on API clients that are supposed to have access to these endpoints only.
- [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
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-methods
endpoints. - [API] Deprecated the query parameter
?orderEditId={orderEditId}
on/shipping-methods
endpoints.
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 InventoryEntryCreatedMessage.
OAuth scopes for cart discounts, customer groups, tax categories and shipping methods
We added new OAuth scopes for Cart Discounts, Customer Groups, Tax Categories and Shipping Methods. This way you are no longer required to grant scopes for Orders or Customers on API clients that are supposed to have access to these endpoints only.
- [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
When querying Product Projections the response payload contains all existing translations of localized fields. To remove unneeded translations and reduce the payload you can now use one of two new query parameters: storeProjection
and localeProjection
. In both cases the returned projections only contain values in the specified locales.
When using Stores, you can add languages to a given store and use 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.
If you don't use stores you can use 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
languages
to Store. - added
languages
to StoreDraft. - added update action
setLanguages
on Store.
- added
- [API] Added query parameter
localeProjection
on 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 Search ProductProjections. - [API] Added query parameter
storeProjection
on 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 Search ProductProjections. - [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
Channel
type:Channel
object type now implementsReviewTarget
interface
- [GraphQL API] Changed the
Product
type:Product
object type now implementsReviewTarget
interface
- [GraphQL API] Changed the
Query
type:- Added the
reviews
field to theQuery
type. - Added the
review
field to theQuery
type.
- Added the
- [GraphQL API] Changed the
Mutation
type:- Added the
updateReview
field to theMutation
type. - Added the
deleteReview
field to theMutation
type. - Added the
createReview
field to theMutation
type.
- Added the
Setting the store on existing orders
A new update action has been introduced to set the Store an order is assigned to. It should be used to migrate existing orders to a newly introduced store. Therefore no validations are performed (such as that the customer is allowed to create orders in the store).
- [API] Added the SetStore update action
- [API] Added the OrderStoreSetMessage
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
localizedDescription
attribute to the ShippingMethod and ShippingMethodDraft representations. - [API] Added setLocalizedDescription action.
- [API] The attribute
description
as well as the action setDescription 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:
Types GraphQL mutations
Types can now be created, updated, and deleted via GraphQL API also.
- [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
Mutation
type:- Added the
updateTypeDefinition
field to theMutation
type. - Added the
createTypeDefinition
field to theMutation
type. - Added the
deleteTypeDefinition
field to theMutation
type.
- Added the
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
Mutation
type:- Added the
createState
field to theMutation
type. - Added the
updateState
field to theMutation
type. - Added the
deleteState
field to theMutation
type.
- 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 a Store by ID endpoint.
- [API] Deprecated the query parameter
?cartId={id}
on/shipping-methods
endpoints.
commercetools on AWS, new API host names
The commercetools platform 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.
Machine Learning APIs are not available on the AWS Regions.
To increase region and cloud provider transparency, a new host naming scheme has been introduced for the API. Existing API host names will continue to be available as aliases for backwards compatibility.
Merchant Center and IMPEX will receive new host URLs later in a separate step. Merchant Center users will then automatically be forwarded to the new URLs.
Although the deprecated hostnames like 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/carts
endpoints.
Updates to the GraphQL references
We have made some changes on the GraphQL API that affect referenced resources in product prices, discounts, discount codes, inventory entries and shipping infos.
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
ProductDiscount
type:- Added the
referenceRefs
field to theProductDiscount
type.
- Added the
- [GraphQL API] Changed the
ProductPrice
type:ProductPrice.channel
field type changed fromReference
toChannel
ProductPrice.customerGroup
field type changed fromReference
toCustomerGroup
- Added the
customerGroupRef
field to theProductPrice
type. - Added the
channelRef
field to theProductPrice
type.
- [GraphQL API] Changed the
ShippingInfo
type:- Added the
taxCategoryRef
field to theShippingInfo
type. ShippingInfo.taxCategory
field type changed fromReference
toTaxCategory
- Added the
- [GraphQL API] Changed the
CartDiscount
type:- Added the
referenceRefs
field to theCartDiscount
type.
- Added the
- [GraphQL API] Changed the
InventoryEntry
type:InventoryEntry.supplyChannel
field type changed fromReference
toChannel
- Added the
supplyChannelRef
field to theInventoryEntry
type.
- [GraphQL API] Changed the
DiscountCode
type:- Added the
referenceRefs
field to theDiscountCode
type.
- Added the
Project setting to automatically delete carts and shopping lists
Instead of setting the 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
Mutation
type:- Added the
createChannel
field to theMutation
type. - Added the
updateChannel
field to theMutation
type. - Added the
deleteChannel
field to theMutation
type.
- 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
We've released support for CloudEvents version 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.
As of now, the version 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.
The 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.
OAuth scopes for discount codes
We added new OAuth scopes for managing or viewing Discount Codes. This way you are no longer required to grant scopes for viewing or managing Orders on API clients that are supposed to manage discount codes only.
- [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.
Added GraphQL support for ReviewRatingStatistics
It is now possible to retrieve ReviewRatingStatistics on Products and Channels via GraphQL API.
- [GraphQL API] Added the following types to the GraphQL schema:
ReviewRatingStatistics
. - [GraphQL API] Changed the
Channel
type:- Added the
reviewRatingStatistics
field to theChannel
type.
- Added the
- [GraphQL API] Changed the
Product
type:- Added the
reviewRatingStatistics
field to theProduct
type.
- Added the
Shipping methods for a cart with store-based OAuth permissions
Shipping methods for a cart can now be retrieved using store-based OAuth permissions such as view_orders:{projectKey}:{storeKey}
. The functionality itself is unchanged.
- [API] Added an endpoint to Get ShippingMethods for a Cart in a Store by ID
- [GraphQL API] The existing query fields
inStore
andinStores
now contain the fieldshippingMethodsByCart
Increased Missing Data Product Set Limit Maximum to 100000
We have now increased the maximum allowed value for the product set limit in the MissingAttributesSearchRequest of the Missing Data API from 10.000 to 100.000 and made this the new default value.
- [API] Increased default value of the
productSetLimit
to100000
.
Category Recommendations API is not activated by default for all production projects anymore.
Category Recommendations API is not activated by default for all production projects anymore. The API needs to be manually activated through the Merchant Center. Instructions can be found here.
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
Mutation
type:- Added the
updateMyShoppingList
field to theMutation
type. - Added the
createShoppingList
field to theMutation
type. - Added the
deleteShoppingList
field to theMutation
type. - Added the
createMyShoppingList
field to theMutation
type. - Added the
updateShoppingList
field to theMutation
type. - Added the
deleteMyShoppingList
field to theMutation
type.
- Added the
Retrieve ShoppingLists via GraphQL
You can now query for ShoppingLists and My Shopping Lists on the GraphQL API.
- [GraphQL API] Added the following types to the GraphQL schema:
ShoppingList
,ShoppingListLineItem
,ShoppingListQueryInterface
,ShoppingListQueryResult
,TextLineItem
. - [GraphQL API] Changed the
Me
type:- Added the
shoppingList
field to theMe
type. - Added the
shoppingLists
field to theMe
type.
- Added the
- [GraphQL API] Changed the
InStoreMe
type:- Added the
shoppingList
field to theInStoreMe
type. - Added the
shoppingLists
field to theInStoreMe
type.
- Added the
- [GraphQL API] Changed the
Query
type:- Added the
shoppingList
field to theQuery
type. Query
object type now implementsShoppingListQueryInterface
interface- Added the
shoppingLists
field to theQuery
type.
- Added the
- [GraphQL API] Changed the
MeQueryInterface
type:- Added the
shoppingLists
field to theMeQueryInterface
type. - Added the
shoppingList
field to theMeQueryInterface
type.
- Added the
My profile for Stores in Beta
Introduced methods to the HTTP API and GraphQL API that allow you to access a customer profile that is assigned to a store with an OAuth token generated with the password flow. The APIs can be used with the new OAuth scope 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
Me
type:Me
object type now implementsActiveCartInterface
interfaceMe
object type now implementsOrderQueryInterface
interfaceMe
object type now implementsCartQueryInterface
interface
- [GraphQL API] Changed the
CustomerSignMeUpDraft
type:- Input field
stores
was added toCustomerSignMeUpDraft
type
- Input field
- [GraphQL API] Changed the
InStoreMe
type:InStoreMe
object type now implementsCartQueryInterface
interface- Added the
customer
field to theInStoreMe
type. InStoreMe
object type now implementsOrderQueryInterface
interfaceInStoreMe
object type now implementsActiveCartInterface
interface
- [GraphQL API] Changed the
Mutation
type:- Argument
storeKey
was added toMutation.customerConfirmMyEmail
field - Argument
storeKey
was added toMutation.updateMyCustomer
field - Argument
storeKey
was added toMutation.customerChangeMyPassword
field - Argument
storeKey
was added toMutation.customerResetMyPassword
field - Argument
storeKey
was added toMutation.customerSignMeUp
field - Argument
storeKey
was added toMutation.deleteMyCustomer
field - Argument
storeKey
was added toMutation.customerSignMeIn
field
- 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
Channel
type:- Added the
geoLocation
field to theChannel
type.
- Added the
Publishing the Postman collection
Our Postman collection can be loaded into your postman application and contains a complete library of templates for the possible requests to the API endpoints.
It is autogenerated from the API reference and continuously updated in the GitHub repository.
Store in Order Import
You can now assign an order to a Store when using the Order Import API.
- [API] Added the
store
field to the OrderImportDraft
OAuth 2.0 Scope for published product projections
Added the 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.
Introduced methods to the HTTP API that allow you to access customers belonging to a specific store. They can be used with an OAuth scope like manage_customers:acme-inc:luxury-brand
.
When using stores, a customer can either register globally, or have a registration specific to a store. For more information, see Global versus store specific customers.
- [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
stores
fields on the typesCustomer
,CustomerDraft
. - [GraphQL API] The existing query fields
inStore
andinStores
can be used to query customers. - [GraphQL API] Added the
storeKey
argument to customer mutationscustomerSignUp
,updateCustomer
,deleteCustomer
,customerChangePassword
,customerCreatePasswordResetToken
,customerResetPassword
,customerCreateEmailVerificationToken
,customerConfirmEmail
Additional key fields in Discount Predicates
Added support for accessing more resources by their key
field in Discount Predicate Field Identifiers. You can now use the following in discount predicates:
- ProductDiscount Predicate Field Identifiers
productType.key
categories.key
categoriesWithAncestors.key
price.channel.key
- Cart Predicate Field Identifiers
customer.key
<address-field>.key
shippingInfo.taxCategory.key
shippingInfo.shippingMethod.key
- Cart Target
- LineItemPredicate Identifiers
productType.key
supplyChannel.key
price.channel.key
- CustomLineItemPredicate
taxCategory.key
- LineItemPredicate Identifiers
Added machine learning endpoint for product search with images in Beta
The new Machine Learning API can queries a product catalog using an image. The endpoint returns images which are similar to the query image and the product variants they are associated with. This is a beta feature. For more information, see Beta Features.
A technical blog post about how the feature works can be read here.
The quality of predictions is highest when the product in the image is aligned centrally, with a noiseless background, and is taken in a similar style to that of images in the product database. The model has been benchmarked using fashion datasets, and so is optimized towards these kind of queries.
In the future, the Machine Learning team will develop these models further for more generalized accuracy.
- [API] Added public endpoints for the Image Search feature.
GraphQL new custom fields
The 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.
We are deprecating the existing customFields
graphQL field present on all fields having custom fields for a better alternative.
In the new approach, all fields having custom fields have the new 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!
}
The customFields
provides access to typed custom fields.
The new 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
}
}
}
If you use 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
Category
type:- Added the
custom
field to theCategory
type. - Field
customFieldsRaw
was deprecated inCategory
type - Field
customFields
was deprecated inCategory
type
- Added the
- [GraphQL API] Changed the
Channel
type:- Added the
custom
field to theChannel
type. - Field
customFields
was deprecated inChannel
type - Field
customFieldsRaw
was deprecated inChannel
type
- Added the
- [GraphQL API] Changed the
ProductPrice
type:- Added the
custom
field to theProductPrice
type. - Field
customFieldsRaw
was deprecated inProductPrice
type - Field
customFields
was deprecated inProductPrice
type
- Added the
- [GraphQL API] Changed the
Cart
type:- Added the
custom
field to theCart
type. - Field
customFieldsRaw
was deprecated inCart
type - Field
customFields
was deprecated inCart
type
- Added the
- [GraphQL API] Changed the
CustomerGroup
type:- Added the
custom
field to theCustomerGroup
type. - Field
customFieldsRaw
was deprecated inCustomerGroup
type - Field
customFields
was deprecated inCustomerGroup
type
- Added the
- [GraphQL API] Changed the
Asset
type:- Added the
custom
field to theAsset
type. - Field
customFields
was deprecated inAsset
type - Field
customFieldsRaw
was deprecated inAsset
type
- Added the
- [GraphQL API] Changed the
CustomLineItem
type:- Added the
custom
field to theCustomLineItem
type. - Field
customFields
was deprecated inCustomLineItem
type - Field
customFieldsRaw
was deprecated inCustomLineItem
type
- Added the
- [GraphQL API] Changed the
Customer
type:- Added the
custom
field to theCustomer
type. - Field
customFieldsRaw
was deprecated inCustomer
type - Field
customFields
was deprecated inCustomer
type
- Added the
- [GraphQL API] Changed the
CartDiscount
type:- Added the
custom
field to theCartDiscount
type. - Field
customFields
was deprecated inCartDiscount
type - Field
customFieldsRaw
was deprecated inCartDiscount
type
- Added the
- [GraphQL API] Changed the
Payment
type:- Added the
custom
field to thePayment
type. - Field
customFieldsRaw
was deprecated inPayment
type - Field
customFields
was deprecated inPayment
type
- Added the
- [GraphQL API] Changed the
CategorySearch
type:- Added the
custom
field to theCategorySearch
type. - Field
customFields
was deprecated inCategorySearch
type - Field
customFieldsRaw
was deprecated inCategorySearch
type
- Added the
- [GraphQL API] Changed the
Order
type:- Added the
custom
field to theOrder
type. - Field
customFieldsRaw
was deprecated inOrder
type - Field
customFields
was deprecated inOrder
type
- Added the
- [GraphQL API] Changed the
InventoryEntry
type:- Added the
custom
field to theInventoryEntry
type. - Field
customFields
was deprecated inInventoryEntry
type - Field
customFieldsRaw
was deprecated inInventoryEntry
type
- Added the
- [GraphQL API] Changed the
LineItem
type:- Added the
custom
field to theLineItem
type. - Field
customFields
was deprecated inLineItem
type - Field
customFieldsRaw
was deprecated inLineItem
type
- Added the
- [GraphQL API] Changed the
DiscountCode
type:- Added the
custom
field to theDiscountCode
type. - Field
customFields
was deprecated inDiscountCode
type - Field
customFieldsRaw
was deprecated inDiscountCode
type
- Added the
Added new messages for products
The commercetools platform now emits messages when adding and removing a product from a category.
- [API] Added the ProductAddedToCategoryMessage to Product's Add to Category update action.
- [API] Added the ProductRemovedFromCategoryMessage to Product's Remove from Category update action.
Use Customer's key field in Cart Discount Predicates
You can now use a Customer's key
field in Cart Discount Predicates.
- [API] Added
customer.key
to Customer Field Identifiers in Cart Predicates
HTTP API methods for Stores in Beta
Introduced methods to the HTTP API that allow you to access carts and orders belonging to a specific store. They can be used with an OAuth scope like 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}
.
User defined key attribute on Product Discount
Product Discounts now have a user defined key
attribute. You can use the key
attribute when querying, updating, or deleting a ProductDiscount
.
- [API] Added the
key
attribute on theProductDiscount
andProductDiscountDraft
representations. - [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
ProductDiscount
type:- Added the
key
field to theProductDiscount
type.
- Added the
- [GraphQL API] Changed the
ProductDiscountUpdateAction
type:- Input field
setKey
was added toProductDiscountUpdateAction
type
- Input field
- [GraphQL API] Changed the
Mutation
type:Mutation.updateProductDiscount(id)
description is changed- Argument
key
was added toMutation.updateProductDiscount
field Mutation.deleteProductDiscount(id)
description is changedMutation.updateProductDiscount(id)
type changed fromString!
toString
Mutation.deleteProductDiscount(id)
type changed fromString!
toString
- Argument
key
was added toMutation.deleteProductDiscount
field
New update actions for custom types
Added new update actions for Custom Types.
You can now update the 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
Added the key
attribute to CartDiscount. You can use the key
attribute when creating or updating a CartDiscount.
- [API] Added the
key
attribute 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
key
attribute. - [GraphQL API] Added the following types to the GraphQL schema:
SetCartDiscountKey
. - [GraphQL API] Changed the
CartDiscountDraft
type:- Input field
key
was added toCartDiscountDraft
type
- Input field
- [GraphQL API] Changed the
Query
type:Query.cartDiscount(id)
description is changed- Argument
key
was added toQuery.cartDiscount
field Query.cartDiscount(id)
type changed fromString!
toString
- [GraphQL API] Changed the
CartDiscount
type:- Added the
key
field to theCartDiscount
type.
- Added the
- [GraphQL API] Changed the
CartDiscountUpdateAction
type:- Input field
setKey
was added toCartDiscountUpdateAction
type
- Input field
- [GraphQL API] Changed the
Mutation
type:Mutation.updateCartDiscount(id)
type changed fromString!
toString
Mutation.deleteCartDiscount(id)
description is changed- Argument
key
was added toMutation.updateCartDiscount
field Mutation.deleteCartDiscount(id)
type changed fromString!
toString
- Argument
key
was added toMutation.deleteCartDiscount
field Mutation.updateCartDiscount(id)
description is changed
deleteDaysAfterLastModification field is out of Beta
The deleteDaysAfterLastModification
field has been taken out of Beta. The field's current functionality has not changed.
- [API] Took the
deleteDaysAfterLastModification
out of Beta on the following representations:
Added the lastModifiedBy and createdBy fields
Added the 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 platform services, like product discount or inventory updates.
Client applications can also use a new HTTP header, 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 to commercetools using the X-External-User-ID
header. See Client Logging for more information.
-
[API] Added the
lastModifiedBy
andcreatedBy
fields to the following representations: -
[API] Added support for the
X-External-User-ID
HTTP 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
Query
was changed:- Field
project
was added toQuery
type
- Field
- [GraphQL API] Type
Mutation
was changed:- Field
updateProject
was added toMutation
type
- Field
Changed the calculation of the Similar Products maximum comparisons limit
Change how to calculate the maximum allowed limit for product comparisons in Similar Products. The maximum limit for product comparisons is now calculated using the number of comparisons between the two specified ProductSetSelector
s instead of a fixed limit for each ProductSetSelector
.
This ensures a single product can be compared to the whole product catalog even for large product catalogs ranging up to 20,000,000 products.
- [API] Changed the calculation of the maximum allowed limit for product comparisons in the Similar Products API.
Authorization Header Usage
To improve platform security, On 6 May 2019 the commercetools platform API endpoints will no longer accept access tokens as URI parameters.
All API Clients should provide access tokens to the commercetools platform API using the Authorization
header as follows:
POST /{{projectKey}}/channels HTTP/1.1
Host: api.{region}.{cloudProvider}.commercetools.com
Authorization: Bearer {accesstoken}
...
For more information, see:
Renamed Similar Product's ProductSelector to ProductSetSelector
Renamed the Similar Products's ProductSelector
representation to ProductSetSelector
to better reflect its functionality. For more information, see Beta features.
- [API] Renamed
ProductSelector
toProductSetSelector
in the Similar Products API.
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.
Additionally, a store can be used for permissions. With an OAuth scope like 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
store
can 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
store
fields on the typesCart
,CartDraft
andOrder
. - [GraphQL API] Added the query fields
inStore
andinStores
, as well as astoreKey
argument to cart and order mutations. These can be used with the new store-based OAuth scopes.
- [Doc] Documented Reference expansion on GraphQL.
- [Doc] Documented Extension error responses.
External OAuth tokens (Beta)
We introduced the ability to use External OAuth tokens in Beta.
The new OAuth scopes 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
The maximum time the commercetools platform waits for a response from an API Extension is now configurable. The maximum timeout is still limited to 2000 ms. This limit can be increased per project after we review the performance impact. Please contact Support via the Support Portal and provide the region, project key and use case.
- [API] Added
timeoutInMs
to Extension and ExtensionDraft. - [API] Added the
setTimeoutInMs
update action.
Set discounted prices from an external service when creating a Price
You can now set a discounted price for a product from an external service when creating the product's PriceDraft. This reduces API calls when using an external service to manage product discounts.
- [API] Added
discounted
field to PriceDraft.
Added Missing Data endpoints
Released Missing Data API, which allows users to scan the product catalog for products that have missing attributes, prices, or images. This can be used to detect incomplete product data and increase the data quality in a project.
- [API] Added public endpoints for the Missing Data API feature.
Changed the default value and range of the limit field in the Similar Products API
The default value of the limit
field in the Similar Products API search request
is now 20
. The maximum allowed value is now 500
for consistency with the rest of the commercetools HTTP API.
- [API] Changed the default value and value range of
limit
in the Similar Products API update action.
Introduced Limits on Products and Categories
Introduced new limits for new projects on the commercetools platform for 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.
For newer projects, all of the limits listed above can be increased if needed after we have reviewed the performance impact on your project. To request a limit increase, contact us via the Support Portal, specifying your project region, project key and your use case.
- [API] Introduced new API Limits.
Normalize currencyCode field in the Similar Products API
The Similar Products API now uses the currencyCode
field for consistency with the rest of the commercetools HTTP API.
- [API] Added the
currencyCode
field to the Similar Products API update action. This replaces thecurrency
field.
Cart and Order as Reference Type
You can now use Cart and Orders as ReferenceTypes when creating a Custom Type.
- [API] Added the
cart
andorder
fields to ReferenceType.
Change attribute definition order by name
Introduced a new update action which changes the order of a ProductTypes' AttributeDefinitions by providing the attribute definition's names.
- [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"
.
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
Mutation
type:- Added the
updateOrder
field to theMutation
type. - Added the
createOrderFromCart
field to theMutation
type. - Added the
createMyOrderFromCart
to theMutation
type. - Added the
deleteOrder
field to theMutation
type.
- Added the
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
Query
type:- Added the
payments
field to theQuery
type. - Added the
payment
field to theQuery
type.
- Added the
- [GraphQL API] Changed the
PaymentInfo
type:- Added the
payments
field to thePaymentInfo
type.
- Added the
Add ProductVariant update action now includes an assets field
The Add ProductVariant update action now includes an assets
field for providing images when creating a Product Variant.
- [API] Added the
assets
field to the Add ProductVariant update action.
External Tax Rate supports includedInPrice
For carts with 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.
You can now manage API Clients using the GraphQL API. In addition, API Clients have a new deleteDaysAfterCreation
field, which lets you delete a client after a specified amount of days.
- [API] Added the
deleteDaysAfterCreation
field to the APIClientDraft. - [API] Added the
deleteAt
field to the APIClient. - [GraphQL API] Added API Clients to the GraphQL API.
Reference Channels by their key
You can now reference a Channel using a user-defined key
field in the following scenarios:
-
When importing a LineItem of an Order using the Order Import API.
-
When updating the synchronization information of an Order.
-
When creating a Product, setting a Product's price, or Adding or Changing Prices of a ProductVariant.
-
[API] the following fields are now a ResourceIdentifier to a Channel instead of a Reference:
- LineItemDraft on Carts:
supplyChannel
distributionChannel
- MyLineItemDraft and Add LineItem on MyCarts:
supplyChannel
distributionChannel
- LineItemImportDraft on Order Import:
supplyChannel
distributionChannel
- 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
Me
type:- Added the
orders
field to theMe
type - Added the
order
field to theMe
type
- Added the
- [GraphQL API] Changed the
Query
type:- Added the
orders
field to theQuery
type - Added the
order
field to theQuery
type
- Added the
Introduced ShippingInfoImportDraft representation
Introduced the new ShippingInfoImportDraft representation. This representation improves the Order Import API by importing more robust shipping information.
In addtion, you can now reference the following fields by their 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
taxCategory
field on ShippingInfoImportDraft is a ResourceIdentifier to a TaxCategory. - The
shippingMethod
field on ShippingInfoImportDraft is a ResourceIdentifier to a ShippingMethod.
- The
- [API] Order Import - The
shippingInfo
field on OrderImportDraft is now a ShippingInfoImportDraft instead of a ShippingInfo. - [API] The
supplyChannel
fields on InventoryEntryDraft and on the Set SupplyChannel update action are now a ResourceIdentifier to a Channel instead of a Reference. - [API] The following
shippingMethod
fields 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 ShippingAddressAndShippingMethod update action
- Carts:
- [API] The following
taxCategory
fields 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 ShippingAddressAndCustomShippingMethod 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
Added the Similar Products Search endpoint
Released Similar Products Machine Learning API, which allows users to search for similar products in a product catalog. You can use this feature to detect and clean up product duplicates.
- [API] Added endpoints for the Similar Products feature.
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
It is now possible to retrieve category assets via GraphQL API category search and category auto completion.
User defined key attribute on Shipping Zones
Shipping Zones now have a user defined key
attribute. The key
attribute is used when creating or updating a ShippingMethod
to identify a Zone
.
- [API] Added the
key
attribute on theZone
andZoneDraft
representations. - [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.
ReturnItems for CustomLineItems
It is now possible to handle returns for goods that were ordered as CustomLineItems.
- [API] Renamed ReturnItem to LineItemReturnItem.
- [API] Renamed ReturnItemDraft to LineItemReturnItemDraft.
- [API] Added CustomLineItemReturnItemDraft and CustomLineItemReturnItem to be used on a ReturnInfo.
Introduced a customerNumber field in the UserProvidedIdentifiers
Introduced a new field on Messages that uniquely identifies which Customer is concerned with the message.
- [API] Added field
customerNumber
in the UserProvidedIdentifiers of messages.
This field will only be filled if thecustomerNumber
field on the respective Customer has a value.
Added machine learning endpoint for recommending categories for products
Introduced Machine Learning APIs to autonomously learn from data and make automated predictions. This reduces the amount of manual work required to manage projects.
The first machine learning API endpoint available is the Category Recommendations endpoint. The Category Recommendations endpoint suggests categories that best fit a given product. Further information on the background of this feature can be found on the tech blog.
- [API] Added public endpoints for the Category Recommendations feature.
Shipping Methods - set or update the Tax Category by Key
It is now possible to set or update the TaxCategory on a ShippingMethod by its id or by its Key.
- [API] The
taxCategory
fields 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
We introduced new Messages that are emitted when the DiscountedPrice on a ProductVariant has changed.
- [API] Added ProductPriceDiscountsSetMessage.
- [API] Added ProductPriceExternalDiscountSetMessage.
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
score
sorting criteria in ProductProjection Search API.
OrderEdit dry run
With this release, it is possible to explicitly trigger a preview of the order when either creating or updating an OrderEdit. This feature is enabled by setting the new parameter dryRun
to true.
- [API] new field
dryRun
at OrderEditDraft, update OrderEdit by ID and update OrderEdit by key
Documented TTL for token to reset customer password
We now documented the parameter to set the life span of the token that is generated for resetting the password of a Customer.
- [Documentation] Added field
ttlMinutes
to the documentation for API method Create a Token for Resetting the Customer’s Password.
The Messages HTTP API can delete old messages
In the Project Settings, you can configure after how many days messages will be deleted from the Messages Query HTTP API. The default for new projects is 15 days.
Existing projects are not automatically migrated to the new feature. However, we encourage you to manually migrate to ensure a stable performance of the Messages Query HTTP API.
- [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
It is now possible to create/update/delete categories as well as products via GraphQL API.
- [GraphQL API] Type
Mutation
was changed:- Field
createCategory
was added toMutation
type - Field
updateCategory
was added toMutation
type - Field
deleteCategory
was added toMutation
type - Field
createProduct
was added toMutation
type - Field
updateProduct
was added toMutation
type - Field
deleteProduct
was added toMutation
type
- Field
Additionally the following query fields where added:
-
[GraphQL API] Type
Category
was changed:- Field
assets
was added toCategory
type
- Field
-
[GraphQL API] Type
ProductVariant
was changed:- Field
assets
was added toProductVariant
type
- Field
-
[GraphQL API] Type
ProductPrice
was changed:- Field
tiers
was added toProductPrice
type
- Field
HTTPS security changes activated
Following the announcement to update the SSL setup we only support TLS 1.2 for all encrypted connections from now on. We have dropped support for older SSL/TLS versions. For exact details on the SSL/TLS setup that we support, refer to the Security section of the general HTTP API documentation.
Temporary URLs that we provided for application testing are not active anymore.
Add OAuth scope to manage project settings
- [API] The new
manage_project_settings
scope grants access to modifying and viewing the project settings. Previously, only themanage_project
scope did.
Added SetLineItemPrice for Orders and OrderCustomerGroupSet message
Prices on line items can now be updated on Orders in the context of Order Edits. A new message has been introduced to get informed about changes on the CustomerGroup of an Order.
- [API] Added update action SetLineItemPrice.
- [API] Added field
refusedGifts
to Order. - [API] Added message OrderCustomerGroupSetMessage.
Subscriptions out of Beta
We are announcing that Subscriptions have been taken out of Beta. After releasing several enhancements over the last weeks, this is being done with no further changes to the functionality of Subscriptions.
Shopping List API out of Beta
We are announcing that the Shopping List API has been taken out of Beta. This is being done without any changes or enhancements to the API's current functionality.
Messages and Change Subscriptions now have user-provided identifiers
User-provided identifiers are identifiers that are not set by the API (like the 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.
This release progresses towards the design goal by adding the key
field among other user-provided identifiers into data structures commonly used in asynchronous processing by Subscriptions and the Messages Endpoint.
- [API] Added
resourceUserProvidedIdentifiers
to the common message fields - [API] Added
resourceUserProvidedIdentifiers
to the subscription payload
Change Subscriptions now support ten more resource types
The following ten resourceTypeIds
are now supported by Change Subscriptions:
cart-discount
channel
discount-code
extension
product-discount
shopping-list
subscription
state
tax-category
type
Cart updates prices, taxes etc. on every update
Before, the cart decided, based on the update actions, whether to update the product prices and tax rates. We've received feedback that this was unpredictable and confusing.
Therefore, the cart now updates the product prices and tax rates, along with discounts and the shipping info, on every update. No change to your code is necessary, but you may remove superfluous Recalculate update actions (if they don't update the product data).
- [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
You can now apply financial changes after an Order has been placed with OrderEdits. OrderEdits are wrappers that capture OrderUpdateActions which can create a preview of changes and apply them to the Order.
The OrderEdit tutorial shows some examples how edits can be performed.
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
HTTPS security changes
We are updating the SSL setup to only support TLS 1.2 for all encrypted connections. Starting October 2018, we will drop support for older SSL/TLS versions. For exact details on the SSL/TLS setup that we will support refer to the Security section of the general HTTP API documentation.
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.com
https://api-tls12.commercetools.com
For US:
https://auth-tls12.commercetools.co
https://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.
The SSL setup change as outlined here will go into effect on Monday, 1 October 2018 between 9 and 11 AM (UTC).
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
We have added the error code that can occur when removing enum values from an attribute definitions that are still in use by products.
- [API] Added the
EnumValueIsUsed
error code.
Added setValidFromAndUntil to cart discounts and discount codes
It is now possible to set the 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
.
Order Deleted Message
You can now be notified about deletion of orders that have been created for test purposes, for instance.
- [API] Added OrderDeletedMessage.
Added reference expansion on more shipping method related endpoints
We have extended the support for Reference Expansion to ShippingMethod-related endpoints.
- [API] Added
expand
parameter to Get ShippingMethods for a Cart. - [API] Added
expand
parameter to Get ShippingMethods for a Location.
Add GraphQL queries for State
Query for States is now supported on the GraphQL API too.
-
[GraphQL API] Type
Query
was extended:- Field
states
was added toQuery
type. - Field
state
was added toQuery
type.
- Field
-
[Documentation] Fix documentation of State:
- The field
name
is optional. - The field
description
is optional.
- The field
-
[Documentation] Fix documentation of StateDraft:
- Add missing field
roles
used in the Reviews tutorial.
- Add missing field
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
Me
was changed:- Field
carts
was added toMe
type - Field
activeCart
was added toMe
type - Field
cart
was added toMe
type
- Field
- [GraphQL API] Type
Query
was changed:- Field
carts
was added toQuery
type - Field
cart
was added toQuery
type - Field
customerActiveCart
was added toQuery
type
- Field
- [GraphQL API] Type
CustomerSignInResult
was changed:- Field
cart
was added toCustomerSignInResult
type
- Field
- [GraphQL API] Type
CustomerUpdateAction
was changed:CustomerUpdateAction.setCustomerGroup
input field type changed fromSetCustomerCustomerGroup
toSetCustomerGroup
CustomerUpdateAction.setCustomerNumber
input field type changed fromSetCustomerCustomerNumber
toSetCustomerNumber
- [GraphQL API] Type
Mutation
was changed:- Field
deleteCart
was added toMutation
type - Field
deleteMyCart
was added toMutation
type - Field
createMyCart
was added toMutation
type - Field
updateMyCart
was added toMutation
type - Field
updateCart
was added toMutation
type - Field
replicateCart
was added toMutation
type - Field
createCart
was added toMutation
type
- Field
Removed IronMQ from the documentation
Due to low adoption in the customer base, we have removed IronMQ from the Subscription documentation. We continue to support IronMQ for customers that are already using it.
Subscriptions indicate Health Status
Subscriptions now have a HealthStatus allowing you to monitor the health of a subscription with a tool of your choice. For production-critical queues, we recommend to set up an automatic alert.
With the new update action changeDestination, a 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).
We have modified the handling of delivery failures caused by ConfigurationError
s:
- 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
After that, we'll drop the messages, and will not attempt to deliver further messages. In this case, the subscription gets the status ConfigurationErrorDeliveryStopped
. For more information, see the updated Delivery Guarantees.
- [API] Added the SubscriptionHealthStatus, and a new field
status
to 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
Both Subscriptions and API Extensions can contain access secrets, for example to allow the commercetools platform to place a message into a queue, or to invoke an AWS Lambda function. When retrieving an access secret via the commercetools platform API, it is now hidden (except for the last 4 characters).
This change should help you to keep your access secrets secure. As noted in both Subscriptions and API Extensions, we recommend to create access credentials that only have the permission to put a message into the specific message queue, or only invoke the particular API Extension.
Order Update Action - setCustomerId
It is now possible to set the Customer ID on an existing Order. A respective Message is now generated upon such changes so that clients can subscribe to it, if interested.
- [API] Added update action SetCustomerId on Order.
- [API] Added message OrderCustomerSetMessage.
Changes in the GraphQL schema
- [GraphQL API] Following types were added in the GraphQL schema:
ChangeCustomerGroupName
,CustomerGroupDraft
,CustomerGroupUpdateAction
,SetCustomerGroupCustomField
,SetCustomerGroupCustomType
,SetCustomerGroupKey
. - [GraphQL API] Type
CustomerGroup
was changed:- Field
customFieldsRaw
was added toCustomerGroup
type
- Field
- [GraphQL API] Type
Mutation
was changed:- Field
updateCustomerGroup
was added toMutation
type - Field
deleteCustomerGroup
was added toMutation
type - Field
createCustomerGroup
was added toMutation
type
- Field
Added setValidFromAndUntil to product discounts methods
Added setValidFromAndUntil
to product discount update methods.
- [API] Added update action Set Valid From and Until to ProductDiscount
- [GraphQL API] Added
ProductDiscountUpdateAction.setValidFromAndUntil
Change Subscription payloads includes modifiedAt
The Change Subscription payloads now have the field modifiedAt
.
- [API] The Payloads ResourceCreated, ResourceUpdated and ResourceDeleted have a new field
modifiedAt
.
Added orderState and state field to OrderFromCartDraft
- [API]
orderState
andstate
can now be set in the OrderFromCartDraft
Subscriptions support Google Cloud Pub/Sub
The Subscriptions support Google Cloud Pub/Sub as a destination. It can be used both as a pull-queue, and to push messages to for example Google Cloud Functions or HTTP endpoints (webhooks).
- [API] The Google Cloud Pub/Sub destination has been added.
Subscriptions support CloudEvents and Azure EventGrid (Preview)
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.
CloudEvents is a new effort and it's still under active development. The format is versioned, and we do not plan to offer long-term support for outdated versions yet. Therefore, CloudEvents is currently only offered in Preview
, with the goal to give feedback to the CloudEvents working group.
Support for Azure Event Grid has been added, which offers native support to filter and route CloudEvents. EventGrid can be used to push messages to Azure Functions, HTTP endpoints (webhooks), and several other Azure tools.
- [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.
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
Query
was changed:- Field
customer
was added toQuery
type - Field
customers
was added toQuery
type - Field
me
was added toQuery
type
- Field
- [GraphQL API] Type
Mutation
was changed:- Field
customerCreatePasswordResetToken
was added toMutation
type - Field
customerCreateEmailVerificationToken
was added toMutation
type - Field
customerSignMeUp
was added toMutation
type - Field
customerConfirmEmail
was added toMutation
type - Field
deleteMyCustomer
was added toMutation
type - Field
deleteCustomer
was added toMutation
type - Field
customerResetMyPassword
was added toMutation
type - Field
updateMyCustomer
was added toMutation
type - Field
customerSignMeIn
was added toMutation
type - Field
updateCustomer
was added toMutation
type - Field
customerChangeMyPassword
was added toMutation
type - Field
customerChangePassword
was added toMutation
type - Field
customerResetPassword
was added toMutation
type - Field
customerConfirmMyEmail
was added toMutation
type - Field
customerSignIn
was added toMutation
type - Field
customerSignUp
was added toMutation
type
- Field
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
Query
was changed:- Field
inventoryEntries
was added toQuery
type - Field
inventoryEntry
was added toQuery
type
- Field
- [GraphQL API] Type
Mutation
was changed:- Field
deleteInventoryEntry
was added toMutation
type - Field
createInventoryEntry
was added toMutation
type - Field
updateInventoryEntry
was added toMutation
type
- Field
Added error messages
We made the error codes for creation and updates of ProductType more specific to ease error handling for you.
- [API] Added more specific error messages. Please find details in the Errors documentation.
Added filtering for stock and images on product variants in GraphQL
The GraphQL API now allows you to filter for those ProductVariants that have images or that are available in stock.
- [GraphQL API] Added filtering parameters
isOnStock
,stockChannelIds
andhasImages
toProductData.variants
andProductData.allVariants
.
Change a category parent by resource identifier instead of reference
A category’s parent can now be set using its user-defined key instead of the platform-generated ID.
- [API] The field
parent
of the changeParent action is now a ResourceIdentifier instead of a Reference.
More info if the payload of a message subscription had to be dropped
When the payload of a message subscription had to be dropped (usually due to a size constraint of the destination message queue), the reason as well as the value of the type
field is placed into the notification.
- [API] The Message Subscription Payload has a new field called
payloadNotIncluded
of 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
Based on customer feedback we changed the behavior of the StackingMode StopAfterThisDiscount
.
- [API] The StackingMode
StopAfterThisDiscount
now 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.
GDPR tutorial
We have published a tutorial about how commercetools fulfills the requirements of the General Data Protection Regulations.
- [Tutorial] Added GDPR Tutorial.
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.
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
Initial
TransactionState is now the defaultstate
value in the TransactionDraft. - [API] TransactionType previously had "all capitals" values like
AUTHORIZATION
,CHARGE
etc., that have now been changed.
Added GraphQL mutations for the CartDiscount and ProductDiscount
Mutations for the CartDiscount and ProductDiscount are now supported on the GraphQL endpoint.
- [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
ProductDiscount
was changed:ProductDiscount
type description is changed
- [GraphQL API] Type
Mutation
was changed:- Field
updateProductDiscount
was added toMutation
type - Field
updateCartDiscount
was added toMutation
type - Field
deleteProductDiscount
was added toMutation
type - Field
createProductDiscount
was added toMutation
type - Field
createCartDiscount
was added toMutation
type - Field
deleteCartDiscount
was added toMutation
type
- Field
Data Erasure of Personal Data
In some countries, especially the ones in the European Union, you are required by law (such as the GDPR) to erase personal data of a customer on request, also known as Right to be Forgotten.
A default 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 (the commercetools platform internally keeps logs for some time, to reconstruct data in case of faulty system behavior).
Endpoints that store personal data therefore offer a parameter for DELETE
requests called dataErasure
. If set to true
, the commercetools platform 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:
Personal data must not be stored in objects other than the ones listed above.
High precision prices
For those businesses whose product prices require a higher precision than the currently offered cent amount, we have extended the pricing model to additionally support sub-cents for ProductVariant prices. To support this, a new money type HighPrecisionMoney was introduced. High precision money usage can be interchanged with regular money usage everywhere where BaseMoney is used.
- [API] BaseMoney - base polymorphic type which supports cent and high precision at the same time.
- [API] Money - added
fractionDigits
andtype
fields. - [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
The user-defined 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
A Correlation ID is a unique identifier of a single action, allowing to trace the action across multiple systems.
- [API] The API accepts a client-provided Correlation ID if sent with the
X-Correlation-ID
HTTP header - [API] If the client does not provide one, the API generates one and the response contains the
X-Correlation-ID
HTTP header
Authorization Header for HTTP API Extensions
It is now possible to provide an Authorization Header when creating a new HTTP API Extension. The Authorization header will be set to the headerValue
when the HTTP API Extension is called.
- HTTP Destination Authentication type Authorization Header added to API Extensions.
To get started with API Extensions in general, please read the tutorial.
Update Multiple Shipping Addresses for Orders
When line items of an order should be shipped to different addresses those shipping details can now be updated on orders.
We added the following update actions to Order to manage multiple shipping addresses:
- [API] AddItemShippingAddress
- [API] RemoveItemShippingAddress
- [API] UpdateItemShippingAddress
- [API] SetLineItemShippingDetails
- [API] SetCustomLineItemShippingDetails
Please find more about usage of multiple shipping addresses in the tutorial.
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).
To get started with API Extensions in general, please read the tutorial.
- [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
The new matching ProductDiscount endpoint can be used to simulate which product discounts would be applied if a product variant had a specified price.
- [API] matching ProductDiscount endpoint added.
Orders API Extensions
You can now extend the behavior of the Orders 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 order is persisted. The API Extension can validate the order or apply additional updates to it. It can, for example, validate that an order with the given configuration can be created, automatically add an order number, or change states.
To get started with API Extensions in general, please read the tutorial.
- [API] API Extensions available for
order
.
Product type attribute definition management
We have introduced two update actions on the ProductType resource: one to update the name of an attribute definition, and one to update the key of any enum value.
- [API] Added update action
"changeAttributeName"
on ProductType. - [API] Added update action
"changeEnumKey"
on ProductType.
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.
Simplified cart predicate language
The cart predicate language has been simplified.
- [API] A boolean value is now a valid predicate. For example if a cart discount should match all carts, the predicate
true
is now sufficient. Previously, one had to write1 = 1
ortrue = true
. - [API] A boolean function is now a valid predicate. For example
lineItemExists(...)
is now sufficient. Previously, one had to writelineItemExists(...) = true
.
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.
To get started with API Extensions, you can read the tutorial.
- [API] API Extensions available for
payments
. - [API] API Extensions available for
customer
.
Customer update messages
We have introduced new messages about updates on the Customer resource. With the introduction of these messages, you can now get notified about changes to specific fields for the Customer. Previously, it was only possible to get the generic change messages with the ChangeSubscription on the Customer resource.
- [API] Added CustomerAddressChangedMessage.
- [API] Added CustomerEmailChangedMessage.
- [API] Added CustomerEmailVerifiedMessage.
- [API] Added CustomerCompanyNameSetMessage.
- [API] Added CustomerDateOfBirthSetMessage.
- [API] Added CustomerGroupSetMessage.
- [API] Added CustomerAddressRemovedMessage.
- [API] Added CustomerAddressAddedMessage.
Furthermore, Customer Group has been added as supported resource for ChangeSubscription.
Improvements in GraphQL API coverage
GraphQL API surface area was extended and now includes a lot of new query fields and types, as well as experimental mutation support.
Multiple Shipping Addresses
It is now possible to capture multiple shipping addresses for one cart. This is done by creating (custom) line item specific shipping addresses. To learn more about this new feature, see the new tutorial.
We added following objects:
- [API] ItemShippingDetails and its draft object ItemShippingDetailsDraft
- [API] ItemShippingTarget
We added following fields:
- [API]
key
on Address - [API]
itemShippingAddresses
on Cart, CartDraft, MyCartDraft, Order and OrderImportDraft - [API]
shippingDetails
of type ItemShippingDetails on LineItem and CustomLineItem - [API]
shippingDetails
of type ItemShippingDetailsDraft on LineItemDraft (also used by AddLineItem), MyLineItemDraft, MyCart AddLineItem, CustomLineItemDraft and LineItemImportDraft - [API]
shippingDetailsToRemove
of 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
Customer groups can now be extended with custom fields. This allows users to categorize customer groups any way they want and filter the query result by custom fields.
- [API] Added a
custom
field to the CustomerGroup and CustomerGroupDraft. - [API] Added Set Custom Type and Set Custom Field 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
Until now it was assumed that carts and orders are created by customers themselves only, but to reflect the case of creating carts and orders by the merchants on behalf of customers also, we introduced a new field tracking the origin of a Cart and an Order.
- [API] Added enumeration CartOrigin.
- [API] Added field
origin
to Cart that can be set during creation of the cart. - [API] Added field
origin
to Order that is taken over from the cart or set during import of the order.
DiscountCode can now be grouped
Discount codes now can be grouped together by assigning one or more groups to an individual discount code.
Furthermore, the new 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
groups
to DiscountCode and DiscountCodeDraft. - [API] Added Change Groups update action to manage the groups on a discount code.
- [API] Added
Return
StateRole for LineItems.
Release API Extensions Tutorial
We published a tutorial about the API Extensions feature we recently released. The tutorial explains the usage of the feature based on two example use cases. In the first example an API Extension is developed that validates a maximum number of items that can be added to the cart. The extension developed in the second example will add a mandatory insurance to the cart if any item in the cart is worth $500 or more. Please check it out.
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
localizedMessage
to the API Extension Error.
Reference a category parents by its key
When creating a category, the category's parent can now be set by its user-defined key instead of the platform-generated ID, as it was before. This makes importing of category trees easier since identifiers for all parent categories are known beforehand.
- [API] The field
parent
of 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.
The first part of the new documentation explains how to setup an extension, while the second part describes the input and the possible responses of the extension. The third part details the limits and error cases related to extensions.
- [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_extensions
granting 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 fulfilment related addresses, for example a customer is stocking up on printing paper and has ordered 80 packages printing paper; 20 packages are to be delivered to the main office building, 58 to the warehouse and 2 for his home office. This can be achieved by defining three deliveries for the order, each with their own address.
- [API] Added field
address
to Delivery and AddDelivery. - [API] Added update action SetDeliveryAddress to update the address on an existing delivery.
- [API] Added message DeliveryAddressSetMessage 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
validFrom
andvalidUntil
fields in a DiscountCode. - [API] Added "setValidFrom" and "setValidUntil" update actions for a DiscountCode.
- [API] Added DiscountCodeState
NotValid
andApplicationStoppedByPreviousDiscount
.
"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
validFrom
andvalidUntil
fields in a ProductDiscount. - [API] Added "setValidFrom" and "setValidUntil" update actions for a ProductDiscount.
Update Deliveries
The deliveries of orders can now be amended after creating parcels or deliveries in cases data needs to be added or changed. Corresponding messages have been added, as well as messages for changing the state of the shipment and return shipment to which clients can now subscribe.
- [API] Added the update actions
setDeliveryItems
,removeParcelFromDelivery
,removeDelivery
,setParcelMeasurements
,setParcelTrackingData
andsetParcelItems
to Orders. - [API] Added corresponding messages: DeliveryRemovedMessage, DeliveryItemsUpdatedMessage, ParcelRemovedFromDeliveryMessage, ParcelTrackingdataUpdatedMessage, ParcelMeasurementsUpdatedMessage and ParcelItemsUpdatedMessage.
- [API] The changeShipmentState update action now produces the OrderShipmentStateChangedMessage.
- [API] The setReturnShipmentState update action now produces the OrderReturnShipmentStateChangedMessage.
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
It is now possible to define Cart Discounts by specifying the custom Type of the line items to be discounted or the line items that activate the discount.
- [API] Added
custom.type.key
andcustom.type.id
Cart 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
Assets can now be identified by a user-defined key
that is unique only within the asset's container (a product variant or a category). Before only the platform-generated id of the assets could be used to identify them on the platform. 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
key
field that can be set during creation of the asset or afterwards by the new update actionSetAssetKey
on products and on categories endpoints. -
[API] An Asset
key
can now be used as an alternative identifier to the asset ID on following update actions: -
[API] Added optional field
position
on 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
We now provide custom fields on CartDiscounts. This allows users to customize their cart discounts in any way they want and fetch them by filtering on custom fields now supported on the cart discounts endpoint.
- [API] Added a
custom
field to the CartDiscount and CartDiscountDraft. - [API] Added Set Custom Type and Set Custom Field 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
A product variant to be added to a Shopping List and My Shopping List can now be selected by the variant's SKU. Before the variant had to be selected by product ID and variant ID only.
- [API] Added selection by SKU to LineItemDraft Product Variant identification.
Update of shipping method predicate
The 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
We have introduced the 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
taxCalculationMode
to 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
The customer Sign In now always returns a recalculated cart, and allows to update the product data.
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 platform-generated IDs in the predicates.
- [API] Added the capability to use Category
key
in LineItemPredicate Fields. - [API] Added the capability to use Product
key
in LineItemPredicate Fields. - [API] Added the capability to use Product
key
in ProductDiscount Predicate Identifiers. - [API] Added the capability to use CustomerGroup
key
in LineItemPredicate Fields. - [API] Added the capability to use CustomerGroup
key
in Cart-related Predicate Fields. - [API] Added the capability to use CustomerGroup
key
in ProductDiscount Predicate Identifiers.
Multi-Buy Discounts for Custom Line Items
We extended the multi-buy discount feature of type "Buy 4 car tires, get 2 of them 50% off" to CustomLineItems.
- [API] Added new MultiBuyCustomLineItems Target on CartDiscount.
Managing orders by order number
Orders can now be fetched, updated, and deleted by providing the user-defined orderNumber
instead of the platform-generated id
of the order.
- [API] Added Get Order by OrderNumber.
- [API] Added Update Order by OrderNumber.
- [API] Added Delete Order by OrderNumber.
Parcel Items
We now support tracking line items on a Parcel. With this new ability, you can define which line items of a Delivery goes into which parcel. Example: An order consists of fresh fruits and meat products. This will be one delivery, but it will have two parcels. One for the fresh fruits and one for the meat products.
- [API] Added field
items
to Parcel. - [API] Added field
items
to Add Parcel update action. - [API] Changed field
items
on Add Delivery update action to be optional.
Added dynamic shipping rates
With dynamic shipping rates it is now possible to dynamically set the price for shipping based on value or the new ShippingRateInput of the cart. For further information on how to use this new feature, please see the tutorial.
- [API] Added ShippingRatePriceTiers as an optional field on shipping rate.
- [API] Added the
shippingRateInput
field on the Cart and the CartDraft, as well as the corresponding update action SetShippingRateInput. - [API] Added the
shippingRateInput
field on the Order. - [API] Added the
shippingRateInputType
field on the Project.
Remove enum values from attribute definitions
Enum values can now be removed from enum type and localized enum type attribute definitions of product types.
All attributes of all products using those enum keys will be removed in an eventually consistent way.
- [API] Add update action
removeEnumValues
to ProductTypes.
Improved Cart's recalculation update action
We changed the behavior of the Cart's Recalculate 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
We now support CartDiscounts to prevent further application of matching CartDiscounts respecting their 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
The behavior of CustomLineItems has been improved to behave more similar to regular LineItems when signing in, and when adding a new item.
Payment API deprecating fields
As part of a Beta improvement initiative, the Payment API has been updated deprecating a series of fields.
- [API]
externalId
in PaymentDraft, Payment as well as under Update Payment
This field has been deprecated because theinterfaceId
can be used for the ID set by the Payment Service Provider (PSP), and the newly introducedkey
field has taken over the role ofexternalID
. - [API]
amountAuthorized
,amountPaid
andamountRefunded
in 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:Success
andamount:2$
and another one withtype:Charge
,state:Success
andamount:3$
. TheamountPaid
is5$
. - Example 2: Two transactions, one with
type:Charge
,state:Failure
andamount:2$
and another one withtype:Charge
,state:Success
andamount:3$
. TheamountPaid
is3$
. - Example 3: Two transactions, one with
type:Charge
,state:Success
andamount:3$
and another one withtype:Refund
,state:Success
andamount:2$
. TheamountPaid
is3$
. TheamountRefunded
is2$
.
- Example 1: Two transactions, one with
- [API]
authorizedUntil
in 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]
paymentId
in PaymentStatusInterfaceCodeSetMessage
This field has been deprecated because theid
in theresource
field can be used instead. - [API] TransactionType previously had uppercase values like
AUTHORIZATION
,CHARGE
etc. These are deprecated.
Furthermore, another TransactionState has been added.
- [API] The
Initial
TransactionState 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 existingPending
state 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 defaultstate
value in the TransactionDraft toInitial
. Do not depend on the default value! Please set thestate
field explicitly as soon as possible.
Custom Fields for Discount Codes
We extended the DiscountCode model to support custom fields. This allows users to categorize discount codes any way they want and fetch them using the predicates on the discount codes endpoint.
- [API] Added a
custom
field to the DiscountCode and DiscountCodeDraft. - [API] Added Set Custom Type and Set Custom Field 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
Since the originalPrice
field on the line item predicate was duplicating the behavior of the price
field, the originalPrice
field was removed.
- [API] Removed
originalPrice
field on LineItemPredicate. - [Documentation] Updated outdated description of
price
field 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.
Payment Endpoints for Customers
We added new endpoints to allow customers to manage their payments with the password flow or with an anonymous session.
- [API] Added My Payments Endpoints as feature.
ShippingMethod predicate
By using predicates on Shipping Methods, we are empowering the merchants to build their own set of shipping method rules. Dependent on the cart and its content, a merchant can define which shipping methods should be offered during checkout. For further information on how to use this new feature, please see the tutorial.
- [API] The field
predicate
was added to ShippingMethod. - [API] The field
shippingMethodState
was added to ShippingInfo. - [API] The order-related error code
ShippingMethodDoesNotMatchCart
was added.
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
The new cart tax mode ExternalAmount
allows to set the totalGross
, taxRate
and taxPortions
fields on cart's content externally by the client instead of the platform. 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
Breaking Change
For performance improvements, the "mark-matching-Variants" feature on the Product Projection search endpoint 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 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
markMatchingVariants
parameter totrue
on requests to this endpoint from next week onwards. Please refer to the documentation on how to set the parameter accordingly.
Added My Shopping List Endpoints
We added new endpoints to allow Customers to manage their shopping lists with the password flow or with an anonymous session.
- [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_lists
granting 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] ProductProjectionSearch now supports filtering by datetime.
Keys for Tax Categories
Added key
field to TaxCategories
- [API] TaxCategories have a new optional field
key
that 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
publish
update action has a new fieldscope
controlling the publishing behavior. By default thisscope
is set to"All"
, but when set to"Prices
" only the prices will be published. - [API ]The ProductPublishMessage also has a new field
scope
, containing thescope
that was set during the correspondingpublish
update 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
Added key
field to Customer
Customer 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
customerGroup
that can be set ifcustomerId
is not present. - [API] Added new update action setCustomerGroup to set the customer group to a cart if
customerId
is not present.
OAuth 2.0 Token Introspection
We implemented OAuth 2.0 Token Introspection according to RFC 7662. It allows to determine the active state of an OAuth 2.0 access token and to determine meta-information about this access token, such as the scope
.
- [API] OAuth 2.0 Token Introspection is available on the auth service.
- [API] The new
introspect_oauth_tokens
scope allows a client to introspect tokens issued to other clients.
Keys for Shipping Methods
Added key
field to ShippingMethods
- [API] ShippingMethods have a new optional field
key
that 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 platform-generated 'id'.
- [API] The CustomerGroup has a new field
key
which is used as an external identifier. Thekey
can be used to get, update or delete a customer group.
Added possibility for product to be added to/removed from category by category key.
After introducing keys on categories, we extended the update actions for adding and removing products to and from categories. Now it is possible to update products by category key in the same way as by category ID.
- [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
For resetting a customer password it is now possible to get the customer by email token. For getting the customer by password token the new endpoint (/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
ExternalPrice
LineItemPriceMode. - [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
ExternalTotal
LineItemPriceMode.
Added update action to change Input Hint on Attribute Definition
The 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
salutation
that can be set during creation of the customer or changed afterwards by new update action setSalutation. - [API] Two new Cart discount predicate functions
lineItemExists
andforAllLineItems
were added.
Tutorial Handling Subscriptions
We published a tutorial for Order Created Messages as an example for the scenario in which you want to send a notification via email to your customer when an order is created.
Product Deleted Message and more
Added and changed messages about changes on products
- [API] Added ProductRevertedStagedChangesMessage.
- [API] Added ProductVariantDeletedMessage.
- [API] Added ProductDeletedMessage.
- [API] Changed ProductPublishedMessage to include image urls that were removed during publishing.
Release note archive
The release notes published before 02 June 2017 are archived below.