API Releases

Information about recent changes to the HTTP and GraphQL APIs.

Added support for key and Messages for Discount Codes

7 February 2024
Enhancement
Pricing and DiscountsMessages/SubscriptionsGraphQL

You can now use user-defined key values to identify Discount Codes. Previously, you could identify them only by their auto-generated IDs. The enhancement also includes a new update action to set the key value, allowing you to update Discount Code keys efficiently without the need to bulk import Discount Codes with the updated keys.

Additionally, this enhancement also adds support for Messages for Discount Codes. You can subscribe to these Messages for changes when creating, deleting, or setting a key value for a Discount Code.

Changes:

  • [API]
  • [GraphQL API]
    • Input field key was added to DiscountCode and DiscountCodeDraft type.
    • Input field setKey was added to DiscountCodeUpdateAction type.
    • Argument key was added to Query.discountCode field and changed Query.discountCode(id) from required to optional.
    • Argument key was added to Mutation.updateDiscountCode field and changed Mutation.updateDiscountCode(id) from required to optional.
    • Argument key was added to Mutation.deleteDiscountCode field that changed Mutation.deleteDiscountCode(id) from required to optional.
    • Added the following types to the GraphQL schema: SetDiscountCodeKey, DiscountCodeCreated, DiscountCodeDeleted, DiscountCodeKeySet.
Read more...

Introducing commercetools Foundry

15 January 2024
Announcement
General

commercetools Foundry is now available for companies looking to accelerate their time to value with composable commerce. This is a pre-composed solution that comes with a complete set of tailored resources, best practices, expert services, and AI-powered tools designed to simplify and accelerate your adoption of commercetools.

What's included:

  • Tailored resources for B2C commerce: a set of resources specifically designed for B2C retail, offering best practice guides for various use cases, along with a Blueprint for B2C Retail, a step-by-step plan that explains how to set up your commerce with commercetools and covers topics from solution architecture overview and project planning to discovery, demo flow, and more.
  • AI-powered developer assistant: helping engineering teams with an AI-powered documentation assistant and code generator.
  • Store Launchpad for B2C Retail: a quick start for commercetools Projects, ensuring a faster and more efficient go-live.
  • Expert services: access to specialized knowledge to accelerate your time to value. Contact your Customer Success Manager to learn more.

AuthenticationMode on Customer achieved general availability status

12 January 2024
Announcement
Customers

After collecting feedback during the beta phase, we have moved AuthenticationMode out of beta. The status of the following features has been changed to general availability:

Added Messages for changes on Cart Discounts

12 January 2024
Enhancement
Pricing and DiscountsMessages/SubscriptionsGraphQL

You can now subscribe to Messages that will be triggered when creating and deleting a Cart Discount, and when using the Add Store, Remove Store, and Set Stores actions on Cart Discounts.

Changes:

  • [API] Added CartDiscountCreated, CartDiscountDeleted, CartDiscountStoreAdded, CartDiscountStoreRemoved, CartDiscountStoresSet Messages.
  • [GraphQL API] Added the following types to the GraphQL schema: CartDiscountCreated, CartDiscountDeleted, CartDiscountStoreAdded, CartDiscountStoreRemoved, CartDiscountStoresSet.
Read more...

Approval Flows can now be extended with Custom Fields

11 January 2024
Enhancement
B2BOrdersGraphQL

You can now extend the ApprovalFlow resource with Custom Fields. With this, you can add meta-information to your Approval Flow in case it is required for your business logic.

Changes:

  • [API] Added optional custom field to the ApprovalFlow type.
  • [API] Added Set Custom Type and Set CustomField update actions to Approval Flows.
  • [API] Added approval-flow to CustomFieldReferenceValue enum.
  • [API] Added approval-flow to ResourceTypeId enum.
  • [GraphQL API] Added the following types to the GraphQL schema: SetApprovalFlowCustomField, SetApprovalFlowCustomType.
  • [GraphQL API] Changed the ApprovalFlowUpdateAction type:
    • Input field setCustomField was added to ApprovalFlowUpdateAction type
    • Input field setCustomType was added to ApprovalFlowUpdateAction type
  • [GraphQL API] Changed the ApprovalFlow type:
    • Added the custom field to the ApprovalFlow type.
Read more...

Buyer Approval Flows achieved general availability status

10 January 2024
Announcement
B2BOrders

After collecting feedback during the beta phase, we have moved Buyer Approval Flows out of beta. The status of the following features has been changed to general availability:

  • Approval Rules, which define the conditions under which an Order must go through an approval process.
  • Approval Flows, which manage the overall state of the approval process.

These features are only available as part of Composable Commerce for B2B and will be subject to additional terms and pricing. To get access to Composable Commerce for B2B, please contact Support via the Support Portal.

Deprecation of Java v1 SDK

2 January 2024
Announcement
Deprecation

As announced previously in our long-term support plan for Composable Commerce SDKs, Version 1 (v1) of our Java SDK is now deprecated effective 1 January 2024.

The Java v1 SDK will not receive any future updates to fix bugs or security vulnerabilities. If you are currently using the Java v1 SDK, you should migrate to the Java v2 SDK.

VPC Service Controls for Google Cloud Pub/Sub and Google Cloud Functions

22 December 2023
Enhancement
SecurityCustomizationMessages/Subscriptions

You can now enable VPC Service Controls to further enhance security when commercetools Projects access your Google Cloud Pub/Sub and Google Cloud Functions infrastructure.

Enabling VPC Service Controls offers an additional layer of security for Google Cloud services. This layer is independent of Identity and Access Management (IAM) and provides a broader, context-based security perimeter, ensuring that resources are accessible exclusively within the Google Cloud Platform (GCP) infrastructure of commercetools.

We recommend enabling VPC Service Controls for:

Store-specific Cart Discounts achieved general availability status

13 December 2023
Announcement
Pricing and DiscountsStoresSecurity

After collecting feedback during the beta phase, we have moved Store-specific Cart Discounts out of beta. The status of the following features has been changed to general availability:

This feature lets you build Cart Discounts specific to a Store to model, for example, customer-specific or brand-specific cart discounts. To know more about Cart Discounts, see the Cart Discounts API.

Cart total discount achieved general availability status

12 December 2023
Announcement
Pricing and DiscountsCartsOrdersGraphQL

After collecting feedback during the beta phase, we have moved Cart total price discount target out of beta. The status of the following features has been changed to general availability:

This feature lets you build cart discounts targeting the total price of a cart, for example, get 5$ off your cart total. To know more about cart discounts, see Cart Discounts API.

API Extensions achieved general availability status

5 December 2023
Announcement
Customization

After collecting feedback during the beta phase, we have moved API Extensions to general availability.

Visit the API reference to learn more about how to extend the behavior of an API with your business logic.

Updated structure for HTTP API documentation

23 November 2023
Announcement
General

We've reorganized our HTTP API documentation to better accommodate our growing number of APIs. The new structure is tailored to make navigation more intuitive, improving productivity and facilitating a more effective integration and use of our APIs.

A key highlight is the increased visibility of our performance tips. These tips are now readily accessible in the API reference, providing you with valuable insights for optimizing your use of our APIs.

Read more...

Added new endpoints for checking if a resource exists

18 October 2023
Enhancement
General

We have added new endpoints across all resources to enable a more efficient way to determine if a particular resource, identified by a key, ID, or Query Parameter, exists. These endpoints are available for all resources, allowing for a consistent and efficient method to verify whether a particular resource is present without retrieving the full data.

Read more...

Updated the implementation of SetNameChange in Audit Log

18 October 2023
Announcement
DeprecationSecurity

As previously announced on 18 July 2023, we changed the type of the previousValue and nextValue fields on the Audit Log Change Type SetNameChange from LocalizedString to String.

In addition, the following update actions now trigger SetLocalizedNameChange instead of SetNameChange:

We've also added support for the Set Name update action on Associate Roles, which triggers SetNameChange.

Changes:

  • [API] Changed type of previousValue and nextValue fields on SetNameChange from LocalizedString to String.
  • [API] Changed the following update actions to trigger SetLocalizedNameChange instead of SetNameChange:
  • [API] Added support for the Set Name update action on Associate Roles to the Change History API.

Added CustomerEmailTokenCreated and CustomerPasswordTokenCreated Messages

6 October 2023
Enhancement
Messages/SubscriptionsCustomersGraphQL

You can now subscribe to Messages for email verification and password reset tokens of Customers.

Changes:

Read more...

Fixed field types on OrderFromCartDraft, OrderFromQuoteDraft, and PaymentDraft

2 October 2023
Resolved Issue
GraphQLOrdersQuotesPayments

We changed the type of the state field on OrderFromCartDraft and OrderFromQuoteDraft, as well as the customer field on PaymentDraft, from Reference to ResourceIdentifier. The HTTP API now behaves as documented, and we also aligned the GraphQL API with this behavior.

Changes:

  • [API] Changed type of state field on OrderFromCartDraft and OrderFromQuoteDraft from Reference to ResourceIdentifier.
  • [API] Changed type of customer field on PaymentDraft from Reference to ResourceIdentifier.
  • [GraphQL API] Changed the OrderCartCommand type:
    • OrderCartCommand.state input field type changed from ReferenceInput to ResourceIdentifierInput.
  • [GraphQL API] Changed the OrderQuoteCommand type:
    • OrderQuoteCommand.state input field type changed from ReferenceInput to ResourceIdentifierInput.
  • [GraphQL API] Changed the SetPaymentCustomer type:
    • SetPaymentCustomer.customer input field type changed from ReferenceInput to ResourceIdentifierInput

Product Selections of mode Exclusion achieved general availability status

29 September 2023
Announcement
Product CatalogStoresMessages/SubscriptionsGraphQL

After collecting feedback during the beta phase, we have moved the Product Selections mode IndividualExclusion out of beta.

The status of the following features has been changed to general availability:

To learn more about managing assortments with Product Selections, see Product Selections API.

Added support for discounting the Cart total

28 September 2023
Enhancement
Pricing and DiscountsCartsOrdersGraphQL

You can now create Cart Discounts that target the total price of a Cart. With this enhancement, you can configure promotions such as spend 200€ and get 5€ off the cart total. Previously, this discount configuration was not supported.

Changes:

  • [API] Added discountOnTotalPrice field to Cart and Order.
  • [API] Added DiscountOnTotalPrice and DiscountedTotalPricePortion to the Carts API.
  • [API] Added CartDiscountTotalPriceTarget type to the Cart Discounts API.
  • [GraphQL API] Added the following types to the GraphQL schema: DiscountOnTotalPrice, DiscountedTotalPricePortion, CartDiscountTotalPriceTarget.
  • [GraphQL API] Changed the CartDiscountTargetInput type:
    • Input field totalPrice was added to CartDiscountTargetInput type
  • [GraphQL API] Changed the Cart and Order type:
    • Added the discountOnTotalPrice field to the Cart and Order type.
Read more...

Introduced Buyer Approval Flows in beta

19 September 2023
Feature
B2BOrdersMessages/SubscriptionsGraphQL

We have released Buyer Approval Flows in public beta. This new feature provides a flexible Order approval process for Business Units. Orders can now be matched to Approval Rules, which determine whether an Order must go through an approval process, and if so, which Associate Roles are needed to approve it. During the approval process, an Approval Flow manages the overall approval state.

With the help of Buyer Approval Flows, you can control each step of the Order approval process, based on the requirements of your organization.

This feature is only available as part of Composable Commerce for B2B and will be subject to additional terms and pricing. To get access to Composable Commerce for B2B, please contact Support via the Support Portal.

Changes:

  • [API] Added Approval Rules and Approval Flows APIs.
  • [API] Added ApprovalFlowApprovedMessage, ApprovalFlowCompletedMessage, ApprovalFlowCreatedMessage, ApprovalFlowRejectedMessage Messages.
  • [API] Added ApprovalRuleApproversSetMessage, ApprovalRuleCreatedMessage, ApprovalRuleDescriptionSetMessage, ApprovalRuleKeySetMessage, ApprovalRuleNameSetMessage, ApprovalRulePredicateSetMessage, ApprovalRuleRequestersSetMessage, ApprovalRuleStatusSetMessage Messages.
  • [API] Added CreateApprovalRules, UpdateApprovalRules, and UpdateApprovalFlows Permissions.
  • [GraphQL API] Changed the Permission type:
    • Enum values CreateApprovalRules, UpdateApprovalRules and UpdateApprovalFlows were added to enum Permission.
Read more...

Added Messages for changes on Custom Fields and Types on Customer Groups

18 September 2023
Enhancement
CustomersMessages/SubscriptionsGraphQL

You can now subscribe to Messages for changes to Custom Fields and Types on Customer Groups.

Changes:

Read more...

Get ProductProjection in Store endpoints achieved general availability status

15 September 2023
Announcement
StoresProduct Catalog

After collecting feedback during the beta phase, we have moved the Get ProductProjection in Store endpoints out of beta. The status of the following features has been changed to general availability:

To learn how Stores can enable filtering of data in Product Projections, see Stores API.

Added Cart Predicate functions 'shippingInfoExists' and 'forAllShippingInfos'

13 September 2023
Enhancement
CartsOrders

With the addition of shippingInfoExists and forAllShippingInfos functions to Cart Predicates you can now construct predicates that match against ShippingInfo on Carts with multiple Shipping Methods.

Changes:

  • [API] Added functions shippingInfoExists and forAllShippingInfos to Cart Predicates.

Audit Log now identifies changes linked to a specific Business Unit for Orders, Quote Requests, and Quotes.

13 September 2023
Enhancement
B2BSecurityQuotesOrdersGraphQL

We have extended the capabilities of Audit Log to help you identify changes made to individual Business Units.

To help you filter Records, we've added the businessUnit query parameter to the Query Records endpoint. This allows you to filter Records by key for three specific resource types: orders, quote-requests, and quotes.

Changes:

  • [API] Added query parameter businessUnit to the Query Records endpoint.
  • [API] Added businessUnit field to Record.
  • [GraphQL API] Added KeyReference type.
  • [GraphQL API] Changed the ChangeHistory type:
    • Added businessUnit field to ChangeHistory.
  • [GraphQL API] Added businessUnit query parameter for orders, order, quotes, quote, quoteRequests, quoteRequest queries.
Read more...

Added Messages for changes on Custom Fields and Types on Business Units

8 September 2023
Enhancement
B2BCustomersMessages/SubscriptionsGraphQL

You can now subscribe to Messages for Set CustomField, Set Custom Type, Set Address CustomField, and Set Custom Type in Address update actions on Business Units.

Changes:

Read more...

Added Messages for changes on Custom Fields and Types on Customers and Customer Addresses

1 September 2023
Enhancement
CustomersMessages/SubscriptionsGraphQL

You can now subscribe to Messages that will be triggered when using Set CustomField, Set Custom Type, Set CustomField in Address, and Set Custom Type in Address actions on Customers.

Changes:

Read more...

Added support for creating and deleting staged values in Standalone Prices

31 August 2023
Enhancement
Pricing and DiscountsGraphQL

You can now create staged values while creating Standalone Prices. Previously, you could only set staged values on existing Standalone Prices after they have been created. Additionally, you can now delete staged values in Standalone Prices. Previously, you could only delete staged values by applying the staged changes to the Standalone Price, or by deleting the respective Standalone Price.

Changes:

  • [API] Added staged field to StandalonePriceDraft.
  • [API] Added StagedPriceDraft type to the Standalone Prices API.
  • [API] Added Remove Staged Values update action to the Standalone Prices API.
  • [API] Added StandalonePriceStagedChangesRemoved Message.
  • [GraphQL API] Added the following types to the GraphQL schema: StagedPriceDraft, RemoveStagedChanges, StandalonePriceStagedChangesRemoved .
  • [GraphQL API] Changed the CreateStandalonePrice type:
    • Added the staged field to the StandalonePriceUpdateAction type.
  • [GraphQL API] Changed the StandalonePriceUpdateAction type:
    • Input field removeStagedChanges was added to StandalonePriceUpdateAction type.
Read more...

Quotes achieved general availability status

29 August 2023
Announcement
QuotesB2BOrders

After collecting feedback during the beta phase, we have moved Quotes out of beta. The status of the following features has been changed to general availability:

In addition, we've also removed the Failed value from the QuoteState and MyQuoteState enums, as it is an unused value that the API does not return.

Changes:

  • [API] Removed Failed value from QuoteState enum.
  • [API] Removed Failed value from MyQuoteState enum.
  • [GraphQL API] Changed the QuoteState type:
    • Enum value Failed was removed from enum QuoteState
  • [GraphQL API] Changed the MyQuoteState type:
    • Enum value Failed was removed from enum MyQuoteState
Read more...

Added 'perMethodExternalTaxRate' field to LineItemDraft

25 August 2023
Enhancement
CartsOrdersGraphQL

With the addition of perMethodExternalTaxRate on LineItemDraft, you can now set individual external Tax Rates for multiple Shipping Methods within a Line Item. Previously, you had to issue the Set LineItem Tax Rate update action for each Shipping Method.

Changes:

  • [API] Added the perMethodExternalTaxRate field to LineItemDraft.
  • [API] Added the MethodExternalTaxRateDraft type to the Carts API.
  • [GraphQL API] Added the following types to the GraphQL schema: MethodExternalTaxRateDraft, MethodExternalTaxRateDraftOutput.
  • [GraphQL API] Changed the LineItemDraftOutput type:
    • Added the perMethodExternalTaxRate field to the LineItemDraftOutput type.
  • [GraphQL API] Changed the AddStagedOrderLineItem type:
    • Input field perMethodExternalTaxRate was added to AddStagedOrderLineItem type.
  • [GraphQL API] Changed the AddCartLineItem type:
    • Input field perMethodExternalTaxRate was added to AddCartLineItem type.
Read more...

Added GraphQL support for Messages on QuoteRequests, StagedQuotes, and Quotes

24 August 2023
Enhancement
GraphQLB2BQuotesMessages/Subscriptions

You can now query QuoteRequest, StagedQuote, and Quote Messages via GraphQL.

In addition, you can now subscribe to Messages about Quote renegotiation requests.

Changes:

  • [API] added QuoteRenegotiationRequested Message.
  • [GraphQL API] Added the following types to the GraphQL schema: QuoteCreated, QuoteCustomerChanged, QuoteDeleted, QuoteRenegotiationRequested, QuoteRequestCreated, QuoteRequestCustomerChanged, QuoteRequestDeleted, QuoteRequestStateChanged, QuoteRequestStateTransition, QuoteStateChanged, QuoteStateTransition, StagedQuoteCreated, StagedQuoteDeleted, StagedQuoteSellerCommentSet, StagedQuoteStateChanged, StagedQuoteStateTransition, StagedQuoteValidToSet.
  • [GraphQL API] Changed the Quote type:
    • Added the customerGroup field to the Quote type.
    • Added the customerGroupRef field to the Quote type.
  • [GraphQL API] Changed the QuoteRequest type:
    • Added the customerGroup field to the QuoteRequest type.
    • Added the customerGroupRef field to the QuoteRequest type.
Read more...

Added GraphQL support for querying Quotes and Quote Requests as an Associate

23 August 2023
Enhancement
GraphQLB2BQuotes

We've introduced GraphQL support for querying Quotes and Quote Requests as an Associate.

Changes:

  • [GraphQL API] Added the following types to the GraphQL schema: QuoteQueryInterface, QuoteRequestQueryInterface.
  • [GraphQL API] Changed the AsAssociate type:
    • AsAssociate object type now implements QuoteRequestQueryInterface interface
    • AsAssociate object type now implements QuoteQueryInterface interface
Read more...

Introduced 'cart' field on QuoteRequest

21 August 2023
Enhancement
QuotesGraphQL

With the introduction of the cart field on QuoteRequest, you can now know the Cart from which a Quote was requested.

Changes:

  • [API] Added the cart field to QuoteRequest.
  • [GraphQL API] Changed the QuoteRequest type:
    • Added the cartRef field to the QuoteRequest type.
Read more...

Audit Log now identifies changes made by Associates on Business Units, Orders, Quote Requests, and Quotes.

21 August 2023
Enhancement
B2BSecurityCustomersQuotesOrdersGraphQL

We have extended the capabilities of Audit Log to identify changes made by Associates in the context of a Business Unit.

To help you filter Records, we've added the associateId query parameter to the Query Records endpoint. This allows you to filter Records by key for the following resource types: business-units, orders, quote-requests, and quotes.

Changes:

  • [API] Added query parameter associateId to the Query Records endpoint.
  • [API] Added associate field to the modifiedBy property of Record.
  • [API] Updated enum type field of modifiedBy property of Record to include associate option.
  • [GraphQL API] Changed the Query type:
    • Added the associateId property to the following fields: businessUnits, businessUnit, orders, order, quotes, quote, quoteRequests, quoteRequest.
  • [GraphQL API] Changed the ChangeHistory type:
    • Added associate field to modifiedBy property of ChangeHistory.
  • [GraphQL API] Changed the ModifiedByType enum:
    • Added associate option.
Read more...

Business Units achieved general availability status

21 August 2023
Announcement
B2BCartsOrdersQuotesCustomersGraphQL

After collecting feedback during the beta phase, we have moved Business Units and Associate Roles out of beta. The status of the following features has been changed to general availability:

These features are only available as part of Composable Commerce for B2B and will be subject to additional terms and pricing. To get access to Composable Commerce for B2B, please contact Support via the Support Portal.

Introduced 'key' field on ShoppingListLineItem and TextLineItem

11 August 2023
Enhancement
GraphQLCarts

We introduced the key field on ShoppingListLineItem, ShoppingListLineItemDraft, TextLineItem, and TextLineItemDraft. We also added lineItemKey and textLineItemKey on update actions referencing Shopping List Line Items and Text Line Items. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.

Changes:

Read more...

Added 'taxedPricePortions' field to CustomLineItem

4 August 2023
Enhancement
CartsOrdersGraphQL

We introduced the taxedPricePortions field on CustomLineItem to add additional support for Carts containing multiple Shipping Methods.

Changes:

Read more...

Removed deprecated ProductSelectionType

