ChannelEngine: multiple warehouses and stock locations
About this article
This article describes ChannelEngine's support for multiple stock locations, how to enable it, and how to configure it.
Table of contents
Enable the stock locations feature
Configure the stock locations feature
View stock per product per stock location
Update different stock locations via the API
Introduction
If you have stock locations spread across different countries (e.g.: a Dutch warehouse and a Belgium warehouse), in different locations within a single warehouse (e.g.: shelf A and shelf B in the same location), or even different parts of the same country (e.g.: different states in the United States), you can benefit from ChannelEngine's multiple stock locations feature.
With it, you can configure stock in multiple locations and allocate it accordingly. This feature allows you to set up rules to define the default behavior when stock is depleted in one of your locations, and automatically allocate inventory from a specific location to fulfill your orders.
Limitations
The following setups are currently out of scope:
- Marketplaces with sales channels - unlike country-specific marketplaces, such as Amazon Italy or bol Belgium, marketplaces with support for sales channels are not supported. E.g.: several Mirakl-based marketplaces (e.g.: Alltricks, Decathlon), Zalando, etc.
- Merchant plugins - BigCommerce, Adobe Commerce (née Magento), Shopify, WooCommerce, etc. If you want to use multiple stock locations in combination with a merchant plugin, you need to opt out of stock updates via the plugin. To do so, disable the Update stock on product import setting under Advanced settings of the plugin Setup page.
-
Orders with multiple acknowledgments - orders acknowledged by more than one party, such as your main stock location and an external warehouse managed by your logistics partner, are not supported – unless you centralize the acknowledgment of your orders via an ERP, OMS, or WMS.
NB: while it is not possible to use this feature on marketplaces with sales channels to fulfill from different stock locations, it is possible to use it to aggregate stock divided across multiple stock locations.
Flow - not supported
In the scenario below, one order line is acknowledged by the merchant's warehouse, while the other is acknowledged by a third-party warehouse. This flow is not supported, but the same setup does support orders with a single order line.
Flow - supported (multiple order lines)
In the scenario below, one order line is acknowledged by the merchant's warehouse, while the other is acknowledged by a third-party warehouse. Crucially, these acknowledgements are centralized through a merchant system (e.g.: ERP). This flow is supported.
Enable the stock locations feature
To enable the feature on ChannelEngine, reach out to ChannelEngine's Support team to activate the Use order routing with multiple stock locations setting.
Note that this feature only works in combination with feeds and/or an API connection – and not with merchant plugins, such as Magento, PrestaShop, etc. If you enable the stock locations feature in an environment with an active merchant plugin, ChannelEngine checks if the Update stock on product import setting is enabled in that plugin. If so, ChannelEngine disables the setting to avoid stock synchronization issues between the plugin and the stock locations feature.
Configure the stock locations feature
Once the stock locations feature is enabled, you can configure it by going to Products, Stock locations. If you do not see that option, log out and then log back in to ChannelEngine.
You are then presented with an overview of your existing stock locations, showing their names, the country where they are based, whether they are the default or they fall back to the default, and a few associated actions.
Add a stock location
To add a stock location:
- Click the Add button at the bottom of the overview.
- In the popup that appears, enter a name for the stock location. You can set it as the default by ticking the Default stock location box. Or you can set it to fall back to the default once the stock allocated to it is depleted by selecting the Fallback to default box.
- Although you do not have to provide the full address of the stock location, you do need to select a country.
- When you are done, click Add to save the stock location.
StockLocationId
. Replacing a stock location by deleting it and creating a new one will always result in a new ID.Order routing
When working with different stock locations, you can use predefined business rules that assign incoming orders to specific stock locations.
To add an order routing on ChannelEngine:
- In the left-hand side menu, click Orders, Routing. Then, click the Add button.
- In the Add: Order routing dialog box, enter information in the following fields:
- Name - the order routing’s name.
- Select channels - click the dropdown box to select the marketplaces that apply to this routing. Note that you can only select marketplaces that are not already active in other routings. Marketplaces are grouped according to how they handle order lines.
- Select stock locations - the stock locations you want to use. The combined stock of the selected locations, minus the reserved stock, is then exported. If you make use of the Amazon MCF plugin, you can select a stock location with a 'blank box' indication, which ensures that your orders are fulfilled in unbranded packaging.
- Click Next.
- You can now set up the conditional rules for your routing, following a structure similar to ChannelEngine’s Product selection page. These rules are applied when orders are imported into ChannelEngine. You can filter on fields from order fields (e.g.: Shipment region, Delivery country, GTIN, etc.), as well as ChannelEngine’s default product data and custom attributes.
NB: shipment regions must be abbreviated. E.g.: New Jersey = NJ, Massachusetts = MA.
- Select the stock location(s) desired.
- Click Add to save the order routing. Order routing rules are applied to new orders.
NB: once established, it is not possible to change the order of your routings. However, you can choose a different order routing as your default one by clicking Set as default.
Stock routing rules
You can configure routing rules which can apply to the same order, provided the specified conditions are met. In order to avoid conflicts, routing rules are applied top-to-bottom, meaning the first rule in the list that correctly applies is used to route the order. You should, therefore, pay particular attention to the order of your routings, particularly because this order cannot be changed after it is created.
For example, you have created the following two rules:
- If delivery country is equal to Belgium, use (stock location) Belgium.
- If brand contains Sony, use (stock location) Germany; or
- Default value = Default warehouse.
The logic for this set of rules is as follows:
- If an incoming order has the delivery country Belgium, the stock is routed from the stock location named Belgium.
- If an incoming order has the delivery country Netherlands, but the brand of the item is Sony, the stock is routed from the stock location named Germany.
- If an incoming order has the delivery country Netherlands, but the brand is not Sony, the default warehouse location is used.
Map a stock location
To map different stock quantities to each stock location configured, go to Products, Product feeds, click the pencil icon by a feed, and scroll to the bottom of the page to Stock locations. Each of the stock locations configured can be mapped to a different stock attribute, according to the allocation available in your feed.
Once you map your stock locations to your stock attributes, the stock quantity per location becomes visible. Note that if you go to the products overview, the stock shown per product is the Overall stock (i.e.: aggregated) – not the stock for a specific stock location.
View stock per product per stock location
To see a breakdown of the stock per product per location:
- On the left panel on ChannelEngine, go to Products, Products.
- Select a product for which you want to view the stock per stock location.
- On the Product details page, scroll down to the Stock locations section. You are presented with an overview of the stock locations and the corresponding stock.
Update different stock locations via the API
To update your stock per stock location via the API:
- Retrieve your StockLocationId via the
GET /v2/stocklocations
endpoint. - Update the stock for each specific location via the
PUT /v2/offer/stock
endpoint. E.g.:
[ {
"MerchantProductNo": "ABCDE12345",
"Stock": 15,
"Price": 25,
"StockLocationId": 35
} ]
Using the old /v2/offers endpoint
Although it is technically possible to continue using the /v2/offers
endpoint in your integration, which does not include the StockLocationId, this is not recommended – especially if you also use a product feed to update your stock.
In general, if your integration is still using the /v2/offers
endpoint, you should use a single location when making calls.
The examples below cover three possible scenarios, with the default stock location indicated by an asterisk:
Scenario 1
-
Location 1* - stock updated via
PUT /v2/offers
. - Location 2 - stock updated via a product feed.
- Location 3 - stock updated via a product feed.
ChannelEngine updates Location 1, but not locations 2 and 3.
Scenario 2
-
Location 1 - stock updated via
PUT /v2/offers
. - Location 2* - stock updated via a product feed.
- Location 3 - stock updated via a product feed.
ChannelEngine updates Location 2 when importing the product feed and when receiving an API call. Location 1 is not updated.
Scenario 3
-
Location 1* - stock updated via
PUT /v2/offers
. -
Location 2 - stock updated via
PUT /v2/offers
. - Location 3 - stock updated via a product feed.
If the StockLocationId is not specified, ChannelEngine only updates Location 1.
For more information on how to update different stock locations via the API, check out the API reference.
Delete stock locations
If a stock location is not assigned to a marketplace or order routing, you can delete it via ChannelEngine's web interface. Currently, it is not possible to delete it via the API.
Comments
0 comments
Article is closed for comments.