# 2023

{% updates format="full" %}
{% update date="2023-12-21" tags="metrics-api" %}

## Added shipments field to the orders endpoint

Now you can do statistics and track the history of the [shipments](https://app.gitbook.com/s/lhTYC557IzGiJNS84RKD/resources/orders#shipments-field) (and other shipment-related information such as the shipments [stock location](https://app.gitbook.com/s/lhTYC557IzGiJNS84RKD/resources/orders#shipment-stock_location-field), [shipping method](https://app.gitbook.com/s/lhTYC557IzGiJNS84RKD/resources/orders#shipment-shipping_method-field), [shipping category](https://app.gitbook.com/s/lhTYC557IzGiJNS84RKD/resources/orders#shipment-shipping_category-field), and [tags](https://app.gitbook.com/s/lhTYC557IzGiJNS84RKD/resources/orders#shipment-tags-field)) associated to your orders. Check the [Use cases](https://app.gitbook.com/s/ASSiAvbL4nFnkl8plQy2/getting-started/use-cases) section of the Metrics API documentation for some examples and the public [Postman collection](https://www.postman.com/commercelayer/workspace/commerce-layer-public-workspace/documentation/19711194-37a2d863-72f6-4b8f-8146-2f61d405fd3c) to see it in action!
{% endupdate %}

{% update date="2023-12-20" tags="core-api" %}

## Added code attribute for markets, price lists, shipping categories, and stock locations

You can now define an optional code for your [markets](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/markets), [price lists](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/price_lists), [shipping categories](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/shipping_categories), and [stock locations](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/stock_locations). For each resource, the code must be unique across the specific [environment](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/api-specification#environments) and is subject to some validation on the maximum length and allowed characters. When listing all four resources you can also sort and filter the results by code.
{% endupdate %}

{% update date="2023-12-13" tags="core-api" %}

## Adyen Checkout API version updated to the latest

We've updated and improved our [out-of-the-box integration with Adyen](https://app.gitbook.com/s/-Lk-ezuDClaMavTqnRi0/placing-orders/payments/adyen) which now supports the latest version (`v71`) of their [Checkout API](https://docs.adyen.com/api-explorer/Checkout/71/overview) by default.

{% hint style="danger" %}
If you're using an old integration that requires a version lower than `v71` (back up to `v66`) make sure to specify it in the `api_version` attribute of the [Adyen gateway](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/adyen_gateways) and use the correct version of Adyen's JS SDK and client libraries as detailed on [Adyen's website](https://docs.adyen.com/online-payments/release-notes).
{% endhint %}
{% endupdate %}

{% update date="2023-11-30" tags="core-api" %}

## Enabled order number editing for Enterprise plans

Now you can [change the default order numeric identifier](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/orders#changing-the-order-number) according to your needs as long as the passed value is unique within the specific organization environment. This feature is available for [Enterprise plans](https://commercelayer.io/pricing) only and can be activated by environment. You can inspect the related flags at the organization level to check your configuration. Order numbers can also be updated in bulk using [imports](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/importing-resources#unique-keys), just make sure to specify both the order number and ID to avoid unexpected results.
{% endupdate %}

{% update date="2023-11-29" tags="core-api" %}

## Added option to manually disable webhooks

Now you can disable existing [webhooks](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/webhooks) (and eventually re-enable them) via trigger attribute. Newly created webhooks are still enabled by default. Only the events associated with enabled webhooks will be fired. You can verify if a webhook is enabled/disabled by checking if the `disabled_at` attribute is populated or not.
{% endupdate %}

{% update date="2023-11-16" tags="core-api" %}

## Exposed and stored external price trigger

The `_external_price` trigger you need to set to `true` for the line items you want the price to be calculated [by an external service](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/external-resources/external-prices) is now stored and exposed. That means you no longer need to pass it at any line item update. Once set, any following computation on that line item's price will be performed invoking your external endpoint until you set it to `false`. You can also [fetch the line item](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/line_items/retrieve) and inspect the attribute value to check whether some external price calculation is involved or not.
{% endupdate %}

{% update date="2023-11-15" tags="dashboard" %}

## Added the new Returns app to the dashboard hub

As part of our new Dashboard renovations, we've released a new Returns application to help you manage your [returns](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/returns) in Commerce Layer. It provides all the core functions to initiate returns, manage their acceptance or rejection, and facilitates restocking when appropriate. Click on the *Hub* tab and see it for yourself!

To learn more, read our blog [here](https://commercelayer.io/blog/announcing-our-new-returns-app).

{% embed url="<https://commercelayer.io/blog/announcing-our-new-returns-app>" %}
{% endupdate %}

{% update date="2023-11-07" tags="core-api" %}

## Exposed compare at price on line items

Now you can retrieve the compare at price directly from the [line item](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/line_items/object) associated with the product (e.g. easily show it in your cart/checkout). This feature has been added to [external prices](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/external-resources/external-prices) too, just remember to specify the `compare_at_amount_cents` in your service's [response](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/external-resources/external-prices#response).
{% endupdate %}

{% update date="2023-10-24" tags="core-api" %}

## Full shipments CRUD enabled

We've removed any restrictions on the [shipments](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/shipments) endpoint. Shipments can now be created, deleted and their associations can be updated [upon specific conditions](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/shipments#manual-shipments-management), after the related order approval, while for the first part of the order lifecycle the automatic shipments generation based on the selected inventory strategy is still honored. This feature also includes changes to some related resources:

* [Stock line items](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/stock_line_items#manual-stock-line-items-management) can also be managed manually, including the possibility of creating a stock line item associated with a shipment that involves a product that originally wasn't part of the order (some trigger attributes are exposed [at the shipment level](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/shipments#manual-stock-management) to help you manage the stock accordingly).
* [Stock reservations](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/stock_reservations#generic-stock-reservation) can also be managed manually outside the order scope, with no associations with a specific order's line item.
* [Stock transfers](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/stock_transfers) can now be put on hold by setting a specific attribute at the [inventory model](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/inventory_models/object) level.

To get a high-level overview of how you can benefit from this upgrade, read our blog [here](https://commercelayer.io/blog/announcing-shipments-api-improvements).

{% embed url="<https://commercelayer.io/blog/announcing-shipments-api-improvements>" %}
{% endupdate %}

{% update date="2023-10-20" tags="checkout" %}

## Significant performance improvements in `v4.2.0`

We've implemented a solution that will result in another evident performance enhancement (in addition to the improvements [recently](#significant-performance-improvements-in-v.4.0.15) achieved) in the opening phase of the Checkout. Now we perform two calls in parallel to validate the pair access token + order ID so that the Checkout can bootstrap. Organizations using Google Tag Manager will get an even bigger boost, eliminating two more calls to our order endpoint.
{% endupdate %}

{% update date="2023-10-05" tags="core-api" %}

## New payment options endpoint

We've just added a new entry to the roster of our commerce API endpoints. You can now associate additional [payment options](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/payment_options) with an order to extend the information we send to the payment gateway at the moment of the payment creation (e.g. to leverage [Stripe Connect](https://stripe.com/connect) and accept payments [on behalf of](https://support.stripe.com/questions/sending-invoices-on-behalf-of-connected-accounts) connected accounts, and more). Payment options are payment source type-specific and may vary based on the different payment gateway. Make sure to carefully read the relative gateway documentation so that you can use them properly.
{% endupdate %}

{% update date="2023-10-04" tags="dashboard" %}

## Introducing Custom apps

We're proud to announce the release of Custom apps, which allow you to build your own Dashboard experience, either by forking and editing our existing open-source Dashboard applications ([Customers](https://github.com/commercelayer/app-customers), [Exports](https://github.com/commercelayer/app-exports), [Imports](https://github.com/commercelayer/app-imports), [Orders](https://github.com/commercelayer/app-orders), [Shipments](https://github.com/commercelayer/app-shipments), [Tags](https://github.com/commercelayer/app-tags), [Webhooks](https://github.com/commercelayer/app-webhooks) — more to come!) to create the ideal workflow for your team or building new apps that meet your team's need using our [App Elements](https://commercelayer.github.io/app-elements/) React component library.

To learn more, read our blog [here](https://commercelayer.io/blog/introducing-custom-dashboard-apps).

{% embed url="<https://commercelayer.io/blog/introducing-custom-dashboard-apps>" %}
{% endupdate %}

{% update date="2023-10-02" tags="checkout" %}

## Significant performance improvements in `v4.0.15`

We've implemented a [new logic](https://github.com/commercelayer/mfe-checkout#order-refresh) that intelligently determines when to refresh the order, resulting in a notable performance enhancement when opening the Checkout. This solution eliminates the need to wait for a synchronous call, which was previously causing delays for other essential requests in the Checkout loading. Another crucial step in our ongoing commitment to refining our suite of micro frontends.
{% endupdate %}

{% update date="2023-09-28" tags="core-api" %}

## Promotions engine enhancements

We've just released a huge upgrade to our [promotions](https://commercelayer.io/docs/data-model/promotions-and-gift-cards) engine. The changes and new features are many and you can find all the details on the related sections of the [documentation](https://app.gitbook.com/o/-Lfu_B3DKew-kvoEWzTk/s/RWJeylueWkzLadK710XZ/). Among them:

* We've changed the limits on the maximum number of active [promotions](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/promotions): now promotions associated with coupons are **unlimited**, while the maximum number of other promotion types that can be activated for a single organization is **10**.
* We've introduced a new promotion type [buy X pay Y](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/buy_x_pay_y_promotions) which enables you to offer your customers a discount corresponding to X-Y units of a product for free for any X units of the same products added to the order (it can also be used in the [cheapest free](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/buy_x_pay_y_promotions#cheapest-free) mode).
* We've introduced a new [custom promotion rule](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/custom_promotion_rules) that adds extreme flexibility when building your promotion logic enabling you to trigger promotions based on specific conditions that the order or the associated resources must meet.
* We've added the option to [enable/disable](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/promotions#enabling-disabling-promotions) promotions whether their activation rules are matched or not.
* We've added the possibility to mark a promotion as [exclusive](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/promotions#exclusive-promotions), so that, if it's triggered, no other concurrent promotion is applied.
* We've added the possibility to change the default [priority](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/promotions#priority-and-order-of-application) according to which concurrent promotions are applied so that you can define a custom order of application.
* We've added the option to set an expiration date also at the [coupon](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/coupons) level.
* We've changed the way the total discount due to promotions is [distributed](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/promotions#discount-distribution) on the affected line items: now the [taxable items](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/orders#taxable-items) are considered (also gift cards and negative adjustments are involved — this may lead to potential breaking changes, so make sure to properly set the taxable properties at the order level).

… and more!

To get a high-level overview of how you can benefit from this upgrade, read our blog [here](https://commercelayer.io/blog/new-promotion-engine-updates).

{% embed url="<https://commercelayer.io/blog/new-promotion-engine-updates>" %}
{% endupdate %}

{% update date="2023-09-14" tags="checkout" %}

## Added support for payment methods enabled on Stripe dashboard in `v4.0.14`

We've introduced the support for all the payment methods enabled in your Stripe dashboard, including Apple Pay and Google Pay. To use them, you need to activate the `auto_payments` option of your [Stripe gateway](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/stripe_gateways) on Commerce Layer and correctly set up it also on Stripe.
{% endupdate %}

{% update date="2023-09-13" tags="core-api" %}

## 3DS support enabled on subscriptions for Stripe credit cards

Now, if you're using [Stripe](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/stripe_gateways) as your payment gateway you can benefit from an additional security layer to your [order subscription](https://app.gitbook.com/s/-Lk-ezuDClaMavTqnRi0/placing-orders/subscriptions) process by letting your customers pay with credit cards requiring 3DS protocol with two-factor authentication.
{% endupdate %}

{% update date="2023-09-12" tags="react-components" %}

## Added support for payment methods enabled on Stripe dashboard in `v4.5.0`

With `v4.5.0` we started supporting Apple Pay and Google Pay express checkout buttons together with all the payment methods enabled on your Stripe Dashboard. We also added new hooks (e.g. `useCommerceLayer`, `useCustomerContainer`) and improved existing ones (e.g. `useOrderContainer`) so that they can be used in addition to our components to get the best out of the package.
{% endupdate %}

{% update date="2023-09-06" tags="core-api" %}

## Filtering engine upgraded

Be advised that we introduced a potential <mark style="color:red;">**breaking change**</mark> <mark style="color:red;">⚠️</mark> by updating our API's [filtering engine](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/filtering-data). The lists of [sortable](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/sorting-results#sortable-fields) and [filterable fields](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/filtering-data#filterable-fields) of some resources have changed. We also introduced a new [predicate](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/filtering-data#list-of-predicates) `*_jcont` that you can leverage to filter data based on the content of JSON attributes. Remember that if you try to filter a collection of resources by a non-filterable field you don't get any error from the API which will simply return the full unfiltered list.
{% endupdate %}

{% update date="2023-08-31" tags="core-api" %}

## New versions endpoint

We've just added a new entry to the roster of our commerce API endpoints that will enable auditing functionalities. [Versions](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/versions) are associated with [almost all the resources](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/versions#non-versionable-resources) to help you track the history of each resource's data changes. Each version object contains information about the event that generated it, the type of resource that has been modified, the request involved, the application that triggered the change, and more.
{% endupdate %}

{% update date="2023-08-29" tags="dashboard" %}

## Added the new Tags app to the dashboard hub

As part of our new Dashboard renovations, we've released a new Tags application to help you manage your [tags](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/tags) in Commerce Layer. You can create new tags, and edit or delete existing ones. Tags management (e.g. adding tags to an order or a customer, filtering orders and customers by tag, etc.) is now also enabled for the [Orders](#added-the-new-orders-app-to-the-dashboard-hub) and [Customers](#added-the-new-customers-app-to-the-dashboard-hub) apps. Click on the *Hub* tab and see it for yourself!
{% endupdate %}

{% update date="2023-08-24" tags="cli" %}

## New Tags plugin

`v1.0.0` of our [Tags CLI plugin](https://github.com/commercelayer/commercelayer-cli-plugin-tags) is out! Now you can create a new [tag](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/tags), list all created tags, add one or more tag(s) to a set of resources, count the resources associated with a specific tag, and more — all from the command line. To learn more about the plugin commands and options, please refer to the open-source GitHub repo [README](https://github.com/commercelayer/commercelayer-cli-plugin-tags).
{% endupdate %}

{% update date="2023-08-23" tags="checkout" %}

## Subscription frequency on order summary

We've introduced the support of the [line item frequency](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/line_items#choosing-line-items-that-generate-subscriptions) on the Checkout application, starting from `v4.0.13`. Now, if a line item has a frequency, it will be displayed on the order summary and on the thank you page.
{% endupdate %}

{% update date="2023-08-22" tags="cart" %}

## Apple Pay and Google Pay via Stripe enabled on `v3.2.1`

Starting from v.3.2.1 the hosted version of the Cart app supports express checkout buttons for both Apple Pay and Google Pay. To enable this feature, you need to activate the `auto_payments` on your Commerce Layer [Stripe gateway](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/stripe_gateways) and configure the necessary settings in your Stripe dashboard.
{% endupdate %}

{% update date="2023-08-10" tags="dashboard" %}

## Added the new Shipments app to the dashboard hub

As part of our new Dashboard renovations, we've released a new Shipments application to help you manage your [shipments](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/shipments) in Commerce Layer. You can track down shipments through search and filters. You can also see the history, status, and relevant information for a shipment, while also preparing packages and purchasing shipping labels. Click on the *Hub* tab and see it for yourself!

To learn more, read our blog [here](https://commercelayer.io/blog/new-customers-and-shipments-apps).

{% embed url="<https://commercelayer.io/blog/new-customers-and-shipments-apps>" %}
{% endupdate %}

{% update date="2023-08-04" tags="dashboard" %}

## Added the new Customers app to the dashboard hub

As part of our new Dashboard renovations, we've released a new Customers application to help you manage your [customers](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/customers) in Commerce Layer. You can search, filter, and list them, see their order history, status, and relevant customer groups, together with the addresses they've saved and the payment information in their wallet. Click on the *Hub* tab and see it for yourself!
{% endupdate %}

{% update date="2023-07-26" tags="micro-frontends" %}

## Micro frontend repositories renamed

We've just renamed all our micro frontend repositories replacing the prefix `commercelayer-` with `mfe-`, so that now their names are consistent with the policy already in place for the [Identity](https://github.com/commercelayer/mfe-identity) app. You can find the source code of all our hosted applications on GitHub: [Checkout](https://github.com/commercelayer/mfe-checkout), [Cart](https://github.com/commercelayer/mfe-cart), [Microstore](https://github.com/commercelayer/mfe-microstore), [My account](https://github.com/commercelayer/mfe-my-account).
{% endupdate %}

{% update date="2023-07-12" tags="dashboard" %}

## Added the new Orders app to the dashboard hub

As part of our new Dashboard renovations, we've released a new Orders application that acts as a central manager of all [orders](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/orders) within your organization. Using the Orders app you can see which orders are actively pending, select the orders by status, and then drill deep into a specific order to gain more information or move it along to another status. It's also possible to look at your entire order history or look into archived orders from this view as well, and more.\
\
Read more on our [blog](https://commercelayer.io/blog/enterprise-grade-order-management-with-commerce-layer-oms) or click on the *Hub* tab and see it for yourself!

{% embed url="<https://commercelayer.io/blog/enterprise-grade-order-management-with-commerce-layer-oms>" %}
{% endupdate %}

{% update date="2023-07-11" tags="core-api" %}

## New reserved stocks endpoint

We've just added a new entry to the roster of our commerce API endpoints. [Reserved stocks](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/reserved_stocks) are leveraged to refresh the reserved quantities associated with a specific [stock item](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/stock_items) and determine the actual availability of an SKU in a stock location. They can be included [using relationship paths](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/including-associations#using-relationship-paths) when fetching a list of SKUs to [check the real-time availability](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/skus#checking-real-time-stock-availability) of each product.
{% endupdate %}

{% update date="2023-07-06" tags="core-api" %}

## New order editing feature

We've introduced the capability to [edit orders](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/orders#order-editing) after they're placed and before they're approved, which can be exposed on the customer's end and the support agent's end. When an order is in editing you can make almost any change you need (e.g. add or remove line items, coupon or gift cards, adjustment, etc.) except replace the payment source and payment method, as long as the updates don't lead to a total order amount that exceeds the previously authorized (or already captured) amount. Orders can be edited multiple times before approval. Once an editing operation is started, it can't be reverted. It can always be aborted by cancelling the order.

For security reasons, [orders](https://commercelayer.io/docs/data-model/anatomy-of-an-order) can be moved to the `editing` status (and moved back to the `placed` status) by an [integration application](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/api-credentials#integration) only, via trigger attribute.

{% hint style="warning" %}
At the moment the order editing feature is available via API only, for orders that are placed after the release. It won't be available on the legacy admin area. It will be a [second-stage enhancement](https://docs.commercelayer.io/changelog/2024#added-the-editing-feature-to-the-orders-app) of the upcoming *Orders* app that is going to be added to the [Dashboard](https://dashboard.commercelayer.io/sign_in) (stay tuned!).
{% endhint %}
{% endupdate %}

{% update date="2023-07-05" tags="cli" %}

## Added ability to bypass exports and cleanups API limits using the CLI

As was already the case for [imports](https://github.com/commercelayer/commercelayer-cli-plugin-imports), from now on, if you need to [export](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/exporting-resources) or [clean up](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/cleaning-resources) any of the supported resources in one go, overriding the API limits in terms of maximum size (10K) and concurrent processes (10 per organization), you can leverage our [CLI plugins](https://github.com/commercelayer/commercelayer-cli/blob/main/docs/plugins.md). Check out the [Exports plugin](https://github.com/commercelayer/commercelayer-cli-plugin-exports) `v.2.1.0` and the [Cleanups plugin](https://github.com/commercelayer/commercelayer-cli-plugin-cleanups) `v2.0.0` (or above) and unleash the power of the command line!
{% endupdate %}

{% update date="2023-06-15" tags="micro-frontends" %}

## My account and Identity MFEs in JS Drop-in `v2.0.0`

Our [JS Drop-in library](https://github.com/commercelayer/drop-in.js) now features two additional sets of web components:

* The [Identity](https://commercelayer.github.io/drop-in.js/?path=/docs/components-identity-cl-identity-link--docs) MFEs let you manage user login status and link to the Commerce Layer-hosted [Identity](https://github.com/commercelayer/mfe-identity) app.
* The [My account](https://commercelayer.github.io/drop-in.js/?path=/docs/components-my-account-cl-my-account-link--docs) MFE renders a link to the Commerce Layer-hosted [My account](https://github.com/commercelayer/mfe-my-account) app which enables customers to manage their personal customer portal (orders, addresses, wallet, and more).

To learn more and see our micro frontends in action, explore the[ interactive documentation](https://commercelayer.github.io/drop-in.js). For any additional details or potential breaking changes see the [release notes](https://github.com/commercelayer/drop-in.js/releases/tag/v2.0.0).
{% endupdate %}

{% update date="2023-06-14" tags="identity" %}

## Introducing our Identity application

We've released the first version of our [Identity](https://github.com/commercelayer/mfe-identity) application which handles customer login and sign-up functionalities. As with all of our applications, a hosted version is available to use out-of-the-box, or the[ open-source repository](https://github.com/commercelayer/mfe-identity) can be forked and hosted on your end for any customizations you want to implement.
{% endupdate %}

{% update date="2023-06-06" tags="cli" %}

## New Cleanups plugin

`v1.0.0` of our [Cleanups CLI plugin](https://github.com/commercelayer/commercelayer-cli-plugin-cleanups) is out! Now you can create a new [cleanup](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/cleanups), list all created cleanups, show the details of an existing cleanup, and check the resource types that can currently [be cleaned up](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/cleaning-resources) — all from the command line. To learn more about the plugin commands and options, please refer to the open-source GitHub repo [README](https://github.com/commercelayer/commercelayer-cli-plugin-cleanups).
{% endupdate %}

{% update date="2023-06-05" tags="core-api" %}

## New stock reservations feature

We've introduced a [new API endpoint](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/stock_reservations) that allows you to manage stock reservations for your orders both automatically and manually. Now the stock associated with an [order](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/orders#stock-reservation)'s line items is automatically reserved (without decrementing the related [stock item](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/stock_items) quantities) when the order is placed until the order is approved or cancelled. You can also reserve a line item stock before order placement using a specific [trigger attribute](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/line_items#reserving-the-stock) when adding the line item to the order. In this case, the created draft stock reservations have a default expiration date of **1 hour** that can be changed at the [inventory model](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/inventory_models#stock-reservation-settings) level, after which the reserved stock is released unless the order is placed.

For security reasons, stock reservations can be managed by an [integration application](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/api-credentials#integration) only.
{% endupdate %}

{% update date="2023-05-17" tags="core-api" %}

## New external shipping costs feature

We added a [new entry](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/external-resources/external-shipping-costs) to our set of [external resources](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/external-resources) feature. Now you can override a [shipping method](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/shipping_methods) cost with a price calculated externally by any (custom) service. You just need to set the shipping method's `scheme` to `external`, provide the `external_prices_url` from where to fetch the related value, and make sure your external service [response](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/external-resources/external-shipping-costs#response) in case of success or error is compliant with the specifications.
{% endupdate %}

{% update date="2023-05-16" tags="js-auth" %}

## New function that handles all the authorization flows in `v4.0.0`

Be advised that we introduced a potential <mark style="color:red;">**breaking change**</mark> <mark style="color:red;">⚠️</mark> by removing the `client-oauth2` dependency from our [JS Auth](https://github.com/commercelayer/commercelayer-js-auth) wrapper. The whole library has been rewritten and the old `getSalesChannelToken`, `getCustomerToken`, `getIntegrationToken`, `authorizeWebapp`, and `getWebappToken` functions replaced by a single new `authentication` function. You can check the updated code samples in the repo [README](https://github.com/commercelayer/commercelayer-js-auth/blob/main/README.md).
{% endupdate %}

{% update date="2023-05-08" tags="core-api" %}

## New rate limiting policy

Be advised that we introduced a potential <mark style="color:red;">**breaking change**</mark> <mark style="color:red;">⚠️</mark> by updating our APIs [rate limits](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/rate-limits). The new policy is way more granular and efficient, being differentiated not only by [limit type](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/rate-limits#other-endpoints) but also by [environment](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/api-specification#environments), HTTP method, and resource type. We also improved the [response headers](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/rate-limits#response-headers) and deprecated some of the old ones. You can find all the information on the [dedicated page](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/rate-limits) of the documentation.
{% endupdate %}

{% update date="2023-05-02" tags="core-api" %}

## Added the option to use the order's subtotal amount for promotions and shipping methods

We've introduced a new boolean attribute `use_subtotal` for [shipping methods](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/shipping_methods#free-over-amount) and [order amount promotion rules](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/order_amount_promotion_rules). It that enables you to compare the order's subtotal (instead of the total amount, which remains the default) with:

* The value specified as the *free over amount* for the cost of a shipping method.
* The value specified as the amount above which a promotion should be triggered.

In both cases, this way, existing discounts (if any) are excluded from the compared order's amount.
{% endupdate %}

{% update date="2023-04-19" tags="core-api" %}

## New Tags API

We've introduced a [new API endpoint](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/tags) that allows you to apply tags to most of Commerce Layer's resources. Tags can be used as anchors to build custom logic and processes on top of our API and effectively expands the extensibility of our entire platform.

Tags can be included as [associations](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/tagging-resources) of the related resources and leveraged to [filter](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/filtering-data) a list of a specific resource type. Tags can be also [exported](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/exporting-resources) and [imported](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/importing-resources) in JSON or CSV format, both standalone and together with the related resources.

When a resource is tagged (or the list of the associated tags changes) a specific event is triggered, the related [webhook](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/real-time-webhooks) is fired, and the associated tag(s) are automatically included in the callback's payload.

To learn more, read our blog [here](https://commercelayer.io/blog/expanding-possibilities-with-our-new-tags-api).

{% embed url="<https://commercelayer.io/blog/expanding-possibilities-with-our-new-tags-api>" %}
{% endupdate %}

{% update date="2023-04-03" tags="js-sdk" %}

## JS SDK major updates in `v5.0.0`

We just released `v5.0.0` of our [JS SDK](https://github.com/commercelayer/commercelayer-sdk), introducing some new features and <mark style="color:red;">**breaking changes**</mark> <mark style="color:red;">⚠️</mark> mostly related to the [latest OpenAPI schema update](#nullable-key-and-enumeration-on-resource-statuses-in-v4.0.0). Please find here below a summary of the most relevant ones — now:

* Some fields (e.g. statuses) have a predefined set of allowed values.
* Non-fetchable fields aren't returned in the related object.
* The control on the resource type has been reinforced.
* You can use the new `count()` function when filtering every resource to get the total number of returned elements based on the filter that has been applied.
* The overall code has been optimized to slightly reduce the package size.

… and more. Check the [release notes](https://github.com/commercelayer/commercelayer-sdk/releases/tag/v5.0.0) and the open-source repo [README](https://github.com/commercelayer/commercelayer-sdk/blob/main/README.md) for any additional information and examples.
{% endupdate %}

{% update date="2023-03-28" tags="cli" %}

## New Exports plugin

`v1.0.0` of our [Exports CLI plugin](https://github.com/commercelayer/commercelayer-cli-plugin-exports/) is out! Now you can create a new [export](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/exports), list all created exports, show the details of an existing export, and check the resource types that can currently [be exported](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/exporting-resources) — all from the command line. To learn more about the plugin commands and options, please refer to the open-source GitHub repo [README](https://github.com/commercelayer/commercelayer-cli-plugin-exports/).
{% endupdate %}

{% update date="2023-03-15" tags="core-api" %}

## Introducing our new subscription features

Commerce Layer now includes a few new endpoints to supplement our existing [order subscription](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/order_subscriptions) functionalities:

* [Subscription models](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/subscription_models) — define the frequency and split of subscriptions. Each subscription model can also be associated with a market to differentiate the subscription strategy within different markets. This object allows brands to manage the frequency and payment source of the subscription, as well as attach promotions on the first order of the subscription (often used to discount first runs or provide a free trial of the product). It also can apply subscriptions at the SKU level (not the order level only), which enables orders to be split between one-time purchases (e.g. a razor handle) and subscription purchases (a monthly order of razor blades).
* [Order subscription items](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/order_subscription_items) — determine which items are part of the subscription, making it much easier to change out items in the subscription when required.
* [Recurring order copies](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/recurring_order_copies) — are used to automatically generate recurring orders based on a source order and the information set at the subscription model level.
* [Order factories](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/order_factories) — an immutable API that wraps recurring order copies and the already existing [order copies](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/order_copies) resources to enable both automatic and manual order subscription generation.
* [Price frequency tiers](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/price_frequency_tiers) — enable specific pricing for an item if it's part of a subscription (e.g. charging $15 for a razor pack as a one-time purchase and charging $12 for the same pack if it's part of a subscription). You can also provide different prices for different plans (such as charging $12 for a monthly pack of razors or $120 for a year of monthly razors).

To enable all the above, we also made some changes to the [line items](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/line_items#choosing-line-items-that-generate-subscriptions) and [orders](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/orders#automatic-subscriptions-generation) API: now line items can have a `frequency` and the automatic order subscription generation is triggered at the order level by sending the `_create_subscriptions` attribute.

Check our [data model](https://commercelayer.io/docs/data-model/subscriptions-and-order-copies) and read our [blog](https://commercelayer.io/blog/introducing-our-new-subscription-features) to get a high-level idea of how the whole process works and how these new features make it much easier to build out sophisticated subscriptions. Find any additional details in the API reference and follow [this guide](https://app.gitbook.com/s/-Lk-ezuDClaMavTqnRi0/placing-orders/subscriptions) to learn how to set up automatic subscriptions on Commerce Layer..

{% embed url="<https://commercelayer.io/blog/introducing-our-new-subscription-features>" %}
{% endupdate %}

{% update date="2023-03-10" tags="my-account" %}

## Added read-only customer wallet in `v1.1.0`

Now, when using our My account application, you can see the list of the authenticated customer's saved cards (if any). Just click on the related sidebar menu item to access the [new section](https://github.com/commercelayer/mfe-my-account#wallet).
{% endupdate %}

{% update date="2023-03-07" tags="openapi-schema" %}

## Nullable key and enumeration on resource statuses in `v4.0.0`

We bumped our schema to the [latest OpenAPI specification](https://spec.openapis.org/oas/v3.1.0). Be advised that we introduced a potential <mark style="color:red;">**breaking change**</mark> <mark style="color:red;">⚠️</mark> by updating the server URL syntax for the organization slug since OAS `v.3.1.0` does not support double curly brackets for variables anymore — `{{your-organization-slug}}` is now `{your_organization_slug}`. On top of that, we introduced the `nullable` key which is false if the related property is fetchable and required on creation, true if the related property is fetchable but not required on creation, and not present if the related property is not fetchable. We also added the `enum` key for the resources that have a status-like property (e.g. `status`, `fulfillment_status`, `payment_status`, etc.) so that all the available statuses are properly listed.
{% endupdate %}

{% update date="2023-02-28" tags="checkout" %}

## React 18 in `v4.0.0`

Be advised that we introduced a potential <mark style="color:red;">**breaking change**</mark> <mark style="color:red;">⚠️</mark> — Starting from [v4.0.0](https://github.com/commercelayer/mfe-checkout/releases/tag/v4.0.0) the Checkout application will adopt [React 18](https://reactjs.org/blog/2022/03/29/react-v18.html) and the latest version of our [React components](https://github.com/commercelayer/commercelayer-react-components-components) library.
{% endupdate %}

{% update date="2023-02-24" tags="metrics-api" %}

## New FBT helper endpoint

Commerce Layer Metrics API standard [queries](https://app.gitbook.com/s/ASSiAvbL4nFnkl8plQy2/getting-started/queries) cover a wide range of [use cases](https://app.gitbook.com/s/ASSiAvbL4nFnkl8plQy2/getting-started/use-cases) for your business. Since some use cases are more common than others, we decided to expose [more dedicated endpoints](https://app.gitbook.com/s/ASSiAvbL4nFnkl8plQy2/getting-started/analysis) to help you get relevant results with simple, customizable queries. The first of these endpoints is [FBT](https://app.gitbook.com/s/ASSiAvbL4nFnkl8plQy2/getting-started/analysis/fbt), aka *Frequently Bought Together*, a type of analysis query that retrieves items most frequently added to the same orders as a specified item (SKU or bundle) or a group of items. Stay tuned, there's way more to come!
{% endupdate %}

{% update date="2023-02-20" tags="dashboard" %}

## New hub with imports, exports, and webhooks apps

Commerce Layer admin dashboard now features a brand new *Hub* section for back-office applications built on top of our APIs that will facilitate the use of some of the main features of the platform. You can access it from the dashboard sidebar menu. The three apps available in this first version of the hub are [imports](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/importing-resources), [exports](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/exporting-resources), and [webhooks](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/real-time-webhooks) (stay tuned, more apps coming!). Each of them provides you with a user-friendly UI that lets you handle all the operations involved in the related topic management (previously available via API only).

In addition to this, we also added the search functionality when browsing your account organizations list.
{% endupdate %}

{% update date="2023-02-20" tags="core-api" %}

## Axerve integration and auto-capture feature for payments

Commerce Layer API now supports [Axerve](https://app.gitbook.com/s/-Lk-ezuDClaMavTqnRi0/placing-orders/payments/axerve) out-of-the-box (in addition to all of our other [payment gateway integrations](https://app.gitbook.com/s/-Lk-ezuDClaMavTqnRi0/placing-orders/payments)). On top of that, we've also added, at the [payment method](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/payment_methods#capture-options) level, two specific features related to payment capture:

* *Auto-capture* — now, you can ensure payments are [automatically captured](https://app.gitbook.com/s/-Lk-ezuDClaMavTqnRi0/placing-orders/auto-capture) as soon as they are authorized (for gateways that support it). If needed, you can specify a threshold for auto-capture so that it is enabled only for orders under a certain amount.
* *Delayed capture* — now, you can override the default behavior of the API and decide to start fulfilling your orders even if they're not captured yet, waiting to capture them when they're ready to be shipped.
  {% endupdate %}

{% update date="2023-01-25" tags="core-api" %}

## Increased SKU list items number for bundles

We doubled the maximum number of SKU list items that you can add to a single [bundle](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/bundles), which now changes from 5 to 10. We also increased the [maximum import size](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/importing-resources#maximum-import-size) limit at the API level: now the inputs array can contain a maximum of 10000 items (previously 2000).
{% endupdate %}

{% update date="2023-01-19" tags="checkout" %}

## Adyen Payment API switch in `v3.0.0`

Be advised that we introduced a potential <mark style="color:red;">**breaking change**</mark> <mark style="color:red;">⚠️</mark> — Starting from [`v3.0.0`](https://github.com/commercelayer/mfe-checkout/releases/tag/v3.0.0) the Checkout application will adopt the [Adyen Payment API](https://docs.adyen.com/api-explorer/Payment/68/overview) `v68`, dropping the support for `v66`. Make sure that your [Adyen payment gateway](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/adyen_gateways) is configured properly. This will also introduce the new version of the [`adyen-web`](https://www.npmjs.com/package/@adyen/adyen-web) package that is going to improve the [drop-in](https://docs.adyen.com/online-payments/web-drop-in/) component and the 3DS2 management.
{% endupdate %}

{% update date="2023-01-19" tags="core-api" %}

## Adyen notifications enablement

We've updated and improved our [out-of-the-box integration with Adyen](https://app.gitbook.com/s/-Lk-ezuDClaMavTqnRi0/placing-orders/payments/adyen) which now supports the latest version (`v68`) of their [Checkout API](https://docs.adyen.com/api-explorer/Checkout/68/overview) by default and lets you leverage their [notification webhooks system](https://app.gitbook.com/s/-Lk-ezuDClaMavTqnRi0/placing-orders/payments/adyen/configuring-the-notification-webhooks) (the only way to receive automatic updates about requests that are processed asynchronously).

{% hint style="danger" %}
If you're using an old integration that requires a version lower than `v68` (back up to `v66`) make sure to specify it in the `api_version` attribute of the [Adyen gateway](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/adyen_gateways) and use the correct version of Adyen's JS SDK and client libraries as detailed on [Adyen's website](https://docs.adyen.com/online-payments/release-notes).
{% endhint %}
{% endupdate %}

{% update date="2023-01-18" tags="micro-frontends" %}

## Custom events dispatchment in `v1.1.0`

Commerce Layer JS Drop-in library [`v1.1.0`](https://github.com/commercelayer/drop-in.js/releases/tag/v1.1.0) now dispatches to the document object some [custom events](https://commercelayer.github.io/drop-in.js/?path=/docs/events--page) (when an item is added to the cart, and when a price or an SKU is fetched) that you can intercept to trigger specific actions on your side. To avoid the same event being fired too often a debouncing practice is also implemented.
{% endupdate %}

{% update date="2023-01-12" tags="react-components" %}

## External payment gateway components in `v4.2.0`

With [`v4.2.0`](https://github.com/commercelayer/commercelayer-react-components-components/releases/tag/v4.2.0) we added to our subsets of payment gateway and payment source components the [external gateway](https://github.com/commercelayer/commercelayer-react-components-components/blob/main/packages/react-components/src/components/payment_gateways/ExternalGateway.tsx) and the [external payment](https://github.com/commercelayer/commercelayer-react-components-components/blob/main/packages/react-components/src/components/payment_source/ExternalPayment.tsx) ones. These components enable developers to process payments once they have an [external payment gateway](https://app.gitbook.com/s/-LgByaSP8eKjad-MIuHE/external-resources/external-payment-gateways) correctly set up on Commerce Layer and can be used in any custom React project or in a forked version of our [Checkout application](https://github.com/commercelayer/mfe-checkout).
{% endupdate %}

{% update date="2023-01-09" tags="core-api" %}

## External order validation

We've implemented a new custom validation process that enables you to apply additional validation rules on top of our standard validation. This can be useful when you want to support more complex validation rules specific to your business logic, such as market-specific quantities or SKUs.

External order validation setup happens at the [market](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/markets) level, where you can specify the `external_order_validation_url` of your external service endpoint and find the generated shared secret that you can leverage to verify the related callback authenticity. To trigger the external validation for an order you need to [update](https://app.gitbook.com/s/RWJeylueWkzLadK710XZ/orders/update) it and set the `_validate` attribute to `true`.
{% endupdate %}
{% endupdates %}