4 August 2023
Enhancement
Product CatalogGraphQLDeprecation

As announced before we have now removed the deprecated type field from ProductSelection and its draft, alongside the deprecated ProductSelectionType. The feature has been replaced by ProductSelectionMode kept in the mode field of the ProductSelection.

Changes:

  • [API] Removed the type field from Product Selection and ProductSelectionDraft.
  • [API] Removed ProductSelectionTypeEnum, IndividualProductSelectionType, and IndividualExclusionProductSelectionType from the Product Selections API.
  • [GraphQL API] Removed the type field from the ProductSelection type.
  • [GraphQL API] Removed the input field type from the CreateProductSelectionDraft type.

Removed deprecated roles on Associates in Business Units

2 August 2023
Announcement
B2BDeprecation

Following the deprecation announcement on 2 May 2023, we have now fully removed the deprecated AssociateRole enum with Buyer and Admin values as well as the roles field on Associate and AssociateDraft.

The deprecated functionality has been replaced by the Associate Roles API. Use the associateRoleAssignments property to assign Associate Roles to Associates.

Changes:

  • [API] Removed roles from Associate and AssociateDraft.
  • [API] Removed AssociateRole enum with Buyer and Admin values.

Added Messages for changes on Custom Fields and Types on Orders

1 August 2023
Enhancement
OrdersMessages/SubscriptionsGraphQL

You can now subscribe to Messages that will be triggered when using Set CustomField and Set Custom Type actions on Orders.

Changes:

Read more...

Introduced 'key' field on Return Items

31 July 2023
Enhancement
GraphQLOrders

We introduced the key field on LineItemReturnItem, CustomLineItemReturnItem, and ReturnItemDraft. We also introduced returnItemKey on update actions referencing Return Items for Orders and Order Edits. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.

Changes:

Read more...

Added support for high precision money on fixed price Cart Discounts

31 July 2023
Enhancement
Pricing and DiscountsGraphQL

With this enhancement, fixed price Cart Discounts now support money values in high precision to support your business needs. Previously, you could use money values in cent precision only for fixed price Cart Discounts.

Changes:

  • [API] Changed the type of money field on CartDiscountValueFixed from CentPrecisionMoney to TypedMoney.
  • [API] Changed the type of money field on CartDiscountValueFixedDraft from Money to TypedMoneyDraft.
  • [GraphQL API] Added the following types to the GraphQL schema: CartDiscountValueBaseMoneyInput.
  • [GraphQL API] Changed the FixedPriceDiscountValue type:
    • FixedPriceDiscountValue.money field type changed from [Money!]! to [BaseMoney!]!
  • [GraphQL API] Changed the FixedPriceDiscountValueInput type:
    • FixedPriceDiscountValueInput.money input field type changed from [MoneyInput!]! to [CartDiscountValueBaseMoneyInput!]!
Read more...

Added Get QuoteRequest endpoints to My Quote Requests

24 July 2023
Enhancement
B2BQuotes

Buyers can now retrieve QuoteRequests by ID or key using the My Quote Requests API.

Changes:

Introduced 'customLineItemKey' field on Orders Messages and update actions

21 July 2023
Enhancement
GraphQLOrdersMessages/Subscriptions

We introduced the customLineItemKey on Order Messages referencing Custom Line Items. The customLineItemKey field is now also available on Transition LineItem State and Import LineItem State update actions on Orders and Order Edits. In addition, we introduced the key field on CustomLineItemImportDraft and LineItemImportDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.

Changes:

Read more...

Audit Log now tracks changes on Associate Roles

18 July 2023
Enhancement
B2BSecurityGraphQLDeprecation

We have extended the capabilities of Audit Log to track changes to Associate Roles. In addition, we introduced new Change Types for Business Units.

To ensure a consistent experience when working with different Change Types across the Change History API, we are adjusting the implementation of SetNameChange and introducing SetLocalizedNameChange.

From 18 October 2023:

  • SetNameChange fields previousValue and nextValue will change to type String.
  • The following update actions will trigger SetLocalizedNameChange instead of SetNameChange:

Changes:

Read more...

Enhanced Client Logging to include changes of Associates

14 July 2023
Enhancement
B2BCustomers

We updated Client Logging to include information about Associates performing changes. This enhancement is specific to Associates who create or update a Business Unit, Cart, Order, Quote Request, or Quote within the context of associate endpoints. The createdBy and lastModifiedBy properties of affected resources now contain the associate field, referencing the Customer who performed the change. This brings greater visibility into the operations Associates perform within a Business Unit.

  • [API] Added associate to CreatedBy.
  • [API] Added associate to LastModifiedBy.
  • [GraphQL API] Changed the Initiator type:
    • Added the associateRef field to the Initiator type.
Read more...

Added ChangeSubscriptions for Associate Roles

14 July 2023
Feature
B2BCustomersMessages/Subscriptions

You can now subscribe to notifications about changes to Associate Roles.

This feature is only available as part of Composable Commerce for B2B and will be subject to additional terms and pricing. To get access to Composable Commerce for B2B, please contact Support via the Support Portal.

Changes:

Introduced 'lineItemKey' field on Messages related to Order Line Items

14 July 2023
Enhancement
OrdersMessages/SubscriptionsGraphQL

We introduced the lineItemKey on Order Messages referencing Line Items. The lineItemKey field is now also available on Transition LineItem State and Import LineItem State update actions on Orders and Order Edits. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.

Changes:

Read more...

Introduced 'customLineItemKey' field on update actions related to CustomLineItem

12 July 2023
Enhancement
CartsOrdersGraphQL

We introduced the customLineItemKey field on update actions referencing Custom Line Items on Carts, Orders, and Order Edits. The customLineItemId field is now optional on the affected update actions. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.

Changes:

Read more...

Introduced Store-specific Cart Discounts in beta

5 July 2023
Enhancement
Pricing and DiscountsStoresSecurity

With the introduction of Store-specific Cart Discounts in public beta, you can now define Cart Discounts that are applicable to specific Stores. Previously, you could only define Cart Discounts that are active across all the Stores in your Project.

You can restrict the permissions of API Clients to view and manage Cart Discounts in a specific Store only. Previously, such permissions could only be managed globally for all Cart Discounts in a Project at the same time. However, the permissions set are not exclusive in the following instances:

  • Cart Discounts requiring a Discount Code can be linked to a Discount Code created by any user.
  • When using Custom Fields, if any Custom Field references Cart Discounts, all Cart Discounts will be visible.

With this enhancement, the limit for Cart Discounts that do not require a Discount Code has been increased. In addition to the 100 active Cart Discounts that are independent of a Store, you can now have 100 Cart Discounts per Store. Thus, the overall limit is 100 + (100 * number of Stores in a Project).

Read more...

Introduced 'key' field on CustomLineItem

3 July 2023
Enhancement
CartsOrdersGraphQL

We introduced the key field on CustomLineItem and CustomLineItemDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.

Changes:

  • [API] Added the key field to CustomLineItem and CustomLineItemDraft.
  • [API] Added key field to Add CustomLineItem update action on Carts.
  • [API] Added key field to Add CustomLineItem update action on Order Edits.
  • [GraphQL API] Changed the CustomLineItemDraftOutput type:
    • Added the key field to the CustomLineItemDraftOutput type.
  • [GraphQL API] Changed the AddCartCustomLineItem type:
    • Input field key was added to AddCartCustomLineItem type.
  • [GraphQL API] Changed the AddStagedOrderCustomLineItem type:
    • Input field key was added to AddStagedOrderCustomLineItem type.
  • [GraphQL API] Changed the CustomLineItem type:
    • Added the key field to the CustomLineItem type.
  • [GraphQL API] Changed the CustomLineItemDraft type:
    • Input field key was added to CustomLineItemDraft type.
Read more...

Audit Log AWS Regions achieved general availability status

30 June 2023
Announcement
Security

After collecting feedback during the beta phase, we have moved all AWS Regions out of beta and into general availability.

Increased the limit of Associates in a Business Unit to 2000

30 June 2023
Enhancement
B2BLimits

A Business Unit can now contain up to 2000 Associates. This is an increase from the previous limit of 100.

Removed deprecated names of Product Variant Selection types

30 June 2023
Announcement
Product CatalogGraphQLDeprecation

As announced before we have now removed the deprecated values from the type field of ProductVariantSelection. To assign Variants to Product Selections, use the IncludeOnly and IncludeAllExcept types instead.

Changes:

  • [API] Removed inclusion and exclusion values from the type field of ProductVariantSelection.
  • [GraphQL API] Removed the following types on the GraphQL schema: ProductVariantSelectionExclusion, ProductVariantSelectionInclusion.

Audit Log now tracks changes on Business Units

29 June 2023
Enhancement
B2BSecurityProduct CatalogQuotesStoresGraphQL

We have extended the capabilities of Audit Log to track changes to Business Units. In addition, we introduced new Change Types for Stores, Product Selections, and Quotes.

To help you filter Records, we've added the resourceKey query parameter to the Query Records endpoint. This allows you to filter Records by key for three specific resource types: business-units, products, and stores.

Changes:

The following change was introduced in terms of GraphQL SDL:

Read more...

Staged and active Standalone Prices achieved general availability status

27 June 2023
Announcement
Pricing and DiscountsMessages/Subscriptions

After collecting feedback during the beta phase, we have moved the staged and active fields on StandalonePrice out of beta. The status of the following features has been changed to general availability:

Added 'lineItemKey' to Cart, Order, and Order Edit update actions

23 June 2023
Enhancement
CartsOrdersGraphQL

We introduced the lineItemKey field on update actions referencing Line Items on Carts, Orders, and Order Edits. The lineItemId field is now optional on the affected update actions. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.

Changes:

Read more...

Fixed 'InventoryEntryCreated' type in the GraphQL API

23 June 2023
Resolved Issue
GraphQLProduct CatalogMessages/Subscriptions

We made a correction to the InventoryEntryCreated type in the GraphQL API. The type of the field inventoryEntry was incorrectly marked as InventoryEntryCreatedContent! instead of InventoryEntry!. This was not in line with the documentation of the InventoryEntryCreated Message and caused the SDKs to not work correctly.

Additionally, we removed the types InventoryEntryCreatedContent and MessageId from the GraphQL schema since they are no longer required.

Changes:

  • [GraphQL API] Removed the following types from the GraphQL schema: InventoryEntryCreatedContent, MessageId.
  • [GraphQL API] Changed the InventoryEntryCreated type:
    • InventoryEntryCreated.inventoryEntry field type changed from InventoryEntryCreatedContent! to InventoryEntry!

Added 'perMethodTaxRate' field to CustomLineItems

22 June 2023
Enhancement
CartsOrdersGraphQL

To align with the HTTP API, we now added support for the perMethodTaxRate field on CustomLineItems to the GraphQL API.

Changes:

  • [GraphQL API] Added the perMethodTaxRate field to the CustomLineItem type.
Read more...

Added update actions to set Price tiers on Standalone Prices

20 June 2023
Enhancement
Pricing and DiscountsGraphQL

You can now update Price tiers on existing Standalone Prices. Before, you had to delete and to recreate the Standalone Price with the new Price tier to achieve this.

Changes:

Read more...

Added 'sku' field to Standalone Price Deleted Message

20 June 2023
Enhancement
Messages/SubscriptionsPricing and DiscountsGraphQL

The Standalone Price Deleted Message now includes a new field, sku, which helps you identify the associated SKU when you delete a Standalone Price.

Changes:

  • [API] Added field sku to Standalone Price Deleted Message.
  • [GraphQL API] Changed the StandalonePriceDeleted type:
    • Added the sku field to the StandalonePriceDeleted type.
Read more...

Removed deprecated fields from Remove Price update action

15 June 2023
Enhancement
DeprecationPricing and DiscountsGraphQL

As announced before we have now removed the variantId, sku and price fields from the Remove Price update action on the Products API. The Price to be removed is now identified by the priceId field, respectively by RemoveProductPrice.priceId in the GraphQL API.

Read more...

Added update actions to set validity dates on Standalone Prices

12 June 2023
Enhancement
Pricing and DiscountsGraphQL

We introduced new update actions on the Standalone Prices API that allow you to modify the start and end dates of a Standalone Price. This feature simplifies the process of maintaining accurate pricing information for your customers. Prior to this enhancement, changing the validity dates required the deletion and recreation of Standalone Prices, a process that was time-consuming and error-prone.

Alongside the new update actions, we also introduced corresponding Subscription Messages to enhance visibility and tracking.

Changes:

Read more...

Added 'key' to Cart Line Item

9 June 2023
Enhancement
CartsGraphQL

We introduced the key field on LineItem and LineItemDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.

Changes:

  • [GraphQL API] Changed the AddStagedOrderLineItem type:
    • Input field key was added to AddStagedOrderLineItem type
  • [GraphQL API] Changed the MyLineItemDraft type:
    • Input field key was added to MyLineItemDraft type
  • [GraphQL API] Changed the LineItemDraft type:
    • Input field key was added to LineItemDraft type
  • [GraphQL API] Changed the AddCartLineItem type:
    • Input field key was added to AddCartLineItem type
  • [GraphQL API] Changed the LineItem type:
    • Added the key field to the LineItem type.
  • [GraphQL API] Changed the LineItemDraftOutput type:
    • Added the key field to the LineItemDraftOutput type.
  • [GraphQL API] Changed the AddMyCartLineItem type:
    • Input field key was added to AddMyCartLineItem type
Read more...

Added 'business-unit' and 'associate-role' to CustomFieldReferenceValue

7 June 2023
Enhancement
CustomizationB2B

Business Units and Associate Roles can now be used as ReferenceTypes on Custom Fields. The new associate-role and business-unit values are supported on all customizable data types providing full flexibility in extending B2B features.

Changes:

Confluent Cloud added as Subscription destination

7 June 2023
Enhancement
Messages/Subscriptions

We are announcing that Confluent Cloud is now supported as a Subscription destination.

With the introduction of Confluent Cloud support, customers can now natively use Apache Kafka across their preferred cloud platforms, whether it's Google Cloud, Azure, or AWS. This integration not only eliminates the necessity for intermediary gateways to consume messages from Kafka but also reduces the associated resources and costs.

Changes:

  • [API] Added ConfluentCloudDestination to Subscriptions.
  • [GraphQL API] Added the following types to the GraphQL schema: ConfluentCloudDestination, ConfluentCloudDestinationInput
  • [GraphQL API] Changed the DestinationInput type:
    • Input field ConfluentCloud was added to DestinationInput type
Read more...

Introduced GraphQL support for creating Associates using My Business Units

6 June 2023
Enhancement
B2BGraphQL

We introduced GraphQL support for creating Associates using My Business Units. This allows Customers with the UpdateAssociates Permission to create a new Associate, assigning them roles specific to the given Business Unit.

Changes:

  • [GraphQL API] Added the following types to the GraphQL schema: SignUpInMyBusinessUnitDraft.
  • [GraphQL API] Changed the Mutation type:
    • Added the signUpInMyBusinessUnit field to the Mutation type.
Read more...

Introduced 'key' field on Parcel

6 June 2023
Enhancement
OrdersGraphQL

We introduced the key field on Parcel and ParcelDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.

Changes:

  • [API] Added the key field to Parcel and ParcelDraft.
  • [API] Added the parcelKey field and changed the parcelId field to be optional on the following Order and StagedOrderUpdateAction update actions:
  • [API] Added the parcelKey field to the Add Parcel update action on Order and StagedOrderUpdateAction.
  • [GraphQL API] Changed the Parcel type:
    • Added the key field to the Parcel type.
  • [GraphQL API] Changed the ParcelDraft type:
    • Input field key was added to ParcelDraft type
  • [GraphQL API] Changed the SetStagedOrderParcelCustomTypeOutput type:
    • Added the parcelKey field to the SetStagedOrderParcelCustomTypeOutput type.
    • SetStagedOrderParcelCustomTypeOutput.parcelId field type changed from String! to String
  • [GraphQL API] Changed the SetOrderParcelMeasurements type:
    • SetOrderParcelMeasurements.parcelId input field type changed from String! to String
    • Input field parcelKey was added to SetOrderParcelMeasurements type
  • [GraphQL API] Changed the SetStagedOrderParcelCustomType type:
    • SetStagedOrderParcelCustomType.parcelId input field type changed from String! to String
    • Input field parcelKey was added to SetStagedOrderParcelCustomType type
  • [GraphQL API] Changed the SetStagedOrderParcelTrackingData type:
    • SetStagedOrderParcelTrackingData.parcelId input field type changed from String! to String
    • Input field parcelKey was added to SetStagedOrderParcelTrackingData type
  • [GraphQL API] Changed the SetStagedOrderParcelCustomField type:
    • SetStagedOrderParcelCustomField.parcelId input field type changed from String! to String
    • Input field parcelKey was added to SetStagedOrderParcelCustomField type
  • [GraphQL API] Changed the SetStagedOrderParcelMeasurements type:
    • Input field parcelKey was added to SetStagedOrderParcelMeasurements type
    • SetStagedOrderParcelMeasurements.parcelId input field type changed from String! to String
  • [GraphQL API] Changed the AddOrderParcelToDelivery type:
    • Input field parcelKey was added to AddOrderParcelToDelivery type
  • [GraphQL API] Changed the SetStagedOrderParcelTrackingDataOutput type:
    • SetStagedOrderParcelTrackingDataOutput.parcelId field type changed from String! to String
    • Added the parcelKey field to the SetStagedOrderParcelTrackingDataOutput type.
  • [GraphQL API] Changed the SetStagedOrderParcelMeasurementsOutput type:
    • SetStagedOrderParcelMeasurementsOutput.parcelId field type changed from String! to String
    • Added the parcelKey field to the SetStagedOrderParcelMeasurementsOutput type.
  • [GraphQL API] Changed the SetOrderParcelTrackingData type:
    • SetOrderParcelTrackingData.parcelId input field type changed from String! to String
    • Input field parcelKey was added to SetOrderParcelTrackingData type
  • [GraphQL API] Changed the RemoveOrderParcelFromDelivery type:
    • RemoveOrderParcelFromDelivery.parcelId input field type changed from String! to String
    • Input field parcelKey was added to RemoveOrderParcelFromDelivery type
  • [GraphQL API] Changed the ParcelData type:
    • Added the key field to the ParcelData type.
  • [GraphQL API] Changed the AddStagedOrderParcelToDelivery type:
    • Input field parcelKey was added to AddStagedOrderParcelToDelivery type
  • [GraphQL API] Changed the SetStagedOrderParcelItems type:
    • SetStagedOrderParcelItems.parcelId input field type changed from String! to String
    • Input field parcelKey was added to SetStagedOrderParcelItems type
  • [GraphQL API] Changed the SetOrderParcelCustomType type:
    • SetOrderParcelCustomType.parcelId input field type changed from String! to String
    • Input field parcelKey was added to SetOrderParcelCustomType type
  • [GraphQL API] Changed the ParcelDataDraftType type:
    • Input field key was added to ParcelDataDraftType type
  • [GraphQL API] Changed the SetStagedOrderParcelItemsOutput type:
    • SetStagedOrderParcelItemsOutput.parcelId field type changed from String! to String
    • Added the parcelKey field to the SetStagedOrderParcelItemsOutput type.
  • [GraphQL API] Changed the RemoveStagedOrderParcelFromDeliveryOutput type:
    • Added the parcelKey field to the RemoveStagedOrderParcelFromDeliveryOutput type.
    • RemoveStagedOrderParcelFromDeliveryOutput.parcelId field type changed from String! to String
  • [GraphQL API] Changed the SetOrderParcelItems type:
    • Input field parcelKey was added to SetOrderParcelItems type
    • SetOrderParcelItems.parcelId input field type changed from String! to String
  • [GraphQL API] Changed the SetOrderParcelCustomField type:
    • Input field parcelKey was added to SetOrderParcelCustomField type
    • SetOrderParcelCustomField.parcelId input field type changed from String! to String
  • [GraphQL API] Changed the RemoveStagedOrderParcelFromDelivery type:
    • RemoveStagedOrderParcelFromDelivery.parcelId input field type changed from String! to String
    • Input field parcelKey was added to RemoveStagedOrderParcelFromDelivery type
  • [GraphQL API] Changed the SetStagedOrderParcelCustomFieldOutput type:
    • SetStagedOrderParcelCustomFieldOutput.parcelId field type changed from String! to String
    • Added the parcelKey field to the SetStagedOrderParcelCustomFieldOutput type.
  • [GraphQL API] Changed the AddStagedOrderParcelToDeliveryOutput type:
    • Added the parcelKey field to the AddStagedOrderParcelToDeliveryOutput type.
Read more...

Added RenegotiationAddressed state to QuoteState

2 June 2023
Enhancement
QuotesGraphQL

A new state RenegotiationAddressed has been added to QuoteState. With this new state, Sellers can see Quotes where renegotiations requested by the respective buyer have been addressed.

Changes:

  • [API] Added RenegotiationAddressed field to QuoteState.
  • [GraphQL API] Changed the QuoteState type:
    • Enum value RenegotiationAddressed was added to enum QuoteState
Read more...

Added update action for setting the InventoryMode of Line Items

2 June 2023
Enhancement
CartsGraphQLProduct Catalog

You can now change the InventoryMode of an existing LineItem by using the Set LineItem InventoryMode update action on the general endpoint. The InventoryMode could previously only be set when creating new Line Items.

Changes:

  • [API] Added Set LineItem InventoryMode update action to the Carts API.
  • [GraphQL API] Added the following types to the GraphQL schema: SetCartLineItemInventoryMode.
  • [GraphQL API] Changed the CartUpdateAction type:
    • Input field setLineItemInventoryMode was added to CartUpdateAction type
Read more...

Countries on Stores achieved general availability status

31 May 2023
Announcement
StoresMessages/Subscriptions

After collecting feedback during the beta phase, we have moved countries on Stores out of beta. The status of the following features has been changed to general availability:

Visit the API reference to learn more about how countries on Stores can enable filtering prices in Product Projections and Cart, Order, and Shopping List Line Items.

Added the MoneyOverflow error code

30 May 2023
Enhancement

