Release Notes
Added 'key' to Cart Line Item
We introduced the key
field on LineItem and LineItemDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.
Changes:
- [GraphQL API] Changed the
AddStagedOrderLineItem
type:- Input field
key
was added toAddStagedOrderLineItem
type
- Input field
- [GraphQL API] Changed the
MyLineItemDraft
type:- Input field
key
was added toMyLineItemDraft
type
- Input field
- [GraphQL API] Changed the
LineItemDraft
type:- Input field
key
was added toLineItemDraft
type
- Input field
- [GraphQL API] Changed the
AddCartLineItem
type:- Input field
key
was added toAddCartLineItem
type
- Input field
- [GraphQL API] Changed the
LineItem
type:- Added the
key
field to theLineItem
type.
- Added the
- [GraphQL API] Changed the
LineItemDraftOutput
type:- Added the
key
field to theLineItemDraftOutput
type.
- Added the
- [GraphQL API] Changed the
AddMyCartLineItem
type:- Input field
key
was added toAddMyCartLineItem
type
- Input field
Added 'business-unit' and 'associate-role' to CustomFieldReferenceValue
Business Units and Associate Roles can now be used as ReferenceTypes on Custom Fields. The new associate-role
and business-unit
values are supported on all customizable data types providing full flexibility in extending B2B features.
Changes:
- [API] Added
business-unit
andassociate-role
to CustomFieldReferenceValue.
Confluent Cloud added as Subscription destination
We are announcing that Confluent Cloud is now supported as a Subscription destination.
With the introduction of Confluent Cloud support, customers can now natively use Apache Kafka across their preferred cloud platforms, whether it's Google Cloud, Azure, or AWS. This integration not only eliminates the necessity for intermediary gateways to consume messages from Kafka but also reduces the associated resources and costs.
Changes:
- [API] Added ConfluentCloudDestination to Subscriptions.
- [GraphQL API] Added the following types to the GraphQL schema:
ConfluentCloudDestination
,ConfluentCloudDestinationInput
- [GraphQL API] Changed the
DestinationInput
type:- Input field
ConfluentCloud
was added toDestinationInput
type
- Input field
Introduced GraphQL support for creating Associates using My Business Units
We introduced GraphQL support for creating Associates using My Business Units. This allows Customers with the UpdateAssociates
Permission to create a new Associate, assigning them roles specific to the given Business Unit.
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
SignUpInMyBusinessUnitDraft
. - [GraphQL API] Changed the
Mutation
type:- Added the
signUpInMyBusinessUnit
field to theMutation
type.
- Added the
Introduced 'key' field on Parcel
We introduced the key
field on Parcel and ParcelDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.
Changes:
- [API] Added the
key
field to Parcel and ParcelDraft. - [API] Added the
parcelKey
field and changed theparcelId
field to be optional on the following Order and StagedOrderUpdateAction update actions: - [API] Added the
parcelKey
field to the Add Parcel update action on Order and StagedOrderUpdateAction. - [GraphQL API] Changed the
Parcel
type:- Added the
key
field to theParcel
type.
- Added the
- [GraphQL API] Changed the
ParcelDraft
type:- Input field
key
was added toParcelDraft
type
- Input field
- [GraphQL API] Changed the
SetStagedOrderParcelCustomTypeOutput
type:- Added the
parcelKey
field to theSetStagedOrderParcelCustomTypeOutput
type. SetStagedOrderParcelCustomTypeOutput.parcelId
field type changed fromString!
toString
- Added the
- [GraphQL API] Changed the
SetOrderParcelMeasurements
type:SetOrderParcelMeasurements.parcelId
input field type changed fromString!
toString
- Input field
parcelKey
was added toSetOrderParcelMeasurements
type
- [GraphQL API] Changed the
SetStagedOrderParcelCustomType
type:SetStagedOrderParcelCustomType.parcelId
input field type changed fromString!
toString
- Input field
parcelKey
was added toSetStagedOrderParcelCustomType
type
- [GraphQL API] Changed the
SetStagedOrderParcelTrackingData
type:SetStagedOrderParcelTrackingData.parcelId
input field type changed fromString!
toString
- Input field
parcelKey
was added toSetStagedOrderParcelTrackingData
type
- [GraphQL API] Changed the
SetStagedOrderParcelCustomField
type:SetStagedOrderParcelCustomField.parcelId
input field type changed fromString!
toString
- Input field
parcelKey
was added toSetStagedOrderParcelCustomField
type
- [GraphQL API] Changed the
SetStagedOrderParcelMeasurements
type:- Input field
parcelKey
was added toSetStagedOrderParcelMeasurements
type SetStagedOrderParcelMeasurements.parcelId
input field type changed fromString!
toString
- Input field
- [GraphQL API] Changed the
AddOrderParcelToDelivery
type:- Input field
parcelKey
was added toAddOrderParcelToDelivery
type
- Input field
- [GraphQL API] Changed the
SetStagedOrderParcelTrackingDataOutput
type:SetStagedOrderParcelTrackingDataOutput.parcelId
field type changed fromString!
toString
- Added the
parcelKey
field to theSetStagedOrderParcelTrackingDataOutput
type.
- [GraphQL API] Changed the
SetStagedOrderParcelMeasurementsOutput
type:SetStagedOrderParcelMeasurementsOutput.parcelId
field type changed fromString!
toString
- Added the
parcelKey
field to theSetStagedOrderParcelMeasurementsOutput
type.
- [GraphQL API] Changed the
SetOrderParcelTrackingData
type:SetOrderParcelTrackingData.parcelId
input field type changed fromString!
toString
- Input field
parcelKey
was added toSetOrderParcelTrackingData
type
- [GraphQL API] Changed the
RemoveOrderParcelFromDelivery
type:RemoveOrderParcelFromDelivery.parcelId
input field type changed fromString!
toString
- Input field
parcelKey
was added toRemoveOrderParcelFromDelivery
type
- [GraphQL API] Changed the
ParcelData
type:- Added the
key
field to theParcelData
type.
- Added the
- [GraphQL API] Changed the
AddStagedOrderParcelToDelivery
type:- Input field
parcelKey
was added toAddStagedOrderParcelToDelivery
type
- Input field
- [GraphQL API] Changed the
SetStagedOrderParcelItems
type:SetStagedOrderParcelItems.parcelId
input field type changed fromString!
toString
- Input field
parcelKey
was added toSetStagedOrderParcelItems
type
- [GraphQL API] Changed the
SetOrderParcelCustomType
type:SetOrderParcelCustomType.parcelId
input field type changed fromString!
toString
- Input field
parcelKey
was added toSetOrderParcelCustomType
type
- [GraphQL API] Changed the
ParcelDataDraftType
type:- Input field
key
was added toParcelDataDraftType
type
- Input field
- [GraphQL API] Changed the
SetStagedOrderParcelItemsOutput
type:SetStagedOrderParcelItemsOutput.parcelId
field type changed fromString!
toString
- Added the
parcelKey
field to theSetStagedOrderParcelItemsOutput
type.
- [GraphQL API] Changed the
RemoveStagedOrderParcelFromDeliveryOutput
type:- Added the
parcelKey
field to theRemoveStagedOrderParcelFromDeliveryOutput
type. RemoveStagedOrderParcelFromDeliveryOutput.parcelId
field type changed fromString!
toString
- Added the
- [GraphQL API] Changed the
SetOrderParcelItems
type:- Input field
parcelKey
was added toSetOrderParcelItems
type SetOrderParcelItems.parcelId
input field type changed fromString!
toString
- Input field
- [GraphQL API] Changed the
SetOrderParcelCustomField
type:- Input field
parcelKey
was added toSetOrderParcelCustomField
type SetOrderParcelCustomField.parcelId
input field type changed fromString!
toString
- Input field
- [GraphQL API] Changed the
RemoveStagedOrderParcelFromDelivery
type:RemoveStagedOrderParcelFromDelivery.parcelId
input field type changed fromString!
toString
- Input field
parcelKey
was added toRemoveStagedOrderParcelFromDelivery
type
- [GraphQL API] Changed the
SetStagedOrderParcelCustomFieldOutput
type:SetStagedOrderParcelCustomFieldOutput.parcelId
field type changed fromString!
toString
- Added the
parcelKey
field to theSetStagedOrderParcelCustomFieldOutput
type.
- [GraphQL API] Changed the
AddStagedOrderParcelToDeliveryOutput
type:- Added the
parcelKey
field to theAddStagedOrderParcelToDeliveryOutput
type.
- Added the
Added update action for setting the InventoryMode of Line Items
You can now change the InventoryMode of an existing LineItem by using the Set LineItem InventoryMode update action on the general endpoint. The InventoryMode could previously only be set when creating new Line Items.
Changes:
- [API] Added Set LineItem InventoryMode update action to the Carts API.
- [GraphQL API] Added the following types to the GraphQL schema:
SetCartLineItemInventoryMode
. - [GraphQL API] Changed the
CartUpdateAction
type:- Input field
setLineItemInventoryMode
was added toCartUpdateAction
type
- Input field
Added RenegotiationAddressed state to QuoteState
A new state RenegotiationAddressed
has been added to QuoteState. With this new state, Sellers can see Quotes where renegotiations requested by the respective buyer have been addressed.
Changes:
- [API] Added
RenegotiationAddressed
field to QuoteState. - [GraphQL API] Changed the
QuoteState
type:- Enum value
RenegotiationAddressed
was added to enumQuoteState
- Enum value
Countries on Stores achieved general availability status
After collecting feedback during the beta phase, we have moved countries on Stores out of beta. The status of the following features has been changed to general availability:
- Adding a country to a Store.
- Removing a country from a Store.
- Setting the countries on a Store.
- The StoreCountriesChanged Message.
Visit the API reference to learn more about how countries on Stores can enable filtering prices in Product Projections and Cart, Order, and Shopping List Line Items.
Added the MoneyOverflow error code
We've added the MoneyOverflow error code to help identify instances when a Money operation has failed due to an integer overflow.
Both centAmount
(applicable to all money types), as well as preciseAmount
(for high precision money types) are represented as 64-bit integers. If a Money operation results in either object exceeding the 64-bit limit, the API returns a 400 Bad Request with the MoneyOverflow error code.
Changes:
- [API] Added the MoneyOverflow error code.
Attribute Groups achieved general availability status
After collecting feedback during the beta phase, we have moved Attribute Groups out of beta. The status of the following features has been changed to general availability:
- Querying and managing Attribute Groups.
Attribute Groups let you organize Attribute Definitions by providing a list of references to Product Attributes. Learn more by visiting our documentation page.
Direct Discounts achieved general availability status
After collecting feedback during the beta phase, we have moved Direct Discounts out of beta. With Direct Discounts you can add a fixed or percentage discount to a single Cart.
The status of the following features has been changed to general availability:
Added support for updating a Customer on Quotes and Quote Requests
We introduced functionality to enable the reassignment of B2B Quotes and Quote Requests. This enhancement ensures that the Customer on a Quote or Quote Request can be updated in the event that they leave their Business Unit. The new Change Customer update action is available on Quote and Quote Request.
The new ReassignMyQuotes
and ReassignOthersQuotes
Permissions determine the ability to reassign a Quote within the context of a Business Unit. To enhance visibility and tracking, we have introduced two new Messages: QuoteRequestCustomerChanged and QuoteCustomerChanged. These Messages are triggered whenever a Quote or Quote Request's Customer is modified.
These enhancements improve the management of B2B Quotes within Composable Commerce, ensuring that Quotes and Quote Requests remain connected to the appropriate Associates even during organizational changes.
Changes:
- [API] Added the Change Customer update action to Quote.
- [API] Added the Change Customer update action to Quote Requests.
- [API] Added
ReassignMyQuotes
andReassignOthersQuotes
Permissions. - [API] Added QuoteRequestCustomerChanged and QuoteCustomerChanged Messages.
- [GraphQL API] Added the following types to the GraphQL schema:
ChangeQuoteCustomer
,ChangeQuoteRequestCustomer
. - [GraphQL API] Changed the
Permission
type:- Enum value
ReassignOthersQuotes
was added to enumPermission
- Enum value
ReassignMyQuotes
was added to enumPermission
- Enum value
- [GraphQL API] Changed the
QuoteRequestUpdateAction
type:- Input field
changeCustomer
was added toQuoteRequestUpdateAction
type
- Input field
- [GraphQL API] Changed the
QuoteUpdateAction
type:- Input field
changeCustomer
was added toQuoteUpdateAction
type
- Input field
Added Replicate Cart in Business Unit endpoint
You can now replicate Carts in a given Business Unit using the Associate Carts endpoint.
- [API] Added Replicate Cart in Business Unit endpoint.
- [GraphQL API] Changed the
Mutation
type:- Argument
asAssociate
was added toMutation.replicateCart
field
- Argument
Added support for external tax on multiple Shipping Methods
We have added support for external tax rates and tax amounts on multiple Shipping Methods. You can now target individual Shipping Methods by including a shippingKey
when using the Set ShippingMethod TaxAmount and Set ShippingMethod TaxRate update actions for Carts and Order Edits.
Changes:
-
[API] Added the
shippingKey
field to the following update actions on Carts: -
[API] Added the
shippingKey
field to the following update actions on Order Edits: -
[GraphQL API] Changed the
SetStagedOrderShippingMethodTaxRateOutput
type:- Added the
shippingKey
field to theSetStagedOrderShippingMethodTaxRateOutput
type.
- Added the
-
[GraphQL API] Changed the
SetStagedOrderShippingMethodTaxAmount
type:- Input field
shippingKey
was added toSetStagedOrderShippingMethodTaxAmount
type
- Input field
-
[GraphQL API] Changed the
SetCartShippingMethodTaxRate
type:- Input field
shippingKey
was added toSetCartShippingMethodTaxRate
type
- Input field
-
[GraphQL API] Changed the
SetStagedOrderShippingMethodTaxRate
type:- Input field
shippingKey
was added toSetStagedOrderShippingMethodTaxRate
type
- Input field
-
[GraphQL API] Changed the
SetCartShippingMethodTaxAmount
type:- Input field
shippingKey
was added toSetCartShippingMethodTaxAmount
type
- Input field
-
[GraphQL API] Changed the
SetStagedOrderShippingMethodTaxAmountOutput
type:- Added the
shippingKey
field to theSetStagedOrderShippingMethodTaxAmountOutput
type.
- Added the
Added observability to Composable Commerce SDKs
We have added support for New Relic to Composable Commerce SDKs.
New Relic is an observability platform which monitors your application's performance. This integration helps you analyze your application to identify potential improvements for performance and user experience.
With this update, you can:
- Trace and profile application performance directly from the SDK.
- View and analyze your application's performance.
- Get real-time insights and alerts about your application's performance and issues.
New Relic is currently supported by the latest versions of the Java SDK, TypeScript SDK and PHP SDK. To learn more, visit the SDK Observability page.
commercetools Composable Commerce for China is now available on AWS Ningxia
commercetools Composable Commerce is now available in China on AWS Ningxia in addition to our existing Regions in North America, Europe, and Australia. The China Region is available as part of Composable Commerce for China. Please reach out to your commercetools contact person to learn more.
Find the URLs to the commercetools Composable Commerce API here. Log in here.
When configuring a Project in the China Region, note that external links (for example, URLs used for images, external OAuth, and API Extensions) may be blocked due to firewall restrictions.
Announced deprecation of 'sku', 'variantId' and 'price' fields in Remove Price update action
The variantId
, sku
and price
fields are now deprecated in the Remove Price update action on Products. Please use priceId
instead.
For the GraphQL API, please use RemoveProductPrice.priceId
instead.
Changes:
- [GraphQL API] Changed the
RemoveProductPrice
type:RemoveProductPrice.variantId
is deprecatedRemoveProductPrice.sku
is deprecatedRemoveProductPrice.price
is deprecated
Introduced 'key' field on Delivery
We introduced the key
field on Delivery and DeliveryDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.
Changes:
-
[API] Added the
key
field to Delivery and DeliveryDraft. -
[API] Added the
deliveryKey
field to the following update actions on Orders: -
[API] Added the
deliveryKey
field to the following update actions on Order Edits: -
[API] Changed the
deliveryId
field to be optional on the following update actions on Orders: -
[API] Changed the
deliveryId
field to be optional on the following update actions on Order Edits: -
[GraphQL API] Changed the
SetStagedOrderDeliveryCustomField
type:- Input field
deliveryKey
was added toSetStagedOrderDeliveryCustomField
type SetStagedOrderDeliveryCustomField.deliveryId
input field type changed fromString!
toString
- Input field
-
[GraphQL API] Changed the
AddStagedOrderDeliveryOutput
type:- Added the
deliveryKey
field to theAddStagedOrderDeliveryOutput
type.
- Added the
-
[GraphQL API] Changed the
SetStagedOrderDeliveryAddressOutput
type:SetStagedOrderDeliveryAddressOutput.deliveryId
field type changed fromString!
toString
- Added the
deliveryKey
field to theSetStagedOrderDeliveryAddressOutput
type.
-
[GraphQL API] Changed the
Delivery
type:- Added the
key
field to theDelivery
type.
- Added the
-
[GraphQL API] Changed the
SetStagedOrderDeliveryAddressCustomType
type:- Input field
deliveryKey
was added toSetStagedOrderDeliveryAddressCustomType
type SetStagedOrderDeliveryAddressCustomType.deliveryId
input field type changed fromString!
toString
- Input field
-
[GraphQL API] Changed the
AddStagedOrderDelivery
type:- Input field
deliveryKey
was added toAddStagedOrderDelivery
type
- Input field
-
[GraphQL API] Changed the
SetStagedOrderDeliveryItemsOutput
type:- Added the
deliveryKey
field to theSetStagedOrderDeliveryItemsOutput
type. SetStagedOrderDeliveryItemsOutput.deliveryId
field type changed fromString!
toString
- Added the
-
[GraphQL API] Changed the
SetStagedOrderDeliveryAddress
type:- Input field
deliveryKey
was added toSetStagedOrderDeliveryAddress
type SetStagedOrderDeliveryAddress.deliveryId
input field type changed fromString!
toString
- Input field
-
[GraphQL API] Changed the
SetStagedOrderDeliveryAddressCustomTypeOutput
type:- Added the
deliveryKey
field to theSetStagedOrderDeliveryAddressCustomTypeOutput
type. SetStagedOrderDeliveryAddressCustomTypeOutput.deliveryId
field type changed fromString!
toString
- Added the
-
[GraphQL API] Changed the
SetOrderDeliveryAddressCustomField
type:SetOrderDeliveryAddressCustomField.deliveryId
input field type changed fromString!
toString
- Input field
deliveryKey
was added toSetOrderDeliveryAddressCustomField
type
-
[GraphQL API] Changed the
SetStagedOrderDeliveryCustomType
type:SetStagedOrderDeliveryCustomType.deliveryId
input field type changed fromString!
toString
- Input field
deliveryKey
was added toSetStagedOrderDeliveryCustomType
type
-
[GraphQL API] Changed the
DeliveryDraft
type:- Input field
key
was added toDeliveryDraft
type
- Input field
-
[GraphQL API] Changed the
RemoveStagedOrderDeliveryOutput
type:- Added the
deliveryKey
field to theRemoveStagedOrderDeliveryOutput
type. RemoveStagedOrderDeliveryOutput.deliveryId
field type changed fromString!
toString
- Added the
-
[GraphQL API] Changed the
RemoveStagedOrderDelivery
type:RemoveStagedOrderDelivery.deliveryId
input field type changed fromString!
toString
- Input field
deliveryKey
was added toRemoveStagedOrderDelivery
type
-
[GraphQL API] Changed the
AddOrderDelivery
type:- Input field
deliveryKey
was added toAddOrderDelivery
type
- Input field
-
[GraphQL API] Changed the
SetStagedOrderDeliveryCustomFieldOutput
type:- Added the
deliveryKey
field to theSetStagedOrderDeliveryCustomFieldOutput
type. SetStagedOrderDeliveryCustomFieldOutput.deliveryId
field type changed fromString!
toString
- Added the
-
[GraphQL API] Changed the
SetStagedOrderDeliveryAddressCustomFieldOutput
type:SetStagedOrderDeliveryAddressCustomFieldOutput.deliveryId
field type changed fromString!
toString
- Added the
deliveryKey
field to theSetStagedOrderDeliveryAddressCustomFieldOutput
type.
-
[GraphQL API] Changed the
AddStagedOrderParcelToDelivery
type:- Input field
deliveryKey
was added toAddStagedOrderParcelToDelivery
type AddStagedOrderParcelToDelivery.deliveryId
input field type changed fromString!
toString
- Input field
-
[GraphQL API] Changed the
SetOrderDeliveryAddress
type:SetOrderDeliveryAddress.deliveryId
input field type changed fromString!
toString
- Input field
deliveryKey
was added toSetOrderDeliveryAddress
type
-
[GraphQL API] Changed the
AddOrderParcelToDelivery
type:AddOrderParcelToDelivery.deliveryId
input field type changed fromString!
toString
- Input field
deliveryKey
was added toAddOrderParcelToDelivery
type
-
[GraphQL API] Changed the
RemoveOrderDelivery
type:RemoveOrderDelivery.deliveryId
input field type changed fromString!
toString
- Input field
deliveryKey
was added toRemoveOrderDelivery
type
-
[GraphQL API] Changed the
SetOrderDeliveryCustomType
type:- Input field
deliveryKey
was added toSetOrderDeliveryCustomType
type SetOrderDeliveryCustomType.deliveryId
input field type changed fromString!
toString
- Input field
-
[GraphQL API] Changed the
SetOrderDeliveryCustomField
type:SetOrderDeliveryCustomField.deliveryId
input field type changed fromString!
toString
- Input field
deliveryKey
was added toSetOrderDeliveryCustomField
type
-
[GraphQL API] Changed the
SetStagedOrderDeliveryItems
type:SetStagedOrderDeliveryItems.deliveryId
input field type changed fromString!
toString
- Input field
deliveryKey
was added toSetStagedOrderDeliveryItems
type
-
[GraphQL API] Changed the
SetStagedOrderDeliveryCustomTypeOutput
type:- Added the
deliveryKey
field to theSetStagedOrderDeliveryCustomTypeOutput
type. SetStagedOrderDeliveryCustomTypeOutput.deliveryId
field type changed fromString!
toString
- Added the
-
[GraphQL API] Changed the
SetOrderDeliveryAddressCustomType
type:- Input field
deliveryKey
was added toSetOrderDeliveryAddressCustomType
type SetOrderDeliveryAddressCustomType.deliveryId
input field type changed fromString!
toString
- Input field
-
[GraphQL API] Changed the
SetStagedOrderDeliveryAddressCustomField
type:SetStagedOrderDeliveryAddressCustomField.deliveryId
input field type changed fromString!
toString
- Input field
deliveryKey
was added toSetStagedOrderDeliveryAddressCustomField
type
-
[GraphQL API] Changed the
AddStagedOrderParcelToDeliveryOutput
type:- Added the
deliveryKey
field to theAddStagedOrderParcelToDeliveryOutput
type. AddStagedOrderParcelToDeliveryOutput.deliveryId
field type changed fromString!
toString
- Added the
-
[GraphQL API] Changed the
SetOrderDeliveryItems
type:SetOrderDeliveryItems.deliveryId
input field type changed fromString!
toString
- Input field
deliveryKey
was added toSetOrderDeliveryItems
type
Added Product Projections on locales to the GraphQL API
We added support for locale-based Product Projection to the product
and products
queries on the GraphQL API. With this projection, your response contains the translation on Products (also in a Store) you have specified in your query only. All other locales are filtered out from the product information.
Furthermore, the projection can also be applied to Products expanded on Reference Type Attributes.
Changes:
- [GraphQL API] Changed the
Query
type:- Argument
localeProjection
was added toQuery.products
field - Argument
localeProjection
was added toQuery.product
field - Argument
projectExpandedProducts
was added toQuery.productProjectionSearch
field - Argument
projectExpandedProducts
was added toQuery.product
field - Argument
projectExpandedProducts
was added toQuery.products
field
- Argument
- [GraphQL API] Changed the
InStore
type:- Arguments
localeProjection
was added toInStore.product
field - Argument
projectExpandedProducts
was added toInStore.product
field
- Arguments
Changed the fields ‘BusinessUnit.associateMode’, ‘Associate.associateRoleAssignments’, and ‘AssociateRoleAssignment.inheritance’ to be mandatory in responses
We have made the fields BusinessUnit.associateMode
, Associate.associateRoleAssignments
, and AssociateRoleAssignment.inheritance
mandatory in responses. They were previously optional during the closed beta period.
Changes:
- [GraphQL API] Changed the
BusinessUnit
type:BusinessUnit.associateMode
field type changed fromBusinessUnitAssociateMode
toBusinessUnitAssociateMode!
- [GraphQL API] Changed the
Associate
type:Associate.associateRoleAssignments
field type changed from[AssociateRoleAssignment!]
to[AssociateRoleAssignment!]!
- [GraphQL API] Changed the
AssociateRoleAssignment
type:AssociateRoleAssignment.inheritance
field type changed fromAssociateInheritanceMode
toAssociateInheritanceMode!
Added AssociateMissingPermissionError for Associate Roles
We introduced the error code AssociateMissingPermissionError for Associate Roles. This error code helps to identify when an Associate is missing a specific Permission on a B2B resource.
Changes:
- [API] Added AssociateMissingPermissionError.
Added 'inheritedStores' field to Business Units in GraphQL
The GraphQL API now supports querying inherited Stores of a Business Unit. Visit the API reference for more information on additional GraphQL fields available on Business Units.
Changes:
- [GraphQL API] Changed the
BusinessUnit
type:- Added the
inheritedStores
field to theBusinessUnit
type.
- Added the
Enhanced permissions management for companies
The new Associate Roles API provides B2B customers with the flexibility to define and manage the permissions of their Associates. The feature allows the configuration of granular permissions that provide controlled access to Business Units, Carts, Orders, Quotes, and Quote Requests. Additionally, roles can be inherited from a parent Business Unit by its children.
This feature replaces the less flexible AssociateRole enum with Buyer
and Admin
values. This type alongside the roles
field on Associate and AssociateDraft is now deprecated and will be completely removed on 02 August 2023.
In addition to the Associate Roles API, a new set of associate
endpoints can be used to validate that an Associate has sufficient permissions on a given resource. These endpoints are available for Business Units, Carts, Orders, Quotes, and Quote Requests and perform permission evaluation checks based on an associateId
.
These features are part of Composable Commerce for B2B and will be subject to additional terms and pricing.
Changes:
- [API] Added Associate Roles API.
- [API] Added Associate Carts, Associate Orders, Associate Quote Requests, Associate Quotes, and Associate BusinessUnit endpoints.
- [API] Added BusinessUnitAssociateMode, AssociateRoleInheritanceMode, AssociateRoleAssignment, and AssociateRoleAssignmentDraft, InheritedAssociate, and InheritedAssociateRoleAssignment types to BusinessUnit.
- [API] Added
inheritedAssociates
andassociateMode
fields to BusinessUnit. - [API] Added
associateMode
fields to BusinessUnitDraft. - [API] Added
associateRoleAssignments
field to Associate and AssociateDraft. - [API] Added
associateRoleAssignments
to MyBusinessUnitAssociateDraft. - [API] Deprecated AssociateRole enum with
Admin
andBuyer
values. - [API] Deprecated
roles
andinheritedAssociates
field on Associate and AssociateDraft. - [API] Added Associate Role Messages.
- [API] Added BusinessUnitAssociateModeChanged Message.
- [API] Added
myBusinessUnitAssociateRoleOnCreation
to BusinessUnitConfiguration in Project settings. - [GraphQL API] Added the following types to the GraphQL schema:
AddAssociateRolePermission
,AsAssociate
,AsAssociateArgument
,AssociateInheritanceMode
,AssociateRole
,AssociateRoleAssignment
,AssociateRoleAssignmentDraft
,AssociateRoleBuyerAssignableChanged
,AssociateRoleCreated
,AssociateRoleDeleted
,AssociateRoleDraft
,AssociateRoleNameSet
,AssociateRolePermissionAdded
,AssociateRolePermissionRemoved
,AssociateRolePermissionsSet
,AssociateRoleQueryResult
,AssociateRoleUpdateAction
,BusinessUnitAssociateMode
,BusinessUnitAssociateModeChanged
,ChangeAssociateRoleBuyerAssignable
,ChangeBusinessUnitAssociateMode
,InheritedAssociate
,InheritedAssociateRoleAssignment
,Permission
,RemoveAssociateRolePermission
,SetAssociateRoleCustomField
,SetAssociateRoleCustomType
,SetAssociateRoleName
,SetAssociateRolePermissions
,SetProjectSettingsMyBusinessUnitAssociateRoleOnCreation
. - [GraphQL API] Changed the
BusinessUnitDraft
type:- Input field
associateMode
was added toBusinessUnitDraft
type
- Input field
- [GraphQL API] Changed the
BusinessUnit
type:- Added the
inheritedAssociates
field to theBusinessUnit
type. - Added the
associateMode
field to theBusinessUnit
type.
- Added the
- [GraphQL API] Changed the
Associate
type:- Added the
associateRoleAssignments
field to theAssociate
type. - Field
roles
was deprecated inAssociate
type
- Added the
- [GraphQL API] Changed the
AssociateDraft
type:- Input field
associateRoleAssignments
was added toAssociateDraft
type - Input field
roles
was deprecated inAssociateDraft
type
- Input field
- [GraphQL API] Changed the
BusinessUnitConfiguration
type:- Added the
myBusinessUnitAssociateRoleOnCreation
field to theBusinessUnitConfiguration
type. - Added the
myBusinessUnitAssociateRoleOnCreationRef
field to theBusinessUnitConfiguration
type.
- Added the
- [GraphQL API]
SimpleAssociateRole
type was deprecated - [GraphQL API] Changed the
Query
type:- Added the
asAssociate
field to theQuery
type. - Added the
associateRole
field to theQuery
type. - Added the
associateRoles
field to theQuery
type.
- Added the
- [GraphQL API] Changed the
Mutation
type:- Argument
asAssociate
was added toMutation.updateBusinessUnit
field - Added the
updateAssociateRole
field to theMutation
type. - Argument
asAssociate
was added toMutation.createOrderFromCart
field - Argument
asAssociate
was added toMutation.deleteCart
field - Argument
asAssociate
was added toMutation.createBusinessUnit
field - Argument
asAssociate
was added toMutation.updateQuoteRequest
field - Argument
asAssociate
was added toMutation.createOrderFromQuote
field - Argument
asAssociate
was added toMutation.createCart
field - Argument
asAssociate
was added toMutation.updateOrder
field - Added the
deleteAssociateRole
field to theMutation
type. - Argument
asAssociate
was added toMutation.updateQuote
field - Argument
asAssociate
was added toMutation.createQuoteRequest
field - Added the
createAssociateRole
field to theMutation
type. - Argument
asAssociate
was added toMutation.updateCart
field
- Argument
- [GraphQL API] Changed the
ProjectSettingsUpdateAction
type:- Input field
setMyBusinessUnitAssociateRoleOnCreation
was added toProjectSettingsUpdateAction
type
- Input field
- [GraphQL API] Changed the
BusinessUnitUpdateAction
type:- Input field
changeAssociateMode
was added toBusinessUnitUpdateAction
type
- Input field
Product Selections achieved general availability status
After collecting feedback during the beta phase, we have moved Product Selections out of beta. The status of the following features has been changed to general availability:
- Querying and managing Product Selections.
- Adding and removing Products from Product Selections.
Product Selections can be used to manage individual assortments for different sales channels and Stores. Learn more by visiting our documentation page.
Replaced ProductSelectionType with ProductSelectionMode
We introduced a new type ProductSelectionMode to replace ProductSelectionType. The functionality of Individual
and IndividualExclusion
Product Selections remains the same. We adjusted the naming of the type and the enums to ensure a consistent experience when working with the Composable Commerce APIs.
Instead of the previous individual
and individualExclusion
enums defined by the type
field on ProductSelection, you can now use the mode
field with the values Individual
and IndividualExclusion
. The type
field, alongside ProductSelectionType is now deprecated and will be completely removed on 18 July 2023.
We also aligned the behavior of ProductSelectionCreated Message with other similar Messages generated by resource creation. The Message now includes the entire ProductSelection object in the payload, instead of a subset of the fields.
Changes:
- [API] Added the
mode
field to ProductSelection and ProductSelectionDraft. - [API] Deprecated
ProductSelectionTypeEnum
,IndividualProductSelectionType
,IndividualExclusionProductSelectionType
from ProductSelection. - [API] Deprecated the
type
field from ProductSelection and ProductSelectionDraft. - [API] Changed the type of
productSelection
field on ProductSelectionCreated Message from ProductSelectionType to ProductSelection. - [GraphQL API] Removed the following types from the GraphQL schema:
ProductSelectionType
,IndividualExclusionProductSelectionCreatedPayload
,IndividualProductSelectionCreatedPayload
,ProductSelectionCreatedPayload
. - [GraphQL API] Changed the
ProductSelection
type:- Removed the
type
field from theProductSelection
type. - Added the
mode
field to theProductSelection
type.
- Removed the
- [GraphQL API] Changed the
CreateProductSelectionDraft
type:- Input field
type
was removed fromCreateProductSelectionDraft
type - Input field
mode
was added toCreateProductSelectionDraft
type
- Input field
- [GraphQL API] Changed the
ProductSelectionCreated
type:ProductSelectionCreated.productSelection
field type changed fromProductSelectionCreatedPayload!
toProductSelection!
Audit Log available for AWS Regions in beta
Audit Log is now available in AWS Regions in beta.
Added 'shippingCustomFields' and 'shippingKey' fields on Cart and Order
You can now retrieve the shippingCustomFields
and shippingKey
fields on Carts and Orders with Single
ShippingMode.
Changes:
- [API] Added the
shippingCustomFields
field to Cart and Order. - [API] Added the
shippingKey
field to Cart and Order. - [GraphQL API] Changed the
Cart
type:- Added the
shippingKey
field to theCart
type. - Added the
shippingCustomFields
field to theCart
type.
- Added the
- [GraphQL API] Changed the
Order
type:- Added the
shippingKey
field to theOrder
type. - Added the
shippingCustomFields
field to theOrder
type.
- Added the
Introduced 'key' field on TaxRate
We introduced the key
field on TaxRate and TaxRateDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.
Changes:
- [API] Added the
key
field to TaxRate and TaxRateDraft. - [API] Added the
taxRateKey
field to Remove TaxRate and Replace TaxRate update actions. - [API] Changed the
taxRateId
field to be optional on Remove TaxRate and Replace TaxRate update actions. - [GraphQL API] Changed the
TaxRate
type:- Added the
key
field to theTaxRate
type.
- Added the
- [GraphQL API] Changed the
TaxRateInput
type:- Input field
key
was added toTaxRateInput
type
- Input field
- [GraphQL API] Changed the
TaxRateDraft
type:- Input field
key
was added toTaxRateDraft
type
- Input field
- [GraphQL API] Changed the
TaxCategoryRemoveTaxRate
type:- Input field
taxRateKey
was added toTaxCategoryRemoveTaxRate
type TaxCategoryRemoveTaxRate.taxRateId
input field type changed fromString!
toString
- Input field
- [GraphQL API] Changed the
TaxCategoryReplaceTaxRate
type:TaxCategoryReplaceTaxRate.taxRateId
input field type changed fromString!
toString
- Input field
taxRateKey
was added toTaxCategoryReplaceTaxRate
type
Fixed Reference Expansion input types for Business Unit Messages in the GraphQL API
We fixed the Reference Expansion input types on Business Unit Messages to provide a consistent experience when working with the GraphQL API. Additionally, we updated the type BusinessUnitConfiguration
to align it with the HTTP API. We have also made the roles
field optional on AssociateDraft in the HTTP and GraphQL API to allow creating Associates without having to assign roles.
Changes:
- [API] Changed
roles
field to be optional on AssociateDraft. - [GraphQL API] Changed the
AssociateDraft
type:AssociateDraft.roles
input field type changed from[SimpleAssociateRole!]!
to[SimpleAssociateRole!]
- [GraphQL API] Added the following types to the GraphQL schema:
BusinessUnitConfigurationStatus
. - [GraphQL API] Changed the
BusinessUnitConfiguration
type:BusinessUnitConfiguration.myBusinessUnitStatusOnCreation
field type changed fromBusinessUnitStatus!
toBusinessUnitConfigurationStatus!
- [GraphQL API] Changed the
BusinessUnitStoreAdded
type:BusinessUnitStoreAdded.store
field type changed fromKeyReference!
toStore!
- Added the
storeRef
field to theBusinessUnitStoreAdded
type.
- [GraphQL API] Changed the
BusinessUnitStoresSet
type:BusinessUnitStoresSet.stores
field type changed from[KeyReference!]!
to[Store!]!
- Added the
storesRef
field to theBusinessUnitStoresSet
type.
- [GraphQL API] Changed the
BusinessUnitStoreModeChanged
type:- Added the
oldStoresRef
field to theBusinessUnitStoreModeChanged
type. - Added the
storesRef
field to theBusinessUnitStoreModeChanged
type. BusinessUnitStoreModeChanged.stores
field type changed from[KeyReference!]
to[Store!]
BusinessUnitStoreModeChanged.oldStores
field type changed from[KeyReference!]
to[Store!]
- Added the
- [GraphQL API] Changed the
BusinessUnitParentChanged
type:- Added the
oldParentUnitRef
field to theBusinessUnitParentChanged
type. - Added the
newParentUnitRef
field to theBusinessUnitParentChanged
type. BusinessUnitParentChanged.newParentUnit
field type changed fromKeyReference
toBusinessUnit
BusinessUnitParentChanged.oldParentUnit
field type changed fromKeyReference
toBusinessUnit
- Added the
- [GraphQL API] Changed the
ChangeProjectSettingsMyBusinessUnitStatusOnCreation
type:ChangeProjectSettingsMyBusinessUnitStatusOnCreation.status
input field type changed fromBusinessUnitStatus!
toBusinessUnitConfigurationStatus!
- [GraphQL API] Changed the
BusinessUnitStoreRemoved
type:BusinessUnitStoreRemoved.store
field type changed fromKeyReference!
toStore!
- Added the
storeRef
field to theBusinessUnitStoreRemoved
type.
Introduced Product Selection of type Individual Exclusion in Beta
We introduced the Individual Exclusion Product Selection type that lets you model the availability of your Products in different Stores by excluding individual Products explicitly. Before, we supported the Individual type only in which you include individual Products explicitly. We also added Messages triggered when Product Selections of that new type are created, deleted, or updated.
Changes:
-
[API] Added
individualExclusion
value to ProductSelectionTypeEnum. -
[API] Added IndividualExclusionProductSelectionType.
-
[API] Added Exclude Product update action for Product Selections.
-
[API] Added Set Variant Exclusion update action for Product Selections.
-
[API] Added ProductSelectionProductExcluded and ProductSelectionVariantExclusionChanged Message.
-
[GraphQL API] Added the following types to the GraphQL schema:
ExcludeProductSelectionProduct
,IndividualExclusionProductSelectionCreatedPayload
,ProductSelectionProductExcluded
,ProductSelectionType
,ProductSelectionVariantExclusionChanged
,ProductVariantExclusion
,ProductVariantExclusionDraft
,SetProductSelectionVariantExclusion
. -
[GraphQL API] Added the
type
field to theProductSelection
type. -
[GraphQL API] Added the
type
input field to theCreateProductSelectionDraft
type. -
[GraphQL API] Added the
excludeProduct
input field toProductSelectionUpdateAction
type. -
[GraphQL API] Added the
setVariantExclusion
input field toProductSelectionUpdateAction
type. -
[GraphQL API] Added the
staged
field to theProductVariantDeleted
type.
Fixed type for 'state' field in PaymentStatusDraft
We changed the type for the state
field in PaymentStatusDraft from Reference to ResourceIdentifier allowing you to reference a State by key
when creating a new Payment. The HTTP API now behaves as documented, and we aligned the GraphQL API with this behavior also.
Changes:
- [GraphQL API] Changed the
PaymentStatusInput.state
input field type fromReferenceInput
toResourceIdentifierInput
.
Changed names of Product Variant Selection types
We renamed the types of Product Variant Selection from Inclusion to IncludeOnly and from Exclusion to IncludeAllExcept. Based on our feedback, the new names describe the semantics of these types better and make their purpose clearer.
The previous types have now been deprecated and will be migrated to the new types automatically on 30 June 2023 without any disruption of services.
Changes:
- [API] Added
includeOnly
andincludeAllExcept
values to thetype
field of Product Variant Selection. - [API] Deprecated
inclusion
andexclusion
values on thetype
field of Product Variant Selection. - [GraphQL API] Changed the
ProductVariantSelectionDraft
type:- Added input field
includeOnly
andincludeAllExcept
toProductVariantSelectionDraft
type. - Deprecated input field
inclusion
andexclusion
onProductVariantSelectionDraft
type.
- Added input field
- [GraphQL API] Added the following types to the GraphQL schema:
ProductVariantSelectionIncludeOnly
,ProductVariantSelectionIncludeAllExcept
. - [GraphQL API] Deprecated the following types on the GraphQL schema:
ProductVariantSelectionExclusion
,ProductVariantSelectionInclusion
.
External OAuth achieved general availability status
We are announcing that external OAuth is out of beta. During the beta phase, we collected feedback to ensure a reliable, stable, and performant feature.
The status of the following functionality has changed to general availability:
- Requesting an access token using an External OAuth server.
- Configuring external OAuth through Project settings using the Set ExternelOAuth update action.
Introducing Google Cloud Function destination for API Extensions
We have enhanced API Extensions to support Cloud Functions natively.
Using the GoogleCloudFunctionDestination you can directly invoke Cloud Functions without providing authorization headers or having to use intermediate gateways.
The new destination uses the permissions granted through Identity and Access Management (IAM) of Google Cloud Platform projects. Visit the API Extensions reference to learn more about using IAM-authorized Cloud Functions as destinations for your API Extensions.
Changes:
- [API] Added GoogleCloudFunctionDestination to API Extensions.
- [GraphQL API] Added the following types to the GraphQL schema:
GoogleCloudFunctionDestination
,GoogleCloudFunctionDestinationInput
. - [GraphQL API] Changed the
ExtensionDestinationInput
type:- Input field
GoogleCloudFunction
was added toExtensionDestinationInput
type.
- Input field
Improvements to working with Business Units in the GraphQL API
Quote Requests, Staged Quotes, and Quotes now support Reference Expansion on Business Unit in the GraphQL API.
Changes:
- [GraphQL API] Changed the
StagedQuote
type:- Added the
businessUnitRef
field to theStagedQuote
type. StagedQuote.businessUnit
field type changed fromKeyReference
toBusinessUnit
- Added the
- [GraphQL API] Changed the
Quote
type:- Added the
businessUnitRef
field to theQuote
type. Quote.businessUnit
field type changed fromKeyReference
toBusinessUnit
- Added the
- [GraphQL API] Changed the
QuoteRequest
type:- Added the
businessUnitRef
field to theQuoteRequest
type. QuoteRequest.businessUnit
field type changed fromKeyReference
toBusinessUnit
- Added the
Added 'discounted' field to 'ProductPriceDataInput' type in GraphQL
To align with the PriceDraft object in the HTTP API we added the discounted
field to the ProductPriceDataInput
type in the GraphQL schema.
Furthermore, we fixed the field type for the DiscountedProductPriceValueInput
type in the GraphQL API.
Changes:
- [GraphQL API] Added
discounted
field to theProductPriceDataInput
type. - [GraphQL API] Changed the
DiscountedProductPriceValueInput.discount
field type fromReferenceInput!
toResourceIdentifierInput!
.
Added 'oldValue' field to Standalone Price Value Changed Message
We added the oldValue
field to the Standalone Price Value Changed Message that contains the StandalonePrice value
as it was before the change.
You can now see how much the value of your updated Standalone Price has changed by comparing the Message fields value
and oldValue
.
Changes:
- [API] Added field
oldValue
to Standalone Price Value Changed Message. - [GraphQL API] Changed the
StandalonePriceValueChanged
type:- Added the
oldValue
field to theStandalonePriceValueChanged
type.
- Added the
CloudEventsFormat achieved general availability status
We are announcing that CloudEventsFormat for Subscription destinations is out of beta.
In the process of bringing the feature to general availability status, we ensured that the payload format is in accordance with the 1.0.2
specification. This will ensure consistency when using CloudEvents across different services.
Visit the API reference to learn more about enabling CloudEvents for your Subscription destinations.
Added GraphQL support for multiple shipping methods
To align with the HTTP API, multiple Shipping Methods are now supported on Carts and Orders in the GraphQL API.
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
AddCartCustomShippingMethod
,AddCartShippingMethod
,CustomShippingDraft
,MethodTaxRate
,RemoveCartShippingMethod
,Shipping
,ShippingDraft
,ShippingMode
. - [GraphQL API] Changed the
MyCartDraft
type:- Input field
shippingMode
was added toMyCartDraft
type - Input field
customShipping
was added toMyCartDraft
type - Input field
shipping
was added toMyCartDraft
type
- Input field
- [GraphQL API] Changed the
CartDraft
type:- Input field
customShipping
was added toCartDraft
type - Input field
shipping
was added toCartDraft
type - Input field
shippingMode
was added toCartDraft
type
- Input field
- [GraphQL API] Changed the
CartUpdateAction
type:- Input field
addCustomShippingMethod
was added toCartUpdateAction
type - Input field
removeShippingMethod
was added toCartUpdateAction
type - Input field
addShippingMethod
was added toCartUpdateAction
type
- Input field
- [GraphQL API] Changed the
Cart
type:- Added the
taxedShippingPrice
field to theCart
type. - Added the
shipping
field to theCart
type. - Added the
shippingMode
field to theCart
type.
- Added the
- [GraphQL API] Changed the
Order
type:- Added the
taxedShippingPrice
field to theOrder
type. - Added the
shipping
field to theOrder
type. - Added the
shippingMode
field to theOrder
type.
- Added the
- [GraphQL API] Changed the
LineItem
type:- Added the
perMethodTaxRate
field to theLineItem
type. - Added the
taxedPricePortions
field to theLineItem
type.
- Added the
- [GraphQL API] Changed the
ShippingTargetDraft
type:- Added the
shippingMethodKey
field to theShippingTargetDraft
type.
- Added the
Added 'purchaseOrderNumber' field to Quotes- and Order-related types
With the new purchaseOrderNumber
field, Buyers are now able to track their purchase throughout the order creation process with their Purchase Order Number. To support B2B scenarios, this new field is also supported on all types related to Quotes.
Changes:
- [API] Added optional field
purchaseOrderNumber
to OrderFromCartDraft, OrderImportDraft, QuoteRequestDraft, QuoteRequest, StagedQuote, Quote, Order. - [API] Added
setPurchaseOrderNumber
update action to Orders and Order Edits APIs. - [API] Added PurchaseOrderNumberSet message.
- [GraphQL API] Changed the
QuoteRequestDraft
type:- Input field
purchaseOrderNumber
was added toQuoteRequestDraft
type
- Input field
- [GraphQL API] Changed the
OrderCartCommand
type:- Input field
purchaseOrderNumber
was added toOrderCartCommand
type
- Input field
- [GraphQL API] Changed the
ImportOrderDraft
type:- Input field
purchaseOrderNumber
was added toImportOrderDraft
type
- Input field
- [GraphQL API] Changed the
StagedOrderUpdateAction
type:- Input field
setPurchaseOrderNumber
was added toStagedOrderUpdateAction
type
- Input field
- [GraphQL API] Changed the
StagedQuote
type:- Added the
purchaseOrderNumber
field to theStagedQuote
type.
- Added the
- [GraphQL API] Changed the
OrderUpdateAction
type:- Input field
setPurchaseOrderNumber
was added toOrderUpdateAction
type
- Input field
- [GraphQL API] Changed the
Quote
type:- Added the
purchaseOrderNumber
field to theQuote
type.
- Added the
- [GraphQL API] Changed the
Order
type:- Added the
purchaseOrderNumber
field to theOrder
type.
- Added the
- [GraphQL API] Changed the
QuoteRequest
type:- Added the
purchaseOrderNumber
field to theQuoteRequest
type.
- Added the
Automatic updates of SKU changes in Product Selection Assignments
We introduced a background service that reflects any change for SKUs performed on Products in all corresponding SKUs on ProductVariantSelections. This service keeps SKUs in ProductSelectionAssignments up to date with eventual consistency.
Discontinued support for IronMQ
We deprecated IronMQ as a Subscription destination in 2018 due to low adoption. The feature is now completely removed and newer versions of our SDKs no longer support it.
Retrieve applicable Shipping Methods for a Cart and Location
You can now retrieve Shipping Methods that match a given Cart and Location. The new endpoint is especially useful in cases where a Cart must match Shipping Method predicates, but does not have its shippingAddress
defined. For example, this allows you to retrieve applicable Shipping Methods for a Cart with multiple Shipping Methods.
Changes:
- [API] added Get ShippingMethods for a Cart and Location endpoint.
API Extensions for AWS Lambda destinations now support the use of function aliases
AWSLambdaDestination now accepts Lambda function aliases. This allows you to optimize your development and deployment workflows by pointing to a specific version of a Lambda in your API Extension.
Changes:
- [API] The
arn
field of AWSLambdaDestination now accepts AWS Lambda function aliases.
Added Cart freeze option
We have added the option to freeze Carts during the purchasing journey of your Customers. With this, usual price and discount updates are primarily not applied on frozen Carts. This new feature is useful if you want to prevent Carts from being modified by changes affecting prices until the order is placed. Inventory is not reserved by freezing a Cart.
Changes:
- [API] Added FreezeCart and UnfreezeCart update actions to Carts API.
- [API] Added
Frozen
field to CartState. - [GraphQL API] Added the following types to the GraphQL schema:
FreezeCart
,UnfreezeCart
. - [GraphQL API] Added input fields
freezeCart
andunfreezeCart
to theCartUpdateAction
type. - [GraphQL API] Added
Frozen
value to theCartState
enum type.
Announced removal of non-standard GraphQL error field
To fully comply with the GraphQL response format, we have moved the code
field under the extensions
map as shown in this example.
From 15 January 2023, code
will no longer be returned as a top-level field of the errors
array, but under the extensions
map.
As a part of the same initiative oriented towards complying with the GraphQL specification, we also removed support for non-standard variables. This change was announced on 4 October 2022 and took effect on 1 December 2022.
Added key to Embedded Prices and Embedded PriceDrafts, and an update action to set keys for both Standalone and Embedded Prices
In addition to identifying Embedded Prices by their id
, you can now use key
as a user-defined unique identifier. By assigning a human-readable key
to Embedded Prices, you have greater flexibility for referencing Embedded Prices.
The key
field was already available for StandalonePrices and this allowed us to assess and confirm its usefulness. Implementing the key
field in Embedded Prices ensures consistency in offerings for both Standalone Prices and Embedded Prices.
Update actions for setting the key
value has also been added for both Embedded Prices and Standalone Prices, allowing you to efficiently update Price keys without needing to bulk import Prices with the updated price keys.
Changes:
- [API] Added
key
field to Price and PriceDraft. - [API] Added Set Price Key update action.
- [API] Added Set Standalone Price Key update action.
- [API] Added the error code DuplicatePriceKey.
- [API] Added ProductPriceKeySet Message.
- [API] Added StandalonePriceKeySet Message.
- [GraphQL API] Changed the
ProductPrice
type:- Added the
key
field to theProductPrice
type.
- Added the
- [GraphQL API] Changed the
ProductPriceSearch
type:- Added the
key
field to theProductPriceSearch
type.
- Added the
- [GraphQL API] Changed the
ProductPriceDataInput
type:- Input field
key
was added toProductPriceDataInput
type
- Input field
- [GraphQL API] Added the following types to the GraphQL schema:
SetProductPriceKey
,SetStandalonePriceKey
,StandalonePriceKeySet
,ProductPriceKeySet
. - [GraphQL API] Changed the
ProductUpdateAction
type:- Input field
setPriceKey
was added toProductUpdateAction
type
- Input field
- [GraphQL API] Changed the
StandalonePriceUpdateAction
type:- Input field
setKey
was added toStandalonePriceUpdateAction
type
- Input field
Removed Missing Data API
Following the deprecation of the Missing Data API due to low adoption and usage, we have now removed all its endpoints and data types.
The API was an experimental project and removing it will help us focus our efforts toward developing more advanced machine learning features while prioritizing data quality.
Improvements to working with Business Units in the GraphQL API
We have made several improvements and changes to the Business Units functionality in GraphQL:
- Carts and Orders now support Reference Expansion on Business Unit.
- Added support for creating Carts that reference a Business Unit.
- Changed the naming of the type
AssociateRole
to free up the namespace for new functionality.
Changes:
- [GraphQL API] Changed the
Cart
type:- Added the
businessUnitRef
field to theCart
type. Cart.businessUnit
field type changed fromKeyReference
toBusinessUnit
- Added the
- [GraphQL API] Changed the
Order
type:Order.businessUnit
field type changed fromKeyReference
toBusinessUnit
- Added the
businessUnitRef
field to theOrder
type.
- [GraphQL API] Changed the
CartDraft
type:- Input field
businessUnit
was added toCartDraft
type
- Input field
- [GraphQL API] Changed the
MyCartDraft
type:- Input field
businessUnit
was added toMyCartDraft
type
- Input field
- [GraphQL API] Added the following types to the GraphQL schema:
SimpleAssociateRole
- [GraphQL API] Removed the following types from the GraphQL schema:
AssociateRole
. - [GraphQL API] Changed the
Associate
type:Associate.roles
field type changed from[AssociateRole!]!
to[SimpleAssociateRole!]!
- [GraphQL API] Changed the
AssociateDraft
type:AssociateDraft.roles
input field type changed from[AssociateRole!]!
to[SimpleAssociateRole!]!
Added Messages for changes on Embedded Prices and PriceMode on Products
You can now subscribe to Messages about adding, changing, setting, and removing Embedded Prices on Products, as well as setting the PriceMode on Products.
Changes:
- [API] added ProductPriceAdded Message.
- [API] added ProductPriceChanged Message.
- [API] added ProductPricesSet Message.
- [API] added ProductPriceRemoved Message.
- [API] added ProductPriceModeSet Message.
- [GraphQL API] Added the following types to the GraphQL schema:
ProductPriceAdded
,ProductPriceChanged
,ProductPriceModeSet
,ProductPriceRemoved
,ProductPricesSet
.
Audit Log now tracks changes on Store's Product Selections
We have extended the abilities of Audit Log to include tracking of changes made on a Store's Product Selections. With this enhancement, all Product Selection-related Changes performed on Stores are tracked from now on and these Changes are now retrievable via API.
Added support for expanded Channel and Customer Group to GraphQL query for StandalonePrice
We understood there is a demand to retrieve the full information about the Channel and the Customer Group on Standalone Prices instead of just the reference to those via the GraphQL API. Before, additional API calls were needed to retrieve the respective information, from now on just one query is sufficient for this use case.
Changes:
- [GraphQL API] Changed the
StandalonePrice
type:- Added the
channel
field to theStandalonePrice
type. - Added the
customerGroup
field to theStandalonePrice
type.
- Added the
Introduced Countries to Stores
We have released countries in Stores in public beta. You can now define countries
on Stores and filter prices by country in Product Projections and Cart/Order/Shopping List Line Items.
Changes:
- [API] Added type StoreCountry to Stores.
- [API] Added
countries
field to Store and StoreDraft. - [API] Added Add Country, Remove Country, and Set Countries update actions to Stores.
- [API] Added optional
countries
field to StoreCreated Message. - [API] Added StoreCountriesChanged Message.
- [API] Added the error code CountryNotConfiguredInStore.
- [GraphQL API] Added the following types to the GraphQL schema:
AddStoreCountry
,RemoveStoreCountry
,SetStoreCountries
,StoreCountriesChanged
,StoreCountry
,StoreCountryInput
. - [GraphQL API] Changed the
StoreUpdateAction
type:- Input field
addCountry
was added toStoreUpdateAction
type - Input field
setCountries
was added toStoreUpdateAction
type - Input field
removeCountry
was added toStoreUpdateAction
type
- Input field
- [GraphQL API] Changed the
CreateStore
type:- Input field
countries
was added toCreateStore
type
- Input field
- [GraphQL API] Changed the
StoreCreated
type:- Added the
countries
field to theStoreCreated
type.
- Added the
- [GraphQL API] Changed the
Store
type:- Added the
countries
field to theStore
type.
- Added the
Correction to the `ChangeQuoteState` type in the GraphQL API
We made a correction to the ChangeQuoteState
type in the GraphQL API. The type of the input field quoteState
was incorrectly marked as MyQuoteState
instead of QuoteState
. This caused certain QuoteStates, for example, the Withdrawn
state, to be unavailable through the GraphQL API. With this correction in place, the ChangeQuoteState
type now supports all QuoteStates in GraphQL.
Changes:
- [GraphQL API] Changed the
ChangeQuoteState
type:ChangeQuoteState.quoteState
input field type changed fromMyQuoteState!
toQuoteState!
Introduced Attribute Groups in beta
You can now organize related Attributes together into Attributes Groups and ease your product data enhancement workflows.
Changes:
- [API] Added Attribute Groups API.
- [API] Added the
view_attribute_groups
andmanage_attribute_groups
OAuth scopes. - [GraphQL API] Added the following types to the GraphQL schema:
AddAttributeGroupAttribute
,AttributeGroup
,AttributeGroupDraft
,AttributeGroupQueryResult
,AttributeGroupUpdateAction
,ChangeAttributeGroupName
,RemoveAttributeGroupAttribute
,SetAttributeGroupAttributes
,SetAttributeGroupDescription
,SetAttributeGroupKey
,AttributeReference
.
Added functionality to automatically transition states for Quote Requests, Staged Quotes, and Quotes
You can now enable automatic state transitions between various pre-defined states for Quote Requests, Staged Quotes, and Quotes. In particular:
- When creating a Staged Quote you can transition the referenced Quote Request to the
Accepted
state using thequoteRequestStateToAccepted
field on StagedQuoteDraft. - When creating a Quote you can transition the referenced Staged Quote to the
Sent
state using thestagedQuoteStateToSent
field on QuoteDraft. - When creating an Order you can transition the referenced Quote to the
Accepted
state using thequoteStateToAccepted
field on OrderFromQuoteDraft. The same functionality is available on the My Order endpoint using MyOrderFromQuoteDraft.
This simplifies the management of Quote states by eliminating the need for an additional API call to transition the state.
Support for IAM-based authentication in the Subscriptions API
We have added support for IAM-based authentication for SNS and SQS Destinations. The new field authenticationMode
is available on SQSDestination and SNSDestination and defines the mode of authentication. IAM-based authentication allows the Subscriptions API to send messages to a queue or publish to a topic, without explicitly providing credentials in the form of an accessKey
and accessSecret
. This simplifies key management for customers who maintain hundreds of queues and rotate credentials regularly. By providing permissions to an IAM user instead, the access needs to be set up once per topic and requires no additional key management. For backwards compatibility, the authenticationMode
field is set to Credentials
by default.
Changes:
- [API] Added fields
authenticationMode
to SQSDestination and SNSDestination. - [API] Added AwsAuthenticationMode.
- [GraphQL API] Added the following types to the GraphQL schema:
AwsAuthenticationMode
. - [GraphQL API] Changed the
SQSDestinationInput
type:SQSDestinationInput.accessSecret
input field type changed fromString!
toString
SQSDestinationInput.accessKey
input field type changed fromString!
toString
- Input field
authenticationMode
was added toSQSDestinationInput
type
- [GraphQL API] Changed the
SNSDestinationInput
type:SNSDestinationInput.accessSecret
input field type changed fromString!
toString
SNSDestinationInput.accessKey
input field type changed fromString!
toString
- Input field
authenticationMode
was added toSNSDestinationInput
type
- [GraphQL API] Changed the
SQSDestination
type:SQSDestination.accessSecret
field type changed fromString!
toString
- Added the
authenticationMode
field to theSQSDestination
type. SQSDestination.accessKey
field type changed fromString!
toString
- [GraphQL API] Changed the
SNSDestination
type:SNSDestination.accessSecret
field type changed fromString!
toString
SNSDestination.accessKey
field type changed fromString!
toString
- Added the
authenticationMode
field to theSNSDestination
type.
Introduced My Quotes in beta
The My Quotes API provides access to Quotes scoped to a specific user. Using the My Quotes endpoints, Buyers can view and update Quotes that they have access to. By updating the state of the Quote, Buyers can indicate whether they accept or decline a given Quote.
Changes:
- [API] Added My Quotes API.
- [API] Added MyOrderFromQuoteDraft to My Orders.
- [API] Added Create Order from Quote endpoint to My Orders.
- [GraphQL API] Added the following types to the GraphQL schema:
ChangeMyQuoteMyQuoteState
,MyQuoteState
,MyQuoteUpdateAction
,OrderMyQuoteCommand
- [GraphQL API] Changed the
Me
type:- Added the
quote
field to theMe
type. - Added the
quotes
field to theMe
type.
- Added the
- [GraphQL API] Changed the
Mutation
type:- Added the
updateMyQuote
field to theMutation
type.
- Added the
Introduced Business Units in beta
We have released Business Units in public beta. This new feature allows you to model companies and their divisions in Composable Commerce. You can assign Customers to Business Units to manage Carts, Orders, and Quotes on behalf of companies. With the help of Stores, Business Units can support company-specific products and pricing. When linked to a Business Unit, Carts, Orders, and Quotes will validate a Customer's role within the Business Unit. This feature is part of Composable Commerce for B2B and will be subject to additional terms and pricing.
Announced removal of non-standard GraphQL variables format
To be fully compliant with the GraphQL specification for serving over HTTP, we will be accepting GraphQL variables
only as a JSON objects from 1 December 2022.
From then on, we will no longer accept variables
to be passed as String
containing a JSON object.
Please find an example on how to use GraphQL variables
on our GraphQL API page.
Added Line Item inventoryMode to the GraphQL schema
To align with the HTTP API we released following Carts- and Quotes-related features in the GraphQL API.
Changes:
- [GraphQL API] Added the
inventoryMode
field to theLineItem
type. - [GraphQL API] Added Enum value
Quote
toCartOrigin
type . - [GraphQL API] Added the
sellerComment
field to theStagedQuote
type.
Added 'productSelections' to Store limits query in the GraphQL API
You can now view Product Selections limits for Stores in the GraphQL API.
Changes:
- [GraphQL API] Changed the
StoreLimitsProjection
type:- Added the
productSelections
field to theStoreLimitsProjection
type.
- Added the
Increased the limit of Line Items in Shopping Lists to 250.
We understood from our customers that there is a need to store more than 100 Line Items in a Shopping List and after analyzing the performance impact of higher numbers of Line Items we can now raise this limit to 250. This limit can be increased per Project after we reviewed the performance impact. Find more details in the documentation.
Added Message for changes on supply channels on Stores
You can now subscribe to Messages about additions, removals, or overwrites of inventory supply Channels on Stores.
Changes:
- [API] Added StoreSupplyChannelsChanged Message.
- [GraphQL API] Added the following type to the GraphQL schema:
StoreSupplyChannelsChanged
.
Added new state 'Delivered' to Order ShipmentState
With the new ShipmentState, Delivered
, you can now track the orders that are received by the customer.
Previously, this was only possible by using a custom state on the Order, or on the Line Item if they have more shipments per Order.
Added 'active' field to Standalone Prices
With the new 'active' field on Standalone Prices you can activate or deactivate individual Standalone Prices. This allows you to make changes or edits to your prices without them being visible to your customers. When a Standalone Price is not active, it is not considered during price selection. All existing Standalone Prices received an active status.
Announced deprecation of Missing Data API
Due to low adoption, we have deprecated all endpoints and data types of the Missing Data API. This API was an early, experimental project that did not find wide adoption and steady usage. Data quality remains a key priority for us and deprecating the Missing Data API will help focus our development efforts toward new, more advanced machine learning features.
We continue to maintain the Missing Data API until 09 December 2022, at which point the API will be completely removed. From now on, requests to deprecated endpoints will yield a response with the X-DEPRECATION-NOTICE
HTTP header.
Added Message for name changes on Stores
You can now subscribe to Messages about name changes on Stores.
Changes:
- [API] Added StoreNameSet Message.
- [GraphQL API] Added the following type to the GraphQL schema:
StoreNameSet
.
Raised limit for Stores in a Project
After successful experiences with Projects having up to 50,000 Stores, we have now raised this limit to 300,000. With this, we provide better support for B2B scenarios now in which separate product catalogs with pricing for business units of companies are required.
This limit can be increased per Project after we reviewed the performance impact. See also documentation.
Added support for Direct Discounts in the GraphQL API
Direct Discounts on Carts are now supported in the GraphQL API. The feature has been released in beta in the HTTP API on 30 June 2022.
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
DirectDiscount
,DirectDiscountDraft
,DirectDiscountDraftOutput
,SetCartDirectDiscounts
,SetStagedOrderDirectDiscounts
,SetStagedOrderDirectDiscountsOutput
. - [GraphQL API] Changed the
MyCartUpdateAction
type:- Input field
setDirectDiscounts
was added toMyCartUpdateAction
type
- Input field
- [GraphQL API] Changed the
Quote
type:- Added the
directDiscounts
field to theQuote
type.
- Added the
- [GraphQL API] Changed the
QuoteRequest
type:- Added the
directDiscounts
field to theQuoteRequest
type.
- Added the
- [GraphQL API] Changed the
CartUpdateAction
type:- Input field
setDirectDiscounts
was added toCartUpdateAction
type
- Input field
- [GraphQL API] Changed the
Cart
type:- Added the
directDiscounts
field to theCart
type.
- Added the
- [GraphQL API] Changed the
StagedOrderUpdateAction
type:- Input field
setDirectDiscounts
was added toStagedOrderUpdateAction
type
- Input field
- [GraphQL API] Changed the
Order
type:- Added the
directDiscounts
field to theOrder
type.
- Added the
Deprecation of PHP and DotNET Core v1 SDKs
As announced previously in our long-term support plan for Composable Commerce SDKs, Version 1 (v1) of our PHP and DotNET Core SDKs are now deprecated effective today.
These SDKs will not receive any future updates to fix bugs or security vulnerabilities. If you are using one of these SDKs, you should migrate to PHP v2 or DotNET Core v2. You can find migration guides for both SDKs on their respective pages.
Fixed ChangeDiscountCodeCartDiscounts type in GraphQL schema
We fixed the GraphQL type for changing the Cart Discounts on Discount Codes to achieve alignment with the respective update action on the Discount Codes API.
With this, you can now reference the CartDiscounts by user-defined key
in addition to id
also in the GraphQL API.
Furthermore, we made the Channel-related fields optional in the Store Distribution Channels Changed
Message.
Multiple Shipping Methods for Carts and Orders
You can now add multiple Shipping Methods to a Cart and Order. This is useful for cases where you want to have individual Shipping Methods for each Line Item ordered from a Cart.
A newly introduced shippingMode
on Cart and Order controls whether Carts and Orders can have single or multiple Shipping Methods. The default ShippingMode is Single
for backwards compatibility. For Carts and Orders with multiple Shipping Methods, all shipping-related information (such as address, rate, deliveries) are wrapped in a newly introduced Shipping object per Shipping Method. The Shipping object can also be extended with Custom Fields.
Additionally, you can add deliveries to Carts during Cart creation, which was previously only possible on Orders.
Added Message for language changes on Stores
You can now subscribe to Messages about language changes on Stores.
Changes:
- [API] Added StoreLanguagesChanged Message.
- [GraphQL API] Added the following type to the GraphQL schema:
StoreLanguagesChanged
.
Buyers can now request Quote renegotiation
Buyers can now request to renegotiate a Quote provided by the Seller. Previously, Buyers only had the option to accept or reject a Quote. Renegotiation offers more flexibility and allows Buyers to ask for amendments to the Quote. Buyers can express additional details regarding their request in the form of a comment.
Added 'priceMode' field to CustomLineItemDraft and CustomLineItemImportDraft
You can now set the price mode for a Custom Line Item when adding the Custom Line Item to a Cart.
Previously, new Custom Line Items had the Standard
price mode set by default for backwards compatibilty. You could only change the price mode on an existing Custom Line Item with the Change CustomLineItem Price Mode update action.
Added Reference Expansion for Product Search Attributes in the GraphQL API
Reference Expansion for Attributes of ProductProjectionsSearch is now supported in the GraphQL API.
We appreciate your feedback on this new in public beta feature. An example query can be found in our GraphQL API documentation.
Changes:
- [GraphQL API] Changed the
RawProductSearchAttribute
type:- Added the
referencedResourceSet
field to theRawProductSearchAttribute
type. - Added the
referencedResource
field to theRawProductSearchAttribute
type.
- Added the
Staged Standalone Prices Available in Beta
With Staged Standalone Prices, you can make changes or edits to Standalone Prices without them being visible to your customers. This allows you to prepare and test your changes before applying them with confidence when they are ready. Staged Standalone Prices support DiscountedPrice which means that you can assess how a given Product Discount would affect your Prices before making them live. Staged Standalone Prices is currently available in public beta.
Changes:
- [API] Added StagedStandalonePrice to Standalone Prices API.
- [API] Added field
staged
to StandalonePrice. - [API] Added
applyStagedChanges
update action to StandalonePrice. - [API] Added
StandalonePriceStagedChangesApplied
Message. - [API] Added field
staged
toStandalonePriceValueChanged
Message - [GraphQL API] Added the following types to the GraphQL schema:
ApplyStagedChanges
,StagedStandalonePrice
,StandalonePriceStagedChangesApplied
. - [GraphQL API] Changed the
StandalonePriceUpdateAction
type:- Input field
applyStagedChanges
was added toStandalonePriceUpdateAction
type
- Input field
- [GraphQL API] Changed the
ChangeStandalonePriceValue
type:- Input field
staged
was added toChangeStandalonePriceValue
type
- Input field
- [GraphQL API] Changed the
StandalonePrice
type:- Added the
staged
field to theStandalonePrice
type.
- Added the
- [GraphQL API] Changed the
StandalonePriceValueChanged
type:- Added the
staged
field to theStandalonePriceValueChanged
type.
- Added the
Added 'state' to QuoteRequest, StagedQuote, and Quote
You can now set States reflecting custom business logic on QuoteRequests, StagedQuotes, and Quotes.
Removed closed beta features from GraphQL schema
In our June 14, 2022 release we incorrectly labeled some closed beta features as available in public beta and introduced them in our GraphQL schema file.
We made a correction to the schema file and the original release note to remove the closed beta features listed below. This does not change the availability of the features. They remain discoverable through introspection and are intended for selected customers taking part in closed beta programs.
If you are interested in evaluating a closed beta feature, please reach out to your contact at commercetools.
API Extensions now support Quote Requests, Staged Quotes and Quotes
You can now extend the Quotes APIs with your custom business logic using API Extensions. You can trigger Extensions on create and update requests to Quote Requests, Staged Quotes, and Quotes. This allows you to integrate with other services seamlessly and cover custom B2B use cases by modifying the default behavior of the APIs.
Changes:
- [API] Added
quote-request
,staged-quote
, andquote
to ExtensionResourceTypeId.
Added inventory mode to Line Items
The inventory mode can now be configured for individual LineItems. The Cart/Order-level inventory mode remains, but can be overridden on a per-line-item basis. For example, in a Cart with two Line Items, you can now give Line Item 1 an inventory mode that is different from the inventory mode for Line Item 2. Before this release, it was only possible to specify one inventory mode valid for all Line Items in the Cart or Order.
Changes:
- [API] Added optional
inventoryMode
field to LineItem, LineItemDraft, and LineItemImportDraft. - [GraphQL API] Changed the
LineItemDraftOutput
type:- Added the
inventoryMode
field to theLineItemDraftOutput
type.
- Added the
- [GraphQL API] Changed the
AddStagedOrderLineItem
type:- Input field
inventoryMode
was added toAddStagedOrderLineItem
type
- Input field
- [GraphQL API] Changed the
AddCartLineItem
type:- Input field
inventoryMode
was added toAddCartLineItem
type
- Input field
- [GraphQL API] Changed the
LineItemDraft
type:- Input field
inventoryMode
was added toLineItemDraft
type
- Input field
Added 'priceMode' to Custom Line Item
You can now set a price mode on a CustomLineItem that controls whether Cart Discounts should be applied to them by Composable Commerce or not. Use this if you want to control application of Cart Discounts for each Custom Line Item in the Cart individually.
For backwards compatibility, Standard
is the default price mode for newly created Custom Line Items, that allows application of Cart Discounts. For cases where Cart Discounts should not be considered on a Custom Line Item, you can change its price mode to External
via new update action. You can still overwrite the price for a Custom Line Item via Change CustomLineItem Money update action.
Changes:
- [API] Added field
priceMode
to CustomLineItem. - [API] Added Change CustomLineItem Price Mode update action to Carts.
- [GraphQL API] Added the following types to the GraphQL schema:
ChangeCartCustomLineItemPriceMode
,CustomLineItemPriceMode
. - [GraphQL API] Changed the
CartUpdateAction
type:- Input field
changeCustomLineItemPriceMode
was added toCartUpdateAction
type
- Input field
- [GraphQL API] Changed the
CustomLineItem
type:- Added the
priceMode
field to theCustomLineItem
type.
- Added the
- [GraphQL API] Changed the
TypeDefinition
type:TypeDefinition
type description is changed
Audit Log now tracks changes on Quote Request, Staged Quotes and Quotes
We have extended the capabilities of Audit Log to include the tracking of changes made on Quotes, Quote Requests, and Staged Quotes. With this enhancement, all Changes performed on Quotes, Quotes Requests and Staged Quotes are tracked from now on and these Changes are now retrievable via API.
Changes:
- [API] Added scopes
view_quotes:{projectKey}
,view_quotes:{projectKey}
, andview_quotes:{projectKey}
. - [API] Added
quote
,quote-request
, andstaged-quote
to ChangeHistoryResourceType. - [API] Added ChangeQuoteRequestStateChange, ChangeQuoteStateChange, ChangeStagedQuoteStateChange, SetSellerCommentChange, and SetValidToChange.
- [API] Added StagedQuoteLabel, QuoteRequestLabel, QuoteLabel, and StagedQuoteLabel.
- [GraphQL API] Added the following types to the graphQL schema:
QuoteRequestChangeInput
,QuoteChangeInput
andStagedQuoteChangeInput
. - [GraphQL API] Added
QuoteRequestLabel
,QuoteLabel
, andStagedQuoteLabel
type. - [GraphQL API] Added queries
quoteRequest
andquoteRequests
. - [GraphQL API] Added queries
quote
andquotes
. - [GraphQL API] Added queries
stagedQuote
andstagedQuotes
. - [GraphQL API] Added
QuoteRequest
,Quote
, andStagedQuote
to the ResourceType enum.
Added Message for changes on distribution channels on Stores
You can now subscribe to Messages about additions, removals, or overwrites of product distribution Channels on Stores.
Changes:
- [API] Added StoreDistributionChannelsChanged Message.
- [GraphQL API] Added the following type to the GraphQL schema:
StoreDistributionChannelsChanged
.
Added OrderImport GraphQL mutation
You can now create an Order by import using the GraphQL API.
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
CustomLineItemImportDraft
,DeliveryDraft
,DiscountedLineItemPriceDraft
,ImportOrderDraft
,LineItemImportDraft
,ParcelDraft
,ProductVariantImportDraft
,ShippingInfoImportDraft
,TaxRateInput
,TaxedPriceDraft
. - [GraphQL API] Changed the
Mutation
type:- Added the
importOrder
field to theMutation
type.
- Added the
Added existence check for Product Types
You can now check if a Product Type exists using its id
, key
or a query predicate. These methods are useful if you are only interested in the existence of a certain Product Type without the need of fetching its information.
- [API] Added HEAD methods for Product Types by ID, by Key, and by Query Predicate.
Audit Log now tracks changes on Product Selections
We have extended the capabilities of Audit Log to include the tracking of changes made on Product Selections. With this enhancement, all Changes performed on Product Selections are tracked from now on and these Changes are now retrievable via API.
Changes:
- [API] Added the
view_product_selections:{projectKey}
scope. - [API] Added
product-selection
to ChangeHistoryResourceType. - [API] Added AddProductChange.
- [API] Added RemoveProductChange.
- [API] Added SetProductCountChange.
- [GraphQL API] Added the following types to the graphQL schema:
ProductSelectionChangeInput
. - [GraphQL API] Added queries
productSelection
andproductSelections
. - [GraphQL API] Added
ProductSelection
to the ResourceType enum.
Introduced Quotes in beta
We have released Quotes in public beta. This new feature allows you to negotiate quote requests for your products with your customers. The negotiation process involves utilizing several APIs that we introduced with this feature, allowing you to control each step of the intended workflow of the negotiation. All the introduced resources, such as Quote Request, Staged Quote, and Quote can be extended with Custom Fields. The discounts applied on a specific Quote, can be utilized by the newly added DirectDiscount. After successful negotiation, the Order can be created right from the Quote.
Changes:
- [API] Added Quote Requests and My Quote Requests APIs.
- [API] Added Staged Quotes API.
- [API] Added Quotes API.
- [API] Added QuoteRequestCreated, QuoteRequestStateChanged, and QuoteRequestDeleted Messages.
- [API] Added StagedQuoteCreated, StagedQuoteStateChanged, StagedQuoteValidToSet, StagedQuoteSellerCommentSet, and StagedQuoteDeleted Messages.
- [API] Added QuoteCreated, QuoteStateChanged, and QuoteDeleted Messages.
- [API] Added
Quote
to CartOrigin. - [API] Added DirectDiscount and DirectDiscountDraft to Carts API.
- [API] Added
directDiscounts
field to Cart and Order. - [API] Added
setDirectDiscounts
update action to Carts and Orders via OrderEdit. - [API] Added OrderFromQuoteDraft and Create Order from Quote endpoint to Orders API.
- [API] Added
quote
field to Order. - [API] Added OAuth scopes
manage_quote_requests
,view_quote_requests
,manage_my_quote_requests
,manage_staged_quotes
,view_staged_quotes
,manage_quotes
, andview_quotes
. - [GraphQL API] Added the following types to the GraphQL schema:
CancelQuoteRequest
,ChangeMyQuoteMyQuoteState
,ChangeQuoteRequestState
,ChangeQuoteState
,ChangeStagedQuoteState
,MyQuoteRequestDraft
,MyQuoteRequestUpdateAction
,MyQuoteState
,MyQuoteUpdateAction
,OrderMyQuoteCommand
,OrderQuoteCommand
,Quote
,QuoteDraft
,QuoteQueryResult
,QuoteRequest
,QuoteRequestDraft
,QuoteRequestQueryResult
,QuoteRequestState
,QuoteRequestUpdateAction
,QuoteState
,QuoteUpdateAction
,SetMyQuoteRequestCustomField
,SetMyQuoteRequestCustomType
,SetQuoteCustomField
,SetQuoteCustomType
,SetQuoteRequestCustomField
,SetQuoteRequestCustomType
,SetStagedQuoteCustomField
,SetStagedQuoteCustomType
,SetStagedQuoteSellerComment
,SetStagedQuoteValidTo
,StagedQuote
,StagedQuoteDraft
,StagedQuoteQueryResult
,StagedQuoteState
,StagedQuoteUpdateAction
.
Product Selections can now operate on Product Variant level
You can now include or exclude particular Product Variants in/from a Product Selection. Formerly it was only possible to add Products as a whole to a Product Selection meaning that all existing Product Variants of the Product are included.
Changes:
- [API] You can now specify a Product Variant Selection when you Add a Product to the Product Selection.
- [API] You can now specify a Product Variant Selection for an existing Product in the Product Selection by the new Set Variant Selection update action.
- [API] When you query a Product Selection for Products assigned to a Product Selection the response now also contains Product Variant Selections.
- [API] When you query for Products available in a Store through active Product Selections the response now also contains Product Variant Selections.
- [API] When you Get Product Projection in Store by ID or by Key you can now project by Product Selection assignments for Product Variants.
- [API] Added
variantSelection
field to ProductSelectionProductAdded Message. - [API] Added ProductSelectionVariantSelectionChanged Message.
- [API] Added
ProductAssignmentMissing
andProductPresentWithDifferentVariantSelection
errors. - [GraphQL API] Added the following types to the GraphQL schema:
ProductSelectionVariantSelectionChanged
,ProductVariantSelection
,ProductVariantSelectionDraft
,ProductVariantSelectionExclusion
,ProductVariantSelectionInclusion
,SetProductSelectionVariantSelection
. - [GraphQL API] Changed the
ProductOfSelection
type:- Added the
variantSelection
field to theProductOfSelection
type.
- Added the
- [GraphQL API] Changed the
SelectionOfProduct
type:- Added the
variantSelection
field to theSelectionOfProduct
type.
- Added the
- [GraphQL API] Changed the
ProductSelectionUpdateAction
type:- Input field
setVariantSelection
was added toProductSelectionUpdateAction
type
- Input field
- [GraphQL API] Changed the
AddProductSelectionProduct
type:- Input field
variantSelection
was added toAddProductSelectionProduct
type
- Input field
- [GraphQL API] Changed the
ProductSelectionProductAdded
type:- Added the
variantSelection
field to theProductSelectionProductAdded
type.
- Added the
Standalone Prices achieved general availability status
After collecting feedback during the beta phase, we have moved Standalone Prices out of beta. The status of the following features has been changed to general availability:
- Querying and managing Standalone Prices through the Standalone Prices API
- Adding Custom Fields on Standalone Prices
- Setting the
priceMode
on the Product
Read more on Standalone Prices and how to use them in the API reference.
Extended long-term support plan for Java v1 SDK
The long-term support plan for the Java v1 SDK has been extended until the end of 2023. This provides additional time for users to migrate to Java v2 SDK.
Changes in the GraphQL schema
Changes:
- [GraphQL API] Changed the
AuthenticationMode
type:AuthenticationMode
type description is changed
- [GraphQL API] Changed the
StandalonePriceCustomField
type:StandalonePriceCustomField
type description is changed
- [GraphQL API] Changed the
ProductPrice
type:- Added the
key
field to theProductPrice
type.
- Added the
- [GraphQL API] Changed the
RoundingMode
type:RoundingMode.HalfDown
description changed
- [GraphQL API] Changed the
ProductPriceSearch
type:- Added the
key
field to theProductPriceSearch
type.
- Added the
- [GraphQL API] Changed the
Payment
type:Payment
type description is changed
- [GraphQL API] Changed the
SelectionOfProduct
type:- Added the
createdAt
field to theSelectionOfProduct
type.
- Added the
- [GraphQL API] Changed the
MyPayment
type:MyPayment
type description is changed
- [GraphQL API] Changed the
Query
type:Query.standalonePrices
description is changedQuery.standalonePrice
description is changed
- [GraphQL API] Changed the
ProductPriceDataInput
type:- Input field
key
was added toProductPriceDataInput
type
- Input field
- [GraphQL API] Changed the
Cart
type:- Argument
id
was added toCart.lineItems
field
- Argument
- [GraphQL API] Changed the
PriceMode
type:PriceMode
type description is changed
- [GraphQL API] Changed the
StandalonePriceQueryResult
type:StandalonePriceQueryResult.exists
description is changed
- [GraphQL API] Changed the
TriggerInput
type:- Input field
condition
was added toTriggerInput
type
- Input field
- [GraphQL API] Changed the
Mutation
type:Mutation.replicateMyCart
description is changed
- [GraphQL API] Changed the
Order
type:Order
type description is changed- Argument
id
was added toOrder.lineItems
field
- [GraphQL API] Changed the
Trigger
type:- Added the
condition
field to theTrigger
type.
- Added the
- [GraphQL API] Changed the
StandalonePrice
type:StandalonePrice
type description is changed
Added update action for setting external discounts on Standalone Prices
You can now set the discounted
value of a Standalone Price via update action also. Before, it was only possible to set that value during creation of the Standalone Price.
Changes:
- [API] Added SetStandalonePriceDiscountedPrice update action to Standalone Prices.
- [API] Added StandalonePriceExternalDiscountSet Message.
- [GraphQL API] Added the following types to the GraphQL schema:
SetStandalonePriceDiscountedPrice
,StandalonePriceExternalDiscountSet
. - [GraphQL API] Changed the
StandalonePriceUpdateAction
type:- Input field
setDiscountedPrice
was added toStandalonePriceUpdateAction
type
- Input field
Conditional API Extensions in Beta
Conditional triggers on API Extensions allow you to specify the criteria under which a given Extension is triggered. By default, API Extensions are called on every create or update to the resource they are configured for. However, the new feature allows you to specify fine-grained predicates based on the resource's properties. Using conditional statements you can configure the API Extension to trigger only when your particular use case requires it. Conditional triggers are especially useful in cases where multiple brands or countries reside in a single project.
Changes:
- [API] Added
condition
field to ExtensionTrigger. - [GraphQL API] Changed the
TriggerInput
type:- Input field
condition
was added toTriggerInput
type
- Input field
- [GraphQL API] Changed the
Trigger
type:- Added the
condition
field to theTrigger
type.
- Added the
extend type Trigger {
condition: String
}
extend input TriggerInput {
condition: String
}
Added Messages for Standalone Prices
You can now subscribe to Messages specific to Standalone Prices to get informed about their creation, deletion, or updates on them.
Changes:
- [API] added StandalonePriceCreated Message, StandalonePriceDeleted Message, StandalonePriceValueChanged Message, and StandalonePriceDiscountSet Message.
- [GraphQL API] Added the following types to the GraphQL schema:
StandalonePriceCreated
,StandalonePriceDeleted
,StandalonePriceDiscountSet
,StandalonePriceValueChanged
.
Removed 'lastMessageSequenceNumber' from Order
The lastMessageSequenceNumber
field is deprecated from Order, as it is an internal field that should not be used in customer logic.
For processing Messages in the correct order, a message processor can continue to use the id
field of the resource alongside the sequenceNumber
of the Message.
Changes:
- [API] Removed
lastMessageSequenceNumber
from Order. - [GraphQL API] Changed the
Order
type:- Field
lastMessageSequenceNumber
was deprecated inOrder
type.
- Field
Introduced Standalone Prices in Beta
The Standalone Prices feature provides an alternative way to store your product prices as standalone resources. In comparison to prices embedded inside the Product, this new approach allows increasing the limit of prices per ProductVariant from 100 to 50.000. It also brings a more flexible way to query and manage your prices, separately from your Products, which contributes to better query performance.
The feature allows you to manage and query Standalone Prices through the Standalone Prices API, and to associate them to a ProductVariant via SKU. Additionally, a new priceMode
has been introduced on the Product that controls whether the Prices of the ProductVariants are embedded into the Product resource or stored separately as Standalone Prices.
Please note that currently it is not possible to use filters, facets, and sorting on Standalone Prices via the Product Projection Search endpoint.
Read more on Standalone Prices and how to use them in the API reference.
Changes:
- [API] Added Standalone Prices API.
- [API] Added
view_standalone_prices
andmanage_standalone_prices
OAuth scopes. - [API] Added optional field
priceMode
to Product and ProductDraft. - [API] Added Set PriceMode update action to Product.
- [API] Added
DuplicateStandalonePriceScope
andOverlappingStandalonePriceValidity
400 Bad Request errors specific to Standalone Prices. - [GraphQL API] Added the following types to the GraphQL schema:
ChangeStandalonePriceValue
,CreateStandalonePrice
,PriceMode
,SetProductPriceMode
,SetStandalonePriceCustomFields
,StandalonePrice
,StandalonePriceCustomField
,StandalonePriceQueryResult
,StandalonePriceUpdateAction
. - [GraphQL API] Changed the
Query
type:- Added the
standalonePrice
field to theQuery
type. - Added the
standalonePrices
field to theQuery
type.
- Added the
- [GraphQL API] Changed the
Mutation
type:- Added the
createStandalonePrice
field to theMutation
type. - Added the
deleteStandalonePrice
field to theMutation
type. - Added the
updateStandalonePrice
field to theMutation
type.
- Added the
- [GraphQL API] Changed the
Product
type:- Added the
priceMode
field to theProduct
type.
- Added the
- [GraphQL API] Changed the
ProductDraft
type:- Input field
priceMode
was added toProductDraft
type
- Input field
- [GraphQL API] Changed the
ProductUpdateAction
type:- Input field
setPriceMode
was added toProductUpdateAction
type
- Input field
OrderFromCartDraft Custom Fields now merge with Cart Custom Fields.
When creating an Order from a Cart, the Custom Fields in the OrderFromCartDraft now merge with the Custom Fields in the referenced Cart.
With this, you can enrich the Custom Fields that already exist on the Cart and store them in the Order with a single API call.
Changes:
- [API] The
custom
field on OrderFromCartDraft is now used for adding extra Custom Fields on Create Order from Cart.
Added Cart replication to My Carts
Creating a new Cart by replicating an existing Cart or Order can be useful in case a Customer wants to cancel a recent order to make some changes, or if a previous order should be ordered again. This has been supported for Carts already, and now we added a replicatiion endpoint for My Carts also.
Changes:
- [API] Added Replicate My Cart endpoint.
- [API] Added ReplicaMyCartDraft.
- [GraphQL API] Changed the
Mutation
type:- Added the
replicateMyCart
field to theMutation
type.
- Added the
Added 'deleteAt' and 'deleteDaysAfterCreation' fields to API Clients in the GraphQL API
You can now view and configure the deletion date of API Clients in the GraphQL API.
Changes:
- [GraphQL API] Changed the
APIClientWithoutSecret
type:- Added the
deleteAt
field to theAPIClientWithoutSecret
type.
- Added the
- [GraphQL API] Changed the
APIClientWithSecret
type:- Added the
deleteAt
field to theAPIClientWithSecret
type.
- Added the
- [GraphQL API] Changed the
CreateApiClient
type:- Input field
deleteDaysAfterCreation
was added toCreateApiClient
type
- Input field
Added total tax to Carts, Orders, and Line Items
The total tax amount on Cart, Order, LineItem, CustomLineItem, and ShippingInfo. Before, your application had to calculate that amount if you wanted to display it to your customers.
Changes:
- [API] Added optional
totalTax
field to TaxedPrice and TaxedItemPrice. - [GraphQL API] Changed the
TaxedPrice
type:- Added the
totalTax
field to theTaxedPrice
type. - Added the
totalTax
field to theTaxedItemPrice
type.
- Added the
Added Reference Expansion for Product Attributes in the GraphQL API
Reference Expansion for Attributes of Products is now supported in the GraphQL API.
We appreciate your feedback on this new in public beta feature. An example query can be found in our GraphQL API documentation.
Changes:
- [GraphQL API] Changed the
RawProductAttribute
type:- Added the
referencedResourceSet
field to theRawProductAttribute
type. - Added the
referencedResource
field to theRawProductAttribute
type.
- Added the
OrderFromCartDraft can now be extended with Custom Fields.
You can now add Custom Fields when you Create an Order from a Cart. With this, you can now store additional information, like payment reference, to your Order during checkout if required for your business logic.
Changes:
- [API] Added optional
custom
field to OrderFromCartDraft. - [GraphQL API] Changed the
OrderCartCommand
type:- Added the
custom
field toOrderCartCommand
type.
- Added the
Audit Log now supports Stores
We have extended the abilities of Audit Log to include tracking of changes on Stores as well as on Store-related information on Customers, Orders, and Shopping Lists.
For supported resources, this enhancement will now scope Audit Log response data to the user's or API Client's Store permissions. All other resources will remain unaffected.
Changes:
- [API] Adds
stores
attribute toRecord
response. - [API] Adds filter for
store
keys to all available endpoints. - [GraphQL API] Adds
stores
attribute toChangeHistory
type. - [GraphQL API] Adds filter for
store
keys to all queries for supported resources.
Added 'paymentInfo' and 'state' fields to OrderImportDraft
You can now set the PaymentInfo as well as a State to an Order via Order Import.
Changes:
- [API] Added optional field
paymentInfo
to OrderImportDraft. - [API] Added optional field
state
to OrderImportDraft.
Added Reference Expansion for Custom Fields in the GraphQL API
Reference Expansion for Custom Fields of CustomFieldReferenceType (as well as for the CustomFieldSetType of it) is now supported in the GraphQL API.
We appreciate your feedback on this new in public beta feature; for an example query, please refer to the respective section in the GraphQL API documentation.
Changes:
- [GraphQL API] Changed the
RawCustomField
type:- Added the
referencedResourceSet
field to theRawCustomField
type. - Added the
referencedResource
field to theRawCustomField
type.
- Added the
- [GraphQL API] Changed the
Cart
type:Cart
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
CartDiscount
type:CartDiscount
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
Category
type:Category
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
Channel
type:Channel
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
Customer
type:Customer
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
CustomerGroup
type:CustomerGroup
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
CustomObject
type:CustomObject
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
DiscountCode
type:DiscountCode
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
Extension
type:Extension
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
InventoryEntry
type:InventoryEntry
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
Message
type:Message
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
Order
type:Order
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
Product
type:Product
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
ProductDiscount
type:ProductDiscount
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
ProductTypeDefinition
type:ProductTypeDefinition
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
Review
type:Review
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
ShippingMethod
type:ShippingMethod
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
ShoppingList
type:ShoppingList
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
State
type:State
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
Store
type:Store
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
TaxCategory
type:TaxCategory
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
TypeDefinition
type:TypeDefinition
object type now implementsReferenceExpandable
interface
- [GraphQL API] Changed the
Zone
type:Zone
object type now implementsReferenceExpandable
interface
Introduced AuthenticationMode for Customer
We introduced the AuthenticationMode that controls whether the password
field is required for a Customer in public beta. The Password
authentication mode is the default mode for backwards compatibility that requires to set a password for the Customer. For use cases where Customers are authenticated externally, you can now set the authenticationMode
to ExternalAuth
to create Customers without a password.
Changes:
- [API] Added
authenticationMode
field to Customer and CustomerDraft. - [API] Changed
password
field to be optional on CustomerDraft whenauthenticationMode
is set toExternalAuth
. - [API] Removed
password
field from Customer whenauthenticationMode
is set toExternalAuth
. - [API] Added Set AuthenticationMode update action.
- [GraphQL API] Added the following types to the GraphQL schema:
AuthenticationMode
,SetCustomerAuthenticationMode
. - [GraphQL API] Changed the
Customer
type:Customer.password
field type changed fromString!
toString
- Added the
authenticationMode
field to theCustomer
type.
- [GraphQL API] Changed the
CustomerSignUpDraft
type:CustomerSignUpDraft.password
input field type changed fromString!
toString
- Input field
authenticationMode
was added toCustomerSignUpDraft
type
- [GraphQL API] Changed the
CustomerUpdateAction
type:- Input field
setAuthenticationMode
was added toCustomerUpdateAction
type
- Input field
- [GraphQL API] Changed the
CustomerSignMeUpDraft
type:CustomerSignMeUpDraft.password
input field type changed fromString!
toString
Added the 'key' field to InventoryEntry
InventoryEntry now supports the key
field. You can now retrieve, update, and delete InventoryEntry by user-defined key
.
Changes:
- [API] Added
key
field to InventoryEntry and InventoryEntryDraft. - [API] Added Get, Update, and Delete by Key methods to InventoryEntry.
- [API] Added Set Key update action to InventoryEntry.
- [GraphQL API] Changed the
Query
type:Query.inventoryEntry(id)
type changed fromString!
toString
Query.inventoryEntry(id)
description is changed- Argument
key
was added toQuery.inventoryEntry
field
- [GraphQL API] Changed the
Mutation
type:Mutation.updateInventoryEntry(id)
type changed fromString!
toString
Mutation.updateInventoryEntry(id)
description is changed- Argument
key
was added toMutation.updateInventoryEntry
field Mutation.deleteInventoryEntry(id)
type changed fromString!
toString
Mutation.deleteInventoryEntry(id)
description is changed- Argument
key
was added toMutation.deleteInventoryEntry
field
Added 'messagePayloads' field to the 'PreviewSuccess' GraphQL type
The messagePayloads
field has been added to the PreviewSuccess
OrderEdit result in our GraphQL API.
Changes:
- [GraphQL API] Added the following types to the GraphQL schema:
OrderMessagePayload
. - [GraphQL API] Changed the
OrderCustomLineItemQuantityChanged
type:OrderCustomLineItemQuantityChanged
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderShippingRateInputSet
type:OrderShippingRateInputSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderCustomLineItemRemoved
type:OrderCustomLineItemRemoved
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderBillingAddressSet
type:OrderBillingAddressSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
ParcelItemsUpdated
type:ParcelItemsUpdated
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderEditApplied
type:OrderEditApplied
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
DeliveryAdded
type:DeliveryAdded
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
PreviewSuccess
type:- Added the
messagePayloads
field to thePreviewSuccess
type.
- Added the
- [GraphQL API] Changed the
OrderPaymentStateChanged
type:OrderPaymentStateChanged
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
ReturnInfoSet
type:ReturnInfoSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderCustomerSet
type:OrderCustomerSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderDiscountCodeStateSet
type:OrderDiscountCodeStateSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderCustomerGroupSet
type:OrderCustomerGroupSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderLineItemDiscountSet
type:OrderLineItemDiscountSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderStateChanged
type:OrderStateChanged
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderLineItemAdded
type:OrderLineItemAdded
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderImported
type:OrderImported
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderCustomerEmailSet
type:OrderCustomerEmailSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderCustomLineItemDiscountSet
type:OrderCustomLineItemDiscountSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderDiscountCodeAdded
type:OrderDiscountCodeAdded
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
CustomLineItemStateTransition
type:CustomLineItemStateTransition
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderPaymentRemoved
type:OrderPaymentRemoved
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
ParcelTrackingDataUpdated
type:ParcelTrackingDataUpdated
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderDiscountCodeRemoved
type:OrderDiscountCodeRemoved
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
DeliveryRemoved
type:DeliveryRemoved
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderCreated
type:OrderCreated
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderLineItemRemoved
type:OrderLineItemRemoved
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
ParcelRemovedFromDelivery
type:ParcelRemovedFromDelivery
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderDeleted
type:OrderDeleted
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderStoreSet
type:OrderStoreSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
DeliveryItemsUpdated
type:DeliveryItemsUpdated
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
ReturnInfoAdded
type:ReturnInfoAdded
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderReturnShipmentStateChanged
type:OrderReturnShipmentStateChanged
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
ParcelMeasurementsUpdated
type:ParcelMeasurementsUpdated
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderStateTransition
type:OrderStateTransition
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
LineItemStateTransition
type:LineItemStateTransition
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderLineItemDistributionChannelSet
type:OrderLineItemDistributionChannelSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
ParcelAddedToDelivery
type:ParcelAddedToDelivery
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
DeliveryAddressSet
type:DeliveryAddressSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderCustomLineItemAdded
type:OrderCustomLineItemAdded
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderShipmentStateChanged
type:OrderShipmentStateChanged
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderShippingInfoSet
type:OrderShippingInfoSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderShippingAddressSet
type:OrderShippingAddressSet
object type now implementsOrderMessagePayload
interface
- [GraphQL API] Changed the
OrderPaymentAdded
type:OrderPaymentAdded
object type now implementsOrderMessagePayload
interface
Supported GraphQL schema
Please find officially released features for our GraphQL API in the schema file publicly available on Github.
Only the features listed in that schema file are fully covered by our SLAs. Any additional features you might discover through introspection are intended for selected customers taking part in closed beta programs. Since such closed beta features can change, we strongly advise against using those in productive environments.
If you are interested in evaluating a closed beta feature and you would like to provide us with feedback about it, please reach out to your contact person at commercetools.
Added sorting capability when retrieving Shipping Methods for a Location
You can now sort the query results, for example by ShippingRate price
, when retrieving the Shipping Methods for a Location. Before, you had to implement this logic in the store front application.
- [API] Added
sort
query parameter to Get ShippingMethods for a Location endpoint.
Product Selections can now be extended with Custom Fields
You can now extend the ProductSelection resource with Custom Fields. With this, you can add meta-information to your Product Selection in case it is required for your business logic.
Changes:
- [API] Added optional
custom
field to ProductSelection and ProductSelectionDraft. - [API] Added Set Custom Type and Set CustomField update actions to Product Selections.
- [GraphQL API] Added the following types to the GraphQL schema:
SetProductSelectionCustomField
,SetProductSelectionCustomType
. - [GraphQL API] Changed the
ProductSelection
type:- Added the
custom
field to theProductSelection
type.
- Added the
- [GraphQL API] Changed the
ProductSelectionCreatedPayload
type:- Added the
custom
field to theProductSelectionCreatedPayload
type.
- Added the
- [GraphQL API] Changed the
IndividualProductSelectionCreatedPayload
type:- Added the
custom
field to theIndividualProductSelectionCreatedPayload
type.
- Added the
- [GraphQL API] Changed the
ProductSelectionUpdateAction
type:- Input field
setCustomField
was added toProductSelectionUpdateAction
type - Input field
setCustomType
was added toProductSelectionUpdateAction
type
- Input field
- [GraphQL API] Changed the
CreateProductSelectionDraft
type:- Input field
custom
was added toCreateProductSelectionDraft
type
- Input field
Expiration times on access and refresh tokens can now be configured.
The expiration time for access and refresh tokens can now be configured per API Client by using the new accessTokenValiditySeconds
and refreshTokenValiditySeconds
fields. If specified, each access and refresh token created by the API Client will expire within the specified number of seconds. If not specified, the tokens will expire as per the default configuration.
Changes:
- [API] Added
accessTokenValiditySeconds
field to API Client and APIClientDraft. - [API] Added
refreshTokenValiditySeconds
field to API Client and APIClientDraft. - [GraphQL API] Changed the
APIClientWithoutSecret
type:- Added the
refreshTokenValiditySeconds
field to theAPIClientWithoutSecret
type. - Added the
accessTokenValiditySeconds
field to theAPIClientWithoutSecret
type.
- Added the
- [GraphQL API] Changed the
APIClientWithSecret
type:- Added the
accessTokenValiditySeconds
field to theAPIClientWithSecret
type. - Added the
refreshTokenValiditySeconds
field to theAPIClientWithSecret
type.
- Added the
- [GraphQL API] Changed the
CreateApiClient
type:- Input field
refreshTokenValiditySeconds
was added toCreateApiClient
type - Input field
accessTokenValiditySeconds
was added toCreateApiClient
type
- Input field
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
Add OrderPayment update action performed on Orders or OrderEdits now triggers Messages . To subscribe to Messages, see Subscriptions for Messages and Notifications.
Change:
- [API] Added OrderPaymentAdded Message.
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 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 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 commercetools Composable Commerce 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 CustomerFirstNameSet Message.
- [API] Added CustomerLastNameSet Message.
- [API] Added CustomerTitleSet Message.
- [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 InventoryEntryQuantitySet Message. - [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 whenever a Customer is 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.
- [GraphQL API] Added the following types to the GraphQL schema:
CustomerDeleted
.
Excluding Changes initiated by background processes from Audit log results
It is now possible to exclude Changes initiated by background processes from Audit Log response data sets.
Change:
- [API] Added
excludePlatformInitiatedChanges
query parameter to all Query Record endpoints that will allow Changes originated by background processes to be excluded from the response data set. - [GraphQL API] Added
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 optimizes the query resulting in shorter response times and
- it avoids you finding workarounds with other query fields to achieve the same.
Changes:
- [GraphQL API] Added the Boolean
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 in the request. 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 Composable Commerce SDKs
We have set up a long-term support plan to actively support and maintain Version 1 (v1) SDKs until their end of life. Additionally, we have provided information about migration to our Version 2 (v2) SDKs that are constantly updated with the newest API features as soon as they are released. This support plan indicates when you could schedule the migration to v2 SDKs.
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 StoreCreated Message
- [API] Added StoreDeleted Message
- [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 ShoppingList in Store by ID method to Shopping Lists and My Shopping Lists.
- [API] Added Get ShoppingList in Store by Key method to Shopping Lists and My Shopping Lists.
- [API] Added Query ShoppingLists in Store method to Shopping Lists and My Shopping Lists.
- [API] Added Create ShoppingList in Store method to Shopping Lists and My Shopping Lists.
- [API] Added Update ShoppingList in Store by ID method to Shopping Lists and My Shopping Lists.
- [API] Added Update ShoppingList in Store by Key method to Shopping Lists and My Shopping Lists.
- [API] Added Set Store update action to Shopping Lists.
- [API] Added Delete ShoppingList in Store by ID method to Shopping Lists and My Shopping Lists.
- [API] Added Delete ShoppingList in Store by Key method to Shopping Lists and My Shopping Lists.
- [GraphQL API] The existing query fields
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 Embedded 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 CustomField update actions for carts
- [API] Added Set Billing Address Custom Type and Set Billing Address CustomField update actions for carts
- [API] Added Set Item Shipping Address Custom Type and Set Item Shipping Address CustomField update actions for carts
- [API] Added Set Delivery Address Custom Type and Set Delivery Address CustomField update actions for carts
- [API] Added Set Shipping Address Custom Type and Set Shipping Address CustomField update actions for orders
- [API] Added Set Billing Address Custom Type and Set Billing Address CustomField update actions for orders
- [API] Added Set Item Shipping Address Custom Type and Set Item Shipping Address CustomField update actions for orders
- [API] Added Set Delivery Address Custom Type and Set Delivery Address CustomField update actions for orders
- [API] Added Set Shipping Address Custom Type and Set Shipping Address CustomField update actions for order edits
- [API] Added Set Billing Address Custom Type and Set Billing Address CustomField update actions for order edits
- [API] Added Set Item Shipping Address Custom Type and Set Item Shipping Address CustomField update actions for order edits
- [API] Added Set Delivery Address Custom Type and Set Delivery Address CustomField update actions for order edits
- [API] Added Set Address Custom Type and Set Address CustomField update actions on customers
- [API] Added Set Address Custom Type and Set Address CustomField update actions on channels
Added GraphQL support for Replicate Cart in Store endpoint
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 automatically 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 Customer Password Updated Message.
- [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 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 CategorySlugChanged Message and ProductSlugChanged Message that contains the slug as it was before the change. This information makes it easier for you to track changes of your slugs and to implement auto-redirection strategies for those product and category pages that have moved temporarily or permanently. On the GraphQL API you can now also query for the oldSlugAllLocales
field of the messages
in the fragments CategorySlugChanged
and ProductSlugChanged
.
- [API] Added optional field
oldSlug
to CategorySlugChanged Message. - [API] Added optional field
oldSlug
to ProductSlugChanged Message. - [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 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 Composable Commerce 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
on the DELETE
request, the ResourceDeletedDeliveryPayload will also contain the dataErasure
parameter. This allows 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 ProductVariantAdded Message.
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 commercetools Composable Commerce.
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 automatic clean-up task will delete the resources 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 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
commercetools Composable Commerce on Google Cloud Sydney
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 InventoryEntryCreated Message.
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 Product Projection Search. - [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 Product Projection Search. - [API] If a Cart is bound to a Store, all LocalizedStrings are filtered according to the locales defined in the store.
Added Review GraphQL query and mutation schema
Reviews can now be queried, created, updated, and deleted using the GraphQL API.
- [GraphQL API] Added the following types to the GraphQL schema:
Review
,ReviewQueryResult
,ReviewTarget
,ReviewDraft
,ReviewUpdateAction
,SetReviewAuthorName
,SetReviewCustomField
,SetReviewCustomType
,SetReviewCustomer
,SetReviewKey
,SetReviewLocale
,SetReviewRating
,SetReviewTarget
,SetReviewText
,SetReviewTitle
,TargetReferenceInput
,TransitionReviewState
. - [GraphQL API] Changed the
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 OrderStoreSet Message
Add localized description field for shipping method
To be able to describe a shipping method in different languages, the following changes have been made:
- [API] Added the
localizedDescription
attribute to the ShippingMethod and ShippingMethodDraft representations. - [API] Added setLocalizedDescription action.
- [API] The attribute
description
as well as the setDescription action has been deprecated.
Access States Using Key
You can now get, update, and delete a State using its key. This eases the implementation of configuration-as-code patterns where creation and updating of a project's configuration is automated using version controlled code.
- [API] Added the following methods to the HTTP API to access States:
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 Composable Commerce on AWS, new API host names
commercetools Composable Commerce is now available on AWS in addition to the existing Regions which are operated on the Google Cloud Platform. All self sign-up accounts continue to be created in Google Cloud Regions.
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
Adding and removing a product from a category now triggers messages.
- [API] Added the ProductAddedToCategory Message to Product's Add to Category update action.
- [API] Added the ProductRemovedFromCategory Message to Product's Remove from Category update action.
Use Customer's key field in Cart Discount Predicates
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 background 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 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
As a security improvement, on 6 May 2019 the commercetools Composable Commerce API endpoints will no longer accept access tokens as URI parameters.
All API Clients should provide access tokens 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 commercetools Composable Commerce 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 Composable Commerce 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 commercetools Composable Commerce 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 Composable Commerce 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 Embedded 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