Platform Release Notes

Introduced a character limit for the full-text search query parameter on product projection search

11 November 2020
Announcement
SearchLimits

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

9 November 2020
Enhancement
Stores

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.

GraphQL out of beta | End of life for deprecated fields

2 November 2020
Announcement
GraphQLDeprecation

We are moving the commercetools GraphQL API out of beta on 31 January 2021.

During the beta phase, we gathered insights about operational complexity and usage and decided to make a few changes.

  • Deprecated fields will be removed from the GraphQL API.
  • Deprecated OAuth scopes will be removed from the GraphQL API. The deprecated scopes are often too broad to allow for meaningful access right restrictions.

Check the list of deprecated fields for suggestions what to use instead.

Total prices for giftLineItems in cart predicates

29 October 2020
Enhancement
Pricing

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

26 October 2020
Enhancement
Messages

When a resource is deleted with the dataErasure parameter set to true, the ResourceDeleted Payload will contain the dataErasure parameter as well to allow downstream systems to erase the data as well.

Added Messages GraphQL Query Schema

21 October 2020
Enhancement
GraphQLMessages

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 the Query type.
    • Added the messages field to the Query type.
Read more...

Custom Objects are supported in Subscriptions and are now limited

14 October 2020
Enhancement
CustomizationLimits

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

14 October 2020
Enhancement
SecurityCustomization

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

12 October 2020
Announcement
Limits

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

8 October 2020
Enhancement
GraphQLStoresCustomization

You can now add Custom Fields to Stores.

  • [GraphQL API] Changed the Store type:
    • Added the custom field to the Store type.
Read more...

Added the QueryTimedOut error code

6 October 2020
Enhancement

When a query times out, the API now returns BadRequest with the QueryTimedOut error code instead of the General error code.

Filtering for Store Order Imports

6 October 2020
Enhancement
StoresOrders

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.

Product Variant Added Message

25 September 2020
Enhancement
MessagesProduct Catalog

When a product variant is created, a message will be triggered.

Correlation ID with cross-origin resource sharing

23 September 2020
Enhancement
Security

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

16 September 2020
Enhancement
CustomizationDeprecation

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

7 September 2020
Enhancement
CustomizationStoresGraphQL

You can now define custom fields on Stores.

This feature includes the following changes:

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

7 September 2020
Enhancement
CartsOrdersGraphQL

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 the LineItem type.
Read more...

Updates to the GraphQL schema

28 August 2020
Enhancement
GraphQLCustomization

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 the Query type.
    • Added the customObjects field to the Query type.
  • [GraphQL API] Changed the Mutation type:
    • Added the createOrUpdateCustomObject field to the Mutation type.
    • Added the deleteCustomObject field to the Mutation type.
Read more...

New deprecated fields on GraphQL

27 August 2020
Enhancement
DeprecationGraphQLCartsCustomizationProduct CatalogSecurity

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 in LineItemDraftOutput type.
    • Field distributionChannel was deprecated in LineItemDraftOutput type.
    • Added the distributionChannelResId field to the LineItemDraftOutput type.
    • Added the supplyChannelResId field to the LineItemDraftOutput type.
  • [GraphQL API] Changed the CustomLineItemDraftOutput type:
    • Field taxCategory was deprecated in CustomLineItemDraftOutput type
    • Added the taxCategoryResId field to the CustomLineItemDraftOutput type.
  • [GraphQL API] Changed the Initiator type:
    • Field customer was deprecated in Initiator type.
    • Field user was deprecated in Initiator type.
    • Added the customerRef field to the Initiator type.
    • Added the userRef field to the Initiator type.
  • [GraphQL API] Changed the NestedAttributeDefinitionType type:
    • Field typeReference was deprecated in NestedAttributeDefinitionType type
    • Added the typeRef field to the NestedAttributeDefinitionType type.
  • [GraphQL API] Changed the CustomFieldsCommand type:
    • Field type was deprecated in CustomFieldsCommand type
    • Added the typeResId field to the CustomFieldsCommand type.

Added setDistributionChannel action for Carts and OrderEdits

25 August 2020
Enhancement
CartsOrders

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 to CartUpdateAction type
  • [GraphQL API] Changed the StagedOrderUpdateAction type:
    • Input field setLineItemDistributionChannel was added to StagedOrderUpdateAction type
  • [GraphQL API] Changed the MyCartUpdateAction type:
    • Input field setLineItemDistributionChannel was added to MyCartUpdateAction type
Read more...

Added addedAt field to Cart's LineItems

24 August 2020
Enhancement
CartsOrders

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 to AddStagedOrderLineItem type
  • [GraphQL API] Changed the LineItemDraft type:
    • Input field addedAt was added to LineItemDraft type
  • [GraphQL API] Changed the AddCartLineItem type:
    • Input field addedAt was added to AddCartLineItem type
  • [GraphQL API] Changed the LineItem type:
    • Added the addedAt field to the LineItem type.
  • [GraphQL API] Changed the LineItemDraftOutput type:
    • Added the addedAt field to the LineItemDraftOutput type.
  • [GraphQL API] Changed the AddMyCartLineItem type:
    • Input field addedAt was added to AddMyCartLineItem type
  • [GraphQL API] Changed the MyLineItemDraft type:
    • Input field addedAt was added to MyLineItemDraft type
Read more...

Added ReferencedResourceNotFound error type

24 August 2020
Enhancement

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.

Added Store based inventory filtering

17 August 2020
Enhancement
InventoryStoresProduct Catalog

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 to StoreUpdateAction type
    • Input field addSupplyChannel was added to StoreUpdateAction type
    • Input field removeSupplyChannel was added to StoreUpdateAction type
  • [GraphQL API] Changed the CreateStore type:
    • Input field supplyChannels was added to CreateStore type
  • [GraphQL API] Changed the Store type:
    • Added the supplyChannels field to the Store type.
    • Added the supplyChannelsRef field to the Store type.
Read more...

GraphQL API to query project-specific limits

23 July 2020
Enhancement
GraphQLLimits

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 the Query type.
Read more...

Added QueryComplexityLimitExceeded Error Code to the GraphQL API

21 July 2020
Enhancement
GraphQL

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

21 July 2020
Enhancement
GraphQLOrders

Order edits can now be queried, created, updated, and deleted using the GraphQL API.

Read more...

Added Store based price filtering

14 July 2020
Enhancement
PricingProduct CatalogStores

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 to StoreUpdateAction type
    • Input field addDistributionChannel was added to StoreUpdateAction type
    • Input field removeDistributionChannel was added to StoreUpdateAction type
  • [GraphQL API] Changed the CreateStore type:
    • Input field distributionChannels was added to CreateStore type
  • [GraphQL API] Changed the Store type:
    • Added the distributionChannelsRef field to the Store type.
    • Added the distributionChannels field to the Store type.
Read more...

Added OrderEdit GraphQL query and mutation schema

10 July 2020
Enhancement

Order edits can now be queried, created, updated, and deleted using the GraphQL API.

Read more...

Introduced Limits on Zones, Tax Categories, Shipping Methods, Customer Groups, Customers, Shopping Lists and Order Edits

8 July 2020
Announcement
Limits

Introduced new limits for new projects on the commercetools platform.

The new limits and their defaults are:

  • Zones per project: 100
  • Tax Categories per project: 100
  • Shipping Methods per project: 100
  • Customer Groups per project: 1000
  • Customers per project: 1000000
  • Shopping Lists per project: 10000000
  • Carts per project: 10000000
  • Order Edits per project: 100000

Projects created before 08 July 2020 are not subject to the new limits listed above.

For newer projects, all of the limits listed above can be increased if needed after we have reviewed the performance impact on your project. To request a limit increase, contact us via the Support Portal, specifying your project region, project key and your use case.

  • [API] If your project contains more than the maximum allowed amount of Carts or Shopping Lists, the commercetools platform will automatically delete the resources that have been least recently modified.
Read more...

Refresh tokens expiration

1 July 2020
Announcement
Security

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

1 July 2020
Enhancement
Pricing

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.

29 June 2020
Enhancement
Customization

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

24 June 2020
Enhancement
CartsPricing

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.

Get, update, and delete My Shopping Lists by key

16 June 2020
Enhancement
Carts

We now support getting, updating, and deleting My Shopping Lists by key.

Added GraphQL mutations for Payments and MyPayments

29 May 2020
Enhancement
GraphQLPayments

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 the Me type.
    • Added the payment field to the Me type.
  • [GraphQL API] Changed the StoreUpdateAction type:
    • Input field setSupplyChannels was added to StoreUpdateAction type
  • [GraphQL API] Changed the CreateStore type:
    • Input field supplyChannels was added to CreateStore type
  • [GraphQL API] Changed the Mutation type:
    • Added the createPayment field to the Mutation type.
    • Added the createMyPayment field to the Mutation type.
    • Added the updatePayment field to the Mutation type.
    • Added the updateMyPayment field to the Mutation type.
    • Added the deletePayment field to the Mutation type.
    • Added the deleteMyPayment field to the Mutation type.
Read more...

Added Extension GraphQL query and mutation schema

21 April 2020
Enhancement
CustomizationGraphQL

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 the Query type.
    • Added the extension field to the Query type.
  • [GraphQL API] Changed the Mutation type:
    • Added the deleteExtension field to the Mutation type.
    • Added the updateExtension field to the Mutation type.
    • Added the createExtension field to the Mutation type.
Read more...

Added a project activation endpoint for the Image Search API

20 April 2020
Enhancement
Machine LearningProduct CatalogSearch

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.

Customer address by key selection for updates

9 April 2020
Enhancement
Customers

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.

Input Variables in Query Predicates

9 April 2020
Enhancement
Search

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

8 April 2020
Enhancement
GraphQLMessages

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 the Query type.
    • Added the subscriptions field to the Query type.
  • [GraphQL API] Changed the Mutation type:
    • Added the updateSubscription field to the Mutation type.
    • Added the deleteSubscription field to the Mutation type.
    • Added the createSubscription field to the Mutation type.