We've added the MoneyOverflow error code to help identify instances when a Money operation has failed due to an integer overflow.

Both centAmount (applicable to all money types), as well as preciseAmount (for high precision money types) are represented as 64-bit integers. If a Money operation results in either object exceeding the 64-bit limit, the API returns a 400 Bad Request with the MoneyOverflow error code.

Changes:

Attribute Groups achieved general availability status

30 May 2023
Announcement
Product Catalog

After collecting feedback during the beta phase, we have moved Attribute Groups out of beta. The status of the following features has been changed to general availability:

Attribute Groups let you organize Attribute Definitions by providing a list of references to Product Attributes. Learn more by visiting our documentation page.

Direct Discounts achieved general availability status

26 May 2023
Enhancement
CartsOrdersGraphQL

After collecting feedback during the beta phase, we have moved Direct Discounts out of beta. With Direct Discounts you can add a fixed or percentage discount to a single Cart.

The status of the following features has been changed to general availability:

Added support for updating a Customer on Quotes and Quote Requests

26 May 2023
Enhancement
GraphQLB2BQuotes

We introduced functionality to enable the reassignment of B2B Quotes and Quote Requests. This enhancement ensures that the Customer on a Quote or Quote Request can be updated in the event that they leave their Business Unit. The new Change Customer update action is available on Quote and Quote Request.

The new ReassignMyQuotes and ReassignOthersQuotes Permissions determine the ability to reassign a Quote within the context of a Business Unit. To enhance visibility and tracking, we have introduced two new Messages: QuoteRequestCustomerChanged and QuoteCustomerChanged. These Messages are triggered whenever a Quote or Quote Request's Customer is modified.

These enhancements improve the management of B2B Quotes within Composable Commerce, ensuring that Quotes and Quote Requests remain connected to the appropriate Associates even during organizational changes.

Changes:

  • [API] Added the Change Customer update action to Quote.
  • [API] Added the Change Customer update action to Quote Requests.
  • [API] Added ReassignMyQuotes and ReassignOthersQuotes Permissions.
  • [API] Added QuoteRequestCustomerChanged and QuoteCustomerChanged Messages.
  • [GraphQL API] Added the following types to the GraphQL schema: ChangeQuoteCustomer, ChangeQuoteRequestCustomer.
  • [GraphQL API] Changed the Permission type:
    • Enum value ReassignOthersQuotes was added to enum Permission
    • Enum value ReassignMyQuotes was added to enum Permission
  • [GraphQL API] Changed the QuoteRequestUpdateAction type:
    • Input field changeCustomer was added to QuoteRequestUpdateAction type
  • [GraphQL API] Changed the QuoteUpdateAction type:
    • Input field changeCustomer was added to QuoteUpdateAction type
Read more...

Added Replicate Cart in Business Unit endpoint

25 May 2023
Enhancement
B2BCarts

You can now replicate Carts in a given Business Unit using the Associate Carts endpoint.

  • [API] Added Replicate Cart in Business Unit endpoint.
  • [GraphQL API] Changed the Mutation type:
    • Argument asAssociate was added to Mutation.replicateCart field
Read more...

Added support for external tax on multiple Shipping Methods

25 May 2023
Enhancement
CartsOrdersGraphQL

We have added support for external tax rates and tax amounts on multiple Shipping Methods. You can now target individual Shipping Methods by including a shippingKey when using the Set ShippingMethod TaxAmount and Set ShippingMethod TaxRate update actions for Carts and Order Edits.

Changes:

  • [API] Added the shippingKey field to the following update actions on Carts:

  • [API] Added the shippingKey field to the following update actions on Order Edits:

  • [GraphQL API] Changed the SetStagedOrderShippingMethodTaxRateOutput type:

    • Added the shippingKey field to the SetStagedOrderShippingMethodTaxRateOutput type.
  • [GraphQL API] Changed the SetStagedOrderShippingMethodTaxAmount type:

    • Input field shippingKey was added to SetStagedOrderShippingMethodTaxAmount type
  • [GraphQL API] Changed the SetCartShippingMethodTaxRate type:

    • Input field shippingKey was added to SetCartShippingMethodTaxRate type
  • [GraphQL API] Changed the SetStagedOrderShippingMethodTaxRate type:

    • Input field shippingKey was added to SetStagedOrderShippingMethodTaxRate type
  • [GraphQL API] Changed the SetCartShippingMethodTaxAmount type:

    • Input field shippingKey was added to SetCartShippingMethodTaxAmount type
  • [GraphQL API] Changed the SetStagedOrderShippingMethodTaxAmountOutput type:

    • Added the shippingKey field to the SetStagedOrderShippingMethodTaxAmountOutput type.
Read more...

Added observability to Composable Commerce SDKs

23 May 2023
Announcement
Customization

We have added support for New Relic to Composable Commerce SDKs.

New Relic is an observability platform which monitors your application's performance. This integration helps you analyze your application to identify potential improvements for performance and user experience.

With this update, you can:

  • Trace and profile application performance directly from the SDK.
  • View and analyze your application's performance.
  • Get real-time insights and alerts about your application's performance and issues.

New Relic is currently supported by the latest versions of the Java SDK, TypeScript SDK, PHP SDK, and .NET SDK.

commercetools Composable Commerce for China is now available on AWS Ningxia

23 May 2023
Announcement

commercetools Composable Commerce is now available in China on AWS Ningxia in addition to our existing Regions in North America, Europe, and Australia. The China Region is available as part of Composable Commerce for China. Please reach out to your commercetools contact person to learn more.

Find the URLs to the commercetools Composable Commerce API here. Log in here.

When configuring a Project in the China Region, note that external links (for example, URLs used for images, external OAuth, and API Extensions) may be blocked due to firewall restrictions.

Announced deprecation of 'sku', 'variantId' and 'price' fields in Remove Price update action

17 May 2023
Announcement
DeprecationPricing and DiscountsGraphQL

The variantId, sku and price fields are now deprecated in the Remove Price update action on Products. Please use priceId instead. For the GraphQL API, please use RemoveProductPrice.priceId instead.

Changes:

  • [GraphQL API] Changed the RemoveProductPrice type:
    • RemoveProductPrice.variantId is deprecated
    • RemoveProductPrice.sku is deprecated
    • RemoveProductPrice.price is deprecated

Introduced 'key' field on Delivery

17 May 2023
Enhancement
OrdersGraphQL

We introduced the key field on Delivery and DeliveryDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.

Changes:

  • [API] Added the key field to Delivery and DeliveryDraft.

  • [API] Added the deliveryKey field to the following update actions on Orders:

  • [API] Added the deliveryKey field to the following update actions on Order Edits:

  • [API] Changed the deliveryId field to be optional on the following update actions on Orders:

  • [API] Changed the deliveryId field to be optional on the following update actions on Order Edits:

  • [GraphQL API] Changed the SetStagedOrderDeliveryCustomField type:

    • Input field deliveryKey was added to SetStagedOrderDeliveryCustomField type
    • SetStagedOrderDeliveryCustomField.deliveryId input field type changed from String! to String
  • [GraphQL API] Changed the AddStagedOrderDeliveryOutput type:

    • Added the deliveryKey field to the AddStagedOrderDeliveryOutput type.
  • [GraphQL API] Changed the SetStagedOrderDeliveryAddressOutput type:

    • SetStagedOrderDeliveryAddressOutput.deliveryId field type changed from String! to String
    • Added the deliveryKey field to the SetStagedOrderDeliveryAddressOutput type.
  • [GraphQL API] Changed the Delivery type:

    • Added the key field to the Delivery type.
  • [GraphQL API] Changed the SetStagedOrderDeliveryAddressCustomType type:

    • Input field deliveryKey was added to SetStagedOrderDeliveryAddressCustomType type
    • SetStagedOrderDeliveryAddressCustomType.deliveryId input field type changed from String! to String
  • [GraphQL API] Changed the AddStagedOrderDelivery type:

    • Input field deliveryKey was added to AddStagedOrderDelivery type
  • [GraphQL API] Changed the SetStagedOrderDeliveryItemsOutput type:

    • Added the deliveryKey field to the SetStagedOrderDeliveryItemsOutput type.
    • SetStagedOrderDeliveryItemsOutput.deliveryId field type changed from String! to String
  • [GraphQL API] Changed the SetStagedOrderDeliveryAddress type:

    • Input field deliveryKey was added to SetStagedOrderDeliveryAddress type
    • SetStagedOrderDeliveryAddress.deliveryId input field type changed from String! to String
  • [GraphQL API] Changed the SetStagedOrderDeliveryAddressCustomTypeOutput type:

    • Added the deliveryKey field to the SetStagedOrderDeliveryAddressCustomTypeOutput type.
    • SetStagedOrderDeliveryAddressCustomTypeOutput.deliveryId field type changed from String! to String
  • [GraphQL API] Changed the SetOrderDeliveryAddressCustomField type:

    • SetOrderDeliveryAddressCustomField.deliveryId input field type changed from String! to String
    • Input field deliveryKey was added to SetOrderDeliveryAddressCustomField type
  • [GraphQL API] Changed the SetStagedOrderDeliveryCustomType type:

    • SetStagedOrderDeliveryCustomType.deliveryId input field type changed from String! to String
    • Input field deliveryKey was added to SetStagedOrderDeliveryCustomType type
  • [GraphQL API] Changed the DeliveryDraft type:

    • Input field key was added to DeliveryDraft type
  • [GraphQL API] Changed the RemoveStagedOrderDeliveryOutput type:

    • Added the deliveryKey field to the RemoveStagedOrderDeliveryOutput type.
    • RemoveStagedOrderDeliveryOutput.deliveryId field type changed from String! to String
  • [GraphQL API] Changed the RemoveStagedOrderDelivery type:

    • RemoveStagedOrderDelivery.deliveryId input field type changed from String! to String
    • Input field deliveryKey was added to RemoveStagedOrderDelivery type
  • [GraphQL API] Changed the AddOrderDelivery type:

    • Input field deliveryKey was added to AddOrderDelivery type
  • [GraphQL API] Changed the SetStagedOrderDeliveryCustomFieldOutput type:

    • Added the deliveryKey field to the SetStagedOrderDeliveryCustomFieldOutput type.
    • SetStagedOrderDeliveryCustomFieldOutput.deliveryId field type changed from String! to String
  • [GraphQL API] Changed the SetStagedOrderDeliveryAddressCustomFieldOutput type:

    • SetStagedOrderDeliveryAddressCustomFieldOutput.deliveryId field type changed from String! to String
    • Added the deliveryKey field to the SetStagedOrderDeliveryAddressCustomFieldOutput type.
  • [GraphQL API] Changed the AddStagedOrderParcelToDelivery type:

    • Input field deliveryKey was added to AddStagedOrderParcelToDelivery type
    • AddStagedOrderParcelToDelivery.deliveryId input field type changed from String! to String
  • [GraphQL API] Changed the SetOrderDeliveryAddress type:

    • SetOrderDeliveryAddress.deliveryId input field type changed from String! to String
    • Input field deliveryKey was added to SetOrderDeliveryAddress type
  • [GraphQL API] Changed the AddOrderParcelToDelivery type:

    • AddOrderParcelToDelivery.deliveryId input field type changed from String! to String
    • Input field deliveryKey was added to AddOrderParcelToDelivery type
  • [GraphQL API] Changed the RemoveOrderDelivery type:

    • RemoveOrderDelivery.deliveryId input field type changed from String! to String
    • Input field deliveryKey was added to RemoveOrderDelivery type
  • [GraphQL API] Changed the SetOrderDeliveryCustomType type:

    • Input field deliveryKey was added to SetOrderDeliveryCustomType type
    • SetOrderDeliveryCustomType.deliveryId input field type changed from String! to String
  • [GraphQL API] Changed the SetOrderDeliveryCustomField type:

    • SetOrderDeliveryCustomField.deliveryId input field type changed from String! to String
    • Input field deliveryKey was added to SetOrderDeliveryCustomField type
  • [GraphQL API] Changed the SetStagedOrderDeliveryItems type:

    • SetStagedOrderDeliveryItems.deliveryId input field type changed from String! to String
    • Input field deliveryKey was added to SetStagedOrderDeliveryItems type
  • [GraphQL API] Changed the SetStagedOrderDeliveryCustomTypeOutput type:

    • Added the deliveryKey field to the SetStagedOrderDeliveryCustomTypeOutput type.
    • SetStagedOrderDeliveryCustomTypeOutput.deliveryId field type changed from String! to String
  • [GraphQL API] Changed the SetOrderDeliveryAddressCustomType type:

    • Input field deliveryKey was added to SetOrderDeliveryAddressCustomType type
    • SetOrderDeliveryAddressCustomType.deliveryId input field type changed from String! to String
  • [GraphQL API] Changed the SetStagedOrderDeliveryAddressCustomField type:

    • SetStagedOrderDeliveryAddressCustomField.deliveryId input field type changed from String! to String
    • Input field deliveryKey was added to SetStagedOrderDeliveryAddressCustomField type
  • [GraphQL API] Changed the AddStagedOrderParcelToDeliveryOutput type:

    • Added the deliveryKey field to the AddStagedOrderParcelToDeliveryOutput type.
    • AddStagedOrderParcelToDeliveryOutput.deliveryId field type changed from String! to String
  • [GraphQL API] Changed the SetOrderDeliveryItems type:

    • SetOrderDeliveryItems.deliveryId input field type changed from String! to String
    • Input field deliveryKey was added to SetOrderDeliveryItems type
Read more...

Added Product Projections on locales to the GraphQL API

16 May 2023
Enhancement
GraphQLProduct CatalogStores

We added support for locale-based Product Projection to the product and products queries on the GraphQL API. With this projection, your response contains the translation on Products (also in a Store) you have specified in your query only. All other locales are filtered out from the product information. Furthermore, the projection can also be applied to Products expanded on Reference Type Attributes.

Changes:

  • [GraphQL API] Changed the Query type:
    • Argument localeProjection was added to Query.products field
    • Argument localeProjection was added to Query.product field
    • Argument projectExpandedProducts was added to Query.productProjectionSearch field
    • Argument projectExpandedProducts was added to Query.product field
    • Argument projectExpandedProducts was added to Query.products field
  • [GraphQL API] Changed the InStore type:
    • Arguments localeProjection was added to InStore.product field
    • Argument projectExpandedProducts was added to InStore.product field

Changed the fields ‘BusinessUnit.associateMode’, ‘Associate.associateRoleAssignments’, and ‘AssociateRoleAssignment.inheritance’ to be mandatory in responses

12 May 2023
Enhancement
B2BGraphQL

We have made the fields BusinessUnit.associateMode, Associate.associateRoleAssignments, and AssociateRoleAssignment.inheritance mandatory in responses. They were previously optional during the closed beta period.

Changes:

  • [GraphQL API] Changed the BusinessUnit type:
    • BusinessUnit.associateMode field type changed from BusinessUnitAssociateMode to BusinessUnitAssociateMode!
  • [GraphQL API] Changed the Associate type:
    • Associate.associateRoleAssignments field type changed from [AssociateRoleAssignment!] to [AssociateRoleAssignment!]!
  • [GraphQL API] Changed the AssociateRoleAssignment type:
    • AssociateRoleAssignment.inheritance field type changed from AssociateInheritanceMode to AssociateInheritanceMode!

Added AssociateMissingPermissionError for Associate Roles

10 May 2023
Enhancement
B2BSecurity

We introduced the error code AssociateMissingPermissionError for Associate Roles. This error code helps to identify when an Associate is missing a specific Permission on a B2B resource.

Changes:

Added 'inheritedStores' field to Business Units in GraphQL

5 May 2023
Enhancement
GraphQLB2B

The GraphQL API now supports querying inherited Stores of a Business Unit. Visit the API reference for more information on additional GraphQL fields available on Business Units.

Changes:

  • [GraphQL API] Changed the BusinessUnit type:
    • Added the inheritedStores field to the BusinessUnit type.
Read more...

Enhanced permissions management for companies

2 May 2023
Feature
B2BCustomersCartsOrdersQuotesDeprecationGraphQL

The new Associate Roles API provides B2B customers with the flexibility to define and manage the permissions of their Associates. The feature allows the configuration of granular permissions that provide controlled access to Business Units, Carts, Orders, Quotes, and Quote Requests. Additionally, roles can be inherited from a parent Business Unit by its children.

This feature replaces the less flexible AssociateRole enum with Buyer and Admin values. This type alongside the roles field on Associate and AssociateDraft is now deprecated and will be completely removed on 02 August 2023.

In addition to the Associate Roles API, a new set of associate endpoints can be used to validate that an Associate has sufficient permissions on a given resource. These endpoints are available for Business Units, Carts, Orders, Quotes, and Quote Requests and perform permission evaluation checks based on an associateId.

These features are part of Composable Commerce for B2B and will be subject to additional terms and pricing.

Changes:

  • [API] Added Associate Roles API.
  • [API] Added Associate Carts, Associate Orders, Associate Quote Requests, Associate Quotes, and Associate BusinessUnit endpoints.
  • [API] Added BusinessUnitAssociateMode, AssociateRoleInheritanceMode, AssociateRoleAssignment, and AssociateRoleAssignmentDraft, InheritedAssociate, and InheritedAssociateRoleAssignment types to BusinessUnit.
  • [API] Added inheritedAssociates and associateMode fields to BusinessUnit.
  • [API] Added associateMode fields to BusinessUnitDraft.
  • [API] Added associateRoleAssignments field to Associate and AssociateDraft.
  • [API] AddedassociateRoleAssignments to MyBusinessUnitAssociateDraft.
  • [API] Deprecated AssociateRole enum with Admin and Buyer values.
  • [API] Deprecated roles and inheritedAssociates field on Associate and AssociateDraft.
  • [API] Added Associate Role Messages.
  • [API] Added BusinessUnitAssociateModeChanged Message.
  • [API] Added myBusinessUnitAssociateRoleOnCreation to BusinessUnitConfiguration in Project settings.
  • [GraphQL API] Added the following types to the GraphQL schema: AddAssociateRolePermission, AsAssociate, AsAssociateArgument, AssociateInheritanceMode, AssociateRole, AssociateRoleAssignment, AssociateRoleAssignmentDraft, AssociateRoleBuyerAssignableChanged, AssociateRoleCreated, AssociateRoleDeleted, AssociateRoleDraft, AssociateRoleNameSet, AssociateRolePermissionAdded, AssociateRolePermissionRemoved, AssociateRolePermissionsSet, AssociateRoleQueryResult, AssociateRoleUpdateAction, BusinessUnitAssociateMode, BusinessUnitAssociateModeChanged, ChangeAssociateRoleBuyerAssignable, ChangeBusinessUnitAssociateMode, InheritedAssociate, InheritedAssociateRoleAssignment, Permission, RemoveAssociateRolePermission, SetAssociateRoleCustomField, SetAssociateRoleCustomType, SetAssociateRoleName, SetAssociateRolePermissions, SetProjectSettingsMyBusinessUnitAssociateRoleOnCreation.
  • [GraphQL API] Changed the BusinessUnitDraft type:
    • Input field associateMode was added to BusinessUnitDraft type
  • [GraphQL API] Changed the BusinessUnit type:
    • Added the inheritedAssociates field to the BusinessUnit type.
    • Added the associateMode field to the BusinessUnit type.
  • [GraphQL API] Changed the Associate type:
    • Added the associateRoleAssignments field to the Associate type.
    • Field roles was deprecated in Associate type
  • [GraphQL API] Changed the AssociateDraft type:
    • Input field associateRoleAssignments was added to AssociateDraft type
    • Input field roles was deprecated in AssociateDraft type
  • [GraphQL API] Changed the BusinessUnitConfiguration type:
    • Added the myBusinessUnitAssociateRoleOnCreation field to the BusinessUnitConfiguration type.
    • Added the myBusinessUnitAssociateRoleOnCreationRef field to the BusinessUnitConfiguration type.
  • [GraphQL API] SimpleAssociateRole type was deprecated
  • [GraphQL API] Changed the Query type:
    • Added the asAssociate field to the Query type.
    • Added the associateRole field to the Query type.
    • Added the associateRoles field to the Query type.
  • [GraphQL API] Changed the Mutation type:
    • Argument asAssociate was added to Mutation.updateBusinessUnit field
    • Added the updateAssociateRole field to the Mutation type.
    • Argument asAssociate was added to Mutation.createOrderFromCart field
    • Argument asAssociate was added to Mutation.deleteCart field
    • Argument asAssociate was added to Mutation.createBusinessUnit field
    • Argument asAssociate was added to Mutation.updateQuoteRequest field
    • Argument asAssociate was added to Mutation.createOrderFromQuote field
    • Argument asAssociate was added to Mutation.createCart field
    • Argument asAssociate was added to Mutation.updateOrder field
    • Added the deleteAssociateRole field to the Mutation type.
    • Argument asAssociate was added to Mutation.updateQuote field
    • Argument asAssociate was added to Mutation.createQuoteRequest field
    • Added the createAssociateRole field to the Mutation type.
    • Argument asAssociate was added to Mutation.updateCart field
  • [GraphQL API] Changed the ProjectSettingsUpdateAction type:
    • Input field setMyBusinessUnitAssociateRoleOnCreation was added to ProjectSettingsUpdateAction type
  • [GraphQL API] Changed the BusinessUnitUpdateAction type:
    • Input field changeAssociateMode was added to BusinessUnitUpdateAction type
Read more...

Product Selections achieved general availability status

19 April 2023
Announcement
Product Catalog

After collecting feedback during the beta phase, we have moved Product Selections out of beta. The status of the following features has been changed to general availability:

Product Selections can be used to manage individual assortments for different sales channels and Stores. Learn more by visiting our documentation page.

Replaced ProductSelectionType with ProductSelectionMode

18 April 2023
Announcement
Product CatalogGraphQLDeprecation

We introduced a new type ProductSelectionMode to replace ProductSelectionType. The functionality of Individual and IndividualExclusion Product Selections remains the same. We adjusted the naming of the type and the enums to ensure a consistent experience when working with the Composable Commerce APIs.

