# 2024

{% updates format="full" %}
{% update date="2024-12-16" tags="core-api" %}

## Enhanced exports, and more

We've just released a huge bunch of improvements mostly related to our [exports API](/core-api-reference/exports.md). The big news is that now exports are extended to [almost all the resources](/core/exporting-resources.md#supported-resources) exposed via API, allowing the inclusion of [all valid relationships](/core/exporting-resources.md#supported-associations). We also introduced the ability to [select the specific fields](/core/exporting-resources.md#selecting-fields) to be exported both for the main and related resources, thus enabling the option to reduce the export size and get more clean and efficiently exported data. If an export gets stuck (for any reason) in progress, you can now leverage the new `_interrupt` trigger attribute to interrupt the process. In case an export fails instead, the new `errors_log` attribute is filled with the runtime error that caused the interruption. On top of that, in the past few days we released the following minor (but still relevant) updates to our APIs:

* [Imports](/core-api-reference/imports.md) — we introduced the new `_interrupt` trigger attribute that you can leverage to interrupt imports that are stuck in progress. We also made `errors_log` and `warnings_log` filterable.
* [Cleanups](/core-api-reference/cleanups.md) — we introduced the new `_interrupt` trigger attribute that you can leverage to interrupt imports that are stuck in progress. We also made `errors_log` filterable.
* [Payment methods](/core-api-reference/payment_methods.md) — we expose the relationship with the associated orders.
* [Order copies](/core-api-reference/order_copies.md) — we added the option to [skip any errors](/core-api-reference/order_copies.md#skipping-copy-errors) and complete an order copy regardless.
  {% endupdate %}

{% update date="2024-12-10" tags="auth-api" %}

## Updated token expiration policy

In addition to aligning our [Authentication API](/core/authentication.md) to the latest [Provisioning API](https://docs.commercelayer.io/provisioning/) updates and enabling [login to our Dashboard with SSO](#new-identity-providers-endpoint), we improved the [Core API](https://docs.commercelayer.io/core/) access token [expiration policy](/core/authentication.md#access-token-expiry) with a little (but mighty) enhancement. Now there is a **15-min** overlap time window during which both a newly issued token and the current one are valid, thus helping you [optimize your auth token caching strategy](https://docs.commercelayer.io/changelog/spaces/-Lk-ezuDClaMavTqnRi0/pages/JIcXM2kyzlowkdlApU2D#i-keep-being-rate-limited-on-auth-calls.-what-shall-i-do) and avoid asking for a new token every time you make a call.

On top of that, be aware that we reduced the maximum custom token lifetime to **15 days** (this shouldn't — always remember that being careful not to set too long expiration dates for your access tokens is best practice — but could introduce a potential <mark style="color:red;">**breaking change**</mark>). <mark style="color:red;">⚠️</mark>
{% endupdate %}

{% update date="2024-12-05" tags="provisioning-api" %}

## New identity providers endpoint

We just added a new entry to the roster of our Provisioning API endpoints. [Identity providers](/provisioning/api-reference/identity_providers.md) allow [Enterprise](https://commercelayer.io/pricing) users to authenticate themselves to the Commerce Layer Dashboard using a single set of credentials, thus enabling [login with Single Sign-On](/provisioning/api-reference/identity_providers.md#logging-in-to-the-dashboard-with-sso) (SSO).
{% endupdate %}

{% update date="2024-12-04" tags="core-api" %}

## Introduced limitation on RegEx length, and more

Due to performance reasons, from now on regular expressions with a length greater than **5000** chars aren't supported anymore. This could introduce a potential <mark style="color:red;">**breaking change**</mark> involving the SKU code RegEx of [SKU lists](/core-api-reference/sku_lists.md) and [SKU options](/core-api-reference/sku_options.md), and the country, state, and ZIP codes RegEx of [shipping zones](/core-api-reference/shipping_zones.md) and [tax rules](/core-api-reference/tax_rules.md). On top of that, in the past few days we released the following minor (but still relevant) updates to our APIs:

* [Stock transfers](/core-api-reference/stock_transfers.md) — provided that there is enough origin stock availability to allow the change, now you can update the quantity of the stock transfers that are not completed (or cancelled) yet.
  {% endupdate %}

{% update date="2024-11-26" tags="dashboard" %}

## New Subscriptions app

As part of our new Dashboard renovations, alongside some nice UI upgrades to the *Home* section, we've released a new Subscription application to help you manage [order subscriptions](/core-api-reference/order_subscriptions.md). You can search and filter through your order subscription history to check their status and any other details. The app also enables you to deactivate, re-activate, or cancel subscriptions from the UI as well as edit existing ones to change their frequency and/or the scheduled date for the next run. Click on the *Apps* tab and see it for yourself!

{% hint style="warning" %}
This latest addition basically covers all the old Admin Area features, enabling us to safely switch to the new Dashboard for good. About that, remember that the old Admin Area will be sunset by the end of 2024. If you haven't yet, try out and start using the [Dashboard](https://dashboard.commercelayer.io/test/spineless) to benefit from an improved user experience and more and more new features.
{% endhint %}
{% endupdate %}

{% update date="2024-11-22" tags="cli" %}

## New Links plugin

`v1.0.6` of our [Links CLI plugin](https://github.com/commercelayer/commercelayer-cli-plugin-links) is out! Now you can use generate links (and manage all the other CRUD resources) directly 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-links/blob/main/README.md).
{% endupdate %}

{% update date="2024-11-20" tags="dashboard" %}

## Introducing Links

The [links](/core-api-reference/links.md) API has been available for a few weeks. Now we've made it so you can create Links directly from some of our Dashboard Apps (currently Orders, SKUs, and SKU Lists apps). Links are a no-code technology powered by Commerce Layer that enables any stock to be sold anywhere by using the most foundational component of the Web: a URL.

Sounds interesting? Learn more about the vision behind Links [on our blog](https://commercelayer.io/blog/sell-everywhere-with-commerce-layer-links). Then [sign up](https://dashboard.commercelayer.io/sign_up) or [log in](https://dashboard.commercelayer.io/sign_in), try to create a Link to a [checkout](https://github.com/commercelayer/mfe-checkout) page from an order or to a [microstore](https://github.com/commercelayer/mfe-microstore) from an SKU or SKU list, and feel free to share your feedback!

{% embed url="<https://commercelayer.io/blog/sell-everywhere-with-commerce-layer-links>" %}

{% embed url="<https://commercelayer.io/blog/how-to-get-the-most-from-links>" %}
{% endupdate %}

{% update date="2024-11-19" tags="core-api" %}

## New notifications endpoint, deprecated billing info validation rules, and more

We've just added a new entry to the roster of our commerce API endpoints. You can leverage [notifications](/core-api-reference/notifications.md) to attach specific messages or information to some resources. At the moment, notifications are available for orders and line items (in the future, the feature will be extended to other resources). On top of that, we released some minor updates to our APIs:

* Billing info validation rules — we deprecated and removed from the API reference the related endpoint. This could be a potential <mark style="color:red;">**breaking change**</mark>**.** <mark style="color:red;">⚠️</mark>
* [Transactions](/core-api-reference/transactions.md) — we added the relationship with the payment source for all the transaction types ([authorizations](/core-api-reference/authorizations/object.md), [captures](/core-api-reference/captures/object.md), [refunds](/core-api-reference/refunds/object.md), and [voids](/core-api-reference/voids/object.md)).
* [Orders](/core-api-reference/orders/list.md#filterable-fields) — now you can filter orders also by payment source details. Furthermore, we you can now leverage the new trigger attribute `_fix_payment_source` to make order's payment source is correctly associated with the last succeeded authorization.
* [Customers](/core-api-reference/customers/object.md) — we added the `profile_id` attribute, that you can leverage to uniquely identify the customer on any connected external services.
* [Tags](/core-api-reference/tags.md#validations) — we added the `:` symbol as an allowed character for tag names.
  {% endupdate %}

{% update date="2024-11-05" tags="core-api" %}

## First open beta release for stores API

We've just released publicly our [Stores API](/core-api-reference/stores.md), a brand new endpoint that enables you to map a market's physical shops (e.g. retail stores, pop-up stores, etc.) to effectively manage in-store sales and more. Stores are market-specific and can have their own stock location and payment methods. Stores can be [put in scope](/core/authentication.md#putting-a-store-in-scope) when requesting an access token so that all the fetched resources (e.g. SKUs, prices) are automatically filtered by the related market, orders are associated with the store in scope, the [stock availability](/core-api-reference/stores.md#stock-availability) is computed taking into consideration the store's stock location (if any) first, and the [available payment methods](/core-api-reference/stores.md#available-payment-methods) are updated accordingly.

{% hint style="danger" %}
Stores are a **beta** feature, still open for improvements and refinements. We encourage you to try it out and share any feedback that could help us enhance its fit for your use cases.
{% endhint %}

Check the [API reference](/core-api-reference/stores.md) and have a look at the [data model](https://commercelayer.io/docs/data-model/stores) for more information.
{% endupdate %}

{% update date="2024-10-30" tags="dashboard" %}

## Bundles support for new orders, refund calculator, and more

We've released a big chunk of updates regarding our Dashboard. In addition to a few UI changes and minor fixes and improvements, here's the list of the main new features:

* **Orders** — When creating a new order from the Dashboard now you can add any existing bundle to the cart. You can also add the billing and shipping addresses or edit them if already associated with the order. On top of that, when starting a refund, you can now leverage a brand-new refund calculator that will help you compute the refund amount based on the items to be returned.
* **Markets** — For each of your markets now you can see the associated payment and shipping methods.
* **Promotions** — Now you can create [flex promotions](/core-api-reference/flex_promotions.md) directly from the Promotion App (**closed beta** feature, active for selected enterprise organizations only). :star:
* **Price lists** — Now you can see all the prices from all your price lists in one view.
* **Inventory** — Now you can see all the inventory from all your stock locations in one view.
* **Shipments** — We now show relevant error messages (e.g. info related to wrong ZIP codes, issues when purchasing shipping labels, etc.) to facilitate better error management.

{% hint style="warning" %}
Remember that the old Admin Area will be sunset by the end of 2024. If you haven't yet, try out and start using the [Dashboard](https://dashboard.commercelayer.io/test/spineless) to benefit from an improved user experience and more and more new features.
{% endhint %}

[Sign up](https://dashboard.commercelayer.io/sign_up) or [log in](https://dashboard.commercelayer.io/sign_in) to see for yourself and feel free to share your feedback!
{% endupdate %}

{% update date="2024-10-22" tags="core-api" %}

## Added ability to cancel transactions for pending orders, and more

Now you can manually manage an edge case when an authorization or capture associated with an order that is still pending succeeds and the order is later updated (introducing an amount mismatch scenario). If so, you can leverage the new `_cancel` trigger attribute to [reset the related transaction](/core-api-reference/transactions.md#cancelling-transactions) and keep the order payment status `unpaid`. On top of that, in the past few days we released the following minor (but still relevant) updates to our APIs:

* [External order validation](/core/external-resources/external-order-validation.md) — now the [request](/core/external-resources/external-order-validation.md#request) payload also includes the shipments associated with the order together with the related shipping method.
* [Filtering data](/core/filtering-data.md) — now you can leverage some additional predicates (e.g. `*_eq_or_null`, `*_not_eq_or_null`, `*_in_or_null`, or `*_not_in_or_null`) to include `null` values in the filter computation.
* [SKUs](/core-api-reference/skus.md) — now you can give the same name to SKUs identified by different SKU codes. We also expose the [SKU lists](/core-api-reference/sku_lists.md) and [SKU list items](/core-api-reference/sku_list_items.md) relationships.
* [Stock reservations](/core-api-reference/stock_reservations.md) — now we also expose the [stock transfer](/core-api-reference/stock_transfers.md) and [stock line items](/core-api-reference/stock_line_items.md) relationships.
* [Stock transfers](/core-api-reference/stock_transfers.md) — now also stock transfers support [attachments](/core-api-reference/attachments.md).
* [Gift cards](/core-api-reference/gift_cards.md) — we added the order number information to the usage log.
  {% endupdate %}

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

## New Gift Cards app, details section, and more

As part of our new Dashboard renovations, we've released a new Gift Cards application to help you manage [gift cards](/core-api-reference/gift_cards.md) and complete the migration from the old Admin Area (that — let us remind you — will be sunset **by the end of 2024**). Now you can see all of your gift cards and filter them by market and status, create new gift cards, and edit, activate, and deactivate existing ones. Read more [on our blog](https://commercelayer.io/blog/implement-a-gift-card-strategy-with-the-new-gift-card-app).

{% embed url="<https://commercelayer.io/blog/implement-a-gift-card-strategy-with-the-new-gift-card-app>" %}

On top of that, we added the following minor (but still relevant) features:

* **Details** — Now you can see a Details section for each app, containing the ID, timestamps, and references of the single resource.
* **Tags** — Now you can change the tags associated with a resource directly from the resource's app (e.g. tagged orders from the Orders App, tagged customers from the Customers App, etc.). You still need to access the Tags App to create new tags.
* **Metadata** — Now you can add and edit metadata to a resource directly from the resource's app.

[Sign up](https://dashboard.commercelayer.io/sign_up) or [log in](https://dashboard.commercelayer.io/sign_in), enter the App section, and try it out!
{% endupdate %}

{% update date="2024-09-25" tags="dashboard" %}

## Monorepo management for all the apps, new Settings section, and more

We've released a big chunk of updates regarding our Dashboard. In addition to a few UI changes and minor fixes and improvements, here's the list of the main new features:

* **Monorepository** — Instead of a single repository for each one, now the Dashboard apps are entirely managed within the [`dashboard-apps`](https://github.com/commercelayer/dashboard-apps/) monorepo so that you run them all locally effortlessly. This slightly changes the workflow you need to follow to create custom apps, now you can choose to customize and release a single application or all of them. Check [this guide](https://commercelayer.github.io/app-elements/?path=/docs/getting-started-custom-apps--docs#how-to-customize-an-application) for more information about it.
* **Settings** — All the remaining settings still accessible from the old Admin Area have now been migrated into the current Dashboard. The new *Settings* section includes everything related to the configuration of your business (e.g. markets, merchants, inventory models, stock locations, etc.), payments (methods, gateways, taxes, etc.), shipping (methods, categories, zones, carriers, geocoders, etc.), and the general setup of your organization.

{% hint style="warning" %}
The old Admin Area will be sunset by the end of 2024. If you haven't yet, try out and start using the [Dashboard](https://dashboard.commercelayer.io/test/spineless) to benefit from an improved user experience and more and more new features.
{% endhint %}

* **Bundles** — The new Bundles app is now available. It enables you to create new bundles or search (filtering by market and tag) and edit existing ones, directly from the UI. Read more [on our blog](https://commercelayer.io/blog/introducing-the-new-bundles-app).

{% embed url="<https://commercelayer.io/blog/introducing-the-new-bundles-app>" %}

* **Orders** — Now you can create new orders (and associate market, customer, items, coupons, etc.) straight from the Orders app by clicking the related button.
* **Customers** — Now you can see customer subscriptions from the Customers app and delete customers that have no order associated.

[Sign up](https://dashboard.commercelayer.io/sign_up) or [log in](https://dashboard.commercelayer.io/sign_in) to see for yourself and feel free to share your feedback!
{% endupdate %}

{% update date="2024-09-10" tags="core-api" %}

## Added options to recompute promotions on order copies, and more

We introduced two additional attributes you can set to manage [promotions recalculation](/core-api-reference/order_copies.md#retriggering-promotions) when you're using order copies. Leveraging them you can decide to retrigger the promotions computation at the end of the copy and/or avoid copying to the target order any invalid coupon associated with the source order. On top of that, we released the following minor (but still relevant) updates to our APIs:

* [Orders](/core-api-reference/orders.md) — now you're also allowed to cancel pending orders (not only placed or approved ones).
* [Markets](/core-api-reference/markets.md) — now you can manage [custom shipping cost policies](/core-api-reference/markets.md#market-specific-shipping-costs-policy) at the market level by defining the maximum of shipping line items of the order that will be charged.
* [Line items](/core-api-reference/line_items.md) — now you can also [edit](/core-api-reference/line_items.md#overriding-amounts) the line items options amount (you need to use [integration](/core/api-credentials.md#integration) API credentials).
* [Webhooks](/core-api-reference/webhooks.md) — we added two new events to our [real-time webhooks list](/core/real-time-webhooks.md#supported-events) so that you can get notified about failures and issues regarding tax calculation and external promotions.
  {% endupdate %}

{% update date="2024-09-03" tags="auth-api" %}

## Updated access token payload information

We added the client ID of the application used to generate the [API credentials](/core/api-credentials.md) for any kind of token issued by our [Authentication API](/core/authentication.md). We also updated the issuer information. You can find an example of the updated token's payload structure [here](/core/authentication/jwt-bearer.md#sales-channel).
{% endupdate %}

{% update date="2024-08-14" tags="core-api" %}

## Enabled manual event triggering, and more

[Events](/core-api-reference/events.md) are automatically triggered at creation time, notifying all listening webhooks. Now if you need to force the firing of an existing event manually, you can leverage the new `_trigger` attribute. This way, the event will be immediately triggered, regardless of its uniqueness. On top of that, we released the following minor (but still relevant) updates to our APIs:

* [Orders](/core-api-reference/orders.md) — now, in case of [asynchronous order placement](/core-api-reference/orders.md#asynchronous-order-placement), any active [external validation](/core/external-resources/external-order-validation.md) is automatically performed. We also relaxed the constraints on order fulfillment: now you can move an order fulfillment status to `fulfilled` as long as the associated shipments are `cancelled`, `shipped`, or `delivered`).
* [Exports](/core/exporting-resources.md) — now you can [include](/core/exporting-resources.md#including-associations) the associated item when exporting line items and the associated origin address, shipping address, and parcels when exporting shipments.
* [Payment methods](/core-api-reference/payment_methods.md) — now the name of the payment method is [editable](/core-api-reference/payment_methods/update.md).
* [Adyen gateways](/core-api-reference/adyen_gateways.md) — now you can check the [Adyen Checkout API](https://docs.adyen.com/api-explorer/Checkout/latest/overview) version when fetching an Adyen gateway.
* [Reserved stocks](/core-api-reference/reserved_stocks.md) — we added reserved stocks to the list of [versionable](broken://spaces/RWJeylueWkzLadK710XZ/pages/ye4r6T7uwvvYUILr1Qbx#non-versionable-resources) resources.
  {% endupdate %}

{% update date="2024-07-23" tags="core-api" %}

## Enabled full CRUD for carrier accounts API, and more

The [carrier accounts](/core-api-reference/carrier_accounts.md) endpoint isn't read-only anymore. Now you can [create](/core-api-reference/carrier_accounts/create.md), [update](/core-api-reference/carrier_accounts/update.md), and [delete](/core-api-reference/carrier_accounts/delete.md) carrier accounts also via API (and not only using the admin UI). Remember that the credentials required to set up a carrier account depend on the specific shipping service you want to integrate. To check which credential keys are requested by each carrier you can fetch the carrier accounts schema from the core public endpoint `/api/public/schemas/carrier_accounts`. On top of that, we released an additional minor (but still relevant) update to our APIs:

* [Exports](/core-api-reference/exports.md) — now you can [include](/core/exporting-resources.md#supported-associations) also the reserved stock and the related stock location when exporting stock items.
  {% endupdate %}

{% update date="2024-07-09" tags="core-api" %}

## Added ability to unblock stuck transactions

We introduced the new `_forward` trigger attribute for all types of transactions ([authorizations](/core-api-reference/authorizations.md), [captures](/core-api-reference/captures.md), [refunds](/core-api-reference/refunds.md), and [voids](/core-api-reference/voids.md)). You can leverage it to unblock a transaction if it gets stuck (for any reason) on our platform but succeeds on the payment gateway. In the case of authorizations, the associated order is also placed at the end of the forwarding process, to avoid any possible modifications.
{% endupdate %}

{% update date="2024-07-04" tags="core-api" %}

## Added ability to initiate a refund from a return, and more

Now you can [initiate a refund process from a return](/core-api-reference/returns.md#refunding-from-a-return) by sending two trigger attributes and specifying the amount to be refunded. By default, the capture that will be refunded is the most recently succeeded capture associated with the related order. In the case of an order associated with multiple captures, you can also specify a different capture, provided that it's succeeded as well. We also added the ability to directly mark requested and approved returns as received. On top of that, we released the following minor (but still relevant) updates to our APIs:

* [External promotions](/core-api-reference/external_promotions.md) — now you can [specify the line items](/core/external-resources/external-promotions.md#applying-the-discount-to-specific-taxable-items) on which you want to apply an external promotion discount by listing their IDs in the `line_items` array of the response. You can also [define specific discounts for different line items](/core/external-resources/external-promotions.md#applying-a-specific-discount-to-specific-taxable-items). The use of the `matching_line_items` key is deprecated. <mark style="color:red;">⚠️</mark>
* [Shipments](/core-api-reference/shipments.md) — now you can cancel also packing and ready-to-ship shipments by leveraging the new `_cancel` trigger attribute (you need to use [integration](/core/api-credentials.md#integration) API credentials).
* [Orders](/core-api-reference/orders.md) — now you can cancel partially refunded orders without creating any further transactions.
* [Webhooks](/core/real-time-webhooks.md) — now we check and validate the related resources that are included in the request body so that you can be sure not to choose those that are not allowed. <mark style="color:red;">⚠️</mark>
  {% endupdate %}

{% update date="2024-06-13" tags="identity" %}

## Enabled custom reset password flow in `v1.2.1`

We added an optional parameter you can add when composing the Identity MFE URL to enable a [custom reset password](https://github.com/commercelayer/mfe-identity?tab=readme-ov-file#custom-reset-password-flow) link visible on the login form page. If that parameter is set a *Forgot password?* link pointing to the specified URL will be shown on the right below the *Password* field.
{% endupdate %}

{% update date="2024-06-12" tags="core-api" %}

## Added tags to order subscriptions, and more

We introduced a bunch of minor (but still relevant) updates to our APIs:

* [Order subscriptions](/core-api-reference/order_subscriptions/object.md) — we added order subscriptions to the [taggable resources](/core-api-reference/tags.md#taggable-resources) list.
* [External payment gateways](/core/external-resources/external-payment-gateways.md) — we added order subscriptions to the list of resources we include in the [request](/core/external-resources/external-payment-gateways.md#request) we send to external payment gateways to avoid useless API roundtrips.
* [SKUs](/core-api-reference/skus.md) — we remove the uniqueness constraint on SKU names. Now you can give the same name to SKUs with different SKU codes.
  {% endupdate %}

{% update date="2024-06-10" tags="core-api" %}

## Introduced toggle to support Adyen's native Drop-in customer payment sources, and more

Now you can decide to show the customer payment sources saved from the native [Adyen Drop-in](https://docs.adyen.com/online-payments/3d-secure/native-3ds2/web-drop-in/) library instead of the ones [saved in Commerce Layer](/core-api-reference/customer_payment_sources.md) by setting to `true` the new boolean attribute `native_customer_payment_sources` at the [Adyen gateway](/core-api-reference/adyen_gateways/object.md) level (the feature is already available on our `AdyenPayment` [React Component](https://github.com/commercelayer/commercelayer-react-components/releases/tag/v4.13.6) and will be soon added to our hosted Checkout too). On top of that, we released some other updates to our APIs:

* [Customers](/core-api-reference/customers.md) — we exposed the new `shopper_reference` attribute. It is automatically generated at creation time for each new customer and sent to the payment gateway to identify the shopper during the payment sessions. It can be updated at your leisure.
* Order validation rules — we deprecated and removed from the API reference the related endpoint. This could be a potential <mark style="color:red;">**breaking change**</mark>**.** <mark style="color:red;">⚠️</mark>
* [Sortable relationships](/core/sorting-results.md#sorting-the-parent-resource-by-one-attribute-belonging-to-a-related-resource) — we update the list of relationships you can sort each resource by. You can find it in the [documentation](https://docs.commercelayer.io/core-api-reference/) of each resource by checking the *List all* section (e.g. [sortable relationships for SKUs](/core-api-reference/skus/list.md#relationships)).
  {% endupdate %}

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

## Limited stored order errors, removed order expiration date, and more

We introduced a bunch of updates to our APIs — be advised that some of them could result in potential <mark style="color:red;">**breaking changes**</mark> <mark style="color:red;">⚠️</mark>:

* [Orders](/core-api-reference/orders/object.md) — we removed the `expires_at` attribute, make sure to update your integration accordingly in case you were leveraging it somehow. <mark style="color:red;">⚠️</mark>

{% hint style="info" %}
Our draft order cancellation policy still stands. Draft orders that aren't associated with a customer are automatically deleted after **2 months** since the latest update.
{% endhint %}

* [Resource errors](/core-api-reference/resource_errors.md) — for performance reasons, now resource errors are limited to a buffer that stores the latest **10** errors per order. <mark style="color:red;">⚠️</mark>
* [Stock transfers](/core-api-reference/stock_transfers.md) — now you can add [attachments](/core-api-reference/attachments.md) to stock transfers too.
  {% endupdate %}

{% update date="2024-05-31" tags="core-api" %}

## New trigger attributes for orders, shipments, and more

We introduced a bunch of minor (but still relevant) updates to our APIs:

* [Shipments](/core-api-reference/shipments/object.md) — we added the new `delivered` status to the shipment lifecycle. You can now leverage the related trigger attribute `_deliver` and [real-time webhook event](/core/real-time-webhooks.md#supported-events). On top of that, now the number of a shipment can be [edited](/core-api-reference/shipments/update.md).
* [Orders](/core-api-reference/orders/object.md) — now you can leverage the new trigger attribute `_fulfill` to mark as fulfilled an order whose shipments have been shipped or delivered, and the related [real-time webhook event](/core/real-time-webhooks.md#supported-events).
* [Order subscriptions](/core-api-reference/order_subscriptions.md) — now you can turn an existing [manual](/core-api-reference/order_subscriptions.md#manual-order-subscription-generation) order subscription into an [automatic](/core-api-reference/order_subscriptions.md#automatic-order-subscription-generation) one by sending the `_covert` trigger attribute, provided that you previously defined a subscription model for the associated market.
* [Imports](/core/importing-resources.md) — now you are allowed to specify also some attributes that normally are not updatable (such as the order, payment, and fulfillment status) when [importing orders](/core/importing-resources.md#importing-a-list-of-orders-with-line-items-and-line-item-options-json) that you want to archive.
* [Gift cards](/core-api-reference/gift_cards/object.md) — we exposed the new `usage_log` attribute that you can leverage to get more information about how, when, and by which order a gift card has been used.
* [Stock transfers](/core-api-reference/stock_transfers.md) — now the number of a stock transfer can be set at [creation](/core-api-reference/stock_transfers/create.md) or [update](/core-api-reference/stock_transfers/update.md) time.
  {% endupdate %}

{% update date="2024-05-30" tags="micro-frontends" %}

## Bundles available in JS Drop-in `v2.4.0`

The [Add to cart](https://commercelayer.github.io/drop-in.js/?path=/docs/components-add-to-cart-cl-add-to-cart--docs) and [Price](https://commercelayer.github.io/drop-in.js/?path=/docs/components-price-cl-price--docs) components of our [JS Drop-in library](https://github.com/commercelayer/drop-in.js) now support bundles, meaning that, starting `from v2.4.0`, you can display prices of bundles (instead of just single SKUs) and add them to the shopping cart, as you can see from this [demo](https://commercelayer.github.io/drop-in.js/?path=%2Fdocs%2Fintroduction--docs#demo). The list of the custom [events](https://commercelayer.github.io/drop-in.js/?path=/docs/events--docs) dispatched by the library has also been updated accordingly.

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.4.0).
{% endupdate %}

{% update date="2024-05-16" tags="core-api" %}

## New price list scheduler endpoint, and more

We've just added a new entry to the roster of our commerce API endpoints that will enable better and more flexible pricing strategies and price list management. Now you can optionally associate one or more price list schedulers to each of your [markets](/core-api-reference/markets.md#scheduling-price-changes-for-a-market). [Price list schedulers](/core-api-reference/price_list_schedulers.md) set a time frame within which their [price list](/core-api-reference/price_lists.md) overrides the associated market's one, letting you change a subset of prices within that specific time window (e.g. seasonal sales). On top of that, we added some minor updates to our APIs:

* [Line items](/core-api-reference/line_items.md#overriding-amounts) — now you can change a line item's unit amount and assign it a value that differs from the one defined in the market's price list of the associated order by using [integration](/core/api-credentials.md#integration) API credentials.
* [Promotions](/core-api-reference/promotions/object.md) — we exposed the status of the promotion (e.g. `expired`, `pending`, `active`, `inactive`, or `disabled`) for all the promotion types.
  {% endupdate %}

{% update date="2024-05-14" tags="core-api" %}

## Disabled webhooks on imports, and more

Be advised that we introduced potential <mark style="color:red;">**breaking changes**</mark> <mark style="color:red;">⚠️</mark> by disabling [real-time webhooks](/core/real-time-webhooks.md) on imports, meaning that the related events are no longer fired when creating/updating resources [via imports](/core/importing-resources.md). The only events that are still fired are the ones associated with order status changes. If you need to leverage all the other real-time events, you have to create/update resources via the related API endpoints. On top of that, we added some minor updates to our APIs:

* [Customer groups](/core-api-reference/customer_groups.md) — now you can optionally define a custom alphanumeric `code` for your customer groups (similarly to what you could already do for [markets](/core-api-reference/markets.md), [stock locations](/core-api-reference/stock_locations.md), and [price lists](/core-api-reference/price_lists.md)).
* [Stock transfers](/core-api-reference/stock_transfers.md) — stock transfers are now both [importable](/core/importing-resources.md#importing-a-list-of-stock-transfers-json) and [exportable](/core/exporting-resources.md#exporting-a-list-of-stock-transfers-with-skus-csv).
* [Order subscriptions](/core-api-reference/order_subscriptions.md) — we added an upper limit to the subscription renewal alert period: now you can notify your customer of upcoming recurring orders from a minimum of one hour to a maximum of one month in advance. <mark style="color:red;">⚠️</mark>
  {% endupdate %}

{% update date="2024-05-09" tags="dashboard" %}

## Updated UI design and new features for our Dashboard

We've released the newest version of our Dashboard, now built completely with React. It now leverages the power of our [Provisioning](https://docs.commercelayer.io/provisioning/) and [Authentication](/core/authentication.md) APIs, making future development and customization of our Dashboard applications much easier. You'll notice a light UI revamp that improves the navigation, along with some new features. Among them:

* When you create a new organization with Commerce Layer, you now have the option to select which region you'd like your data to be stored.
* You can now grant members partial access to specific apps (e.g. enabling them to manage orders belonging only to certain markets or shipments delivered only from certain stock locations).

[Sign up](https://dashboard.commercelayer.io/sign_up) or [log in](https://dashboard.commercelayer.io/sign_in) to see for yourself or read more [on our blog](https://commercelayer.io/blog/manage-your-organization-better-with-our-revamped-dashboard)!

{% embed url="<https://commercelayer.io/blog/manage-your-organization-better-with-our-revamped-dashboard>" %}
{% endupdate %}

{% update date="2024-04-23" tags="dashboard" %}

## Added the new Promotions, SKUs, SKU Lists, Price Lists, and Inventory apps to the dashboard hub

As part of our new Dashboard renovations, we've released a whole new set of apps related to promotions and product management. In detail:

* [Promotions](https://github.com/commercelayer/app-promotions) — you can view active, upcoming, disabled, or all of your promotions by clicking any of the views, along with creating new promotions by type (external promotions included) or editing existing ones.
* [SKUs](https://github.com/commercelayer/app-skus) — you can manage (create, delete, edit, search, filter) your SKUs, along with adding their shipping info and options.
* [SKU Lists](https://github.com/commercelayer/app-sku-lists) — you can create new SKU lists or edit existing ones by adding or removing SKU list items.
* [Price Lists](https://github.com/commercelayer/app-price-lists) — you can create new price lists or edit existing ones by adding prices, setting the currency, and determining whether taxes are included or not.
* [Inventory](https://github.com/commercelayer/app-inventory) — this app enables you to set stock levels for SKUs in each of your stock locations by adding and removing stock items, or updating their quantity.

Click on the *Hub* tab and see it for yourself or read more [on our blog](https://commercelayer.io/blog)!

{% embed url="<https://commercelayer.io/blog/build-better-promo-campaigns-with-our-new-promotions-app>" %}

{% embed url="<https://commercelayer.io/blog/make-sku-management-easier-with-our-new-sku-and-sku-list-apps>" %}

{% embed url="<https://commercelayer.io/blog/simplify-price-management-with-our-price-lists-app>" %}

{% embed url="<https://commercelayer.io/blog/set-and-manage-inventory-levels-with-our-inventory-app>" %}
{% endupdate %}

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

## Updated price tiers limit

We doubled the number of allowed [price tiers](/core-api-reference/price_tiers.md). Now you can define up to a maximum of **10** tiers in total (no matter what type) per [price](/core-api-reference/prices.md#price-tiers).
{% endupdate %}

{% update date="2024-04-16" tags="core-api" %}

## Added order subscription renewal event, and more

We updated the list of our [real-time webhooks](/core/real-time-webhooks.md) with a new event that you can leverage to [notify customers](/how-tos/placing-orders/subscriptions/generating-the-subscriptions.md#notifying-upcoming-subscriptions) about upcoming recurring orders associated with subscriptions once you've properly set the `renewal_alert_period` at the [order subscription](/core-api-reference/order_subscriptions.md) level. On top of that, we added some minor updates to our APIs:

* [Promotions](/core-api-reference/promotions/list.md) — now all promotion types can be filtered by priority.
  {% endupdate %}

{% update date="2024-04-09" tags="core-api" %}

## Added trigger to validate stock item quantities, and more

We introduced the new `_validate` trigger attribute at the [stock item](/core-api-reference/stock_items.md) level. We recommend passing it for each input when updating stock item quantities [via imports](/core/importing-resources.md#importing-a-list-of-stock-items-csv) to avoid some edge-case scenarios that could lead to inconsistent quantity updates. On top of that, we added some minor updates to our APIs:

* [Imports](/core/importing-resources.md) — we changed the SKU options' [unique keys](/core/importing-resources.md#unique-keys): now you can import SKU options using only name and currency code.
* [Returns](/core-api-reference/returns.md) — Now you can [tag](/core-api-reference/tags.md) returns even if the associated order's fulfillment status is `unfulfilled`.
  {% endupdate %}

{% update date="2024-04-08" tags="micro-frontends" %}

## Subscriptions available in JS Drop-in `v2.3.0`

The [Add to cart](https://commercelayer.github.io/drop-in.js/?path=/docs/components-add-to-cart-cl-add-to-cart--docs) component of our [JS Drop-in library](https://github.com/commercelayer/drop-in.js) now supports [automatic subscriptions](https://commercelayer.github.io/drop-in.js/?path=/docs/components-add-to-cart-cl-add-to-cart--docs#subscriptions) based on line item frequency. Starting from `v2.3.0`, we also took the opportunity to align the library with the [recent changes](#introducing-our-new-authentication-api) to the authentication process using the new Auth API.

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.3.0).
{% endupdate %}

{% update date="2024-04-05" tags="checkout" %}

## Started supporting organization config settings in `v4.10.0`

Leveraging the [recent new feature](#added-organization-config) introduced on the Provisioning API in terms of adding default and market-specific settings at the [organization](/provisioning/api-reference/organizations.md#micro-frontends-configuration) level, we've started using those config parameters to enhance the flexibility of our hosted applications. The Checkout app now supports:

* The possibility to set a [custom thank you page URL](https://github.com/commercelayer/mfe-checkout?tab=readme-ov-file#custom-thank-you-page-url).
* The possibility to configure a [custom list of countries and/or states](https://github.com/commercelayer/mfe-checkout?tab=readme-ov-file#custom-list-of-countries-and-states) for billing and shipping address forms (along with specifying a default country to be preselected).

On top of that, we also added Hungarian to the list of [supported languages](https://github.com/commercelayer/mfe-checkout?tab=readme-ov-file#supported-languages).
{% endupdate %}

{% update date="2024-03-27" tags="examples" %}

## Updated SSO with Next.js and Auth0 tutorial

The tutorial on how to set up single-sign on with Commerce Layer using Next.js and Auth0 has been updated to reflect the changes [recently introduced](#introducing-our-new-authentication-api) with our new [Auth API](/core/authentication.md). Read it [on our blog](https://commercelayer.io/blog/single-sign-on-with-commerce-layer-using-next-js-and-auth0) and/or check the code in the [Examples](https://github.com/commercelayer/examples/tree/main/authentication/nextjs-auth0-sso) repository.

{% embed url="<https://commercelayer.io/blog/single-sign-on-with-commerce-layer-using-next-js-and-auth0>" %}
{% endupdate %}

{% update date="2024-03-26" tags="js-auth" %}

## New Auth API supported from `v6.0.0`

Our [JS Auth](https://github.com/commercelayer/commercelayer-js-auth) library is now aligned with the [recent changes](#introducing-our-new-authentication-api) to the authentication process and uses the new Auth API. Be advised that `v6.0.0` introduces potential <mark style="color:red;">**breaking changes**</mark> <mark style="color:red;">⚠️</mark> — in detail:

* The library now uses the [new auth endpoint](/core/authentication.md#the-new-authentication-endpoint) and both the [Core API](/core/authentication.md) and [Provisioning API](/provisioning/getting-started/authorization.md) authentication methods have been unified into the new `authenticate` one. <mark style="color:red;">⚠️</mark>
* The [new scope syntax](/core/authentication.md#authorization-scopes) (including the additional feature to use the code instead of the ID) is now used.
* The [JWT bearer flow](https://github.com/commercelayer/commercelayer-js-auth?tab=readme-ov-file#jwt-bearer) is now supported (this feature is available for Enterprise users only).
* We added a `revoke` method to [revoke](https://github.com/commercelayer/commercelayer-js-auth?tab=readme-ov-file#revoking-a-token) any previously generated access token.
* We added a helper method to [decode](https://github.com/commercelayer/commercelayer-js-auth?tab=readme-ov-file#decode-an-access-token) any kind of access token.

Check the [release notes](https://github.com/commercelayer/commercelayer-js-auth/releases/tag/v6.0.0) for more info.
{% endupdate %}

{% update date="2024-03-22" tags="core-api" %}

## Added possibility to export order subscriptions

We added order subscriptions to the list of [exportable resources](/core/exporting-resources.md#supported-resources). Now you can [create exports](/core/exporting-resources.md#exporting-a-list-of-order-subscriptions-with-order-subscription-items-and-customer-payment-source-js) that include order subscription together with the associated order subscription items and customer payment source. On top of that, we also made the `place_target_order` option [updatable](/core-api-reference/order_subscriptions/update.md) at the order subscription level.
{% endupdate %}

{% update date="2024-03-21" tags="metrics-api" %}

## Enabled full-text search on order's aggregated details

Now you can leverage a new attribute on the order field. `aggregated_details` contains all the order data, on which you can perform a [full-text search](/metrics/getting-started/filters.md#aggregated-details) using the dedicated `query` operator. On top of that:

* We've added the `archived_at` to the order `date_field` available values and the `archived` attribute on the order field so that you can easily [search for archived orders](/metrics/getting-started/use-cases/latest-archived-orders.md).
* We've removed the 1-year limit on the [time window](/metrics/getting-started/filters.md#date-filters) within which you can request to extract your metrics.

Check the [Use cases](/metrics/getting-started/use-cases.md) 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="2024-03-20" tags="auth-api" %}

## Introducing our new Authentication API

{% hint style="danger" %}
We've migrated the whole authentication process to our new [Authentication API](/core/authentication.md), as detailed in the related section of the documentation. At the moment both the old and new ways of authenticating are supported, but the legacy endpoints, scope syntax, and SSO using a custom org-specific secret key are deprecated and will be dismissed **by the end of October 2024**. Make sure to [update your integration](/core/authentication/how-to-migrate.md) in time to avoid any issues.
{% endhint %}

The main changes concern:

* A new [auth endpoint](/core/authentication.md#authentication-endpoint).
* A new syntax for [including scopes](/core/authentication.md#authorization-scopes).
* An additional authentication flow that enables token exchange in the [on-behalf-of](/core/authentication/jwt-bearer.md) (delegation) scenario.
* The possibility to [revoke](/core/authentication/revoking-a-token.md) any kind of token.

To learn more, check the [documentation](/core/authentication.md) and read our blog [here](https://commercelayer.io/blog/improve-security-and-user-management-with-our-authentication-api).

{% embed url="<https://commercelayer.io/blog/improve-security-and-user-management-with-our-authentication-api>" %}
{% endupdate %}

{% update date="2024-03-15" tags="provisioning-api" %}

## Added organization config

We've enabled the option to specify a [basic configuration](https://docs.commercelayer.io/provisioning/api-reference/organizations#micro-frontends-configuration) for Micro frontends and open-source apps (e.g. [Cart](https://github.com/commercelayer/mfe-cart), [Checkout](https://github.com/commercelayer/mfe-checkout), [Identity](https://github.com/commercelayer/mfe-identity), [My account](https://github.com/commercelayer/mfe-my-account), [Microstore](https://github.com/commercelayer/mfe-microstore)) at the organization level, via our [Provisioning API](https://docs.commercelayer.io/provisioning/). At the moment this feature is limited to the MFEs URL format and the Checkout app setup and will be progressively extended. You can specify the default values and possibly override them in a granular way (e.g. by market).
{% endupdate %}

{% update date="2024-03-14" tags="my-account" %}

## Added new subscriptions section in `v1.4.1`

We've introduced the [Subscriptions](https://github.com/commercelayer/mfe-my-account?tab=readme-ov-file#subscriptions) section where customers can see their subscription history and a detailed page for each subscription. If the subscription cannot be renewed (e.g. due to an expired payment method), the customer is presented with a link to place the order with a valid payment method, thereby updating the payment information for future transactions.
{% endupdate %}

{% update date="2024-03-13" tags="checkout" %}

## Added the possibility to amend an order subscription payment source in `v4.7.0`

We've introduced the ability to [place a target order](https://github.com/commercelayer/mfe-checkout?tab=readme-ov-file#order-subscription) (created by an active [order subscription](https://github.com/commercelayer/mfe-checkout?tab=readme-ov-file#order-subscription)) even when the payment source is missing or is no longer valid. Once the order is paid the new payment source will be saved in the customer's wallet and the order subscription will be updated with the new payment source automatically.
{% endupdate %}

{% update date="2024-03-12" tags="core-api" %}

## Ensured non-editable attributes preservation during order placement, and more

Be advised that we introduced a potential <mark style="color:red;">**breaking change**</mark> <mark style="color:red;">⚠️</mark> by refining the [non-editable attributes](/core-api-reference/orders.md#non-editable-attributes) check during the order placement. Altering those attributes during the order's placement process is not permitted, since they can trigger collateral effects and cause an inconsistent order status. Now, if try to edit them when you patch the order passing the `_place` trigger attribute no error is raised (to guarantee the order's placement), but the changes are silently ignored. On top of that, we added some minor updates to our APIs:

* [Shipments](/core-api-reference/shipments.md) — we exposed a new virtual relationship on the [shipment object](/core-api-reference/shipments/object.md) that you can leverage to get all the line items included in the shipment (both the ones associated with stock line items and stock transfers).
* [Webhooks](/core/real-time-webhooks.md) — we added two new [events](/core/real-time-webhooks.md#supported-events) that you can leverage to [be notified](/how-tos/placing-orders/subscriptions/generating-the-subscriptions.md#managing-failed-subscriptions) when the last run of an order subscription has succeeded or failed.
  {% endupdate %}

{% update date="2024-03-07" tags="core-api" %}

## Introduced circuit breaker for all external resources, and more

Now all Commerce Layer [external resources](/core/external-resources.md) are subject to a [circuit breaker](/core/external-resources.md#circuit-breaker) check. If the call to your external endpoint fails consecutively more than **30** times, the circuit breaker opens and any further request to the resource will be skipped. The circuit is automatically reset anytime a call to your external endpoint succeeds before reaching the counter's threshold. You can check the circuit breaker's current status by fetching some new specific attributes, and/or [reset it manually](/core/external-resources.md#resetting-the-circuit) via trigger. On top of that, we added some minor updates to our APIs:

* [External promotions](/core-api-reference/external_promotions.md) — now you can distribute the external promotion discount only on specific line items by adding their IDs to the [response](/core/external-resources/external-promotions.md#response) sent by your external service.
* [Promotions](/core-api-reference/promotions.md) — now you can [filter](/core-api-reference/promotions/list.md#filterable-fields) promotions also by type.
* [Customer payment sources](/core-api-reference/customer_payment_sources.md) — now you can [filter](/core-api-reference/customer_payment_sources/list.md#filterable-fields) customer payment sources also by payment source token.
* [Adjustments](/core-api-reference/adjustments.md) — as recently done for [gift cards](#added-option-to-not-distribute-gift-card-discount-for-tax-calculation-and-more), now you can leverage a specific attribute to prevent negative adjustment amounts from being distributed as discounts on all the taxable items of the order.
  {% endupdate %}

{% update date="2024-02-28" tags="core-api" %}

## Added option to not distribute gift card discount for tax calculation, and more

Now you can leverage a specific attribute at the single [gift card](/core-api-reference/gift_cards.md) level to prevent the total discount due to gift cards used to pay for an order from being distributed on all the taxable items of the order. On top of that, we added some minor updates to our APIs:

* [External promotions](/core-api-reference/external_promotions.md) — now the currency code is no longer required to create external promotions which can be applied across all currencies.
* [Stock transfers](/core-api-reference/stock_transfers.md) — now, when stock transfers become upcoming the related stock is no longer decremented. Instead, the necessary stock reservations are created to eventually allow [order editing](https://docs.commercelayer.io/core/v/api-reference/orders#order-editing) (the stock will be then actually decremented when the stock transfer is completed).
  {% endupdate %}

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

## Asynchronous order placement and new resource errors endpoint

Now you can decide to place your orders [asynchronously](/core-api-reference/orders.md#asynchronous-order-placement) by setting the related flag at the order level. In this scenario, if the order passes a subset of the synchronous standard validations it's momentarily moved to a new `placing` status where additional validations are performed (e.g. stock availability, coupons validity, etc.) before moving it through the next steps of its lifecycle. You can also check for errors that might keep an order stuck in placing by fetching the new [resource errors](/core-api-reference/resource_errors.md) endpoint, which will store until order approval not only any errors that occurred during the attempt to place an order (both synchronously and asynchronously), but also the ones coming from external validations, failed subscriptions, and more.
{% endupdate %}

{% update date="2024-02-15" tags="core-api" %}

## New split by line items inventory strategy

We added a new [inventory strategy](/how-tos/inventory/strategies.md) to the list of available ones. Now you can leverage the [split by line item](/how-tos/inventory/strategies/split-by-line-items.md) strategy by setting the related attribute accordingly at the inventory model level. This way, at least a separate shipment will be automatically created per each line item of the order. Please note that this new strategy only works for SKUS: if an order contains bundles, all the shipments and stock will be still managed by using the [split shipments](/how-tos/inventory/strategies/split-shipments.md) strategy as a fallback.
{% endupdate %}

{% update date="2024-02-14" tags="core-api" %}

## Enabled auto-place option for Stripe, and more

Now you can set an auto-place option at the [payment method](/core-api-reference/payment_methods.md#placement-options) to ensure your orders are automatically placed upon authorization performed asynchronously (at the moment, available for [Stripe](/how-tos/placing-orders/payments/stripe.md) gateways only). On top of that, we added some minor updates to our APIs:

* [Promotions](/core-api-reference/promotions.md) relationships — now, when creating a new promotion or updating an existing one, you can create or update the associated SKU list, but you can't create or update the associated coupons and promotion rules anymore.
* [Shipments](/core-api-reference/shipments.md#manual-shipments-management) — now you can manually create or update shipments even when the associated order is fulfilled.
* [Returns](/core-api-reference/returns.md) — now you can create or update returns even when the associated order's fulfillment is in progress.
  {% endupdate %}

{% update date="2024-02-07" tags="micro-frontends" %}

## Cart express checkout buttons available in JS Drop-in `v2.1.0`

The [Cart component](https://commercelayer.github.io/drop-in.js/?path=%2Fdocs%2Fcomponents-cart-cl-cart--docs) of our [JS Drop-in library](https://github.com/commercelayer/drop-in.js) now supports express checkout buttons for both Apple Pay and Google Pay via Stripe. We improved also the [Availability component](https://commercelayer.github.io/drop-in.js/?path=/docs/components-availability-cl-availability--docs) by adding the rule prop that enables you to choose which delivery lead time to display (one of the cheapest or the fastest).

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.1.0).
{% endupdate %}

{% update date="2024-02-01" tags="cli" %}

## New Provisioning plugin

`v1.0.0` of our [Provisioning CLI plugin](https://github.com/commercelayer/commercelayer-cli-plugin-provisioning) is out! Now you can use Commerce Layer Provisioning API (performing all the available CRUD actions on all resources and more) directly 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-provisioning/blob/main/README.md).
{% endupdate %}

{% update date="2024-01-31" tags="js-sdk" %}

## TypeScript SDK for Provisioning API

We just released `v1.0.0` of our [Provisioning SDK](https://github.com/commercelayer/provisioning-sdk), an open-source TypeScript library wrapper that makes it quick and easy to interact with Commerce Layer [Provisioning API](https://docs.commercelayer.io/provisioning/), both in browser and Node.js applications. The TypeScript SDK is built on top of the [Provisioning OpenAPI schema](https://data.commercelayer.app/schemas/provisioning/openapi.json), which you can use as well to to build mock servers, auto-generate code, SDKs for other languages, implement contract testing, and more.
{% endupdate %}

{% update date="2024-01-30" tags="provisioning-api" %}

## Introducing our new Provisioning API

We've released our [Provisioning API](https://docs.commercelayer.io/provisioning/), which now enables Commerce Layer clients to manage provisioning tasks (such as organization creation, API credentials, memberships, roles and permissions management, etc.) programmatically instead of manually and exercise greater control over your organizational structure and user onboarding.

You can find the credentials to access the Provisioning API together with your account settings in the Dashboard.

To learn more, check the [documentation](https://docs.commercelayer.io/provisioning/) and read our blog [here](https://commercelayer.io/blog/streamline-operations-with-new-provisioning-api).

{% embed url="<https://commercelayer.io/blog/streamline-operations-with-new-provisioning-api>" %}
{% endupdate %}

{% update date="2024-01-25" tags="dashboard" %}

## Added the new Stock Transfers app to the dashboard hub

As part of our new Dashboard renovations, we've released a new Stock Transfers application to help you manage [stock transfers](/core-api-reference/stock_transfers.md) whenever your orders require one, allowing you to maintain a distributed inventory model without disrupting demand. You are now able to check all the key information behind each stock transfer and control their transition from one status to another. Click on the *Hub* tab and see it for yourself!

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

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

{% update date="2024-01-24" tags="dashboard" %}

## Added the editing feature to the Orders app

You can now leverage the [order editing](/core-api-reference/orders.md#order-editing) feature — previously available via API only — also from the Orders app of the Dashboard, being able to edit orders (e.g. adding or removing items, coupons or gift cards, adjustments, etc.) after placement (and before approval).
{% endupdate %}

{% update date="2024-01-11" tags="core-api" %}

## Added option to manually decrement stock after order approval

Now you can override the default API behavior (automatic stock quantities decrementation and stock reservations cancellation at order approval) by setting a simple flag on the [inventory model](/core-api-reference/inventory_models.md#manual-stock-decrementation). That lets you manually manage those actions at any time after the order approval by leveraging the trigger attributes exposed at the [shipment](/core-api-reference/shipments.md#manual-stock-management) and/or at the [stock line item](/core-api-reference/stock_line_items.md#manual-stock-line-items-management) level.
{% endupdate %}
{% endupdates %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.commercelayer.io/changelog/2024.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