Read more...

OAuth scopes for categories

7 April 2020
Enhancement
Security

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 on Google Cloud Sydney

2 April 2020
Enhancement

The commercetools platform is now available in Australia on Google Cloud Sydney in addition to our existing Regions in North America and Europe. Find the URLs to the commercetools API here. Log in here.

Machine Learning APIs are not available on Google Cloud Sydney.

Changed endpoints to get the matching shipping methods for a location and an order edit

24 March 2020
Enhancement
DeprecationOrders

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.

Inventory Entry Created Message

24 March 2020
Enhancement
MessagesProduct Catalog

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.

OAuth scopes for cart discounts, customer groups, tax categories and shipping methods

16 March 2020
Enhancement
CartsOrdersPricingSecurity

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

12 March 2020
Enhancement
CartsProduct CatalogSearchStores

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.

Added Review GraphQL query and mutation schema

9 March 2020
Enhancement
GraphQLProduct CatalogSearch

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 implements ReviewTarget interface
  • [GraphQL API] Changed the Product type:
    • Product object type now implements ReviewTarget interface
  • [GraphQL API] Changed the Query type:
    • Added the reviews field to the Query type.
    • Added the review field to the Query type.
  • [GraphQL API] Changed the Mutation type:
    • Added the updateReview field to the Mutation type.
    • Added the deleteReview field to the Mutation type.
    • Added the createReview field to the Mutation type.
Read more...

Setting the store on existing orders

4 March 2020
Enhancement
OrdersStores

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).

Add localized description field for shipping method

3 March 2020
Enhancement
CartsOrders

To be able to describe a shipping method in different languages, the following changes have been made:

Access States Using Key

19 February 2020
Enhancement
Customization

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.

Types GraphQL mutations

17 February 2020
Enhancement
CustomizationGraphQL

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 the Mutation type.
    • Added the createTypeDefinition field to the Mutation type.
    • Added the deleteTypeDefinition field to the Mutation type.
Read more...

States GraphQL Mutations

17 February 2020
Enhancement
CustomizationGraphQL

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 the Mutation type.
    • Added the updateState field to the Mutation type.
    • Added the deleteState field to the Mutation type.
Read more...

Changed endpoints to get the matching shipping methods for a cart by cart id

6 February 2020
Enhancement
CartsDeprecation

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.

commercetools on AWS, new API host names

3 February 2020
Announcement
Security

The commercetools platform is now available on AWS in addition to the existing Regions which are operated on the Google Cloud Platform. All self sign-up accounts continue to be created in Google Cloud Regions.

Machine Learning APIs are not available on the AWS Regions.

To increase region and cloud provider transparency, a new host naming scheme has been introduced for the API. Existing API host names will continue to be available as aliases for backwards compatibility.

Merchant Center and IMPEX will receive new host URLs later in a separate step. Merchant Center users will then automatically be forwarded to the new URLs.

Although the deprecated hostnames like api.sphere.io (Google Cloud, Belgium), api.commercetools.com (Google Cloud, Belgium) and api.commercetools.co (Google Cloud, Iowa) and their respective counterparts for the auth hosts remain intact as aliases, we strongly encourage changing your configuration to the new host name structure.

Further Changes:

  • [Documentation] Integrated IMPEX documentation content into the general "Developer Center" documentation section

Changed endpoints to get cart by customer id

27 January 2020
Enhancement
CustomersDeprecation

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.

Updates to the GraphQL references

17 January 2020
Enhancement
CartsGraphQLPricing

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 the ProductDiscount type.
  • [GraphQL API] Changed the ProductPrice type:
    • ProductPrice.channel field type changed from Reference to Channel
    • ProductPrice.customerGroup field type changed from Reference to CustomerGroup
    • Added the customerGroupRef field to the ProductPrice type.
    • Added the channelRef field to the ProductPrice type.
  • [GraphQL API] Changed the ShippingInfo type:
    • Added the taxCategoryRef field to the ShippingInfo type.
    • ShippingInfo.taxCategory field type changed from Reference to TaxCategory
  • [GraphQL API] Changed the CartDiscount type:
    • Added the referenceRefs field to the CartDiscount type.
  • [GraphQL API] Changed the InventoryEntry type:
    • InventoryEntry.supplyChannel field type changed from Reference to Channel
    • Added the supplyChannelRef field to the InventoryEntry type.
  • [GraphQL API] Changed the DiscountCode type:
    • Added the referenceRefs field to the DiscountCode type.
Read more...

Project setting to automatically delete carts and shopping lists

8 January 2020
Enhancement
CartsCustomization

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.

Add Channel GraphQL mutations

3 January 2020
Enhancement
GraphQL
  • [GraphQL API] Changed the Mutation type:
    • Added the createChannel field to the Mutation type.
    • Added the updateChannel field to the Mutation type.
    • Added the deleteChannel field to the Mutation type.
  • [GraphQL API] Added the following types to the GraphQL schema: ChannelDraft, GeometryInput, ChannelUpdateAction, SetChannelRoles, AddChannelRoles, RemoveChannelRoles, ChangeChannelDescription, ChangeChannelKey, ChangeChannelName, SetChannelAddress, SetChannelCustomField, SetChannelCustomType, SetChannelGeoLocation.
Read more...

Subscriptions support CloudEvents version 1.0

23 December 2019
Enhancement
Messages

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).

OAuth scopes for discount codes

17 December 2019
Enhancement
PricingSecurity

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

17 December 2019
Enhancement
GraphQLProduct Catalog

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 the Channel type.
  • [GraphQL API] Changed the Product type:
    • Added the reviewRatingStatistics field to the Product type.
Read more...

Shipping methods for a cart with store-based OAuth permissions

13 December 2019
Enhancement
CartsGraphQLOrdersSecurity

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.

Increased Missing Data Product Set Limit Maximum to 100000

6 December 2019
Enhancement
LimitsMachine Learning

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 to 100000.

Category Recommendations API is not activated by default for all production projects anymore.

25 November 2019
Enhancement
CustomizationMachine LearningProduct Catalog

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