Instead of the previous individual and individualExclusion enums defined by the type field on ProductSelection, you can now use the mode field with the values Individual and IndividualExclusion. The type field, alongside ProductSelectionType is now deprecated and will be completely removed on 18 July 2023.

We also aligned the behavior of ProductSelectionCreated Message with other similar Messages generated by resource creation. The Message now includes the entire ProductSelection object in the payload, instead of a subset of the fields.

Changes:

  • [API] Added the mode field to ProductSelection and ProductSelectionDraft.
  • [API] Deprecated ProductSelectionTypeEnum, IndividualProductSelectionType, IndividualExclusionProductSelectionType from ProductSelection.
  • [API] Deprecated the type field from ProductSelection and ProductSelectionDraft.
  • [API] Changed the type of productSelection field on ProductSelectionCreated Message from ProductSelectionType to ProductSelection.
  • [GraphQL API] Removed the following types from the GraphQL schema: ProductSelectionType, IndividualExclusionProductSelectionCreatedPayload, IndividualProductSelectionCreatedPayload, ProductSelectionCreatedPayload.
  • [GraphQL API] Changed the ProductSelection type:
    • Removed the type field from the ProductSelection type.
    • Added the mode field to the ProductSelection type.
  • [GraphQL API] Changed the CreateProductSelectionDraft type:
    • Input field type was removed from CreateProductSelectionDraft type
    • Input field mode was added to CreateProductSelectionDraft type
  • [GraphQL API] Changed the ProductSelectionCreated type:
    • ProductSelectionCreated.productSelection field type changed from ProductSelectionCreatedPayload! to ProductSelection!
Read more...

Audit Log available for AWS Regions in beta

13 April 2023
Announcement
Security

Audit Log is now available in AWS Regions in beta.

Added 'shippingCustomFields' and 'shippingKey' fields on Cart and Order

13 April 2023
Enhancement
CartsOrdersGraphQL

You can now retrieve the shippingCustomFields and shippingKey fields on Carts and Orders with Single ShippingMode.

Changes:

  • [API] Added the shippingCustomFields field to Cart and Order.
  • [API] Added the shippingKey field to Cart and Order.
  • [GraphQL API] Changed the Cart type:
    • Added the shippingKey field to the Cart type.
    • Added the shippingCustomFields field to the Cart type.
  • [GraphQL API] Changed the Order type:
    • Added the shippingKey field to the Order type.
    • Added the shippingCustomFields field to the Order type.
Read more...

Introduced 'key' field on TaxRate

4 April 2023
Enhancement
Pricing and DiscountsGraphQL

We introduced the key field on TaxRate and TaxRateDraft. This ensures a consistent experience when working with external identifiers across different entity types in Composable Commerce.

Changes:

  • [API] Added the key field to TaxRate and TaxRateDraft.
  • [API] Added the taxRateKey field to Remove TaxRate and Replace TaxRate update actions.
  • [API] Changed the taxRateId field to be optional on Remove TaxRate and Replace TaxRate update actions.
  • [GraphQL API] Changed the TaxRate type:
    • Added the key field to the TaxRate type.
  • [GraphQL API] Changed the TaxRateInput type:
    • Input field key was added to TaxRateInput type
  • [GraphQL API] Changed the TaxRateDraft type:
    • Input field key was added to TaxRateDraft type
  • [GraphQL API] Changed the TaxCategoryRemoveTaxRate type:
    • Input field taxRateKey was added to TaxCategoryRemoveTaxRate type
    • TaxCategoryRemoveTaxRate.taxRateId input field type changed from String! to String
  • [GraphQL API] Changed the TaxCategoryReplaceTaxRate type:
    • TaxCategoryReplaceTaxRate.taxRateId input field type changed from String! to String
    • Input field taxRateKey was added to TaxCategoryReplaceTaxRate type
Read more...

Fixed Reference Expansion input types for Business Unit Messages in the GraphQL API

28 March 2023
Resolved Issue
GraphQLB2B

We fixed the Reference Expansion input types on Business Unit Messages to provide a consistent experience when working with the GraphQL API. Additionally, we updated the type BusinessUnitConfiguration to align it with the HTTP API. We have also made the roles field optional on AssociateDraft in the HTTP and GraphQL API to allow creating Associates without having to assign roles.

Changes:

  • [API] Changed roles field to be optional on AssociateDraft.
  • [GraphQL API] Changed the AssociateDraft type:
    • AssociateDraft.roles input field type changed from [SimpleAssociateRole!]! to [SimpleAssociateRole!]
  • [GraphQL API] Added the following types to the GraphQL schema: BusinessUnitConfigurationStatus.
  • [GraphQL API] Changed the BusinessUnitConfiguration type:
    • BusinessUnitConfiguration.myBusinessUnitStatusOnCreation field type changed from BusinessUnitStatus! to BusinessUnitConfigurationStatus!
  • [GraphQL API] Changed the BusinessUnitStoreAdded type:
    • BusinessUnitStoreAdded.store field type changed from KeyReference! to Store!
    • Added the storeRef field to the BusinessUnitStoreAdded type.
  • [GraphQL API] Changed the BusinessUnitStoresSet type:
    • BusinessUnitStoresSet.stores field type changed from [KeyReference!]! to [Store!]!
    • Added the storesRef field to the BusinessUnitStoresSet type.
  • [GraphQL API] Changed the BusinessUnitStoreModeChanged type:
    • Added the oldStoresRef field to the BusinessUnitStoreModeChanged type.
    • Added the storesRef field to the BusinessUnitStoreModeChanged type.
    • BusinessUnitStoreModeChanged.stores field type changed from [KeyReference!] to [Store!]
    • BusinessUnitStoreModeChanged.oldStores field type changed from [KeyReference!] to [Store!]
  • [GraphQL API] Changed the BusinessUnitParentChanged type:
    • Added the oldParentUnitRef field to the BusinessUnitParentChanged type.
    • Added the newParentUnitRef field to the BusinessUnitParentChanged type.
    • BusinessUnitParentChanged.newParentUnit field type changed from KeyReference to BusinessUnit
    • BusinessUnitParentChanged.oldParentUnit field type changed from KeyReference to BusinessUnit
  • [GraphQL API] Changed the ChangeProjectSettingsMyBusinessUnitStatusOnCreation type:
    • ChangeProjectSettingsMyBusinessUnitStatusOnCreation.status input field type changed from BusinessUnitStatus! to BusinessUnitConfigurationStatus!
  • [GraphQL API] Changed the BusinessUnitStoreRemoved type:
    • BusinessUnitStoreRemoved.store field type changed from KeyReference! to Store!
    • Added the storeRef field to the BusinessUnitStoreRemoved type.
Read more...

Introduced Product Selection of type Individual Exclusion in Beta

17 March 2023
Enhancement
Product CatalogStoresMessages/SubscriptionsGraphQL

We introduced the Individual Exclusion Product Selection type that lets you model the availability of your Products in different Stores by excluding individual Products explicitly. Before, we supported the Individual type only in which you include individual Products explicitly. We also added Messages triggered when Product Selections of that new type are created, deleted, or updated.

Changes:

  • [API] Added individualExclusion value to ProductSelectionTypeEnum.

  • [API] Added IndividualExclusionProductSelectionType.

  • [API] Added Exclude Product update action for Product Selections.

  • [API] Added Set Variant Exclusion update action for Product Selections.

  • [API] Added ProductSelectionProductExcluded and ProductSelectionVariantExclusionChanged Message.

  • [GraphQL API] Added the following types to the GraphQL schema: ExcludeProductSelectionProduct, IndividualExclusionProductSelectionCreatedPayload, ProductSelectionProductExcluded, ProductSelectionType, ProductSelectionVariantExclusionChanged, ProductVariantExclusion, ProductVariantExclusionDraft, SetProductSelectionVariantExclusion.

  • [GraphQL API] Added the type field to the ProductSelection type.

  • [GraphQL API] Added the type input field to the CreateProductSelectionDraft type.

  • [GraphQL API] Added the excludeProduct input field to ProductSelectionUpdateAction type.

  • [GraphQL API] Added the setVariantExclusion input field to ProductSelectionUpdateAction type.

  • [GraphQL API] Added the staged field to the ProductVariantDeleted type.

Read more...

Fixed type for 'state' field in PaymentStatusDraft

16 March 2023
Resolved Issue
GraphQLPayments

We changed the type for the state field in PaymentStatusDraft from Reference to ResourceIdentifier allowing you to reference a State by key when creating a new Payment. The HTTP API now behaves as documented, and we aligned the GraphQL API with this behavior also.

Changes:

  • [GraphQL API] Changed the PaymentStatusInput.state input field type from ReferenceInput to ResourceIdentifierInput.

Changed names of Product Variant Selection types

6 March 2023
Announcement
Product CatalogGraphQLDeprecation

We renamed the types of Product Variant Selection from Inclusion to IncludeOnly and from Exclusion to IncludeAllExcept. Based on our feedback, the new names describe the semantics of these types better and make their purpose clearer.

The previous types have now been deprecated and will be migrated to the new types automatically on 30 June 2023 without any disruption of services.

Changes:

  • [API] Added includeOnly and includeAllExcept values to the type field of Product Variant Selection.
  • [API] Deprecated inclusion and exclusion values on the type field of Product Variant Selection.
  • [GraphQL API] Changed the ProductVariantSelectionDraft type:
    • Added input field includeOnly and includeAllExcept to ProductVariantSelectionDraft type.
    • Deprecated input field inclusion and exclusion on ProductVariantSelectionDraft type.
  • [GraphQL API] Added the following types to the GraphQL schema: ProductVariantSelectionIncludeOnly, ProductVariantSelectionIncludeAllExcept.
  • [GraphQL API] Deprecated the following types on the GraphQL schema: ProductVariantSelectionExclusion, ProductVariantSelectionInclusion.
Read more...

External OAuth achieved general availability status

2 March 2023
Announcement
Security

We are announcing that external OAuth is out of beta. During the beta phase, we collected feedback to ensure a reliable, stable, and performant feature.

The status of the following functionality has changed to general availability:

Introducing Google Cloud Function destination for API Extensions

17 February 2023
Enhancement
CustomizationGraphQL

We have enhanced API Extensions to support Cloud Functions natively.

Using the GoogleCloudFunctionDestination you can directly invoke Cloud Functions without providing authorization headers or having to use intermediate gateways.

The new destination uses the permissions granted through Identity and Access Management (IAM) of Google Cloud Platform projects. Visit the API Extensions reference to learn more about using IAM-authorized Cloud Functions as destinations for your API Extensions.

Changes:

  • [API] Added GoogleCloudFunctionDestination to API Extensions.
  • [GraphQL API] Added the following types to the GraphQL schema: GoogleCloudFunctionDestination, GoogleCloudFunctionDestinationInput.
  • [GraphQL API] Changed the ExtensionDestinationInput type:
    • Input field GoogleCloudFunction was added to ExtensionDestinationInput type.
Read more...

Improvements to working with Business Units in the GraphQL API

10 February 2023
Enhancement
GraphQLQuotesB2B

Quote Requests, Staged Quotes, and Quotes now support Reference Expansion on Business Unit in the GraphQL API.

Changes:

  • [GraphQL API] Changed the StagedQuote type:
    • Added the businessUnitRef field to the StagedQuote type.
    • StagedQuote.businessUnit field type changed from KeyReference to BusinessUnit
  • [GraphQL API] Changed the Quote type:
    • Added the businessUnitRef field to the Quote type.
    • Quote.businessUnit field type changed from KeyReference to BusinessUnit
  • [GraphQL API] Changed the QuoteRequest type:
    • Added the businessUnitRef field to the QuoteRequest type.
    • QuoteRequest.businessUnit field type changed from KeyReference to BusinessUnit
Read more...

Added 'discounted' field to 'ProductPriceDataInput' type in GraphQL

7 February 2023
Enhancement
GraphQLPricing and Discounts

To align with the PriceDraft object in the HTTP API we added the discounted field to the ProductPriceDataInput type in the GraphQL schema. Furthermore, we fixed the field type for the DiscountedProductPriceValueInput type in the GraphQL API.

Changes:

  • [GraphQL API] Added discounted field to the ProductPriceDataInput type.
  • [GraphQL API] Changed the DiscountedProductPriceValueInput.discount field type from ReferenceInput! to ResourceIdentifierInput!.
Read more...

Added 'oldValue' field to Standalone Price Value Changed Message

6 February 2023
Enhancement
Messages/SubscriptionsPricing and DiscountsGraphQL

We added the oldValue field to the Standalone Price Value Changed Message that contains the StandalonePrice value as it was before the change. You can now see how much the value of your updated Standalone Price has changed by comparing the Message fields value and oldValue.

Changes:

  • [API] Added field oldValue to Standalone Price Value Changed Message.
  • [GraphQL API] Changed the StandalonePriceValueChanged type:
    • Added the oldValue field to the StandalonePriceValueChanged type.
Read more...

CloudEventsFormat achieved general availability status

1 February 2023
Announcement
Messages/Subscriptions

We are announcing that CloudEventsFormat for Subscription destinations is out of beta.

In the process of bringing the feature to general availability status, we ensured that the payload format is in accordance with the 1.0.2 specification. This will ensure consistency when using CloudEvents across different services.

Visit the API reference to learn more about enabling CloudEvents for your Subscription destinations.

Added GraphQL support for multiple shipping methods

31 January 2023
Enhancement
CartsOrdersGraphQL

To align with the HTTP API, multiple Shipping Methods are now supported on Carts and Orders in the GraphQL API.

Changes:

  • [GraphQL API] Added the following types to the GraphQL schema: AddCartCustomShippingMethod, AddCartShippingMethod, CustomShippingDraft, MethodTaxRate, RemoveCartShippingMethod, Shipping, ShippingDraft, ShippingMode.
  • [GraphQL API] Changed the MyCartDraft type:
    • Input field shippingMode was added to MyCartDraft type
    • Input field customShipping was added to MyCartDraft type
    • Input field shipping was added to MyCartDraft type
  • [GraphQL API] Changed the CartDraft type:
    • Input field customShipping was added to CartDraft type
    • Input field shipping was added to CartDraft type
    • Input field shippingMode was added to CartDraft type
  • [GraphQL API] Changed the CartUpdateAction type:
    • Input field addCustomShippingMethod was added to CartUpdateAction type
    • Input field removeShippingMethod was added to CartUpdateAction type
    • Input field addShippingMethod was added to CartUpdateAction type
  • [GraphQL API] Changed the Cart type:
    • Added the taxedShippingPrice field to the Cart type.
    • Added the shipping field to the Cart type.
    • Added the shippingMode field to the Cart type.
  • [GraphQL API] Changed the Order type:
    • Added the taxedShippingPrice field to the Order type.
    • Added the shipping field to the Order type.
    • Added the shippingMode field to the Order type.
  • [GraphQL API] Changed the LineItem type:
    • Added the perMethodTaxRate field to the LineItem type.
    • Added the taxedPricePortions field to the LineItem type.
  • [GraphQL API] Changed the ShippingTargetDraft type:
    • Added the shippingMethodKey field to the ShippingTargetDraft type.
Read more...

Added 'purchaseOrderNumber' field to Quotes- and Order-related types

26 January 2023
Enhancement
QuotesOrdersGraphQL

With the new purchaseOrderNumber field, Buyers are now able to track their purchase throughout the order creation process with their Purchase Order Number. To support B2B scenarios, this new field is also supported on all types related to Quotes.

Changes:

  • [API] Added optional field purchaseOrderNumber to OrderFromCartDraft, OrderImportDraft, QuoteRequestDraft, QuoteRequest, StagedQuote, Quote, Order.
  • [API] Added setPurchaseOrderNumber update action to Orders and Order Edits APIs.
  • [API] Added PurchaseOrderNumberSet message.
  • [GraphQL API] Changed the QuoteRequestDraft type:
    • Input field purchaseOrderNumber was added to QuoteRequestDraft type
  • [GraphQL API] Changed the OrderCartCommand type:
    • Input field purchaseOrderNumber was added to OrderCartCommand type
  • [GraphQL API] Changed the ImportOrderDraft type:
    • Input field purchaseOrderNumber was added to ImportOrderDraft type
  • [GraphQL API] Changed the StagedOrderUpdateAction type:
    • Input field setPurchaseOrderNumber was added to StagedOrderUpdateAction type
  • [GraphQL API] Changed the StagedQuote type:
    • Added the purchaseOrderNumber field to the StagedQuote type.
  • [GraphQL API] Changed the OrderUpdateAction type:
    • Input field setPurchaseOrderNumber was added to OrderUpdateAction type
  • [GraphQL API] Changed the Quote type:
    • Added the purchaseOrderNumber field to the Quote type.
  • [GraphQL API] Changed the Order type:
    • Added the purchaseOrderNumber field to the Order type.
  • [GraphQL API] Changed the QuoteRequest type:
    • Added the purchaseOrderNumber field to the QuoteRequest type.
Read more...

Automatic updates of SKU changes in Product Selection Assignments

24 January 2023
Announcement
Product Catalog

We introduced a background service that reflects any change for SKUs performed on Products in all corresponding SKUs on ProductVariantSelections. This service keeps SKUs in ProductSelectionAssignments up to date with eventual consistency.

Discontinued support for IronMQ

12 January 2023
Announcement
DeprecationMessages/Subscriptions

We deprecated IronMQ as a Subscription destination in 2018 due to low adoption. The feature is now completely removed and newer versions of our SDKs no longer support it.

Retrieve applicable Shipping Methods for a Cart and Location

21 December 2022
Feature
Carts

You can now retrieve Shipping Methods that match a given Cart and Location. The new endpoint is especially useful in cases where a Cart must match Shipping Method predicates, but does not have its shippingAddress defined. For example, this allows you to retrieve applicable Shipping Methods for a Cart with multiple Shipping Methods.

Changes:

API Extensions for AWS Lambda destinations now support the use of function aliases

16 December 2022
Enhancement
Customization

AWSLambdaDestination now accepts Lambda function aliases. This allows you to optimize your development and deployment workflows by pointing to a specific version of a Lambda in your API Extension.

Changes:

Added Cart freeze option

14 December 2022
Enhancement
GraphQLCarts

We have added the option to freeze Carts during the purchasing journey of your Customers. With this, usual price and discount updates are primarily not applied on frozen Carts. This new feature is useful if you want to prevent Carts from being modified by changes affecting prices until the order is placed. Inventory is not reserved by freezing a Cart.

Changes:

  • [API] Added FreezeCart and UnfreezeCart update actions to Carts API.
  • [API] Added Frozen field to CartState.
  • [GraphQL API] Added the following types to the GraphQL schema: FreezeCart, UnfreezeCart.
  • [GraphQL API] Added input fields freezeCart and unfreezeCart to the CartUpdateAction type.
  • [GraphQL API] Added Frozen value to the CartState enum type.
Read more...

Announced removal of non-standard GraphQL error field

13 December 2022
Announcement
GraphQL

To fully comply with the GraphQL response format, we have moved the code field under the extensions map as shown in this example.

From 15 January 2023, code will no longer be returned as a top-level field of the errors array, but under the extensions map.

As a part of the same initiative oriented towards complying with the GraphQL specification, we also removed support for non-standard variables. This change was announced on 4 October 2022 and took effect on 1 December 2022.

Added key to Embedded Prices and Embedded PriceDrafts, and an update action to set keys for both Standalone and Embedded Prices

12 December 2022
Enhancement
Pricing and DiscountsGraphQL

In addition to identifying Embedded Prices by their id, you can now use key as a user-defined unique identifier. By assigning a human-readable key to Embedded Prices, you have greater flexibility for referencing Embedded Prices.

The key field was already available for StandalonePrices and this allowed us to assess and confirm its usefulness. Implementing the key field in Embedded Prices ensures consistency in offerings for both Standalone Prices and Embedded Prices.

Update actions for setting the key value has also been added for both Embedded Prices and Standalone Prices, allowing you to efficiently update Price keys without needing to bulk import Prices with the updated price keys.

Changes:

  • [API] Added keyfield to Price and PriceDraft.
  • [API] Added Set Price Key update action.
  • [API] Added Set Standalone Price Key update action.
  • [API] Added the error code DuplicatePriceKey.
  • [API] Added ProductPriceKeySet Message.
  • [API] Added StandalonePriceKeySet Message.
  • [GraphQL API] Changed the ProductPrice type:
    • Added the key field to the ProductPrice type.
  • [GraphQL API] Changed the ProductPriceSearch type:
    • Added the key field to the ProductPriceSearch type.
  • [GraphQL API] Changed the ProductPriceDataInput type:
    • Input field key was added to ProductPriceDataInput type
  • [GraphQL API] Added the following types to the GraphQL schema: SetProductPriceKey, SetStandalonePriceKey, StandalonePriceKeySet, ProductPriceKeySet.
  • [GraphQL API] Changed the ProductUpdateAction type:
    • Input field setPriceKey was added to ProductUpdateAction type
  • [GraphQL API] Changed the StandalonePriceUpdateAction type:
    • Input field setKey was added to StandalonePriceUpdateAction type
Read more...

Improvements to working with Business Units in the GraphQL API

7 December 2022
Enhancement
GraphQLCartsOrdersB2B

We have made several improvements and changes to the Business Units functionality in GraphQL:

  • Carts and Orders now support Reference Expansion on Business Unit.
  • Added support for creating Carts that reference a Business Unit.
  • Changed the naming of the type AssociateRole to free up the namespace for new functionality.

Changes:

  • [GraphQL API] Changed the Cart type:
    • Added the businessUnitRef field to the Cart type.
    • Cart.businessUnit field type changed from KeyReference to BusinessUnit
  • [GraphQL API] Changed the Order type:
    • Order.businessUnit field type changed from KeyReference to BusinessUnit
    • Added the businessUnitRef field to the Order type.
  • [GraphQL API] Changed the CartDraft type:
    • Input field businessUnit was added to CartDraft type
  • [GraphQL API] Changed the MyCartDraft type:
    • Input field businessUnit was added to MyCartDraft type
  • [GraphQL API] Added the following types to the GraphQL schema: SimpleAssociateRole
  • [GraphQL API] Removed the following types from the GraphQL schema: AssociateRole.
  • [GraphQL API] Changed the Associate type:
    • Associate.roles field type changed from [AssociateRole!]! to [SimpleAssociateRole!]!
  • [GraphQL API] Changed the AssociateDraft type:
    • AssociateDraft.roles input field type changed from [AssociateRole!]! to [SimpleAssociateRole!]!
