2024
Commerce Layer changelog for software updates, new features, and general improvements.
Last updated
Was this helpful?
Commerce Layer changelog for software updates, new features, and general improvements.
Last updated
Was this helpful?
We've just released a huge bunch of improvements mostly related to our . The big news is that now exports are extended to exposed via API, allowing the inclusion of . We also introduced the ability to 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:
— 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.
— 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.
— we expose the relationship with the associated orders.
— we added the option to and complete an order copy regardless.
In addition to aligning our to the latest updates and enabling login to our Dashboard with SSO, we improved the access token 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 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 breaking change). ⚠️
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 to benefit from an improved user experience and more and more new features.
Sounds interesting? Learn more about the vision behind Links on our blog. Then sign up or log in, try to create a Link to a checkout page from an order or to a microstore from an SKU or SKU list, and feel free to share your feedback!
Billing info validation rules — we deprecated and removed from the API reference the related endpoint. This could be a potential breaking change. ⚠️
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.
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.
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.
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 to benefit from an improved user experience and more and more new features.
Sign up or log in to see for yourself and feel free to share your feedback!
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 or log in, enter the App section, and try it out!
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
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 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.
The old Admin Area will be sunset by the end of 2024. If you haven't yet, try out and start using the Dashboard to benefit from an improved user experience and more and more new features.
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.
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 or log in to see for yourself and feel free to share your feedback!
v1.2.1
We added an optional parameter you can add when composing the Identity MFE URL to enable a custom reset password 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.
We introduced a bunch of minor (but still relevant) updates to our APIs:
Order validation rules — we deprecated and removed from the API reference the related endpoint. This could be a potential breaking change. ⚠️
We introduced a bunch of updates to our APIs — be advised that some of them could result in potential breaking changes ⚠️:
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.
We introduced a bunch of minor (but still relevant) updates to our APIs:
v2.4.0
The Add to cart and Price components of our JS Drop-in library 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. The list of the custom events dispatched by the library has also been updated accordingly.
To learn more and see our micro frontends in action, explore the interactive documentation. For any additional details or potential breaking changes, see the release notes.
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 or log in to see for yourself or read more on our blog!
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 — 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 — you can manage (create, delete, edit, search, filter) your SKUs, along with adding their shipping info and options.
SKU Lists — you can create new SKU lists or edit existing ones by adding or removing SKU list items.
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 — 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!
v2.3.0
The Add to cart component of our JS Drop-in library now supports automatic subscriptions based on line item frequency. Starting from v2.3.0
, we also took the opportunity to align the library with the recent changes to the authentication process using the new Auth API.
To learn more and see our micro frontends in action, explore the interactive documentation. For any additional details or potential breaking changes, see the release notes.
v4.10.0
The possibility to set a custom thank you page URL.
The possibility to configure a custom list of countries and/or 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.
Our JS Auth library is now aligned with the recent changes to the authentication process and uses the new Auth API. Be advised that v6.0.0
introduces potential breaking changes ⚠️ — in detail:
The JWT bearer flow is now supported (this feature is available for Enterprise users only).
We added a revoke
method to revoke any previously generated access token.
We added a helper method to decode any kind of access token.
Check the release notes for more info.
The main changes concern:
We've introduced the 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.
v4.7.0
We've introduced the ability to place a target order (created by an active 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.
v2.1.0
The Cart component of our JS Drop-in library now supports express checkout buttons for both Apple Pay and Google Pay via Stripe. We improved also the Availability component 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. For any additional details or potential breaking changes see the release notes.
v1.0.0
of our Provisioning CLI plugin 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.
We just released v1.0.0
of our Provisioning SDK, an open-source TypeScript library wrapper that makes it quick and easy to interact with Commerce Layer Provisioning API, both in browser and Node.js applications. The TypeScript SDK is built on top of the Provisioning OpenAPI schema, which you can use as well to to build mock servers, auto-generate code, SDKs for other languages, implement contract testing, and more.
You can find the credentials to access the Provisioning API together with your account settings in the Dashboard.
To learn more, read our blog here.
We just added a new entry to the roster of our Provisioning API endpoints. allow Enterprise users to authenticate themselves to the Commerce Layer Dashboard using a single set of credentials, thus enabling (SSO).
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 breaking change involving the SKU code RegEx of and , and the country, state, and ZIP codes RegEx of and . On top of that, in the past few days we released the following minor (but still relevant) updates to our APIs:
— 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.
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 . 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!
The 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.
We've just added a new entry to the roster of our commerce API endpoints. You can leverage 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:
— we added the relationship with the payment source for all the transaction types (, , , and ).
— 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.
— we added the profile_id
attribute, that you can leverage to uniquely identify the customer on any connected external services.
— we added the :
symbol as an allowed character for tag names.
We've just released publicly our , 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 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 is computed taking into consideration the store's stock location (if any) first, and the are updated accordingly.
Check the and have a look at the data model for more information.
Promotions — Now you can create directly from the Promotion App (closed beta feature, active for selected enterprise organizations only).
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 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:
— now the payload also includes the shipments associated with the order together with the related shipping method.
— 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.
— now you can give the same name to SKUs identified by different SKU codes. We also expose the and relationships.
— now we also expose the and relationships.
— now also stock transfers support .
— we added the order number information to the usage log.
As part of our new Dashboard renovations, we’ve released a new Gift Cards application to help you manage 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.
We introduced two additional attributes you can set to manage 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:
— now you're also allowed to cancel pending orders (not only placed or approved ones).
— now you can manage at the market level by defining the maximum of shipping line items of the order that will be charged.
— now you can also the line items options amount (you need to use API credentials).
— we added two new events to our so that you can get notified about failures and issues regarding tax calculation and external promotions.
We added the client ID of the application used to generate the for any kind of token issued by our . We also updated the issuer information. You can find an example of the updated token's payload structure .
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:
— now, in case of , any active 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
).
— now you can the associated item when exporting line items and the associated origin address, shipping address, and parcels when exporting shipments.
— now the name of the payment method is .
— now you can check the Adyen Checkout API version when fetching an Adyen gateway.
— we added reserved stocks to the list of resources.
The endpoint isn't read-only anymore. Now you can , , and 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:
— now you can also the reserved stock and the related stock location when exporting stock items.
We introduced the new _forward
trigger attribute for all types of transactions (, , , and ). 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.
Now you can 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:
— now you can 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 . The use of the matching_line_items
key is deprecated. ⚠️
— now you can cancel also packing and ready-to-ship shipments by leveraging the new _cancel
trigger attribute (you need to use API credentials).
— now you can cancel partially refunded orders without creating any further transactions.
— 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. ⚠️
— we added order subscriptions to the list.
— we added order subscriptions to the list of resources we include in the we send to external payment gateways to avoid useless API roundtrips.
— we remove the uniqueness constraint on SKU names. Now you can give the same name to SKUs with different SKU codes.
Now you can decide to show the customer payment sources saved from the native Adyen Drop-in library instead of the ones by setting to true
the new boolean attribute native_customer_payment_sources
at the level (the feature is already available on our AdyenPayment
React Component and will be soon added to our hosted Checkout too). On top of that, we released some other updates to our APIs:
— 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.
— we update the list of relationships you can sort each resource by. You can find it in the of each resource by checking the List all section (e.g. ).
— we removed the expires_at
attribute, make sure to update your integration accordingly in case you were leveraging it somehow. ⚠️
— for performance reasons, now resource errors are limited to a buffer that stores the latest 10 errors per order. ⚠️
— now you can add to stock transfers too.
— we added the new delivered
status to the shipment lifecycle. You can now leverage the related trigger attribute _deliver
and . On top of that, now the number of a shipment can be .
— 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 .
— now you can turn an existing order subscription into an one by sending the _covert
trigger attribute, provided that you previously defined a subscription model for the associated market.
— now you are allowed to specify also some attributes that normally are not updatable (such as the order, payment, and fulfillment status) when that you want to archive.
— 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.
— now the number of a stock transfer can be set at or time.
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 . set a time frame within which their 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:
— 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 API credentials.
— we exposed the status of the promotion (e.g. expired
, pending
, active
, inactive
, or disabled
) for all the promotion types.
Be advised that we introduced potential breaking changes ⚠️ by disabling on imports, meaning that the related events are no longer fired when creating/updating resources . 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:
— now you can optionally define a custom alphanumeric code
for your customer groups (similarly to what you could already do for , , and ).
— stock transfers are now both and .
— 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. ⚠️
We've released the newest version of our Dashboard, now built completely with React. It now leverages the power of our and 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:
We doubled the number of allowed . Now you can define up to a maximum of 10 tiers in total (no matter what type) per .
We updated the list of our with a new event that you can leverage to about upcoming recurring orders associated with subscriptions once you've properly set the renewal_alert_period
at the level. On top of that, we added some minor updates to our APIs:
— now all promotion types can be filtered by priority.
We introduced the new _validate
trigger attribute at the level. We recommend passing it for each input when updating stock item quantities 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:
— we changed the SKU options' : now you can import SKU options using only name and currency code.
— Now you can returns even if the associated order's fulfillment status is unfulfilled
.
Leveraging the recent new feature introduced on the Provisioning API in terms of adding default and market-specific settings at the level, we've started using those config parameters to enhance the flexibility of our hosted applications. The Checkout app now supports:
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 with our new . Read it on our blog and/or check the code in the Examples repository.
The library now uses the and both the and authentication methods have been unified into the new authenticate
one. ⚠️
The (including the additional feature to use the code instead of the ID) is now used.
We added order subscriptions to the list of . Now you can 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 at the order subscription level.
Now you can leverage a new attribute on the order field. aggregated_details
contains all the order data, on which you can perform a 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 .
We've removed the 1-year limit on the within which you can request to extract your metrics.
Check the section of the Metrics API documentation for some examples and the public Postman collection to see it in action!
We've migrated the whole authentication process to our new , 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 in time to avoid any issues.
A new .
A new syntax for .
An additional authentication flow that enables token exchange in the (delegation) scenario.
The possibility to any kind of token.
To learn more, check the and read our blog here.
We’ve enabled the option to specify a basic configuration for Micro frontends and open-source apps (e.g. Cart, Checkout, Identity, My account, Microstore) at the organization level, via our . 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).
Be advised that we introduced a potential breaking change ⚠️ by refining the 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:
— we exposed a new virtual relationship on the 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).
— we added two new that you can leverage to when the last run of an order subscription has succeeded or failed.
Now all Commerce Layer are subject to a 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 via trigger. On top of that, we added some minor updates to our APIs:
— now you can distribute the external promotion discount only on specific line items by adding their IDs to the sent by your external service.
— now you can promotions also by type.
— now you can customer payment sources also by payment source token.
— as recently done for gift cards, 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.
Now you can leverage a specific attribute at the single 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:
— now the currency code is no longer required to create external promotions which can be applied across all currencies.
— 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 (the stock will be then actually decremented when the stock transfer is completed).
Now you can decide to place your orders 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 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.
We added a new to the list of available ones. Now you can leverage the 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 strategy as a fallback.
Now you can set an auto-place option at the to ensure your orders are automatically placed upon authorization performed asynchronously (at the moment, available for gateways only). On top of that, we added some minor updates to our APIs:
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.
— now you can manually create or update shipments even when the associated order is fulfilled.
— now you can create or update returns even when the associated order's fulfillment is in progress.
We’ve released our , 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.
To learn more, check the and read our blog here.
As part of our new Dashboard renovations, we’ve released a new Stock Transfers application to help you manage 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!
You can now leverage the 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).
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 . That lets you manually manage those actions at any time after the order approval by leveraging the trigger attributes exposed at the and/or at the level.