19 November 2019
Enhancement
CartsGraphQL
  • [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 the Mutation type.
    • Added the createShoppingList field to the Mutation type.
    • Added the deleteShoppingList field to the Mutation type.
    • Added the createMyShoppingList field to the Mutation type.
    • Added the updateShoppingList field to the Mutation type.
    • Added the deleteMyShoppingList field to the Mutation type.
Read more...

Retrieve ShoppingLists via GraphQL

1 November 2019
Enhancement
CartsGraphQL

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 the Me type.
    • Added the shoppingLists field to the Me type.
  • [GraphQL API] Changed the InStoreMe type:
    • Added the shoppingList field to the InStoreMe type.
    • Added the shoppingLists field to the InStoreMe type.
  • [GraphQL API] Changed the Query type:
    • Added the shoppingList field to the Query type.
    • Query object type now implements ShoppingListQueryInterface interface
    • Added the shoppingLists field to the Query type.
  • [GraphQL API] Changed the MeQueryInterface type:
    • Added the shoppingLists field to the MeQueryInterface type.
    • Added the shoppingList field to the MeQueryInterface type.
Read more...

My profile for Stores in Beta

25 October 2019
Enhancement
CustomersGraphQLSecurityStores

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 implements ActiveCartInterface interface
    • Me object type now implements OrderQueryInterface interface
    • Me object type now implements CartQueryInterface interface
  • [GraphQL API] Changed the CustomerSignMeUpDraft type:
    • Input field stores was added to CustomerSignMeUpDraft type
  • [GraphQL API] Changed the InStoreMe type:
    • InStoreMe object type now implements CartQueryInterface interface
    • Added the customer field to the InStoreMe type.
    • InStoreMe object type now implements OrderQueryInterface interface
    • InStoreMe object type now implements ActiveCartInterface interface
  • [GraphQL API] Changed the Mutation type:
    • Argument storeKey was added to Mutation.customerConfirmMyEmail field
    • Argument storeKey was added to Mutation.updateMyCustomer field
    • Argument storeKey was added to Mutation.customerChangeMyPassword field
    • Argument storeKey was added to Mutation.customerResetMyPassword field
    • Argument storeKey was added to Mutation.customerSignMeUp field
    • Argument storeKey was added to Mutation.deleteMyCustomer field
    • Argument storeKey was added to Mutation.customerSignMeIn field
  • [API] New store-based OAuth scopes manage_my_profile:{projectKey}:{storeKey}.

Added `geoLocation` field to the `Channel` GraphQL type

8 October 2019
Enhancement
GraphQL
  • [GraphQL API] Added the following types to the GraphQL schema: Geometry, Point.
  • [GraphQL API] Changed the Channel type:
    • Added the geoLocation field to the Channel type.
Read more...

Publishing the Postman collection

19 September 2019
Enhancement

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

17 September 2019
Enhancement
OrdersStores

You can now assign an order to a Store when using the Order Import API.

OAuth 2.0 Scope for published product projections

4 September 2019
Enhancement
Product CatalogSecurity

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

Introducing Stores for Customers in Beta

29 August 2019
Enhancement
CustomersGraphQLSecurityStores

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.

Additional key fields in Discount Predicates

26 August 2019
Enhancement
Pricing

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

Added machine learning endpoint for product search with images in Beta

21 August 2019
Feature
Machine LearningProduct Catalog

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

20 August 2019
Enhancement
CustomizationDeprecationGraphQL

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 the Category type.
    • Field customFieldsRaw was deprecated in Category type
    • Field customFields was deprecated in Category type
  • [GraphQL API] Changed the Channel type:
    • Added the custom field to the Channel type.
    • Field customFields was deprecated in Channel type
    • Field customFieldsRaw was deprecated in Channel type
  • [GraphQL API] Changed the ProductPrice type:
    • Added the custom field to the ProductPrice type.
    • Field customFieldsRaw was deprecated in ProductPrice type
    • Field customFields was deprecated in ProductPrice type
  • [GraphQL API] Changed the Cart type:
    • Added the custom field to the Cart type.
    • Field customFieldsRaw was deprecated in Cart type
    • Field customFields was deprecated in Cart type
  • [GraphQL API] Changed the CustomerGroup type:
    • Added the custom field to the CustomerGroup type.
    • Field customFieldsRaw was deprecated in CustomerGroup type
    • Field customFields was deprecated in CustomerGroup type
  • [GraphQL API] Changed the Asset type:
    • Added the custom field to the Asset type.
    • Field customFields was deprecated in Asset type
    • Field customFieldsRaw was deprecated in Asset type
  • [GraphQL API] Changed the CustomLineItem type:
    • Added the custom field to the CustomLineItem type.
    • Field customFields was deprecated in CustomLineItem type
    • Field customFieldsRaw was deprecated in CustomLineItem type
  • [GraphQL API] Changed the Customer type:
    • Added the custom field to the Customer type.
    • Field customFieldsRaw was deprecated in Customer type
    • Field customFields was deprecated in Customer type
  • [GraphQL API] Changed the CartDiscount type:
    • Added the custom field to the CartDiscount type.
    • Field customFields was deprecated in CartDiscount type
    • Field customFieldsRaw was deprecated in CartDiscount type
  • [GraphQL API] Changed the Payment type:
    • Added the custom field to the Payment type.
    • Field customFieldsRaw was deprecated in Payment type
    • Field customFields was deprecated in Payment type
  • [GraphQL API] Changed the CategorySearch type:
    • Added the custom field to the CategorySearch type.
    • Field customFields was deprecated in CategorySearch type
    • Field customFieldsRaw was deprecated in CategorySearch type
  • [GraphQL API] Changed the Order type:
    • Added the custom field to the Order type.
    • Field customFieldsRaw was deprecated in Order type
    • Field customFields was deprecated in Order type
  • [GraphQL API] Changed the InventoryEntry type:
    • Added the custom field to the InventoryEntry type.
    • Field customFields was deprecated in InventoryEntry type
    • Field customFieldsRaw was deprecated in InventoryEntry type
  • [GraphQL API] Changed the LineItem type:
    • Added the custom field to the LineItem type.
    • Field customFields was deprecated in LineItem type
    • Field customFieldsRaw was deprecated in LineItem type
  • [GraphQL API] Changed the DiscountCode type:
    • Added the custom field to the DiscountCode type.
    • Field customFields was deprecated in DiscountCode type
    • Field customFieldsRaw was deprecated in DiscountCode type
Read more...

Added new messages for products

19 August 2019
Enhancement
MessagesProduct Catalog

The commercetools platform now emits messages when adding and removing a product from a category.

Use Customer's key field in Cart Discount Predicates

21 June 2019
Enhancement
CartsCustomersPricing

You can now use a Customer's key field in Cart Discount Predicates.

HTTP API methods for Stores in Beta

4 June 2019
Enhancement
CartsOrdersSecurityStores

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.

User defined key attribute on Product Discount

4 June 2019
Enhancement
GraphQLPricingProduct Catalog

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 the ProductDiscount and ProductDiscountDraft 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 the ProductDiscount type.
  • [GraphQL API] Changed the ProductDiscountUpdateAction type:
    • Input field setKey was added to ProductDiscountUpdateAction type
  • [GraphQL API] Changed the Mutation type:
    • Mutation.updateProductDiscount(id) description is changed
    • Argument key was added to Mutation.updateProductDiscount field
    • Mutation.deleteProductDiscount(id) description is changed
    • Mutation.updateProductDiscount(id) type changed from String! to String
    • Mutation.deleteProductDiscount(id) type changed from String! to String
    • Argument key was added to Mutation.deleteProductDiscount field
Read more...

New update actions for custom types

28 May 2019
Enhancement
Data Modeling

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.

User defined key attribute on Cart Discount

27 May 2019
Enhancement
CartsGraphQLPricing

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 to CartDiscountDraft type
  • [GraphQL API] Changed the Query type:
    • Query.cartDiscount(id) description is changed
    • Argument key was added to Query.cartDiscount field
    • Query.cartDiscount(id) type changed from String! to String
  • [GraphQL API] Changed the CartDiscount type:
    • Added the key field to the CartDiscount type.
  • [GraphQL API] Changed the CartDiscountUpdateAction type:
    • Input field setKey was added to CartDiscountUpdateAction type
  • [GraphQL API] Changed the Mutation type:
    • Mutation.updateCartDiscount(id) type changed from String! to String
    • Mutation.deleteCartDiscount(id) description is changed
    • Argument key was added to Mutation.updateCartDiscount field
    • Mutation.deleteCartDiscount(id) type changed from String! to String
    • Argument key was added to Mutation.deleteCartDiscount field
    • Mutation.updateCartDiscount(id) description is changed
Read more...

deleteDaysAfterLastModification field is out of Beta

16 May 2019
Enhancement
Carts

The deleteDaysAfterLastModification field has been taken out of Beta. The field's current functionality has not changed.

Added the lastModifiedBy and createdBy fields

14 May 2019
Enhancement
Security

Added the lastModifiedBy and createdBy fields to many representations in the API. These fields add change history information for API calls to these resources as of 2019-02-01. Resources created or last modified before 2019-02-01 will not contain these fields. The fields only track changes from direct API calls by the Merchant Center or client applications. The fields may not track changes from the Admin Center, or from internal platform services, like product discount or inventory updates.

Client applications can also use a new HTTP header, X-External-User-ID, when making API calls to track changes initiated by a specific user's actions. The lastModifiedBy and createdBy fields return this ID if it is provided. Do not pass personally identifying information to commercetools using the X-External-User-ID header. See Client Logging for more information.

Added GraphQL support for Project

8 May 2019
Enhancement
GraphQLSearch
  • [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 to Query type
  • [GraphQL API] Type Mutation was changed:
    • Field updateProject was added to Mutation type

Changed the calculation of the Similar Products maximum comparisons limit

6 May 2019
Enhancement
LimitsMachine LearningProduct Catalog

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 ProductSetSelectors 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

29 April 2019
Announcement
DeprecationSecurity

To improve platform security, On 6 May 2019 the commercetools platform API endpoints will no longer accept access tokens as URI parameters.

All API Clients should provide access tokens to the commercetools platform API using the Authorization header as follows:

POST /{{projectKey}}/channels HTTP/1.1 Host: api.{region}.{cloudProvider}.commercetools.com Authorization: Bearer {accesstoken} ...

For more information, see:

Renamed Similar Product's ProductSelector to ProductSetSelector

24 April 2019
Enhancement
Machine LearningProduct Catalog

Renamed the Similar Products's ProductSelector representation to ProductSetSelector to better reflect its functionality. For more information, see Beta features.

  • [API] Renamed ProductSelector to ProductSetSelector in the Similar Products API.

Introducing Stores in Beta

17 April 2019
Enhancement
CartsGraphQLOrdersSecurityStores

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} and view_stores:{projectKey}.
  • [API] New store-based OAuth scopes manage_orders:{projectKey}:{storeKey} and view_orders:{projectKey}:{storeKey}.
  • [GraphQL API] Added Stores, and the store fields on the types Cart, CartDraft and Order.
  • [GraphQL API] Added the query fields inStore and inStores, as well as a storeKey argument to cart and order mutations. These can be used with the new store-based OAuth scopes.

External OAuth tokens (Beta)

25 March 2019
Enhancement
CustomersSecurity

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 Extension timeout is configurable

22 March 2019
Enhancement
CustomizationLimits

The maximum time the commercetools platform waits for a response from an API Extension is now configurable. The maximum timeout is still limited to 2000 ms. This limit can be increased per project after we review the performance impact. Please contact Support via the Support Portal and provide the region, project key and use case.

Set discounted prices from an external service when creating a Price

19 March 2019
Enhancement
Pricing

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.

Added Missing Data endpoints

27 February 2019
Feature
Machine Learning

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.

Changed the default value and range of the limit field in the Similar Products API

21 February 2019
Announcement
LimitsMachine Learning

The default value of the limit field in the Similar Products API search request is now 20. The maximum allowed value is now 500 for consistency with the rest of the commercetools HTTP API.

  • [API] Changed the default value and value range of limit in the Similar Products API update action.

Introduced Limits on Products and Categories

21 February 2019
Announcement
LimitsProduct Catalog

Introduced new limits for new projects on the commercetools platform for products and categories.

The new limits and their defaults are:

  • Product variants per product: 100
  • Categories per project: 10000

The following existing limits have been lowered:

  • Query maximum offset: lowered from 100000 to 10000
  • Search maximum offset: lowered from 100000 to 10000
  • Prices per product variant: lowered from 700 to 100

Projects created before 2019-02-21 are not subject to the new limits listed above.

For newer projects, all of the limits listed above can be increased if needed after we have reviewed the performance impact on your project. To request a limit increase, contact us via the Support Portal, specifying your project region, project key and your use case.

Normalize currencyCode field in the Similar Products API

31 January 2019
Enhancement
Machine Learning

The Similar Products API now uses the currencyCode field for consistency with the rest of the commercetools HTTP API.

  • [API] Added the currencyCode field to the Similar Products API update action. This replaces the currency field.

Cart and Order as Reference Type

24 January 2019
Enhancement
CartsData ModelingOrders

You can now use Cart and Orders as ReferenceTypes when creating a Custom Type.

Change attribute definition order by name

21 January 2019
Enhancement
Data Modeling

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

21 January 2019
Enhancement
GraphQLOrders

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 the Mutation type.
    • Added the createOrderFromCart field to the Mutation type.
    • Added the createMyOrderFromCart to the Mutation type.
    • Added the deleteOrder field to the Mutation type.
Read more...

Payments available in the GraphQL schema

21 January 2019
Enhancement
GraphQLPayments

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 the Query type.
    • Added the payment field to the Query type.
  • [GraphQL API] Changed the PaymentInfo type:
    • Added the payments field to the PaymentInfo type.
Read more...

Add ProductVariant update action now includes an assets field

15 January 2019
Enhancement
Product Catalog

The Add ProductVariant update action now includes an assets field for providing images when creating a Product Variant.

External Tax Rate supports includedInPrice

8 January 2019
Enhancement
Carts

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.

7 January 2019
Enhancement
GraphQLSecurity

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

4 January 2019
Enhancement
CartsOrdersProduct Catalog

You can now reference a Channel using a user-defined key field in the following scenarios:

Orders available in the GraphQL schema

2 January 2019
Enhancement
GraphQLOrders

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 the Me type
    • Added the order field to the Me type
  • [GraphQL API] Changed the Query type:
    • Added the orders field to the Query type
    • Added the order field to the Query type
Read more...

Introduced ShippingInfoImportDraft representation

19 December 2018
Enhancement
CartsOrdersPricingProduct Catalog

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:

This lets you perform set and update actions with more flexibility.

Improved product projection search for several languages

30 November 2018
Enhancement
Search
  • [API] Improved product projection search, in particular text analysis during a full text search, for the following languages:
    • Korean (language tag ko)
    • Polish (language tag pl)
    • Latvian (language tag lv)
    • Slovak (language tag sk)

Added the Similar Products Search endpoint

27 November 2018
Feature
Machine Learning

Released Similar Products Machine Learning API, which allows users to search for similar products in a product catalog. You can use this feature to detect and clean up product duplicates.

API for API Clients

23 November 2018
Feature
Security

Introduced a new API resource for managing API Clients. This is especially useful for infrastructure-as-code tooling, as well as for API secrets rotating on a regular basis.

  • [API] New OAuth scopes manage_api_clients:{projectKey} and view_api_clients:{projectKey}
  • [API] New endpoint for managing API Clients

Added Assets to Category Search

19 November 2018
Enhancement
GraphQLProduct CatalogSearch

It is now possible to retrieve category assets via GraphQL API category search and category auto completion.

Read more...

User defined key attribute on Shipping Zones

15 November 2018
Enhancement
CartsOrders

Shipping Zones now have a user defined key attribute. The key attribute is used when creating or updating a ShippingMethod to identify a Zone.

ReturnItems for CustomLineItems

6 November 2018
Enhancement
Orders

It is now possible to handle returns for goods that were ordered as CustomLineItems.

Introduced a customerNumber field in the UserProvidedIdentifiers

6 November 2018
Enhancement
CustomersMessages

Introduced a new field on Messages that uniquely identifies which Customer is concerned with the message.

  • [API] Added field customerNumber in the UserProvidedIdentifiers of messages.
    This field will only be filled if the customerNumber field on the respective Customer has a value.

Added machine learning endpoint for recommending categories for products

2 November 2018
Feature
Machine LearningProduct Catalog

Introduced Machine Learning APIs to autonomously learn from data and make automated predictions. This reduces the amount of manual work required to manage projects.

The first machine learning API endpoint available is the Category Recommendations endpoint. The Category Recommendations endpoint suggests categories that best fit a given product. Further information on the background of this feature can be found on the tech blog.

Shipping Methods - set or update the Tax Category by Key

18 October 2018
Enhancement
Pricing

It is now possible to set or update the TaxCategory on a ShippingMethod by its id or by its Key.

Added new messages related to discounted price on products

16 October 2018
Enhancement
MessagesPricing

We introduced new Messages that are emitted when the DiscountedPrice on a ProductVariant has changed.

Product projection search - explicit sorting by score

12 October 2018
Enhancement
Search

It is now possible to explicitly sort by relevance score in product projection search giving you more control over the order of search results.

OrderEdit dry run

11 October 2018
Enhancement
Orders

With this release, it is possible to explicitly trigger a preview of the order when either creating or updating an OrderEdit. This feature is enabled by setting the new parameter dryRun to true.

Documented TTL for token to reset customer password

10 October 2018
Resolved Issue
Customers

We now documented the parameter to set the life span of the token that is generated for resetting the password of a Customer.

The Messages HTTP API can delete old messages

8 October 2018
Enhancement
CustomizationMessages

In the Project Settings, you can configure after how many days messages will be deleted from the Messages Query HTTP API. The default for new projects is 15 days.

Existing projects are not automatically migrated to the new feature. However, we encourage you to manually migrate to ensure a stable performance of the Messages Query HTTP API.

  • [API] The Messages Configuration has a new field deleteDaysAfterCreation.
  • [API] A new update action to change the messages configuration has been added. This supersedes the previous update action changeMessagesEnabled, which has been removed from the documentation (but can still be used for backwards compatibility reasons).

Category and Product Mutations added

2 October 2018
Enhancement
GraphQLProduct Catalog

It is now possible to create/update/delete categories as well as products via GraphQL API.

  • [GraphQL API] Type Mutation was changed:
    • Field createCategory was added to Mutation type
    • Field updateCategory was added to Mutation type
    • Field deleteCategory was added to Mutation type
    • Field createProduct was added to Mutation type
    • Field updateProduct was added to Mutation type
    • Field deleteProduct was added to Mutation type

Additionally the following query fields where added:

  • [GraphQL API] Type Category was changed:

    • Field assets was added to Category type
  • [GraphQL API] Type ProductVariant was changed:

    • Field assets was added to ProductVariant type
  • [GraphQL API] Type ProductPrice was changed:

    • Field tiers was added to ProductPrice type
Read more...

HTTPS security changes activated

1 October 2018
Announcement
Security

Following the announcement to update the SSL setup we only support TLS 1.2 for all encrypted connections from now on. We have dropped support for older SSL/TLS versions. For exact details on the SSL/TLS setup that we support, refer to the Security section of the general HTTP API documentation.

Temporary URLs that we provided for application testing are not active anymore.

Add OAuth scope to manage project settings

28 September 2018
Enhancement
Security
  • [API] The new manage_project_settings scope grants access to modifying and viewing the project settings. Previously, only the manage_project scope did.

Added SetLineItemPrice for Orders and OrderCustomerGroupSet message

27 September 2018
Enhancement
MessagesOrdersPricing

Prices on line items can now be updated on Orders in the context of Order Edits. A new message has been introduced to get informed about changes on the CustomerGroup of an Order.

Subscriptions out of Beta

19 September 2018
Announcement
Messages

We are announcing that Subscriptions have been taken out of Beta. After releasing several enhancements over the last weeks, this is being done with no further changes to the functionality of Subscriptions.

Shopping List API out of Beta

17 September 2018
Announcement
Carts

We are announcing that the Shopping List API has been taken out of Beta. This is being done without any changes or enhancements to the API's current functionality.

Messages and Change Subscriptions now have user-provided identifiers

14 September 2018
Enhancement
Messages

User-provided identifiers are identifiers that are not set by the API (like the id field is), but provided by the API user (like the key or orderNumber fields). In particular the design goal of the key field is to allow client applications to only use the key field, and ignore the API-provided id field.

This release progresses towards the design goal by adding the key field among other user-provided identifiers into data structures commonly used in asynchronous processing by Subscriptions and the Messages Endpoint.

Change Subscriptions now support ten more resource types

13 September 2018
Enhancement
Messages

The following ten resourceTypeIds are now supported by Change Subscriptions:

  • cart-discount
  • channel
  • discount-code
  • extension
  • product-discount
  • shopping-list
  • subscription
  • state
  • tax-category
  • type

Cart updates prices, taxes etc. on every update

12 September 2018
Enhancement
CartsPricing

Before, the cart decided, based on the update actions, whether to update the product prices and tax rates. We've received feedback that this was unpredictable and confusing.

Therefore, the cart now updates the product prices and tax rates, along with discounts and the shipping info, on every update. No change to your code is necessary, but you may remove superfluous Recalculate update actions (if they don't update the product data).

  • [API] The Update Cart section now contains a description of the updates
  • [API] The description of the Recalculate update action has been changed to reflect the two remaining use cases for it

Added Order Edits

7 September 2018
Enhancement
Orders

You can now apply financial changes after an Order has been placed with OrderEdits. OrderEdits are wrappers that capture OrderUpdateActions which can create a preview of changes and apply them to the Order.

The OrderEdit tutorial shows some examples how edits can be performed.

This feature is in beta so we do not guarantee that the API is in its final shape.

HTTPS security changes

4 September 2018
Enhancement
DeprecationSecurity

We are updating the SSL setup to only support TLS 1.2 for all encrypted connections. Starting October 2018, we will drop support for older SSL/TLS versions. For exact details on the SSL/TLS setup that we will support refer to the Security section of the general HTTP API documentation.

For application testing, we offer temporary URLs that already support the new setup. These URLs are available now but only until end of September when the changes go into effect. The test URLs are:

For EU:

  • https://auth-tls12.commercetools.com
  • https://api-tls12.commercetools.com

For US:

  • https://auth-tls12.commercetools.co
  • https://api-tls12.commercetools.co

Please note again that these URLs are for testing purposes only and will be shut down as soon as the main setup has changed.

The SSL setup change as outlined here will go into effect on Monday, 1 October 2018 between 9 and 11 AM (UTC).

Added new error codes and extended existing error information

4 September 2018
Enhancement
CartsCustomersOrdersPricing

We have introduced new error codes that should help you analyzing the root cause of 'Bad Request' type errors by giving more specific error messages.

We have enriched an existing error code with additional information to be more specific on the error cause.

We have added the error code that can occur when removing enum values from an attribute definitions that are still in use by products.

Added setValidFromAndUntil to cart discounts and discount codes

28 August 2018
Enhancement
CartsGraphQLPricing

It is now possible to set the validFrom and validUntil values for CartDiscounts and DiscountCode in the same update action. We also added support for these update actions to the GraphQL API.

Added reference expansion on more shipping method related endpoints

27 August 2018
Enhancement
Carts

We have extended the support for Reference Expansion to ShippingMethod-related endpoints.

Order Deleted Message

27 August 2018
Enhancement
MessagesOrders

You can now be notified about deletion of orders that have been created for test purposes, for instance.

Add GraphQL queries for State

27 August 2018
Enhancement
GraphQL

Query for States is now supported on the GraphQL API too.

  • [GraphQL API] Type Query was extended:

    • Field states was added to Query type.
    • Field state was added to Query type.
  • [Documentation] Fix documentation of State:

    • The field name is optional.
    • The field description is optional.
  • [Documentation] Fix documentation of StateDraft:

Added GraphQL support for Carts

14 August 2018
Enhancement
CartsCustomersGraphQL
  • [GraphQL API] The following types were added in the GraphQL schema: AddCartCustomLineItem, AddCartDiscountCode, AddCartItemShippingAddress, AddCartLineItem, AddCartPayment, AddCartShoppingList, AddMyCartLineItem, ApplyCartDeltaToCustomLineItemShippingDetailsTargets, ApplyCartDeltaToLineItemShippingDetailsTargets, BaseMoneyInput, Cart, CartDraft, CartOrigin, CartQueryResult, CartState, CartUpdateAction, ChangeCartCustomLineItemMoney, ChangeCartCustomLineItemQuantity, ChangeCartLineItemQuantity, ChangeCartTaxCalculationMode, ChangeCartTaxMode, ChangeCartTaxRoundingMode, ChangeMyCartTaxMode, ClassificationShippingRateInput, ClassificationShippingRateInputDraft, CustomLineItem, CustomLineItemDraft, Delivery, DeliveryItem, DiscountCodeInfo, DiscountCodeState, DiscountedLineItemPortion, DiscountedLineItemPrice, DiscountedLineItemPriceForQuantity, ExternalLineItemTotalPriceDraft, ExternalTaxAmountDraft, ExternalTaxRateDraft, HighPrecisionMoneyInput, InventoryMode, ItemShippingDetails, ItemShippingDetailsDraft, ItemShippingTarget, ItemState, LineItem, LineItemDraft, LineItemMode, LineItemPriceMode, MyCartDraft, MyCartUpdateAction, MyLineItemDraft, Parcel, ParcelMeasurements, PaymentInfo, RecalculateCart, RemoveCartCustomLineItem, RemoveCartDiscountCode, RemoveCartItemShippingAddress, RemoveCartLineItem, RemoveCartPayment, RoundingMode, ScoreShippingRateInput, ScoreShippingRateInputDraft, SetCartAnonymousId, SetCartBillingAddress, SetCartCountry, SetCartCustomField, SetCartCustomLineItemCustomField, SetCartCustomLineItemCustomType, SetCartCustomLineItemShippingDetails, SetCartCustomLineItemTaxAmount, SetCartCustomLineItemTaxRate, SetCartCustomShippingMethod, SetCartCustomType, SetCartCustomerEmail, SetCartCustomerGroup, SetCartCustomerId, SetCartDeleteDaysAfterLastModification, SetCartLineItemCustomField, SetCartLineItemCustomType, SetCartLineItemPrice, SetCartLineItemShippingDetails, SetCartLineItemTaxAmount, SetCartLineItemTaxRate, SetCartLineItemTotalPrice, SetCartLocale, SetCartShippingAddress, SetCartShippingAddressAndCustomShippingMethod, SetCartShippingAddressAndShippingMethod, SetCartShippingMethod, SetCartShippingMethodTaxAmount, SetCartShippingMethodTaxRate, SetCartShippingRateInput, SetCartTotalTax, SetCustomerGroup, SetCustomerNumber, SetMyCartShippingMethod, ShippingInfo, ShippingMethodState, ShippingRateInput, ShippingRateInputDraft, ShippingTargetDraft, TaxCalculationMode, TaxMode, TaxPortion, TaxPortionDraft, TaxedItemPrice, TaxedPrice, TrackingData, UpdateCartItemShippingAddress.
  • [GraphQL API] The following types were removed from the GraphQL schema: SetCustomerCustomerGroup, SetCustomerCustomerNumber.
  • [GraphQL API] Type Me was changed:
    • Field carts was added to Me type
    • Field activeCart was added to Me type
    • Field cart was added to Me type
  • [GraphQL API] Type Query was changed:
    • Field carts was added to Query type
    • Field cart was added to Query type
    • Field customerActiveCart was added to Query type
  • [GraphQL API] Type CustomerSignInResult was changed:
    • Field cart was added to CustomerSignInResult type
  • [GraphQL API] Type CustomerUpdateAction was changed:
    • CustomerUpdateAction.setCustomerGroup input field type changed from SetCustomerCustomerGroup to SetCustomerGroup
    • CustomerUpdateAction.setCustomerNumber input field type changed from SetCustomerCustomerNumber to SetCustomerNumber
  • [GraphQL API] Type Mutation was changed:
    • Field deleteCart was added to Mutation type
    • Field deleteMyCart was added to Mutation type
    • Field createMyCart was added to Mutation type
    • Field updateMyCart was added to Mutation type
    • Field updateCart was added to Mutation type
    • Field replicateCart was added to Mutation type
    • Field createCart was added to Mutation type
Read more...

Removed IronMQ from the documentation

9 August 2018
Announcement
DeprecationMessages

Due to low adoption in the customer base, we have removed IronMQ from the Subscription documentation. We continue to support IronMQ for customers that are already using it.

Subscriptions indicate Health Status

8 August 2018
Enhancement
Messages

Subscriptions now have a HealthStatus allowing you to monitor the health of a subscription with a tool of your choice. For production-critical queues, we recommend to set up an automatic alert.

With the new update action changeDestination, a ConfigurationError can be fixed (common causes are deleting the destination queue, deleting the access credentials, or removing the permission to push messages into the queue).

We have modified the handling of delivery failures caused by ConfigurationErrors:

  • A production project has up to 24 hours to fix the configuration
  • A development or staging project has up to an hour to fix the configuration

After that, we'll drop the messages, and will not attempt to deliver further messages. In this case, the subscription gets the status ConfigurationErrorDeliveryStopped. For more information, see the updated Delivery Guarantees.

The product discount limit was increased to 500

7 August 2018
Enhancement
Pricing

The product discount limit was increased to 500.

Subscriptions and Extensions hide access secrets

3 August 2018
Enhancement
CustomizationMessagesPrivacy

Both Subscriptions and API Extensions can contain access secrets, for example to allow the commercetools platform to place a message into a queue, or to invoke an AWS Lambda function. When retrieving an access secret via the commercetools platform API, it is now hidden (except for the last 4 characters).

This change should help you to keep your access secrets secure. As noted in both Subscriptions and API Extensions, we recommend to create access credentials that only have the permission to put a message into the specific message queue, or only invoke the particular API Extension.

Order Update Action - setCustomerId

1 August 2018
Enhancement
CustomersOrders

It is now possible to set the Customer ID on an existing Order. A respective Message is now generated upon such changes so that clients can subscribe to it, if interested.

Changes in the GraphQL schema

20 July 2018
Enhancement
CustomersGraphQL
  • [GraphQL API] Following types were added in the GraphQL schema: ChangeCustomerGroupName, CustomerGroupDraft, CustomerGroupUpdateAction, SetCustomerGroupCustomField, SetCustomerGroupCustomType, SetCustomerGroupKey.
  • [GraphQL API] Type CustomerGroup was changed:
    • Field customFieldsRaw was added to CustomerGroup type
  • [GraphQL API] Type Mutation was changed:
    • Field updateCustomerGroup was added to Mutation type
    • Field deleteCustomerGroup was added to Mutation type
    • Field createCustomerGroup was added to Mutation type
Read more...

Added setValidFromAndUntil to product discounts methods

18 July 2018
Enhancement
Pricing

Added setValidFromAndUntil to product discount update methods.

Change Subscription payloads includes modifiedAt

18 July 2018
Enhancement
Messages

The Change Subscription payloads now have the field modifiedAt.

Added orderState and state field to OrderFromCartDraft

18 July 2018
Enhancement
Orders

Subscriptions support Google Cloud Pub/Sub

18 July 2018
Enhancement
Messages

The Subscriptions support Google Cloud Pub/Sub as a destination. It can be used both as a pull-queue, and to push messages to for example Google Cloud Functions or HTTP endpoints (webhooks).

Subscriptions support CloudEvents and Azure EventGrid (Preview)

12 July 2018
Enhancement
Messages

CloudEvents is a specification for describing event data in a common way. CloudEvents seeks to ease event declaration and delivery across services, platforms, and beyond. It is hosted by the Cloud Native Computing Foundation.

CloudEvents is a new effort and it's still under active development. The format is versioned, and we do not plan to offer long-term support for outdated versions yet. Therefore, CloudEvents is currently only offered in Preview, with the goal to give feedback to the CloudEvents working group.

Support for Azure Event Grid has been added, which offers native support to filter and route CloudEvents. EventGrid can be used to push messages to Azure Functions, HTTP endpoints (webhooks), and several other Azure tools.

  • [API] Added Format to the Subscriptions API. The CloudEvents format can be used with all of the existing destinations.
  • [API] Added the Azure Event Grid Destination. It can only be used with CloudEvents.

Changes in the GraphQL schema

12 July 2018
Enhancement
GraphQL
  • [GraphQL API] The following types were added in the GraphQL schema: AddCustomerAddress, AddCustomerBillingAddressId, AddCustomerShippingAddressId, Address, AddressContactInfo, AddressInput, AnonymousCartSignInMode, ChangeCustomerAddress, ChangeCustomerEmail, Customer, CustomerQueryResult, CustomerSignInDraft, CustomerSignInResult, CustomerSignMeInDraft, CustomerSignMeUpDraft, CustomerSignUpDraft, CustomerToken, CustomerUpdateAction, Me, MyCustomerUpdateAction, RemoveCustomerAddress, RemoveCustomerBillingAddressId, RemoveCustomerShippingAddressId, SetCustomerCompanyName, SetCustomerCustomField, SetCustomerCustomType, SetCustomerCustomerGroup, SetCustomerCustomerNumber, SetCustomerDateOfBirth, SetCustomerDefaultBillingAddress, SetCustomerDefaultShippingAddress, SetCustomerExternalId, SetCustomerFirstName, SetCustomerKey, SetCustomerLastName, SetCustomerLocale, SetCustomerMiddleName, SetCustomerSalutation, SetCustomerTitle, SetCustomerVatId.
  • [GraphQL API] Type Query was changed:
    • Field customer was added to Query type
    • Field customers was added to Query type
    • Field me was added to Query type
  • [GraphQL API] Type Mutation was changed:
    • Field customerCreatePasswordResetToken was added to Mutation type
    • Field customerCreateEmailVerificationToken was added to Mutation type
    • Field customerSignMeUp was added to Mutation type
    • Field customerConfirmEmail was added to Mutation type
    • Field deleteMyCustomer was added to Mutation type
    • Field deleteCustomer was added to Mutation type
    • Field customerResetMyPassword was added to Mutation type
    • Field updateMyCustomer was added to Mutation type
    • Field customerSignMeIn was added to Mutation type
    • Field updateCustomer was added to Mutation type
    • Field customerChangeMyPassword was added to Mutation type
    • Field customerChangePassword was added to Mutation type
    • Field customerResetPassword was added to Mutation type
    • Field customerConfirmMyEmail was added to Mutation type
    • Field customerSignIn was added to Mutation type
    • Field customerSignUp was added to Mutation type
Read more...

Added GraphQL support for Inventory

11 July 2018
Enhancement
GraphQL
  • [GraphQL API] The following types were added in the GraphQL schema: AddInventoryEntryQuantity, ChangeInventoryEntryQuantity, InventoryEntry, InventoryEntryDraft, InventoryEntryQueryResult, InventoryEntryUpdateAction, RemoveInventoryEntryQuantity, SetInventoryEntryCustomField, SetInventoryEntryCustomType, SetInventoryEntryExpectedDelivery, SetInventoryEntryRestockableInDays, SetInventoryEntrySupplyChannel.
  • [GraphQL API] Type Query was changed:
    • Field inventoryEntries was added to Query type
    • Field inventoryEntry was added to Query type
  • [GraphQL API] Type Mutation was changed:
    • Field deleteInventoryEntry was added to Mutation type
    • Field createInventoryEntry was added to Mutation type
    • Field updateInventoryEntry was added to Mutation type
Read more...

Added error messages

28 June 2018
Enhancement

We made the error codes for creation and updates of ProductType more specific to ease error handling for you.

  • [API] Added more specific error messages. Please find details in the Errors documentation.

Added filtering for stock and images on product variants in GraphQL

19 June 2018
Enhancement
GraphQLProduct Catalog

The GraphQL API now allows you to filter for those ProductVariants that have images or that are available in stock.

  • [GraphQL API] Added filtering parameters isOnStock, stockChannelIds and hasImages to ProductData.variants and ProductData.allVariants.

Change a category parent by resource identifier instead of reference

13 June 2018
Enhancement
Product Catalog

A category’s parent can now be set using its user-defined key instead of the platform-generated ID.

More info if the payload of a message subscription had to be dropped

8 June 2018
Enhancement
Messages

When the payload of a message subscription had to be dropped (usually due to a size constraint of the destination message queue), the reason as well as the value of the type field is placed into the notification.

Set shipmentState when ordering a cart

6 June 2018
Enhancement
CartsOrders

The shipmentState can now be set when creating an order from a cart. Before, it was only settable by an update action, requiring an additional API call.

Changes in Cart Discounts StackingMode StopAfterThisDiscount Behavior

1 June 2018
Enhancement
Pricing

Based on customer feedback we changed the behavior of the StackingMode StopAfterThisDiscount.

  • [API] The StackingMode StopAfterThisDiscount now continues with further discounts if the discount could not be applied because the CartDiscountTarget did not match. Previously, the application of further discounts was stopped even if the target condition was not fulfilled.

GDPR tutorial

31 May 2018
Enhancement
Privacy

We have published a tutorial about how commercetools fulfills the requirements of the General Data Protection Regulations.

GraphQL support for custom fields on category and product price

31 May 2018
Enhancement
CustomizationGraphQLPricingProduct Catalog

Custom fields on category and product price are now supported on GraphQL endpoint.

Payment API out of Beta

31 May 2018
Announcement
Payments

As part of a Beta improvement initiative, we've announced breaking changes to the Payment API in September. The changes have been applied now, and the Payment API is out of Beta.

Added GraphQL mutations for the CartDiscount and ProductDiscount

30 May 2018
Enhancement
GraphQLPricing

Mutations for the CartDiscount and ProductDiscount are now supported on the GraphQL endpoint.

  • [GraphQL API] Following types were added in the GraphQL schema:
    • AbsoluteDiscountValueInput, CartDiscountDraft, CartDiscountTargetInput, CartDiscountUpdateAction, CartDiscountValueInput, ChangeCartDiscountCartPredicate, ChangeCartDiscountIsActive, ChangeCartDiscountName, ChangeCartDiscountRequiresDiscountCode, ChangeCartDiscountSortOrder, ChangeCartDiscountStackingMode, ChangeCartDiscountTarget, ChangeCartDiscountValue, CustomLineItemsTargetInput, ExternalDiscountValueInput, GiftLineItemValueInput, LineItemsTargetInput, MoneyInput, MultiBuyCustomLineItemsTargetInput, MultiBuyLineItemsTargetInput, ProductDiscountDraft, ProductDiscountValueInput, RelativeDiscountValueInput, SetCartDiscountCustomField, SetCartDiscountCustomType, SetCartDiscountDescription, SetCartDiscountValidFrom, SetCartDiscountValidUntil, ShippingTargetInput.
  • [GraphQL API] Type ProductDiscount was changed:
    • ProductDiscount type description is changed
  • [GraphQL API] Type Mutation was changed:
    • Field updateProductDiscount was added to Mutation type
    • Field updateCartDiscount was added to Mutation type
    • Field deleteProductDiscount was added to Mutation type
    • Field createProductDiscount was added to Mutation type
    • Field createCartDiscount was added to Mutation type
    • Field deleteCartDiscount was added to Mutation type
Read more...

Data Erasure of Personal Data

24 May 2018
Enhancement
Privacy

In some countries, especially the ones in the European Union, you are required by law (such as the GDPR) to erase personal data of a customer on request, also known as Right to be Forgotten.

A default DELETE request may not clean up all data, both visible at the HTTP API layer (for example personal data may be part of messages) and invisible (the commercetools platform internally keeps logs for some time, to reconstruct data in case of faulty system behavior).

Endpoints that store personal data therefore offer a parameter for DELETE requests called dataErasure. If set to true, the commercetools platform guarantees that all personal data related to the particular object, including invisible data, is erased, in compliance with the GDPR. You are, however, responsible for identifying and deleting all objects that belong to a customer, and deleting them.

The parameter is available for:

Personal data must not be stored in objects other than the ones listed above.

High precision prices

9 May 2018
Enhancement
Pricing

For those businesses whose product prices require a higher precision than the currently offered cent amount, we have extended the pricing model to additionally support sub-cents for ProductVariant prices. To support this, a new money type HighPrecisionMoney was introduced. High precision money usage can be interchanged with regular money usage everywhere where BaseMoney is used.

  • [API] BaseMoney - base polymorphic type which supports cent and high precision at the same time.
  • [API] Money - added fractionDigits and type fields.
  • [API] HighPrecisionMoney - supports definition of sub-cent amounts.
  • Following types have been updated to support high precision prices while keeping everything compatible with cent precision Money:

Customer Group Key can be used on Carts and Customers

2 May 2018
Enhancement
CartsCustomers

The user-defined key can now be used on Carts and Customers endpoints to identify a Customer Group.

DiscountCode.applicationCount and ProductVariant.availability in GraphQL schema

27 April 2018
Enhancement
GraphQL
  • [GraphQL API] Added new field DiscountCode.applicationCount.
  • [GraphQL API] Product variant info now includes availability information. Since the list of availability per sales channel can get quite big there is a support for pagination and inclusion and exclusion of sales channels.
Read more...

Correlation ID

25 April 2018
Enhancement
Customers

A Correlation ID is a unique identifier of a single action, allowing to trace the action across multiple systems.

  • [API] The API accepts a client-provided Correlation ID if sent with the X-Correlation-ID HTTP header
  • [API] If the client does not provide one, the API generates one and the response contains the X-Correlation-ID HTTP header

Authorization Header for HTTP API Extensions

20 April 2018
Enhancement
CustomizationSecurity

It is now possible to provide an Authorization Header when creating a new HTTP API Extension. The Authorization header will be set to the headerValue when the HTTP API Extension is called.

To get started with API Extensions in general, please read the tutorial.

Update Multiple Shipping Addresses for Orders

19 April 2018
Enhancement
Orders

When line items of an order should be shipped to different addresses those shipping details can now be updated on orders.
We added the following update actions to Order to manage multiple shipping addresses:

Please find more about usage of multiple shipping addresses in the tutorial.

AWS Lambda API Extensions

17 April 2018
Enhancement

You can now create API Extensions natively with AWS Lambda. The AWS Lambda functions are invoked directly (and do not need to go through the AWS API Gateway).

To get started with API Extensions in general, please read the tutorial.

Matching Product Discount Endpoint

29 March 2018
Enhancement
Pricing

The new matching ProductDiscount endpoint can be used to simulate which product discounts would be applied if a product variant had a specified price.

Orders API Extensions

23 March 2018
Enhancement

You can now extend the behavior of the Orders API with your business logic with the help of API Extensions. An API Extension gets called after the processing of a create or update request of an API call but before the order is persisted. The API Extension can validate the order or apply additional updates to it. It can, for example, validate that an order with the given configuration can be created, automatically add an order number, or change states.

To get started with API Extensions in general, please read the tutorial.

Product type attribute definition management

9 March 2018
Enhancement
Product Catalog

We have introduced two update actions on the ProductType resource: one to update the name of an attribute definition, and one to update the key of any enum value.

Replicate existing cart or order to a new cart

2 March 2018
Enhancement
CartsOrders

We now support creating a new cart by replicating an existing cart or order.

Simplified cart predicate language

2 March 2018
Enhancement
Carts

The cart predicate language has been simplified.

  • [API] A boolean value is now a valid predicate. For example if a cart discount should match all carts, the predicate true is now sufficient. Previously, one had to write 1 = 1 or true = true.
  • [API] A boolean function is now a valid predicate. For example lineItemExists(...) is now sufficient. Previously, one had to write lineItemExists(...) = true.

Customer and Payment API Extensions

2 March 2018
Enhancement
CustomersCustomizationPayments

You can now extend the behavior of the Payment API and the Customer API with your business logic with the help of API Extensions. An API Extension gets called after the processing of a create or update request of an API call but before the result is persisted. The API Extension can validate the object or apply additional updates to it. It can, for example, validate that a payment in the given configuration can be processed, or trigger actions with the Payment Service Provider (PSP). Or it can validate that a customer's account details don't look fraudulent, or set a customer group based on the email address.

To get started with API Extensions, you can read the tutorial.

Customer update messages

1 March 2018
Enhancement
CustomersMessages

We have introduced new messages about updates on the Customer resource. With the introduction of these messages, you can now get notified about changes to specific fields for the Customer. Previously, it was only possible to get the generic change messages with the ChangeSubscription on the Customer resource.

Furthermore, Customer Group has been added as supported resource for ChangeSubscription.

Improvements in GraphQL API coverage

16 February 2018
Enhancement
GraphQL

GraphQL API surface area was extended and now includes a lot of new query fields and types, as well as experimental mutation support.

Read more...

Multiple Shipping Addresses

12 February 2018
Enhancement
Carts

It is now possible to capture multiple shipping addresses for one cart. This is done by creating (custom) line item specific shipping addresses. To learn more about this new feature, see the new tutorial.

We added following objects:

We added following fields:

We added following update actions:

We added following error message:

Custom Fields for Customer Groups

2 February 2018
Enhancement
CustomersCustomization

Customer groups can now be extended with custom fields. This allows users to categorize customer groups any way they want and filter the query result by custom fields.

New field origin on cart and order

1 February 2018
Enhancement
CartsOrders

Until now it was assumed that carts and orders are created by customers themselves only, but to reflect the case of creating carts and orders by the merchants on behalf of customers also, we introduced a new field tracking the origin of a Cart and an Order.

DiscountCode can now be grouped

29 January 2018
Enhancement
OrdersPricing

Discount codes now can be grouped together by assigning one or more groups to an individual discount code. Furthermore, the new Return StateRole can now be used to mark the state of those line items that belong to the return process of an order.

Release API Extensions Tutorial

25 January 2018
Enhancement
Customization

We published a tutorial about the API Extensions feature we recently released. The tutorial explains the usage of the feature based on two example use cases. In the first example an API Extension is developed that validates a maximum number of items that can be added to the cart. The extension developed in the second example will add a mandatory insurance to the cart if any item in the cart is worth $500 or more. Please check it out.
API Extensions can now return a localized description of the error. If available, the Merchant Center will use the correct localization to display the error.

Reference a category parents by its key

15 January 2018
Enhancement
Product Catalog

When creating a category, the category's parent can now be set by its user-defined key instead of the platform-generated ID, as it was before. This makes importing of category trees easier since identifiers for all parent categories are known beforehand.

Release API Extensions

10 January 2018
Enhancement
Customization

With API Extensions, you can extend the behavior of the cart API with your business logic. An API Extension gets called after the processing of a create or update request of an API call, but before the result is persisted. The API Extension can validate the object, or apply additional updates to it.
Good use cases for API Extensions are: Validating the content of a cart (for example no more than 8 crates of beverages can be ordered at once), calculating custom shipping costs, or adding mandatory items, like insurance, to a cart.

The first part of the new documentation explains how to setup an extension, while the second part describes the input and the possible responses of the extension. The third part details the limits and error cases related to extensions.

Deliveries with address information

20 December 2017
Enhancement
Orders

Deliveries can now be given their own addresses. The delivery address is not to be confused with the shipping address. An order can only have one shipping address based on which the shipping rate is determined. With delivery addresses, however, it is possible to capture multiple fulfilment related addresses, for example a customer is stocking up on printing paper and has ordered 80 packages printing paper; 20 packages are to be delivered to the main office building, 58 to the warehouse and 2 for his home office. This can be achieved by defining three deliveries for the order, each with their own address.

DiscountCode with validity period

19 December 2017
Enhancement
Pricing

We have introduced validity ranges on Discount Codes for limiting the time range in which a code can be applied to a cart. Setting a validity can also help to manage campaigns which are promoted via discount codes, also considering that one code may contain several different cart discounts with varying validity dates.

"validFrom" and "validUntil" fields in a ProductDiscount

18 December 2017
Enhancement
Pricing

We have introduced validity periods on Product Discounts to support discounting a (range of) products within a given time frame. Instead of activating product discounts manually, we now allow promotion planning in advance. Please consider that it can take some time to recalculate product discount values. Many discounts with the same validity values may take up to a few minutes to being live.

Update Deliveries

15 December 2017
Enhancement
MessagesOrders

The deliveries of orders can now be amended after creating parcels or deliveries in cases data needs to be added or changed. Corresponding messages have been added, as well as messages for changing the state of the shipment and return shipment to which clients can now subscribe.

New update action for changing Attribute Constraint on a ProductType

6 December 2017
Enhancement
Data Modeling

In case the 'SameForAll' and 'Unique' constraints on attributes of your product types prevent you from extending your products, you can now change them to 'None'.

Select cart or target line items by custom type key

5 December 2017
Enhancement
CartsPricing

It is now possible to define Cart Discounts by specifying the custom Type of the line items to be discounted or the line items that activate the discount.

Add key to assets and Add an asset at a specific position

4 December 2017
Enhancement
Product Catalog

Assets can now be identified by a user-defined key that is unique only within the asset's container (a product variant or a category). Before only the platform-generated id of the assets could be used to identify them on the platform. Assets can now be placed at a specific position within the asset list when adding them to a ProductVariant or a Category.

Revert staged variant

1 December 2017
Enhancement
Product Catalog

Changes on and deletions of product variants can now be reverted.

Custom Fields for Cart Discount

30 November 2017
Enhancement
CartsCustomizationPricing

We now provide custom fields on CartDiscounts. This allows users to customize their cart discounts in any way they want and fetch them by filtering on custom fields now supported on the cart discounts endpoint.

Add Line Item by SKU in Shopping List

17 November 2017
Enhancement
Carts

A product variant to be added to a Shopping List and My Shopping List can now be selected by the variant's SKU. Before the variant had to be selected by product ID and variant ID only.

Update of shipping method predicate

16 November 2017
Enhancement
CartsOrders

The predicate can now be updated or removed on any existing ShippingMethod. Before it could only be set during creation of shipping methods.

Cart Tax Calculation Mode

15 November 2017
Enhancement
Pricing

We have introduced the UnitPriceLevel TaxCalculationMode on carts to be able to calculate taxes per unit price and not only per line item as before. The opposite LineItemLevel mode is the default tax calculation mode on the cart so that this new feature does not break any existing application.

Improved customer Sign In

2 November 2017
Enhancement
Carts

The customer Sign In now always returns a recalculated cart, and allows to update the product data.

  • [API] Customer Sign In has a new parameter updateProductData to update name, variant and productType in the line item data.
  • [API] My Customer Profile Sign In has a new parameter updateProductData to update name, variant and productType in the line item data.

Keys in Cart and Product Discount predicates

27 October 2017
Enhancement
CartsPricingProduct Catalog

We added the capability to use user-defined keys of categories, products, and customer groups in predicates for the specification of product and cart discounts. With this it is no longer required to use their platform-generated IDs in the predicates.

Multi-Buy Discounts for Custom Line Items

26 October 2017
Enhancement
Pricing

We extended the multi-buy discount feature of type "Buy 4 car tires, get 2 of them 50% off" to CustomLineItems.

Managing orders by order number

25 October 2017
Enhancement
Orders

Orders can now be fetched, updated and deleted by providing the user-defined orderNumber instead of the platform-generated id of the order.

Parcel Items

24 October 2017
Enhancement
Orders

We now support tracking line items on a Parcel. With this new ability, you can define which line items of a Delivery goes into which parcel. Example: An order consists of fresh fruits and meat products. This will be one delivery, but it will have two parcels. One for the fresh fruits and one for the meat products.

  • [API] Added field items to Parcel.
  • [API] Added field items to Add Parcel update action.
  • [API] Changed field items on Add Delivery update action to be optional.

Added dynamic shipping rates

20 October 2017
Enhancement
CartsOrders

With dynamic shipping rates it is now possible to dynamically set the price for shipping based on value or the new ShippingRateInput of the cart. For further information on how to use this new feature, please see the tutorial.

Remove enum values from attribute definitions

19 October 2017
Enhancement
Data Modeling

Enum values can now be removed from enum type and localized enum type attribute definitions of product types.
All attributes of all products using those enum keys will be removed in an eventually consistent way.

Improved Cart's recalculation update action

17 October 2017
Enhancement
Carts

We changed the behavior of the Cart's Recalculate update action.

  • [API] Instead of rejecting update requests to recalculate the cart when any of the line items became invalid (for example, because corresponding products don't exist anymore), the relevant items will now be dropped and the recalculation will be executed with only the remaining items.

Cart Discount Stacking Mode

7 October 2017
Enhancement
CartsPricing

We now support CartDiscounts to prevent further application of matching CartDiscounts respecting their sortOrder. Therefore, a new field stackingMode has been added. The former behaviour of always applying all matching discounts is now encapsulated in the default value of stackingMode: Stacking.

Custom line items behavior improved

6 October 2017
Enhancement
Carts

The behavior of CustomLineItems has been improved to behave more similar to regular LineItems when signing in, and when adding a new item.

  • [API] When a customer signs in and the default anonymousCartSignInMode is used, custom line items are merged into the existing customer's cart.
  • [API] When a custom line item is added and an equivalent one already exists in the cart, the quantity is increased.

Payment API deprecating fields

29 September 2017
Enhancement
DeprecationPayments

As part of a Beta improvement initiative, the Payment API has been updated deprecating a series of fields.

  • [API] externalId in PaymentDraft, Payment as well as under Update Payment
    This field has been deprecated because the interfaceId can be used for the ID set by the Payment Service Provider (PSP), and the newly introduced key field has taken over the role of externalID.
  • [API] amountAuthorized, amountPaid and amountRefunded in PaymentDraft, Payment as well as under Update Payment
    These fields have been deprecated because their value can be calculated from the total amounts saved in the Transactions.
    • Example 1: Two transactions, one with type:Charge, state:Success and amount:2$ and another one with type:Charge, state:Success and amount:3$. The amountPaid is 5$.
    • Example 2: Two transactions, one with type:Charge, state:Failure and amount:2$ and another one with type:Charge, state:Success and amount:3$. The amountPaid is 3$.
    • Example 3: Two transactions, one with type:Charge, state:Success and amount:3$ and another one with type:Refund, state:Success and amount:2$. The amountPaid is 3$. The amountRefunded is 2$.
  • [API] authorizedUntil in PaymentDraft, Payment as well as under Update Payment
    We learned the field is of little practical value, as it is either not reliably known, or the authorization time is fixed for a PSP.
  • [API] paymentId in PaymentStatusInterfaceCodeSet Message
    This field has been deprecated because the id in the resource field can be used instead.
  • [API] TransactionType previously had uppercase values like AUTHORIZATION, CHARGE etc. These are deprecated.

Furthermore, another TransactionState has been added.

  • [API] The Initial TransactionState has been added. It is used when the PSP has not accepted the transaction yet (including if the PSP has not been contacted yet). The existing Pending state is from now on used when the PSP has accepted the transaction, but it is not completed yet.
    In the future, we will change the default state value in the TransactionDraft to Initial. Do not depend on the default value! Please set the state field explicitly as soon as possible.

Custom Fields for Discount Codes

28 September 2017
Enhancement
CustomizationPricing

We extended the DiscountCode model to support custom fields. This allows users to categorize discount codes any way they want and fetch them using the predicates on the discount codes endpoint.

Removed originalPrice field in LineItem Predicate

27 September 2017
Announcement
DeprecationPricing

Since the originalPrice field on the line item predicate was duplicating the behavior of the price field, the originalPrice field was removed.

Project Updates

26 September 2017
Enhancement
Customization

Get, update and delete payments by key

18 September 2017
Enhancement
Payments

We now support getting, updating, and deleting Payments by key. This way payments can be identified by the user-defined key instead of the ID the platform has assigned automatically.

Multi-Buy Discounts

15 September 2017
Enhancement
Pricing

Payment Endpoints for Customers

14 September 2017
Enhancement
Payments

We added new endpoints to allow customers to manage their payments with the password flow or with an anonymous session.

ShippingMethod predicate

14 September 2017
Enhancement
Carts

By using predicates on Shipping Methods, we are empowering the merchants to build their own set of shipping method rules. Dependent on the cart and its content, a merchant can define which shipping methods should be offered during checkout. For further information on how to use this new feature, please see the tutorial.

  • [API] The field predicate was added to ShippingMethod.
  • [API] The field shippingMethodState was added to ShippingInfo.
  • [API] The order-related error code ShippingMethodDoesNotMatchCart was added.

Cancel limit for Cart Discount activated by Discount Code

11 September 2017
Enhancement
CartsPricing

We now removed the limit of cart discounts that are triggered by discount codes. Those discounts were limited to 100 before together with the cart discounts for which no discount code is required.

  • [API] The limit of 100 active CartDiscounts now only applies to cart discounts that do not require a discount code.
  • [API] The number of cart discounts in a DiscountCode is limited to 10.
  • [API] The number of discount codes in a Cart is limited to 10.

External Tax Amount

8 September 2017
Enhancement
Pricing

The new cart tax mode ExternalAmount allows to set the totalGross, taxRate and taxPortions fields on cart's content externally by the client instead of the platform. This is useful in case you prefer to have those values calculated by a third party service.

Changing mark Matching Variants default behavior

7 September 2017
Announcement

Breaking Change
For performance improvements, the "mark-matching-Variants" feature on the Product Projection search endpoint will be deactivated by default during the week of 11 September 2017. If your project does not require the "mark-matching-Variants" feature for product search, no further action is required from your side.

  • [API] If you make use of this feature you now have to enforce it by explicitly setting the markMatchingVariants parameter to true on requests to this endpoint from next week onwards. Please refer to the documentation on how to set the parameter accordingly.

Added My Shopping List Endpoints

30 August 2017
Enhancement
Carts

We added new endpoints to allow Customers to manage their shopping lists with the password flow or with an anonymous session.

Set Anonymous ID on a Cart

24 August 2017
Enhancement
Carts

Added an update action to set und unset the anonymous ID of a cart.

Added time based product filters

22 August 2017
Enhancement
Product Catalog

Products can now be filtered by the times they were created or updated latest.

Keys for Tax Categories

21 August 2017
Enhancement
Pricing

Added key field to TaxCategories

  • [API] TaxCategories have a new optional field key that allows clients to specify a unique user-specified identifier for the tax category. Keys can be set during creation of the tax category or afterwards by the new update action Set Key. Now tax categories can also be retrieved, updated and deleted by key.

Publish product prices only, Products can be added to a cart by SKU

18 August 2017
Enhancement
Product Catalog

It is now possible to publish only the prices of a product. This allows you to keep other product information you don't want to publish yet, like updates in the product description, in staged projection while the updated prices will be published already. Product variants to be added to a cart can now be specified by their SKU. Before, the only option was to specify them by their product ID plus variant ID.

Keys for Customers

17 August 2017
Enhancement
Customers

Added key field to Customer

  • [API] Customers have a new optional field key that allows clients to specify a unique identifier for the customer. Keys can be set during creation of the customer or afterwards by the new update action Set Key. Now customers can also be retrieved, updated and deleted by key.

Customer Groups for Carts with no Customer assigned

15 August 2017
Enhancement
CustomersPricing

We added the possibility to use customer group-specific price selection on carts with no customer assigned.

  • [API] CartDraft has a new optional field customerGroup that can be set if customerId is not present.
  • [API] Added new update action setCustomerGroup to set the customer group to a cart if customerId is not present.

OAuth 2.0 Token Introspection

3 August 2017
Enhancement
Security

We implemented OAuth2 Token Introspection according to RFC 7662. It allows to determine the active state of an OAuth 2.0 access token and to determine meta-information about this access token, such as the scope.

  • [API] OAuth 2.0 Token Introspection is available on the auth service.
  • [API] The new introspect_oauth_tokens scope allows a client to introspect tokens issued to other clients.

Keys for Shipping Methods

26 July 2017
Enhancement
CartsOrders

Added key field to ShippingMethods

  • [API] ShippingMethods have a new optional field key that allows clients to specify a unique user-specified identifier for the shipping method. Keys can be set during creation of the shipping method or afterwards by the new update action Set Key.
    Now shipping methods can also be retrieved, updated and deleted by key.

Added key field on CustomerGroup

14 July 2017
Enhancement
Customers

We introduced a new 'key' field on CustomerGroup that can be used to identify a customer group by a user-defined ID in addition to the platform-generated 'id'.

Added possibility for product to be added to/removed from category by category key.

7 July 2017
Enhancement
Product Catalog

After introducing keys on categories, we extended the update actions for adding and removing products to and from categories. Now it is possible to update products by category key in the same way as by category ID.

Added 'view' scopes to 'manage' scopes

29 June 2017
Enhancement
Security

Every 'manage' scope for a resource, like Product, Order, Customer, and so on, now also implies the respective 'view' scope automatically. Until now the 'view' scope had to be specified explicitly which is not needed anymore.

Added support for Azure Service Bus

28 June 2017
Enhancement
Messages

We extended the number of supported message buses by adding the Azure Service Bus destination to the subscriptions endpoint.

Get customer by email token

26 June 2017
Enhancement
CustomersSecurity

For resetting a customer password it is now possible to get the customer by email token. For getting the customer by password token the new endpoint (/password-token={token}) should now be used in favor of the old query parameter (/?token={token}).

External Line Item Prices

21 June 2017
Enhancement
Pricing

We introduced the new Line Item price mode 'ExternalPrice' in which the prices for line items are set externally while eligible cart discounts will be applied. The external prices can now be set during creation of line items.

Added update action to change Input Hint on Attribute Definition

20 June 2017
Enhancement
Product Catalog

The inputHint on AttributeDefinition provides a hint to developers how text-based attribute values should be visually represented in the frontend. The two supported values for this field: SingleLine or MultiLine had to be set in the AttributeDefinitionDraft during creation of the attribute definition so far, but it can now be changed afterwards by introducing a new update action changing the value of this field.

Added salutation field on Customer

16 June 2017
Enhancement
CartsCustomers

Added a new optional field on customer resource to store information about the salutation of the customers. Added two new cart discount functions that help specify whether the given predicate should match for at least one or for all line items in the cart.

Tutorial Handling Subscriptions

15 June 2017
Enhancement
OrdersMessages

We published a tutorial for Order Created Messages as an example for the scenario in which you want to send a notification via email to your customer when an order is created.

Product Deleted Message and more

14 June 2017
Enhancement
Product CatalogMessages

Added and changed messages about changes on products

Release note archive

2 June 2017
Announcement

The release notes published before 02 June 2017 are archived below.

Read more...
Releases
Filter by Date
Filter By Topics