Read more...

Added Messages for changes on Embedded Prices and PriceMode on Products

6 December 2022
Enhancement
Pricing and DiscountsGraphQLMessages/Subscriptions

You can now subscribe to Messages about adding, changing, setting, and removing Embedded Prices on Products, as well as setting the PriceMode on Products.

Changes:

Read more...

Audit Log now tracks changes on Store's Product Selections

1 December 2022
Enhancement
Product CatalogSecurity

We have extended the abilities of Audit Log to include tracking of changes made on a Store's Product Selections. With this enhancement, all Product Selection-related Changes performed on Stores are tracked from now on and these Changes are now retrievable via API.

Read more...

Added support for expanded Channel and Customer Group to GraphQL query for StandalonePrice

1 December 2022
Enhancement
GraphQLPricing and Discounts

We understood there is a demand to retrieve the full information about the Channel and the Customer Group on Standalone Prices instead of just the reference to those via the GraphQL API. Before, additional API calls were needed to retrieve the respective information, from now on just one query is sufficient for this use case.

Changes:

  • [GraphQL API] Changed the StandalonePrice type:
    • Added the channel field to the StandalonePrice type.
    • Added the customerGroup field to the StandalonePrice type.
Read more...

Introduced Countries to Stores

10 November 2022
Enhancement
StoresMessages/SubscriptionsGraphQL

We have released countries in Stores in public beta. You can now define countries on Stores and filter prices by country in Product Projections and Cart/Order/Shopping List Line Items.

Changes:

  • [API] Added type StoreCountry to Stores.
  • [API] Added countries field to Store and StoreDraft.
  • [API] Added Add Country, Remove Country, and Set Countries update actions to Stores.
  • [API] Added optional countries field to StoreCreated Message.
  • [API] Added StoreCountriesChanged Message.
  • [API] Added the error code CountryNotConfiguredInStore.
  • [GraphQL API] Added the following types to the GraphQL schema: AddStoreCountry, RemoveStoreCountry, SetStoreCountries, StoreCountriesChanged, StoreCountry, StoreCountryInput.
  • [GraphQL API] Changed the StoreUpdateAction type:
    • Input field addCountry was added to StoreUpdateAction type
    • Input field setCountries was added to StoreUpdateAction type
    • Input field removeCountry was added to StoreUpdateAction type
  • [GraphQL API] Changed the CreateStore type:
    • Input field countries was added to CreateStore type
  • [GraphQL API] Changed the StoreCreated type:
    • Added the countries field to the StoreCreated type.
  • [GraphQL API] Changed the Store type:
    • Added the countries field to the Store type.
Read more...

Correction to the `ChangeQuoteState` type in the GraphQL API

7 November 2022
Resolved Issue
GraphQLQuotes

We made a correction to the ChangeQuoteState type in the GraphQL API. The type of the input field quoteState was incorrectly marked as MyQuoteState instead of QuoteState. This caused certain QuoteStates, for example, the Withdrawn state, to be unavailable through the GraphQL API. With this correction in place, the ChangeQuoteState type now supports all QuoteStates in GraphQL.

Changes:

  • [GraphQL API] Changed the ChangeQuoteState type:
    • ChangeQuoteState.quoteState input field type changed from MyQuoteState! to QuoteState!

Introduced Attribute Groups in beta

4 November 2022
Feature
GraphQLProduct Catalog

You can now organize related Attributes together into Attributes Groups and ease your product data enhancement workflows.

Changes:

  • [API] Added Attribute Groups API.
  • [API] Added the view_attribute_groups and manage_attribute_groups OAuth scopes.
  • [GraphQL API] Added the following types to the GraphQL schema: AddAttributeGroupAttribute, AttributeGroup, AttributeGroupDraft, AttributeGroupQueryResult, AttributeGroupUpdateAction, ChangeAttributeGroupName, RemoveAttributeGroupAttribute, SetAttributeGroupAttributes, SetAttributeGroupDescription, SetAttributeGroupKey, AttributeReference.
Read more...

Added functionality to automatically transition states for Quote Requests, Staged Quotes, and Quotes

24 October 2022
Enhancement
QuotesOrdersGraphQL

You can now enable automatic state transitions between various pre-defined states for Quote Requests, Staged Quotes, and Quotes. In particular:

  • When creating a Staged Quote you can transition the referenced Quote Request to the Accepted state using the quoteRequestStateToAccepted field on StagedQuoteDraft.
  • When creating a Quote you can transition the referenced Staged Quote to the Sent state using the stagedQuoteStateToSent field on QuoteDraft.
  • When creating an Order you can transition the referenced Quote to the Accepted state using the quoteStateToAccepted field on OrderFromQuoteDraft. The same functionality is available on the My Order endpoint using MyOrderFromQuoteDraft.

This simplifies the management of Quote states by eliminating the need for an additional API call to transition the state.

Read more...

Support for IAM-based authentication in the Subscriptions API

21 October 2022
Enhancement
GraphQLMessages/SubscriptionsCustomization

We have added support for IAM-based authentication for SNS and SQS Destinations. The new field authenticationMode is available on SQSDestination and SNSDestination and defines the mode of authentication. IAM-based authentication allows the Subscriptions API to send messages to a queue or publish to a topic, without explicitly providing credentials in the form of an accessKey and accessSecret. This simplifies key management for customers who maintain hundreds of queues and rotate credentials regularly. By providing permissions to an IAM user instead, the access needs to be set up once per topic and requires no additional key management. For backwards compatibility, the authenticationMode field is set to Credentials by default.

Changes:

  • [API] Added fields authenticationMode to SQSDestination and SNSDestination.
  • [API] Added AwsAuthenticationMode.
  • [GraphQL API] Added the following types to the GraphQL schema: AwsAuthenticationMode.
  • [GraphQL API] Changed the SQSDestinationInput type:
    • SQSDestinationInput.accessSecret input field type changed from String! to String
    • SQSDestinationInput.accessKey input field type changed from String! to String
    • Input field authenticationMode was added to SQSDestinationInput type
  • [GraphQL API] Changed the SNSDestinationInput type:
    • SNSDestinationInput.accessSecret input field type changed from String! to String
    • SNSDestinationInput.accessKey input field type changed from String! to String
    • Input field authenticationMode was added to SNSDestinationInput type
  • [GraphQL API] Changed the SQSDestination type:
    • SQSDestination.accessSecret field type changed from String! to String
    • Added the authenticationMode field to the SQSDestination type.
    • SQSDestination.accessKey field type changed from String! to String
  • [GraphQL API] Changed the SNSDestination type:
    • SNSDestination.accessSecret field type changed from String! to String
    • SNSDestination.accessKey field type changed from String! to String
    • Added the authenticationMode field to the SNSDestination type.
Read more...

Introduced My Quotes in beta

10 October 2022
Feature
Quotes

The My Quotes API provides access to Quotes scoped to a specific user. Using the My Quotes endpoints, Buyers can view and update Quotes that they have access to. By updating the state of the Quote, Buyers can indicate whether they accept or decline a given Quote.

Changes:

  • [API] Added My Quotes API.
  • [API] Added MyOrderFromQuoteDraft to My Orders.
  • [API] Added Create Order from Quote endpoint to My Orders.
  • [GraphQL API] Added the following types to the GraphQL schema: ChangeMyQuoteMyQuoteState, MyQuoteState, MyQuoteUpdateAction, OrderMyQuoteCommand
  • [GraphQL API] Changed the Me type:
    • Added the quote field to the Me type.
    • Added the quotes field to the Me type.
  • [GraphQL API] Changed the Mutation type:
    • Added the updateMyQuote field to the Mutation type.
Read more...

Introduced Business Units in beta

6 October 2022
Feature
B2BCustomersStoresProduct CatalogCartsOrdersQuotesGraphQL

We have released Business Units in public beta. This new feature allows you to model companies and their divisions in Composable Commerce. You can assign Customers to Business Units to manage Carts, Orders, and Quotes on behalf of companies. With the help of Stores, Business Units can support company-specific products and pricing. When linked to a Business Unit, Carts, Orders, and Quotes will validate a Customer's role within the Business Unit. This feature is part of Composable Commerce for B2B and will be subject to additional terms and pricing.

Read more...

Announced removal of non-standard GraphQL variables format

4 October 2022
Announcement
GraphQLDeprecation

To be fully compliant with the GraphQL specification for serving over HTTP, we will be accepting GraphQL variables only as a JSON objects from 1 December 2022.

From then on, we will no longer accept variables to be passed as String containing a JSON object.

Please find an example on how to use GraphQL variables on our GraphQL API page.

Added Line Item inventoryMode to the GraphQL schema

28 September 2022
Enhancement
CartsQuotesGraphQL

To align with the HTTP API we released following Carts- and Quotes-related features in the GraphQL API.

Changes:

  • [GraphQL API] Added the inventoryMode field to the LineItem type.
  • [GraphQL API] Added Enum value Quote to CartOrigin type .
  • [GraphQL API] Added the sellerComment field to the StagedQuote type.
Read more...

Added 'productSelections' to Store limits query in the GraphQL API

22 September 2022
Enhancement
LimitsStoresGraphQL

You can now view Product Selections limits for Stores in the GraphQL API.

Changes:

  • [GraphQL API] Changed the StoreLimitsProjection type:
    • Added the productSelections field to the StoreLimitsProjection type.
Read more...

Increased the limit of Line Items in Shopping Lists to 250.

16 September 2022
Enhancement
CartsLimits

We understood from our customers that there is a need to store more than 100 Line Items in a Shopping List and after analyzing the performance impact of higher numbers of Line Items we can now raise this limit to 250. This limit can be increased per Project after we reviewed the performance impact. Find more details in the documentation.

Added Message for changes on supply channels on Stores

16 September 2022
Enhancement
StoresMessages/SubscriptionsGraphQL

You can now subscribe to Messages about additions, removals, or overwrites of inventory supply Channels on Stores.

Changes:

  • [API] Added StoreSupplyChannelsChanged Message.
  • [GraphQL API] Added the following type to the GraphQL schema: StoreSupplyChannelsChanged.
Read more...

Added new state 'Delivered' to Order ShipmentState

15 September 2022
Enhancement
OrdersGraphQL

With the new ShipmentState, Delivered, you can now track the orders that are received by the customer.

Previously, this was only possible by using a custom state on the Order, or on the Line Item if they have more shipments per Order.

Read more...

Added 'active' field to Standalone Prices

9 September 2022
Enhancement
Pricing and DiscountsGraphQL

With the new 'active' field on Standalone Prices you can activate or deactivate individual Standalone Prices. This allows you to make changes or edits to your prices without them being visible to your customers. When a Standalone Price is not active, it is not considered during price selection. All existing Standalone Prices received an active status.

Read more...

Added Message for name changes on Stores

7 September 2022
Enhancement
StoresMessages/SubscriptionsGraphQL

You can now subscribe to Messages about name changes on Stores.

Changes:

  • [API] Added StoreNameSet Message.
  • [GraphQL API] Added the following type to the GraphQL schema: StoreNameSet.
Read more...

Raised limit for Stores in a Project

6 September 2022
Enhancement
StoresLimits

After successful experiences with Projects having up to 50,000 Stores, we have now raised this limit to 300,000. With this, we provide better support for B2B scenarios now in which separate product catalogs with pricing for business units of companies are required.

This limit can be increased per Project after we reviewed the performance impact. See also documentation.

Added support for Direct Discounts in the GraphQL API

6 September 2022
Enhancement
GraphQLPricing and Discounts

Direct Discounts on Carts are now supported in the GraphQL API. The feature has been released in beta in the HTTP API on 30 June 2022.

Changes:

  • [GraphQL API] Added the following types to the GraphQL schema: DirectDiscount, DirectDiscountDraft, DirectDiscountDraftOutput, SetCartDirectDiscounts, SetStagedOrderDirectDiscounts, SetStagedOrderDirectDiscountsOutput.
  • [GraphQL API] Changed the Quote type:
    • Added the directDiscounts field to the Quote type.
  • [GraphQL API] Changed the QuoteRequest type:
    • Added the directDiscounts field to the QuoteRequest type.
  • [GraphQL API] Changed the CartUpdateAction type:
    • Input field setDirectDiscounts was added to CartUpdateAction type
  • [GraphQL API] Changed the Cart type:
    • Added the directDiscounts field to the Cart type.
  • [GraphQL API] Changed the StagedOrderUpdateAction type:
    • Input field setDirectDiscounts was added to StagedOrderUpdateAction type
  • [GraphQL API] Changed the Order type:
    • Added the directDiscounts field to the Order type.
Read more...

Deprecation of PHP and .NET Core v1 SDKs

1 September 2022
Announcement
Deprecation

As announced previously in our long-term support plan for Composable Commerce SDKs, Version 1 (v1) of our PHP and .NET Core SDKs are now deprecated effective today.

These SDKs will not receive any future updates to fix bugs or security vulnerabilities. If you are using one of these SDKs, you should migrate to PHP v2 or .NET v2. You can find migration guides for both SDKs on their respective pages.

Fixed ChangeDiscountCodeCartDiscounts type in GraphQL schema

31 August 2022
Resolved Issue
GraphQLPricing and DiscountsStores

We fixed the GraphQL type for changing the Cart Discounts on Discount Codes to achieve alignment with the respective update action on the Discount Codes API. With this, you can now reference the CartDiscounts by user-defined key in addition to id also in the GraphQL API. Furthermore, we made the Channel-related fields optional in the Store Distribution Channels Changed Message.

Read more...

Multiple Shipping Methods for Carts and Orders

30 August 2022
Enhancement
CartsOrdersCustomizationGraphQL

You can now add multiple Shipping Methods to a Cart and Order. This is useful for cases where you want to have individual Shipping Methods for each Line Item ordered from a Cart.

A newly introduced shippingMode on Cart and Order controls whether Carts and Orders can have single or multiple Shipping Methods. The default ShippingMode is Single for backwards compatibility. For Carts and Orders with multiple Shipping Methods, all shipping-related information (such as address, rate, deliveries) are wrapped in a newly introduced Shipping object per Shipping Method. The Shipping object can also be extended with Custom Fields.

Additionally, you can add deliveries to Carts during Cart creation, which was previously only possible on Orders.

Read more...

Added Message for language changes on Stores

25 August 2022
Enhancement
StoresMessages/SubscriptionsGraphQL

You can now subscribe to Messages about language changes on Stores.

Changes:

  • [API] Added StoreLanguagesChanged Message.
  • [GraphQL API] Added the following type to the GraphQL schema: StoreLanguagesChanged.
Read more...

Buyers can now request Quote renegotiation

23 August 2022
Enhancement
QuotesGraphQL

Buyers can now request to renegotiate a Quote provided by the Seller. Previously, Buyers only had the option to accept or reject a Quote. Renegotiation offers more flexibility and allows Buyers to ask for amendments to the Quote. Buyers can express additional details regarding their request in the form of a comment.

Read more...

Added 'priceMode' field to CustomLineItemDraft and CustomLineItemImportDraft

17 August 2022
Enhancement
CartsOrdersPricing and DiscountsGraphQL

You can now set the price mode for a Custom Line Item when adding the Custom Line Item to a Cart.

Previously, new Custom Line Items had the Standard price mode set by default for backwards compatibilty. You could only change the price mode on an existing Custom Line Item with the Change CustomLineItem Price Mode update action.

Read more...

Added Reference Expansion for Product Search Attributes in the GraphQL API

16 August 2022
Enhancement
Product CatalogGraphQL

Reference Expansion for Attributes of ProductProjectionsSearch is now supported in the GraphQL API.

We appreciate your feedback on this new in public beta feature. An example query can be found in our GraphQL API documentation.

Changes:

  • [GraphQL API] Changed the RawProductSearchAttribute type:
    • Added the referencedResourceSet field to the RawProductSearchAttribute type.
    • Added the referencedResource field to the RawProductSearchAttribute type.
Read more...

Staged Standalone Prices Available in Beta

15 August 2022
Enhancement
Pricing and DiscountsGraphQL

With Staged Standalone Prices, you can make changes or edits to Standalone Prices without them being visible to your customers. This allows you to prepare and test your changes before applying them with confidence when they are ready. Staged Standalone Prices support DiscountedPrice which means that you can assess how a given Product Discount would affect your Prices before making them live. Staged Standalone Prices is currently available in public beta.

Changes:

  • [API] Added StagedStandalonePrice to Standalone Prices API.
  • [API] Added field staged to StandalonePrice.
  • [API] Added applyStagedChanges update action to StandalonePrice.
  • [API] Added StandalonePriceStagedChangesApplied Message.
  • [API] Added field staged to StandalonePriceValueChanged Message
  • [GraphQL API] Added the following types to the GraphQL schema: ApplyStagedChanges, StagedStandalonePrice, StandalonePriceStagedChangesApplied.
  • [GraphQL API] Changed the StandalonePriceUpdateAction type:
    • Input field applyStagedChanges was added to StandalonePriceUpdateAction type
  • [GraphQL API] Changed the ChangeStandalonePriceValue type:
    • Input field staged was added to ChangeStandalonePriceValue type
  • [GraphQL API] Changed the StandalonePrice type:
    • Added the staged field to the StandalonePrice type.
  • [GraphQL API] Changed the StandalonePriceValueChanged type:
    • Added the staged field to the StandalonePriceValueChanged type.
Read more...

Added 'state' to QuoteRequest, StagedQuote, and Quote

5 August 2022
Enhancement
QuotesGraphQL

You can now set States reflecting custom business logic on QuoteRequests, StagedQuotes, and Quotes.

Read more...

Removed closed beta features from GraphQL schema

3 August 2022
Resolved Issue
GraphQL

In our June 14, 2022 release we incorrectly labeled some closed beta features as available in public beta and introduced them in our GraphQL schema file.

We made a correction to the schema file and the original release note to remove the closed beta features listed below. This does not change the availability of the features. They remain discoverable through introspection and are intended for selected customers taking part in closed beta programs.

If you are interested in evaluating a closed beta feature, please reach out to your contact at commercetools.

Read more...

API Extensions now support Quote Requests, Staged Quotes and Quotes

27 July 2022
Enhancement
CustomizationQuotes

You can now extend the Quotes APIs with your custom business logic using API Extensions. You can trigger Extensions on create and update requests to Quote Requests, Staged Quotes, and Quotes. This allows you to integrate with other services seamlessly and cover custom B2B use cases by modifying the default behavior of the APIs.

Changes:

Added inventory mode to Line Items

25 July 2022
Enhancement
CartsOrdersGraphQL

The inventory mode can now be configured for individual LineItems. The Cart/Order-level inventory mode remains, but can be overridden on a per-line-item basis. For example, in a Cart with two Line Items, you can now give Line Item 1 an inventory mode that is different from the inventory mode for Line Item 2. Before this release, it was only possible to specify one inventory mode valid for all Line Items in the Cart or Order.

Changes:

  • [API] Added optional inventoryMode field to LineItem, LineItemDraft, and LineItemImportDraft.
  • [GraphQL API] Changed the LineItemDraftOutput type:
    • Added the inventoryMode field to the LineItemDraftOutput type.
  • [GraphQL API] Changed the AddStagedOrderLineItem type:
    • Input field inventoryMode was added to AddStagedOrderLineItem type
  • [GraphQL API] Changed the AddCartLineItem type:
    • Input field inventoryMode was added to AddCartLineItem type
  • [GraphQL API] Changed the LineItemDraft type:
    • Input field inventoryMode was added to LineItemDraft type
Read more...

Added 'priceMode' to Custom Line Item

22 July 2022
Enhancement
CartsPricing and DiscountsGraphQL

You can now set a price mode on a CustomLineItem that controls whether Cart Discounts should be applied to them by Composable Commerce or not. Use this if you want to control application of Cart Discounts for each Custom Line Item in the Cart individually. For backwards compatibility, Standard is the default price mode for newly created Custom Line Items, that allows application of Cart Discounts. For cases where Cart Discounts should not be considered on a Custom Line Item, you can change its price mode to External via new update action. You can still overwrite the price for a Custom Line Item via Change CustomLineItem Money update action.

Changes:

  • [API] Added field priceMode to CustomLineItem.
  • [API] Added Change CustomLineItem Price Mode update action to Carts.
  • [GraphQL API] Added the following types to the GraphQL schema: ChangeCartCustomLineItemPriceMode, CustomLineItemPriceMode.
  • [GraphQL API] Changed the CartUpdateAction type:
    • Input field changeCustomLineItemPriceMode was added to CartUpdateAction type
  • [GraphQL API] Changed the CustomLineItem type:
    • Added the priceMode field to the CustomLineItem type.
  • [GraphQL API] Changed the TypeDefinition type:
    • TypeDefinition type description is changed
Read more...

Audit Log now tracks changes on Quote Request, Staged Quotes and Quotes

18 July 2022
Enhancement
SecurityQuotesGraphQL

We have extended the capabilities of Audit Log to include the tracking of changes made on Quotes, Quote Requests, and Staged Quotes. With this enhancement, all Changes performed on Quotes, Quotes Requests and Staged Quotes are tracked from now on and these Changes are now retrievable via API.

Changes:

Read more...

Added Message for changes on distribution channels on Stores

14 July 2022
Enhancement
StoresMessages/SubscriptionsGraphQL

You can now subscribe to Messages about additions, removals, or overwrites of product distribution Channels on Stores.

Changes:

Read more...

Added OrderImport GraphQL mutation

13 July 2022
Enhancement
OrdersGraphQL

You can now create an Order by import using the GraphQL API.

Changes:

  • [GraphQL API] Added the following types to the GraphQL schema: CustomLineItemImportDraft, DeliveryDraft, DiscountedLineItemPriceDraft, ImportOrderDraft, LineItemImportDraft, ParcelDraft, ProductVariantImportDraft, ShippingInfoImportDraft, TaxRateInput, TaxedPriceDraft.
  • [GraphQL API] Changed the Mutation type:
    • Added the importOrder field to the Mutation type.
Read more...

Added existence check for Product Types

13 July 2022
Enhancement
Product CatalogCustomization

You can now check if a Product Type exists using its id, key or a query predicate. These methods are useful if you are only interested in the existence of a certain Product Type without the need of fetching its information.

Audit Log now tracks changes on Product Selections

12 July 2022
Enhancement
SecurityProduct CatalogGraphQL

We have extended the capabilities of Audit Log to include the tracking of changes made on Product Selections. With this enhancement, all Changes performed on Product Selections are tracked from now on and these Changes are now retrievable via API.

Changes:

  • [API] Added the view_product_selections:{projectKey} scope.
  • [API] Added product-selection to ChangeHistoryResourceType.
  • [API] Added AddProductChange.
  • [API] Added RemoveProductChange.
  • [API] Added SetProductCountChange.
  • [GraphQL API] Added the following types to the graphQL schema: ProductSelectionChangeInput.
  • [GraphQL API] Added queries productSelection and productSelections.
  • [GraphQL API] Added ProductSelection to the ResourceType enum.
Read more...

Introduced Quotes in beta

30 June 2022
Feature
CartsOrdersPricing and DiscountsCustomizationGraphQL

We have released Quotes in public beta. This new feature allows you to negotiate quote requests for your products with your customers. The negotiation process involves utilizing several APIs that we introduced with this feature, allowing you to control each step of the intended workflow of the negotiation. All the introduced resources, such as Quote Request, Staged Quote, and Quote can be extended with Custom Fields. The discounts applied on a specific Quote, can be utilized by the newly added DirectDiscount. After successful negotiation, the Order can be created right from the Quote.

Changes:

Read more...

Product Selections can now operate on Product Variant level

29 June 2022
Enhancement
Product CatalogStoresMessages/SubscriptionsGraphQL

You can now include or exclude particular Product Variants in/from a Product Selection. Formerly it was only possible to add Products as a whole to a Product Selection meaning that all existing Product Variants of the Product are included.

Changes:

Read more...

Standalone Prices achieved general availability status

28 June 2022
Announcement
Pricing and DiscountsCartsProduct CatalogGraphQL

After collecting feedback during the beta phase, we have moved Standalone Prices out of beta. The status of the following features has been changed to general availability:

Read more on Standalone Prices and how to use them in the API reference.

Extended long-term support plan for Java v1 SDK

20 June 2022
Announcement
Deprecation

The long-term support plan for the Java v1 SDK has been extended until the end of 2023. This provides additional time for users to migrate to Java v2 SDK.

Read more...

Changes in the GraphQL schema

14 June 2022
Enhancement
GraphQL

Changes:

  • [GraphQL API] Changed the AuthenticationMode type:
    • AuthenticationMode type description is changed
  • [GraphQL API] Changed the StandalonePriceCustomField type:
    • StandalonePriceCustomField type description is changed
  • [GraphQL API] Changed the ProductPrice type:
    • Added the key field to the ProductPrice type.
  • [GraphQL API] Changed the RoundingMode type:
    • RoundingMode.HalfDown description changed
  • [GraphQL API] Changed the ProductPriceSearch type:
    • Added the key field to the ProductPriceSearch type.
  • [GraphQL API] Changed the Payment type:
    • Payment type description is changed
  • [GraphQL API] Changed the SelectionOfProduct type:
    • Added the createdAt field to the SelectionOfProduct type.
  • [GraphQL API] Changed the MyPayment type:
    • MyPayment type description is changed
  • [GraphQL API] Changed the Query type:
    • Query.standalonePrices description is changed
    • Query.standalonePrice description is changed
  • [GraphQL API] Changed the ProductPriceDataInput type:
    • Input field key was added to ProductPriceDataInput type
  • [GraphQL API] Changed the Cart type:
    • Argument id was added to Cart.lineItems field
  • [GraphQL API] Changed the PriceMode type:
    • PriceMode type description is changed
  • [GraphQL API] Changed the StandalonePriceQueryResult type:
    • StandalonePriceQueryResult.exists description is changed
  • [GraphQL API] Changed the TriggerInput type:
    • Input field condition was added to TriggerInput type
  • [GraphQL API] Changed the Mutation type:
    • Mutation.replicateMyCart description is changed
  • [GraphQL API] Changed the Order type:
    • Order type description is changed
    • Argument id was added to Order.lineItems field
  • [GraphQL API] Changed the Trigger type:
    • Added the condition field to the Trigger type.
  • [GraphQL API] Changed the StandalonePrice type:
    • StandalonePrice type description is changed
Read more...

Added update action for setting external discounts on Standalone Prices

13 June 2022
Enhancement
Pricing and DiscountsMessages/SubscriptionsGraphQL

You can now set the discounted value of a Standalone Price via update action also. Before, it was only possible to set that value during creation of the Standalone Price.

Changes:

  • [API] Added SetStandalonePriceDiscountedPrice update action to Standalone Prices.
  • [API] Added StandalonePriceExternalDiscountSet Message.
  • [GraphQL API] Added the following types to the GraphQL schema: SetStandalonePriceDiscountedPrice, StandalonePriceExternalDiscountSet.
  • [GraphQL API] Changed the StandalonePriceUpdateAction type:
    • Input field setDiscountedPrice was added to StandalonePriceUpdateAction type
Read more...

Conditional API Extensions in Beta

8 June 2022
Enhancement
CustomizationGraphQL

Conditional triggers on API Extensions allow you to specify the criteria under which a given Extension is triggered. By default, API Extensions are called on every create or update to the resource they are configured for. However, the new feature allows you to specify fine-grained predicates based on the resource's properties. Using conditional statements you can configure the API Extension to trigger only when your particular use case requires it. Conditional triggers are especially useful in cases where multiple brands or countries reside in a single project.

Changes:

  • [API] Added condition field to ExtensionTrigger.
  • [GraphQL API] Changed the TriggerInput type:
    • Input field condition was added to TriggerInput type
  • [GraphQL API] Changed the Trigger type:
    • Added the condition field to the Trigger type.
extend type Trigger { condition: String } extend input TriggerInput { condition: String }

Added Messages for Standalone Prices

8 June 2022
Enhancement
Pricing and DiscountsMessages/SubscriptionsGraphQL

You can now subscribe to Messages specific to Standalone Prices to get informed about their creation, deletion, or updates on them.

Changes:

Read more...

Removed 'lastMessageSequenceNumber' from Order

24 May 2022
Announcement
OrdersDeprecationGraphQL

The lastMessageSequenceNumber field is deprecated from Order, as it is an internal field that should not be used in customer logic. For processing Messages in the correct order, a message processor can continue to use the id field of the resource alongside the sequenceNumber of the Message.

Changes:

  • [API] Removed lastMessageSequenceNumber from Order.
  • [GraphQL API] Changed the Order type:
    • Field lastMessageSequenceNumber was deprecated in Order type.

Introduced Standalone Prices in Beta

9 May 2022
Feature
Pricing and DiscountsCartsProduct CatalogGraphQL

The Standalone Prices feature provides an alternative way to store your product prices as standalone resources. In comparison to prices embedded inside the Product, this new approach allows increasing the limit of prices per ProductVariant from 100 to 50.000. It also brings a more flexible way to query and manage your prices, separately from your Products, which contributes to better query performance.

The feature allows you to manage and query Standalone Prices through the Standalone Prices API, and to associate them to a ProductVariant via SKU. Additionally, a new priceMode has been introduced on the Product that controls whether the Prices of the ProductVariants are embedded into the Product resource or stored separately as Standalone Prices.

Please note that currently it is not possible to use filters, facets, and sorting on Standalone Prices via the Product Projection Search endpoint.

Read more on Standalone Prices and how to use them in the API reference.

Changes:

  • [API] Added Standalone Prices API.
  • [API] Added view_standalone_prices and manage_standalone_prices OAuth scopes.
  • [API] Added optional field priceMode to Product and ProductDraft.
  • [API] Added Set PriceMode update action to Product.
  • [API] Added DuplicateStandalonePriceScope and OverlappingStandalonePriceValidity 400 Bad Request errors specific to Standalone Prices.
  • [GraphQL API] Added the following types to the GraphQL schema: ChangeStandalonePriceValue, CreateStandalonePrice, PriceMode, SetProductPriceMode, SetStandalonePriceCustomFields, StandalonePrice, StandalonePriceCustomField, StandalonePriceQueryResult, StandalonePriceUpdateAction.
  • [GraphQL API] Changed the Query type:
    • Added the standalonePrice field to the Query type.
    • Added the standalonePrices field to the Query type.
  • [GraphQL API] Changed the Mutation type:
    • Added the createStandalonePrice field to the Mutation type.
    • Added the deleteStandalonePrice field to the Mutation type.
    • Added the updateStandalonePrice field to the Mutation type.
  • [GraphQL API] Changed the Product type:
    • Added the priceMode field to the Product type.
  • [GraphQL API] Changed the ProductDraft type:
    • Input field priceMode was added to ProductDraft type
  • [GraphQL API] Changed the ProductUpdateAction type:
    • Input field setPriceMode was added to ProductUpdateAction type
Read more...

OrderFromCartDraft Custom Fields now merge with Cart Custom Fields.

27 April 2022
Enhancement
OrdersCustomization

When creating an Order from a Cart, the Custom Fields in the OrderFromCartDraft now merge with the Custom Fields in the referenced Cart.

With this, you can enrich the Custom Fields that already exist on the Cart and store them in the Order with a single API call.

Changes:

Added Cart replication to My Carts

14 April 2022
Enhancement
CartsOrdersGraphQL

Creating a new Cart by replicating an existing Cart or Order can be useful in case a Customer wants to cancel a recent order to make some changes, or if a previous order should be ordered again. This has been supported for Carts already, and now we added a replicatiion endpoint for My Carts also.

Changes:

Read more...

Added 'deleteAt' and 'deleteDaysAfterCreation' fields to API Clients in the GraphQL API

12 April 2022
Enhancement
SecurityGraphQL

You can now view and configure the deletion date of API Clients in the GraphQL API.

Changes:

  • [GraphQL API] Changed the APIClientWithoutSecret type:
    • Added the deleteAt field to the APIClientWithoutSecret type.
  • [GraphQL API] Changed the APIClientWithSecret type:
    • Added the deleteAt field to the APIClientWithSecret type.
  • [GraphQL API] Changed the CreateApiClient type:
    • Input field deleteDaysAfterCreation was added to CreateApiClient type
Read more...

Added total tax to Carts, Orders, and Line Items

8 April 2022
Enhancement
CartsOrdersGraphQL

The total tax amount on Cart, Order, LineItem, CustomLineItem, and ShippingInfo. Before, your application had to calculate that amount if you wanted to display it to your customers.

Changes:

  • [API] Added optional totalTax field to TaxedPrice and TaxedItemPrice.
  • [GraphQL API] Changed the TaxedPrice type:
    • Added the totalTax field to the TaxedPrice type.
    • Added the totalTax field to the TaxedItemPrice type.
Read more...

Added Reference Expansion for Product Attributes in the GraphQL API

4 April 2022
Enhancement
Product CatalogGraphQL

Reference Expansion for Attributes of Products is now supported in the GraphQL API.

We appreciate your feedback on this new in public beta feature. An example query can be found in our GraphQL API documentation.

Changes:

  • [GraphQL API] Changed the RawProductAttribute type:
    • Added the referencedResourceSet field to the RawProductAttribute type.
    • Added the referencedResource field to the RawProductAttribute type.
Read more...

OrderFromCartDraft can now be extended with Custom Fields.

29 March 2022
Enhancement
OrdersCustomizationGraphQL

You can now add Custom Fields when you Create an Order from a Cart. With this, you can now store additional information, like payment reference, to your Order during checkout if required for your business logic.

Changes:

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

Audit Log now supports Stores

24 March 2022
Enhancement
SecurityStores

We have extended the abilities of Audit Log to include tracking of changes on Stores as well as on Store-related information on Customers, Orders, and Shopping Lists.

For supported resources, this enhancement will now scope Audit Log response data to the user's or API Client's Store permissions. All other resources will remain unaffected.

Changes:

  • [API] Adds stores attribute to Record response.
  • [API] Adds filter for store keys to all available endpoints.
  • [GraphQL API] Adds stores attribute to ChangeHistory type.
  • [GraphQL API] Adds filter for store keys to all queries for supported resources.
Read more...

Added 'paymentInfo' and 'state' fields to OrderImportDraft

23 March 2022
Enhancement
Orders

You can now set the PaymentInfo as well as a State to an Order via Order Import.

Changes:

Added Reference Expansion for Custom Fields in the GraphQL API

18 March 2022
Enhancement
GraphQL

Reference Expansion for Custom Fields of CustomFieldReferenceType (as well as for the CustomFieldSetType of it) is now supported in the GraphQL API.
We appreciate your feedback on this new in public beta feature; for an example query, please refer to the respective section in the GraphQL API documentation.

Changes:

  • [GraphQL API] Changed the RawCustomField type:
    • Added the referencedResourceSet field to the RawCustomField type.
    • Added the referencedResource field to the RawCustomField type.
  • [GraphQL API] Changed the Cart type:
    • Cart object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the CartDiscount type:
    • CartDiscount object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the Category type:
    • Category object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the Channel type:
    • Channel object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the Customer type:
    • Customer object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the CustomerGroup type:
    • CustomerGroup object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the CustomObject type:
    • CustomObject object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the DiscountCode type:
    • DiscountCode object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the Extension type:
    • Extension object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the InventoryEntry type:
    • InventoryEntry object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the Message type:
    • Message object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the Order type:
    • Order object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the Product type:
    • Product object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the ProductDiscount type:
    • ProductDiscount object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the ProductTypeDefinition type:
    • ProductTypeDefinition object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the Review type:
    • Review object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the ShippingMethod type:
    • ShippingMethod object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the ShoppingList type:
    • ShoppingList object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the State type:
    • State object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the Store type:
    • Store object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the TaxCategory type:
    • TaxCategory object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the TypeDefinition type:
    • TypeDefinition object type now implements ReferenceExpandable interface
  • [GraphQL API] Changed the Zone type:
    • Zone object type now implements ReferenceExpandable interface
Read more...

Introduced AuthenticationMode for Customer

17 March 2022
Enhancement
CustomersGraphQL

We introduced the AuthenticationMode that controls whether the password field is required for a Customer in public beta. The Password authentication mode is the default mode for backwards compatibility that requires to set a password for the Customer. For use cases where Customers are authenticated externally, you can now set the authenticationMode to ExternalAuth to create Customers without a password.

Changes:

  • [API] Added authenticationMode field to Customer and CustomerDraft.
  • [API] Changed password field to be optional on CustomerDraft when authenticationMode is set to ExternalAuth.
  • [API] Removed password field from Customer when authenticationMode is set to ExternalAuth.
  • [API] Added Set AuthenticationMode update action.
  • [GraphQL API] Added the following types to the GraphQL schema: AuthenticationMode, SetCustomerAuthenticationMode.
  • [GraphQL API] Changed the Customer type:
    • Customer.password field type changed from String! to String
    • Added the authenticationMode field to the Customer type.
  • [GraphQL API] Changed the CustomerSignUpDraft type:
    • CustomerSignUpDraft.password input field type changed from String! to String
    • Input field authenticationMode was added to CustomerSignUpDraft type
  • [GraphQL API] Changed the CustomerUpdateAction type:
    • Input field setAuthenticationMode was added to CustomerUpdateAction type
  • [GraphQL API] Changed the CustomerSignMeUpDraft type:
    • CustomerSignMeUpDraft.password input field type changed from String! to String
Read more...

Added the 'key' field to InventoryEntry

11 March 2022
Enhancement
GraphQLProduct Catalog

InventoryEntry now supports the key field. You can now retrieve, update, and delete InventoryEntry by user-defined key.

Changes:

  • [API] Added key field to InventoryEntry and InventoryEntryDraft.
  • [API] Added Get, Update, and Delete by Key methods to InventoryEntry.
  • [API] Added Set Key update action to InventoryEntry.
  • [GraphQL API] Changed the Query type:
    • Query.inventoryEntry(id) type changed from String! to String
    • Query.inventoryEntry(id) description is changed
    • Argument key was added to Query.inventoryEntry field
  • [GraphQL API] Changed the Mutation type:
    • Mutation.updateInventoryEntry(id) type changed from String! to String
    • Mutation.updateInventoryEntry(id) description is changed
    • Argument key was added to Mutation.updateInventoryEntry field
    • Mutation.deleteInventoryEntry(id) type changed from String! to String
    • Mutation.deleteInventoryEntry(id) description is changed
    • Argument key was added to Mutation.deleteInventoryEntry field

Added 'messagePayloads' field to the 'PreviewSuccess' GraphQL type

4 March 2022
Enhancement
GraphQLOrders

The messagePayloads field has been added to the PreviewSuccess OrderEdit result in our GraphQL API.

Changes:

  • [GraphQL API] Added the following types to the GraphQL schema: OrderMessagePayload.
  • [GraphQL API] Changed the OrderCustomLineItemQuantityChanged type:
    • OrderCustomLineItemQuantityChanged object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderShippingRateInputSet type:
    • OrderShippingRateInputSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderCustomLineItemRemoved type:
    • OrderCustomLineItemRemoved object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderBillingAddressSet type:
    • OrderBillingAddressSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the ParcelItemsUpdated type:
    • ParcelItemsUpdated object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderEditApplied type:
    • OrderEditApplied object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the DeliveryAdded type:
    • DeliveryAdded object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the PreviewSuccess type:
    • Added the messagePayloads field to the PreviewSuccess type.
  • [GraphQL API] Changed the OrderPaymentStateChanged type:
    • OrderPaymentStateChanged object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the ReturnInfoSet type:
    • ReturnInfoSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderCustomerSet type:
    • OrderCustomerSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderDiscountCodeStateSet type:
    • OrderDiscountCodeStateSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderCustomerGroupSet type:
    • OrderCustomerGroupSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderLineItemDiscountSet type:
    • OrderLineItemDiscountSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderStateChanged type:
    • OrderStateChanged object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderLineItemAdded type:
    • OrderLineItemAdded object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderImported type:
    • OrderImported object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderCustomerEmailSet type:
    • OrderCustomerEmailSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderCustomLineItemDiscountSet type:
    • OrderCustomLineItemDiscountSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderDiscountCodeAdded type:
    • OrderDiscountCodeAdded object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the CustomLineItemStateTransition type:
    • CustomLineItemStateTransition object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderPaymentRemoved type:
    • OrderPaymentRemoved object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the ParcelTrackingDataUpdated type:
    • ParcelTrackingDataUpdated object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderDiscountCodeRemoved type:
    • OrderDiscountCodeRemoved object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the DeliveryRemoved type:
    • DeliveryRemoved object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderCreated type:
    • OrderCreated object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderLineItemRemoved type:
    • OrderLineItemRemoved object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the ParcelRemovedFromDelivery type:
    • ParcelRemovedFromDelivery object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderDeleted type:
    • OrderDeleted object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderStoreSet type:
    • OrderStoreSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the DeliveryItemsUpdated type:
    • DeliveryItemsUpdated object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the ReturnInfoAdded type:
    • ReturnInfoAdded object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderReturnShipmentStateChanged type:
    • OrderReturnShipmentStateChanged object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the ParcelMeasurementsUpdated type:
    • ParcelMeasurementsUpdated object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderStateTransition type:
    • OrderStateTransition object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the LineItemStateTransition type:
    • LineItemStateTransition object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderLineItemDistributionChannelSet type:
    • OrderLineItemDistributionChannelSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the ParcelAddedToDelivery type:
    • ParcelAddedToDelivery object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the DeliveryAddressSet type:
    • DeliveryAddressSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderCustomLineItemAdded type:
    • OrderCustomLineItemAdded object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderShipmentStateChanged type:
    • OrderShipmentStateChanged object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderShippingInfoSet type:
    • OrderShippingInfoSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderShippingAddressSet type:
    • OrderShippingAddressSet object type now implements OrderMessagePayload interface
  • [GraphQL API] Changed the OrderPaymentAdded type:
    • OrderPaymentAdded object type now implements OrderMessagePayload interface
Read more...

Supported GraphQL schema

24 February 2022
Announcement
GraphQL

Please find officially released features for our GraphQL API in the schema file publicly available on Github.

Only the features listed in that schema file are fully covered by our SLAs. Any additional features you might discover through introspection are intended for selected customers taking part in closed beta programs. Since such closed beta features can change, we strongly advise against using those in productive environments.

If you are interested in evaluating a closed beta feature and you would like to provide us with feedback about it, please reach out to your contact person at commercetools.

Added sorting capability when retrieving Shipping Methods for a Location

22 February 2022
Enhancement
OrdersSearch

You can now sort the query results, for example by ShippingRate price, when retrieving the Shipping Methods for a Location. Before, you had to implement this logic in the store front application.

Product Selections can now be extended with Custom Fields

22 February 2022
Enhancement
Product CatalogCustomizationGraphQL

You can now extend the ProductSelection resource with Custom Fields. With this, you can add meta-information to your Product Selection in case it is required for your business logic.

Changes:

  • [API] Added optional custom field to ProductSelection and ProductSelectionDraft.
  • [API] Added Set Custom Type and Set CustomField update actions to Product Selections.
  • [GraphQL API] Added the following types to the GraphQL schema: SetProductSelectionCustomField, SetProductSelectionCustomType.
  • [GraphQL API] Changed the ProductSelection type:
    • Added the custom field to the ProductSelection type.
  • [GraphQL API] Changed the ProductSelectionCreatedPayload type:
    • Added the custom field to the ProductSelectionCreatedPayload type.
  • [GraphQL API] Changed the IndividualProductSelectionCreatedPayload type:
    • Added the custom field to the IndividualProductSelectionCreatedPayload type.
  • [GraphQL API] Changed the ProductSelectionUpdateAction type:
    • Input field setCustomField was added to ProductSelectionUpdateAction type
    • Input field setCustomType was added to ProductSelectionUpdateAction type
  • [GraphQL API] Changed the CreateProductSelectionDraft type:
    • Input field custom was added to CreateProductSelectionDraft type
Read more...

Expiration times on access and refresh tokens can now be configured.

17 February 2022
Enhancement
SecurityGraphQL

The expiration time for access and refresh tokens can now be configured per API Client by using the new accessTokenValiditySeconds and refreshTokenValiditySeconds fields. If specified, each access and refresh token created by the API Client will expire within the specified number of seconds. If not specified, the tokens will expire as per the default configuration.

Changes:

  • [API] Added accessTokenValiditySeconds field to API Client and APIClientDraft.
  • [API] Added refreshTokenValiditySeconds field to API Client and APIClientDraft.
  • [GraphQL API] Changed the APIClientWithoutSecret type:
    • Added the refreshTokenValiditySeconds field to the APIClientWithoutSecret type.
    • Added the accessTokenValiditySeconds field to the APIClientWithoutSecret type.
  • [GraphQL API] Changed the APIClientWithSecret type:
    • Added the accessTokenValiditySeconds field to the APIClientWithSecret type.
    • Added the refreshTokenValiditySeconds field to the APIClientWithSecret type.
  • [GraphQL API] Changed the CreateApiClient type:
    • Input field refreshTokenValiditySeconds was added to CreateApiClient type
    • Input field accessTokenValiditySeconds was added to CreateApiClient type
Read more...

Added field to Cart representing the total quantity of all Line Items

8 February 2022
Enhancement
CartsGraphQL

We added the totalLineItemQuantity field to Cart that represents the sum of all Line Item quantities. Its value does not take the Cart's Custom Line Items into consideration. With this, there is no need for you any more to calculate this value on the client side.

Changes:

  • [API] Added totalLineItemQuantity field to Cart.
  • [GraphQL API] Changed the Cart type:
    • Added the totalLineItemQuantity field to the Cart type.
Read more...

Added OrderPaymentAdded Message

27 January 2022
Enhancement
OrdersMessages/Subscriptions

Add OrderPayment update action performed on Orders or OrderEdits now triggers Messages . To subscribe to Messages, see Subscriptions for Messages and Notifications.

Change:

Increased the limit of Customers in a Project to 10,000,000.

26 January 2022
Enhancement
CustomersLimits

The default limit of Customers you can have in a Project has been increased from 1 million to 10 million. This limit can be increased per Project after we reviewed the performance impact. Find more details in the documentation.

Introduced Product Selections in Beta

25 January 2022
Feature
Product CatalogStoresMessages/SubscriptionsGraphQL

Product Selections let you model the availability of your products in different sales channels. Depending on your use case and by leveraging the existing Stores functionality you can create individual catalogs or assortments for your brand sites, regional shops or brick-and-mortar stores.

Currently, the feature allows you to create Product Selections, populate them with Products, add them to any of your Stores and activate them independently for each Store. We also introduced a new endpoint that returns a Product Projection available in a given Store's active Product Selections.

Please note that the focus of this first release lies in scenarios where assortment management happens in a commercetools-external Product Information Management system and a commercetools-external search provider is used for product discovery in the shop frontend. As a consequence, you currently can’t filter your search results by Product Selections or Stores in both, Product Projections and the Merchant Center Product list. We plan to close these gaps progressively and add more functionality to Product Selections during the public beta phase.

Read more on Product Selections and how to use them in the API reference.

Read more on how to integrate with an external search service providing product discovery for your Store-specific shop frontends in this guide.

Furthermore, you can now subscribe to Messages triggered when Product Selections are created, deleted, or updated or when the Store's Product Selections have changed.

Changes:

  • [API] Added the view_product_selections and manage_product_selections OAuth scopes.
  • [API] Added ProductSelections.
  • [API] Added query on Product Selections for a Product.
  • [API] Added Get ProductProjection in Store by ID or by Key.
  • [API] Added ProductSelectionCreated and ProductSelectionDeleted Message.
  • [API] Added ProductSelectionProductAdded and ProductSelectionProductRemoved Message.
  • [API] Added StoreProductSelectionsChanged Message.
  • [GraphQL API] Added the following types to the GraphQL schema: AddProductSelectionProduct, AddStoreProductSelection, ChangeProductSelectionName, ChangeStoreProductSelectionActive, CreateProductSelectionDraft, IndividualProductSelectionCreatedPayload, ProductAssignment, ProductAssignmentQueryResult, ProductOfSelection, ProductOfSelectionQueryResult, ProductSelection, ProductSelectionCreated, ProductSelectionCreatedPayload, ProductSelectionDeleted, ProductSelectionProductAdded, ProductSelectionProductRemoved, ProductSelectionQueryInterface, ProductSelectionQueryResult, ProductSelectionSetting, ProductSelectionSettingDraft, ProductSelectionSettingInActionInput, ProductSelectionUpdateAction, RemoveProductSelectionProduct, RemoveStoreProductSelection, SelectionOfProduct, SelectionOfProductQueryResult, SetProductSelectionKey, SetStoreProductSelections, StoreProductSelectionsChanged.
  • [GraphQL API] Changed the CreateStore type:
    • Input field productSelections was added to CreateStore type
  • [GraphQL API] Changed the Query type:
    • Added the productSelections field to the Query type.
    • Query.inStores description is changed
    • Query object type now implements ProductSelectionQueryInterface interface
    • Added the productSelectionAssignments field to the Query type.
    • Added the productSelection field to the Query type.
    • Query.inStore description is changed
  • [GraphQL API] Changed the Mutation type:
    • Added the updateProductSelection field to the Mutation type.
    • Added the deleteProductSelection field to the Mutation type.
    • Added the createProductSelection field to the Mutation type.
  • [GraphQL API] Changed the Product type:
    • Added the productSelectionRefs field to the Product type.
  • [GraphQL API] Changed the StoreCreated type:
    • Added the productSelections field to the StoreCreated type.
    • Added the productSelectionsRef field to the StoreCreated type.
  • [GraphQL API] Changed the Store type:
    • Added the productSelections field to the Store type.
  • [GraphQL API] Changed the StoreUpdateAction type:
    • Input field changeProductSelectionActive was added to StoreUpdateAction type
    • Input field setProductSelections was added to StoreUpdateAction type
    • Input field addProductSelection was added to StoreUpdateAction type
    • Input field removeProductSelection was added to StoreUpdateAction type
  • [GraphQL API] Changed the InStore type:
    • Added the product field to the InStore type.
    • Added the productSelectionAssignments field to the InStore type.
Read more...

Return Items can now be extended with Custom Fields.

19 January 2022
Enhancement
OrdersCustomizationGraphQL

You can now extend the LineItemReturnItem as well as the CustomLineItemReturnItem object on the Order resource with Custom Fields. With these you can, for example, add the courier name or their shipment IDs to the return items of the Orders.

Changes:

  • [API] Added custom field to LineItemReturnItem and CustomLineItemReturnItem.
  • [API] Added custom field to ReturnItemDraft.
  • [API] Added Set ReturnItem Custom Type and Set ReturnItem CustomField update actions to Orders and Order Edits.
  • [GraphQL API] Added the following types to the GraphQL schema: SetOrderReturnItemCustomField, SetOrderReturnItemCustomType SetStagedOrderReturnItemCustomField, SetStagedOrderReturnItemCustomFieldOutput, SetStagedOrderReturnItemCustomType, SetStagedOrderReturnItemCustomTypeOutput.
  • [GraphQL API] Changed the CustomLineItemReturnItem type:
    • Added the custom field to the CustomLineItemReturnItem type.
  • [GraphQL API] Changed the ReturnItem type:
    • Added the custom field to the ReturnItem type.
  • [GraphQL API] Changed the StagedOrderUpdateAction type:
    • Input field setReturnItemCustomField was added to StagedOrderUpdateAction type
    • Input field setReturnItemCustomType was added to StagedOrderUpdateAction type
  • [GraphQL API] Changed the ReturnItemDraftType type:
    • Input field custom was added to ReturnItemDraftType type
  • [GraphQL API] Changed the ReturnItemDraftTypeOutput type:
    • Added the custom field to the ReturnItemDraftTypeOutput type.
  • [GraphQL API] Changed the OrderUpdateAction type:
    • Input field setReturnItemCustomField was added to OrderUpdateAction type
    • Input field setReturnItemCustomType was added to OrderUpdateAction type
  • [GraphQL API] Changed the LineItemReturnItem type:
    • Added the custom field to the LineItemReturnItem type.
Read more...

Parcels can now be extended with Custom Fields.

18 January 2022
Enhancement
OrdersCustomizationGraphQL

You can now extend the Parcel object on the Order resource with Custom Fields. With these you can, for example, add meta data associated with your ERP system to the deliveries of the Orders.

Changes:

  • [API] Added custom field to Parcel and ParcelDraft.
  • [API] Added Set Parcel Custom Type and Set Parcel CustomField update actions to Orders and Order Edits.
  • [GraphQL API] Added the following types to the GraphQL schema: SetOrderParcelCustomField, SetOrderParcelCustomType, SetStagedOrderParcelCustomField, SetStagedOrderParcelCustomFieldOutput, SetStagedOrderParcelCustomType, SetStagedOrderParcelCustomTypeOutput.
  • [GraphQL API] Changed the Parcel type:
    • Added the custom field to the Parcel type.
  • [GraphQL API] Changed the ParcelDataDraftType type:
    • Input field custom was added to ParcelDataDraftType type
  • [GraphQL API] Changed the StagedOrderUpdateAction type:
    • Input field setParcelCustomField was added to StagedOrderUpdateAction type
    • Input field setParcelCustomType was added to StagedOrderUpdateAction type
  • [GraphQL API] Changed the AddOrderParcelToDelivery type:
    • Input field custom was added to AddOrderParcelToDelivery type
  • [GraphQL API] Changed the AddStagedOrderParcelToDeliveryOutput type:
    • Added the custom field to the AddStagedOrderParcelToDeliveryOutput type.
  • [GraphQL API] Changed the ParcelData type:
    • Added the custom field to the ParcelData type.
  • [GraphQL API] Changed the AddStagedOrderParcelToDelivery type:
    • Input field custom was added to AddStagedOrderParcelToDelivery type
  • [GraphQL API] Changed the OrderUpdateAction type:
    • Input field setParcelCustomField was added to OrderUpdateAction type
    • Input field setParcelCustomType was added to OrderUpdateAction type
Read more...

Added key to ProductProjection GraphQL type

14 January 2022
Enhancement
GraphQLSearchProduct Catalog

Added key field to the ProductProjection GraphQL type.

Change:

  • [GraphQL API] Changed the ProductProjection type:
    • Added the key field to the ProductProjection type.
Read more...

Added token revocation endpoint

4 January 2022
Enhancement
Security

You can now revoke your API access and refresh tokens compliant to Auth 2.0 Token Revocation.

Revoking tokens prevents the abuse of abandoned tokens and contributes to the security of your applications. You might want to revoke the tokens associated with the Customer, for example, when the Customer logs out, changes identity or uninstalls your application.

For more information, see Revoking tokens.

Introduced Order Search

28 December 2021
Feature
OrdersSearch

With the new Order Search, merchants are able to perform faster search for their orders with enhanced performance, increased query capabilities, and in a scalable way as it supports Projects with a large number of Orders. The feature needs to be activated for the Project before it can be used.

The Order Search API is utilized by our Merchant Center, but you are also welcome to build your own applications with this API. This feature is meant to support back office use cases. It is not intended for searching through the customer's order history in a storefront application.

Changes:

Read more...

Added Price selection to Product Projection Search on GraphQL API

22 December 2021
Enhancement
GraphQLSearchProduct Catalog

The Product Projection Search feature on the GraphQL API now supports Price selection.

Changes:

  • [GraphQL API] Added the following types to the GraphQL schema: ScopedPrice.
  • [GraphQL API] Changed the ProductSearchVariant type:
    • Added the scopedPrice field to the ProductSearchVariant type.
    • Added the scopedPriceDiscounted field to the ProductSearchVariant type.
  • [GraphQL API] Changed the PriceSelectorInput type:
    • PriceSelectorInput.date input field type changed from DateTime! to DateTime
Read more...

Deliveries can now be extended with Custom Fields

20 December 2021
Enhancement
GraphQLOrdersCustomization

You can now extend the Delivery object on the Order resource with Custom Fields. With these you can, for example, add meta data associated with your ERP system to the deliveries of the Orders.

Changes:

  • [API] Added custom field to Delivery.
  • [API] Added update actions Set Delivery Custom Type and Set Delivery CustomField to the Order.
  • [GraphQL API] Added the following types to the GraphQL schema: SetOrderDeliveryCustomField, SetOrderDeliveryCustomType, SetStagedOrderDeliveryCustomField, SetStagedOrderDeliveryCustomFieldOutput, SetStagedOrderDeliveryCustomType, SetStagedOrderDeliveryCustomTypeOutput.
  • [GraphQL API] Changed the AddOrderDelivery type:
    • Input field custom was added to AddOrderDelivery type
  • [GraphQL API] Changed the Delivery type:
    • Added the custom field to the Delivery type.
  • [GraphQL API] Changed the AddStagedOrderDelivery type:
    • Input field custom was added to AddStagedOrderDelivery type
  • [GraphQL API] Changed the StagedOrderUpdateAction type:
    • Input field setDeliveryCustomField was added to StagedOrderUpdateAction type
    • Input field setDeliveryCustomType was added to StagedOrderUpdateAction type
  • [GraphQL API] Changed the AddStagedOrderDeliveryOutput type:
    • Added the custom field to the AddStagedOrderDeliveryOutput type.
  • [GraphQL API] Changed the OrderUpdateAction type:
    • Input field setDeliveryCustomType was added to OrderUpdateAction type
    • Input field setDeliveryCustomField was added to OrderUpdateAction type
Read more...

Added Product key to Line Item

16 December 2021
Enhancement
GraphQLCartsOrders

Previously, the Line Items in Carts and Orders contained the Product ID only, to refer to the related Product. From now on, the Line Items have the user-defined Product key also, in case it exists for the related Product. The new field is present on Carts that were created or updated after 2 December 2021 and on Orders created after this date.

Changes:

  • [API] Added productKey field to LineItem.
  • [GraphQL API] Changed the LineItem type:
    • Added the productKey field to the LineItem type.
Read more...

Payment transactions can now be extended with Custom Fields

15 December 2021
Enhancement
GraphQLPaymentsCustomization

You can now extend the Transaction object on the Payment resource with Custom Fields. With this, you can now store additional information, like refund details and taxed amounts, on the specific payment transaction.

Changes:

  • [API] Added custom field to Transaction, TransactionDraft, and MyTransactionDraft .
  • [API] Added update actions Set Transaction Custom Type and Set Transaction CustomField to Payments.
  • [API] Added Set Transaction CustomField update action to My Payments.
  • [GraphQL API] Added the following types to the GraphQL schema: SetPaymentTransactionCustomField, SetPaymentTransactionCustomType.
  • [GraphQL API] Changed the Transaction type:
    • Added the custom field to the Transaction type.
  • [GraphQL API] Changed the MyTransactionDraft type:
    • Input field custom was added to MyTransactionDraft type
  • [GraphQL API] Changed the TransactionDraft type:
    • Input field custom was added to TransactionDraft type
  • [GraphQL API] Changed the PaymentUpdateAction type:
    • Input field setTransactionCustomType was added to PaymentUpdateAction type
    • Input field setTransactionCustomField was added to PaymentUpdateAction type
Read more...

Added update action for the supply channel of Line Items in a Cart

10 December 2021
Enhancement
CartsGraphQL

You can now update the inventory supply channel for Line Items that are already in a Cart. Before, you could only achieve this via replacing the existing Line Item with a new one.

Changes:

  • [API] Added Set LineItem SupplyChannel to Carts and My Carts.
  • [GraphQL API] Added the following types to the GraphQL schema: SetCartLineItemSupplyChannel.
  • [GraphQL API] Changed the CartUpdateAction type:
    • Input field setLineItemSupplyChannel was added to CartUpdateAction type
  • [GraphQL API] Changed the MyCartUpdateAction type:
    • Input field setLineItemSupplyChannel was added to MyCartUpdateAction type
Read more...

Increased maximum timeout for payment-related API Extensions

9 December 2021
Enhancement
CustomizationPayments

We have increased the maximum timeout for API Extensions of resource type payment from 2 to 10 seconds what makes your integrations with Payment Service Providers more reliable. You can set this timeout on the ExtensionDraft upon creation of the Extension or via Set TimeoutInMs update action (setTimeoutInMs mutation in the GraphQL API).

Added AWS EventBridge as supported Subscription destination

8 December 2021
Enhancement
Messages/SubscriptionsGraphQL

AWS EventBridge is now supported as a Subscription destination. Configuring EventBridge as a destination allows your serverless event bus to receive message from commercetools Composable Commerce and forward them to a variety of targets based on forwarding rules. Please find more information in our tutorial.

  • [API] Added EventBridge destination.
  • [GraphQL API] Added the following types to the GraphQL schema: EventBridgeDestination, EventBridgeDestinationInput, SetCartLineItemSupplyChannel.
  • [GraphQL API] Changed the SearchIndexingConfiguration type:
    • Added the categoriesDisabledForInternalTest field to the SearchIndexingConfiguration type.
  • [GraphQL API] Changed the CartUpdateAction type:
    • Input field setLineItemSupplyChannel was added to CartUpdateAction type
  • [GraphQL API] Changed the MyCartUpdateAction type:
    • Input field setLineItemSupplyChannel was added to MyCartUpdateAction type
  • [GraphQL API] Changed the SetStagedOrderReturnInfo type:
    • SetStagedOrderReturnInfo.items default value changed from none to []
  • [GraphQL API] Changed the DestinationInput type:
    • Input field EventBridge was added to DestinationInput type
  • [GraphQL API] Changed the ProductProjection type:
    • Removed the key field from the ProductProjection type.
  • [GraphQL API] Changed the SetOrderReturnInfo type:
    • SetOrderReturnInfo.items default value changed from none to []
Read more...

Added Product key to GraphQL API's Product Projection Search

3 December 2021
Enhancement
Product CatalogGraphQLSearch

You can now add the Product key to the results of Product Projection Search queries in the GraphQL API.

Changes:

  • [GraphQL API] Added key field to the ProductProjection type.
Read more...

Audit Log now tracks Custom Object Changes

2 December 2021
Enhancement
SecurityCustomizationGraphQL

We have extended the abilities of Audit Log to include the tracking of changes made against Custom Objects. This enhancement will start tracking new Custom Object Changes made and these Changes will be automatically added into your Audit Log responses.

Changes:

Read more...

Added CustomerFirstNameSet, CustomerLastNameSet, and CustomerTitleSet Messages

12 November 2021
Enhancement
Messages/SubscriptionsCustomersGraphQL

With the addition of three new Messages you can now use the MessageSubscription to subscribe to changes on the firstName, lastName, and title fields on Customers specifically. Before, you had to use the generic ChangeSubscription for that. These Messages are triggered by Set First Name, Set Last Name, and Set Title update actions.

Changes:

Read more...

Added supplyChannel field to InventoryEntryQuantitySet Message

12 November 2021
Enhancement
Messages/SubscriptionsProduct CatalogGraphQL

We added the field 'supplyChannel' to the InventoryEntryQuantitySet Message on the HTTP API and 'supplyChannel' and 'supplyChannelRef' fields to the GraphQL API. With these fields, you can check the Channel where changes took place.

Changes:

  • [API] Added the supplyChannel field to InventoryEntryQuantitySet Message.
  • [GraphQL API] Changed the InventoryEntryQuantitySet type:
    • Added the supplyChannelRef field to the InventoryEntryQuantitySet type.
    • Added the supplyChannel field to the InventoryEntryQuantitySet type.
Read more...

Added Set ReturnInfo update action and Message

10 November 2021
Enhancement
GraphQLOrdersMessages/Subscriptions

With the Set ReturnInfo update action, you can now delete and overwrite multiple entries in the returnInfo array field of Order in a single request. Previously, to remove an entry from the returnInfo field, it was necessary to use the Add ReturnInfo update action with a negative quantity. The Set ReturnInfo update action triggers the ReturnInfoSet Message.

Changes:

  • [API] Added Set ReturnInfo update action to Orders.
  • [API] Added Set ReturnInfo update action to Order Edits.
  • [API] Added ReturnInfoSet Message.
  • [GraphQL API] Added the following types to the GraphQL schema: ReturnInfoDraftType, ReturnInfoDraftTypeOutput, ReturnInfoSet, SetOrderReturnInfo, SetStagedOrderReturnInfo, SetStagedOrderReturnInfoOutput.
  • [GraphQL API] Changed the StagedOrderUpdateAction type:
    • Input field setReturnInfo was added to StagedOrderUpdateAction type
  • [GraphQL API] Changed the OrderUpdateAction type:
    • Input field setReturnInfo was added to OrderUpdateAction type
Read more...

Added fixed price Cart Discounts on CustomLineItems Target

4 November 2021
Enhancement
CartsPricing and Discounts

We have added the ability to create a fixed price Cart Discount on a CustomLineItems target.

Fixed price Cart Discounts achieved general availability status

4 November 2021
Announcement
CartsPricing and Discounts

After collecting feedback during the beta phase, we have moved Cart Discount type for fixed prices on Line Items out of beta. The status has been changed to general availability. With Fixed CartDiscountValue you can specify to which price you want to discount the Line Items.

Read more...

Added support for Mark Matching Variants in GraphQL API's Product Projection Search

29 October 2021
Enhancement
GraphQLProduct Catalog

To support the marked matching Variants feature in the GraphQL API we have added the field isMatchingVariant to the Product Variants in the result of productProjectionSearch queries. This field will only have a value when the argument markMatchingVariants (that we also added) is set to true.

Changes:

  • [GraphQL API] Changed the ProductSearchVariant type:
    • Added the isMatchingVariant field to the ProductSearchVariant type.
  • [GraphQL API] Changed the Query type:
    • Added argument markMatchingVariants to Query.productProjectionSearch field to align with the REST API.
    • Deprecated argument Query.productProjectionSearch(markMatchingVariant) in favor of markMatchingVariants.
Read more...

Detailed error messages on the GraphQL API

28 October 2021
Enhancement
GraphQL

To assist you better in error analysis we have added an error response format to the GraphQL API. This format contains detailed information about the errors that should help you in identifying the root cause of the problem.

Added existence check for Products

21 October 2021
Enhancement
Product Catalog

We have added endpoints for checking whether a Product with certain ID, key or properties exists. These methods can be used if you are only interested in the existence of a certain Product without the need of fetching its product information.

Enable sorting on Custom Fields

15 October 2021
Enhancement
SearchCustomization

It is now possible to sort on Custom Fields using custom.fields.${fieldName} sort parameter.

Localized name for Shipping Method

4 October 2021
Enhancement
OrdersGraphQL

Shipping Method now supports localized names. This enables displaying shipping methods in different languages.

Changes:

  • [API] Added localizedName to ShippingMethod.
  • [API] Added localizedName to ShippingMethodDraft.
  • [API] Added Set Localized Name Update Action.
  • [GraphQL API] Changed the ShippingMethodUpdateAction type:
    • Input field setLocalizedName was added to ShippingMethodUpdateAction type.
  • [GraphQL API] Changed the ShippingMethod type:
    • Added the localizedNameAllLocales field to the ShippingMethod type.
    • Added the localizedName field to the ShippingMethod type.
  • [GraphQL API] Changed the ShippingMethodDraft type:
    • Input field localizedName was added to ShippingMethodDraft type.
  • [GraphQL API] Added the following type to the GraphQL schema: SetShippingMethodLocalizedName.
Read more...

Stores achieved general availability status

30 September 2021
Announcement
StoresLimitsCustomization

After collecting feedback during the beta phase, we have moved Stores out of beta. The status of the following features has been changed to general availability:

In addition, to support use cases requiring a high number of Stores we have increased the limit on the number of Stores in a Project from 500 to 50000.

Added Customer Deleted Message

29 September 2021
Enhancement
CustomersMessages/SubscriptionsGraphQL

We have added a specific Message that is published whenever a Customer is deleted. That means, you can now subscribe to this particular message and do not need to use the generic ChangeSubscription anymore to implement such use cases.

Changes:

  • [API] Added CustomerDeleted Message.
  • [GraphQL API] Added the following types to the GraphQL schema: CustomerDeleted.
Read more...

Excluding Changes initiated by background processes from Audit log results

28 September 2021
Enhancement
SecurityGraphQL

It is now possible to exclude Changes initiated by background processes from Audit Log response data sets.

Change:

  • [API] Added excludePlatformInitiatedChanges query parameter to all Query Record endpoints that will allow Changes originated by background processes to be excluded from the response data set.
  • [GraphQL API] Added excludePlatformInitiatedChanges filtering parameter.
Read more...

Align data type for 'date' field in PriceSelectorInput

24 September 2021
Enhancement
GraphQLSearch

To align usage of data types on the GraphQL API we changed the type of the date field on PriceSelectorInput to DateTime.

Changes:

  • [GraphQL API] Changed the PriceSelectorInput.date type from Instant! to DateTime!

Added exists operator to GraphQL API

23 September 2021
Enhancement
GraphQL

To improve the developer experience for you we have added an exists operator to our GraphQL API. This improvement to the API design is now the recommended way of checking the existence of query results because

  1. it optimizes the query resulting in shorter response times and
  2. it avoids you finding workarounds with other query fields to achieve the same.

Changes:

  • [GraphQL API] Added the Boolean exists field to all QueryResult types.
Read more...

Added Correlation ID to calls to external OAuth server

1 September 2021
Enhancement
Security

Calls to the introspection endpoint of an external OAuth server now include the correlation ID initially passed in the request. This enables users to have a complete trace of the HTTP calls exchanged with the API and thus helps troubleshoot implementation issues.

Announced long-term support plan for Composable Commerce SDKs

31 August 2021
Announcement
Deprecation

We have set up a long-term support plan to actively support and maintain Version 1 (v1) SDKs until their end of life. Additionally, we have provided information about migration to our Version 2 (v2) SDKs that are constantly updated with the newest API features as soon as they are released. This support plan indicates when you could schedule the migration to v2 SDKs.

Read more...

Introduced limits on Store's Inventory Supply and Product Distribution Channels

20 August 2021
Announcement
LimitsStoresGraphQLProduct Catalog

To ensure best performance for your queries we have now limited the Channel settings for Stores. From now on each of your Stores can have

  • up to 100 Inventory Supply Channels and
  • up to 100 Product Distribution Channels

by default.

These default limits can be increased if needed after we have reviewed the performance impact on your project. To request a limit increase, contact us via the Support Portal, specifying your project region, project key and your use case.

Read more...

Increased the limit of subscriptions to 50

19 August 2021
Enhancement
Messages/SubscriptionsLimits

The limit of Subscriptions per Project has been raised from 25 to 50.

Added Product Projection Search to GraphQL API

18 August 2021
Enhancement
GraphQLSearchProduct Catalog

ProductProjection Search can now be performed using the GraphQL API.

Changes:

  • [GraphQL API] Added the following types to the GraphQL schema: CategoryOrderHintProductSearch, DimensionsProductSearch, DiscountedProductSearchPriceValue, ExistsFilterInput, FacetResult, FacetResultValue, ImageProductSearch, MissingFacetInput, MissingFilterInput, PriceSelectorInput, ProductPriceSearch, ProductProjection, ProductProjectionSearchResult, ProductSearchPriceTier, ProductSearchVariant, ProductSearchVariantAvailabilitiesResult, ProductSearchVariantAvailability, ProductSearchVariantAvailabilityWithChannel, ProductSearchVariantAvailabilityWithChannels, RangeCount, RangeCountDouble, RangeCountLong, RangeElementInput, RangeFacetInput, RangeFacetResult, RangeFilterInput, RawProductSearchAttribute, SearchFacetInput, SearchFacetModelInput, SearchFilterInput, SearchFilterModelInput, SearchKeywordProductSearch, SearchKeywordsProductSearch, SuggestTokenizerProductSearch,CustomSuggestTokenizerProductSearch,WhitespaceSuggestTokenizerProductSearch, TermCount, TermsFacetInput, TermsFacetResult, TreeFacetInput, TreeFilterInput, ValueCountFacetInput, ValueFacetInput, ValueFacetResult, ValueFilterInput.
  • [GraphQL API] Changed the Query type:
    • Added the productProjectionSearch field to the Query type.
Read more...

Added Store Created and Store Deleted Messages

5 August 2021
Enhancement
GraphQLStoresMessages/Subscriptions

You can now subscribe to messages triggered when Stores are created and deleted.

Changes:

  • [API] Added StoreCreated Message
  • [API] Added StoreDeleted Message
  • [GraphQL API] Added the following types to the GraphQL schema: StoreCreated, and StoreDeleted.
Read more...

Introduced a limit on Product Types

30 July 2021
Enhancement
Data ModelingLimits

Introduced a limit on Product Types. For Projects created after 23 June 2021, the number of Product Types in a Project is limited to 1 000. To request a limit increase, please contact us via the Support Portal.

Extending Audit Log tracked Changes

19 May 2021
Enhancement
SecurityOrdersGraphQL

Extended support for Audit Log Change tracking. The following Changes are now properly identified and displayed in the Change History API instead of being identified as an UnknownChange. This applies to both the REST and the GraphQL APIs.

Read more...

Added client ID to OAuth Token Introspection response

7 May 2021
Enhancement
Security

The response to an OAuth 2.0 Token Introspection request now provides the client_id as optional field as defined in RFC 7662.

Add Store to Shopping List

23 April 2021
Enhancement
CartsStoresGraphQL

You can now set a Store on Shopping Lists, and view and manage Shopping Lists and My Shopping Lists in a Store. When expanding the Line Items on a Shopping List in a Store, the prices, locales, and inventory are filtered to only include data for the specified Store.

Read more...

Automatic deactivation of indexing of Product information for non-production Projects

7 April 2021
Announcement
Search

Indexing of Product information for non-production Projects will automatically be deactivated if there have been no calls against the following API endpoints within the last 30 days:

The deactivation of Product information indexing will always happen on the day after a 30 day observation period.

The first deactivations will happen on 12 April 2021 and will include Projects that had no calls against the aforementioned API endpoints between 13 March 2021 and 11 April 2021. Please see the example below:

  • Start date 30 days observation period: 13 March 2021
  • End date 30 days observation period: 11 April 2021
  • Last API call or day of activation (search indexing activated): 12 March 2021
  • Day of automatic deactivation: 12 April 2021

Deactivation of Product information indexing means that calls to either of the above Product Projection Search or Product Suggestions endpoint will return a status code of 400 unless Product information indexing is explicitly re-activated. Please refer to API documentation for more details.

At the moment, this change does not apply to Projects that are marked as production Projects or any Projects hosted on AWS Hosts.

Enhanced configuration for indexing Product information

22 March 2021
Enhancement
CustomizationGraphQLSearch

By adding Client Logging information to the Search Indexing Configuration you can now find out who changed this project configuration and when it was changed.

  • [API] Added lastModifiedBy and lastModifiedAt fields to SearchIndexingConfigurationValues
  • [GraphQL API] Changed the SearchIndexingConfigurationValues type:
    • Added the lastModifiedBy field to the SearchIndexingConfigurationValues type.
    • Added the lastModifiedAt field to the SearchIndexingConfigurationValues type.
Read more...

Introduced Audit Log

15 March 2021
Feature
Security

Introduced Audit Log, a new feature that tracks and stores changes made against resources in your Project. You can now view a historical log of these changes via the Change History API, including GraphQL, or the Merchant Center. The feature is currently available in our Google Cloud Regions.

Removed deprecated functionality from GraphQL API

5 March 2021
Announcement
GraphQLDeprecation

As announced before, we have now removed deprecated fields and OAuth scopes from the GraphQL API. Using those fields in your GraphQL API requests will yield to HTTP 400 errors with header X-DEPRECATION-NOTICE from now on.

Changed default settings for new Projects

26 February 2021
Announcement
Search

For new Projects created after 3 March 2021, indexing of product information for the Product Projection Search and the Product Suggestions endpoints will be deactivated per default. To activate the indexing of Product information for your new Project, please choose one of the following options:

Activation via the Merchant Center will be possible soon.

Added configuration for indexing of product information

26 February 2021
Enhancement
CustomizationSearchGraphQL

Indexing of product information for the Product Projection Search and the Product Suggestions endpoints is now configurable via the Project endpoint. Using these endpoints is only possible if indexing has been activated for the Project and the search index has been built. Otherwise, the API replies with a 400 Bad Request error to requests on these endpoints.

Read more...

Reference Customer Groups by key

3 February 2021
Enhancement
Product CatalogPricing and Discounts

You can now reference a Customer Group using a user-defined field key in addition to id when Creating a Product, Setting a Product's Price, or Adding or Changing Embedded Prices of a ProductVariant.

Use External User ID from an external OAuth token in Client Logging

2 February 2021
Enhancement
Security

With this enhancement, you can now use external OAuth to set the External User ID for the lastModifiedBy and createdBy fields. Previously, this was only possible by specifying the X-External-User-ID header, which did not work well with the External OAuth flows.

Introduced fixed price cart discounts as beta feature

1 February 2021
Enhancement
Pricing and DiscountsGraphQLCarts

Introduced a new Cart Discount type for fixed prices on line items. With this you can now specify to which price you want to discount the line items, so far you could define the amount or percentage to be deducted from the line item price only.
With this new discount type, you can model cart promotions like these:

  1. Final Sale - all articles of the 'Sales' category in the cart for 15€ each
  2. Buy a pair of sunglasses for 10€ with coupon code SUNGLASSES (not limited to one pair, all pairs will become 10€)
  3. Phone accessories are only $10 with the purchase of any new phone (not limited to one accessory, all accessories will become $10)
  4. Get any 2 shirts for $50 each (not limited to two shirts, all shirts will become $50 if there are at least 2 shirts in the cart).
Read more...

Custom Fields for Addresses

29 January 2021
Enhancement
CustomizationCartsOrdersCustomersPricing and Discounts

We now provide Custom Fields on Address. This enables users to customize Addresses for their needs. When fetching Addresses, the user can filter them by Custom fields.

Added GraphQL support for Replicate Cart in Store endpoint

28 January 2021
Enhancement
GraphQLStoresCartsOrders

You can now replicate any Cart or Order in a given Store to a new Cart bound to the same Store using the GraphQL API.

Read more...

Added Custom Fields to Shipping Methods

27 January 2021
Enhancement
CustomizationGraphQLOrders

You can now add Custom Fields to Shipping Methods via the Shipping Methods API and the GraphQL API endpoints. This allows you to provide more information about your shipping services, for instance, the estimated delivery window, a carrier code, a pick-up point, or the 'track and trace URL format'.

Read more...

Added variant.key to predicate field identifiers

25 January 2021
Enhancement
Pricing and Discounts

It is now possible to use variant.key as a Discount Predicate field identifier. This allows you to use the same Discount Predicate for your production environment as you have used on your staging environment. Before it was not always possible since you had to rely on the automatically generated product.id and variant.id instead that differ between Projects.

Added a reference to anonymous cart on customer

12 January 2021
Enhancement
CustomersDeprecationCarts

It is now possible to identify an anonymous cart by using its id or external key. The previously used anonymousCartId will soon be deprecated.

Added Customer Password Updated Message

6 January 2021
Enhancement
Messages/SubscriptionsCustomers

You can now subscribe to messages triggered when Customers have changed their password.

Added Replicate Cart in Store endpoint

5 January 2021
Enhancement
StoresCartsOrders

Merchants may now replicate any Cart or Order in a given Store to a new Cart bound to the same Store.

Added key to Cart

22 December 2020
Enhancement
CartsOrdersDeprecation

Additionally to identifying Carts by their id, it is now possible to use key as a user-defined identifier for the list of operations below. This gives you more flexibility when referencing Carts from commercetools-external systems.

Added 'oldSlug' field to CategorySlugChanged and ProductSlugChanged Messages

14 December 2020
Enhancement
Messages/SubscriptionsGraphQLProduct Catalog

We added the new field oldSlug to the CategorySlugChanged Message and ProductSlugChanged Message that contains the slug as it was before the change. This information makes it easier for you to track changes of your slugs and to implement auto-redirection strategies for those product and category pages that have moved temporarily or permanently. On the GraphQL API you can now also query for the oldSlugAllLocales field of the messages in the fragments CategorySlugChanged and ProductSlugChanged.

  • [API] Added optional field oldSlug to CategorySlugChanged Message.
  • [API] Added optional field oldSlug to ProductSlugChanged Message.
  • [GraphQL API] Added the oldSlug and oldSlugAllLocales fields to CategorySlugChanged type of messages query.
  • [GraphQL API] Added the oldSlug and oldSlugAllLocales fields to ProductSlugChanged type to messages query.
Read more...

Allow subscriptions to Customer Token events

14 December 2020
Enhancement
Messages/SubscriptionsCustomers

You can now subscribe to changes on CustomerToken via a Change Subscription. This allows you to track if and how often the Customers in your Project change their passwords.

Added Product Suggestions GraphQL Query Schema

7 December 2020
Enhancement
GraphQLProduct CatalogPricing and Discounts

Product suggestions can now be queried using the GraphQL API. Product discounts can now be retrieved by key, using the GraphQL API.

  • [GraphQL API] Added the following types to the GraphQL schema: SearchKeywordArgument, SuggestResult, SuggestResultEntry, Suggestion.
  • [GraphQL API] Changed the Query type:
    • Added the productProjectionsSuggest field to the Query type.
    • Argument key was added to Query.productDiscount field
    • Query.productDiscount(id) type changed from String! to String
Read more...

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

11 November 2020
Enhancement
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 Composable Commerce GraphQL API out of beta on 31 January 2021.

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

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

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

Total prices for giftLineItems in cart predicates

29 October 2020
Enhancement
Pricing and Discounts

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/Subscriptions

When a resource is deleted with the dataErasure parameter set to true on the DELETE request, the ResourceDeletedDeliveryPayload will also contain the dataErasure parameter. This allows downstream systems to erase the data as well.

Added Messages GraphQL Query Schema

21 October 2020
Enhancement
GraphQLMessages/Subscriptions

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
Enhancement
LimitsCustomization

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
Messages/SubscriptionsProduct 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
StoresProduct 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
Pricing and DiscountsProduct 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
LimitsPricing and DiscountsCustomersCartsOrders

Introduced new limits for new projects on commercetools Composable Commerce.

The new limits and their defaults are:

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

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

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

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 and Discounts

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 and Discounts

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

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

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

2 April 2020
Enhancement

commercetools Composable Commerce 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 Composable Commerce API here. Log in here.

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
Messages/SubscriptionsProduct 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
CartsOrdersPricing and DiscountsSecurity

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 Composable Commerce on AWS, new API host names

3 February 2020
Announcement
Security

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

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 and Discounts

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/Subscriptions

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
Pricing and DiscountsSecurity

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.

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 and Discounts

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

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
Messages/SubscriptionsProduct Catalog

Adding and removing a product from a category now triggers messages.

Use Customer's key field in Cart Discount Predicates

21 June 2019
Enhancement
CartsCustomersPricing and Discounts

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
GraphQLPricing and DiscountsProduct 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 and Discounts

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 background services, like product discount or inventory updates.

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

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

Authorization Header Usage

29 April 2019
Announcement
DeprecationSecurity

As a security improvement, on 6 May 2019 the commercetools Composable Commerce API endpoints will no longer accept access tokens as URI parameters.

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

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

For more information, see:

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 commercetools Composable Commerce waits for a response from an API Extension is now configurable. The maximum timeout is still limited to 2000 ms. This limit can be increased per project after we review the performance impact. Please contact Support via the Support Portal and provide the region, project key and use case.

Set discounted prices from an external service when creating a Price

19 March 2019
Enhancement
Pricing and Discounts

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.

Introduced Limits on Products and Categories

21 February 2019
Announcement
LimitsProduct Catalog

Introduced new limits for new projects on commercetools Composable Commerce for products and categories.

The new limits and their defaults are:

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

The following existing limits have been lowered:

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

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

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

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
CartsOrdersPricing and DiscountsProduct 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)

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 by including a customLineItemId on a ReturnItemDraft.

Introduced a customerNumber field in the UserProvidedIdentifiers

6 November 2018
Enhancement
CustomersMessages/Subscriptions

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.

Shipping Methods - set or update the Tax Category by Key

18 October 2018
Enhancement
Pricing and Discounts

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
Messages/SubscriptionsPricing and Discounts

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/Subscriptions

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
Messages/SubscriptionsOrdersPricing and Discounts

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/Subscriptions

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/Subscriptions

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/Subscriptions

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 and Discounts

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 and Discounts

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 and Discounts

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
Messages/SubscriptionsOrders

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/Subscriptions

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

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 setting 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 and Discounts

The product discount limit was increased to 500.

Subscriptions and Extensions hide access secrets

3 August 2018
Enhancement
CustomizationMessages/SubscriptionsPrivacy

Both Subscriptions and API Extensions can contain access secrets, for example to allow commercetools Composable Commerce to place a message into a queue, or to invoke an AWS Lambda function. When retrieving an access secret via the commercetools Composable Commerce 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 and Discounts

Added setValidFromAndUntil to product discount update methods.

Change Subscription payloads includes modifiedAt

18 July 2018
Enhancement
Messages/Subscriptions

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/Subscriptions

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/Subscriptions

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

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

8 June 2018
Enhancement
Messages/Subscriptions

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 and Discounts

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 Composable Commerce fulfills the requirements of the General Data Protection Regulations.

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.

GraphQL support for custom fields on category and product price

31 May 2018
Enhancement
CustomizationGraphQLPricing and DiscountsProduct Catalog

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

Added GraphQL mutations for the CartDiscount and ProductDiscount

30 May 2018
Enhancement
GraphQLPricing and Discounts

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 (commercetools Composable Commerce 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, commercetools Composable Commerce guarantees that all personal data related to the particular object, including invisible data, is erased, in compliance with the GDPR. You are, however, responsible for identifying and deleting all objects that belong to a customer, and deleting them.

The parameter is available for:

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

High precision prices

9 May 2018
Enhancement
Pricing and Discounts

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 and Discounts

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/Subscriptions

We have introduced new Messages for 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 and Discounts

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 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 fulfillment-related addresses, for example, a customer is stocking up on printing paper and has ordered 80 packages of printing paper; 20 packages are to be delivered to the main office building, 58 to the warehouse and 2 for their home office. This can be achieved by defining three deliveries for the order, each with its own address.

DiscountCode with validity period

19 December 2017
Enhancement
Pricing and Discounts

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 and Discounts

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
Messages/SubscriptionsOrders

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 and Discounts

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 id of the assets could be used to identify them. Assets can now be placed at a specific position within the asset list when adding them to a ProductVariant or a Category.

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 and Discounts

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 and Discounts

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
CartsPricing and DiscountsProduct 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 IDs in the predicates.

Multi-Buy Discounts for Custom Line Items

26 October 2017
Enhancement
Pricing and Discounts

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 id field 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. To learn more about this new feature, please see Tiered shipping rates.

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 and Discounts

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 and Discounts

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
Enhancement
DeprecationPricing and Discounts

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 automatically assigned ID.

Multi-Buy Discounts

15 September 2017
Enhancement
Pricing and Discounts

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. To learn more about predicates, see the Shipping and Delivery Overview.

  • [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 and Discounts

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 and Discounts

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

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 and Discounts

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 and Discounts

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 OAuth 2.0 Token Introspection according to RFC 7662. It allows to determine the active state of an OAuth 2.0 access token and to determine meta-information about this access token, such as the scope.

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

Keys for Shipping Methods

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 'id' field.

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/Subscriptions

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 and Discounts

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/Subscriptions

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

Product Deleted Message and more

14 June 2017
Enhancement
Product CatalogMessages/Subscriptions

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