How can I upload inventory if I have more than one POS, WMS, or other sources of truth for inventory?
- Prepare a
.csvfile with the inventory details.
- Create a URL by using the bulk operation endpoint
- Upload the
.csvfile to the URL.
Counters are inventory positions, such as on-hand, allocated, shipped, and other customized positions. The types of counters are:
Base Counter: Base counters refer to
Shipped, and any other custom counters that are created using the counter endpoint. Allocated counters are automatically calculated during the order workflow. Merchants can update all base counters, except
Allocated, by using the following endpoints:
- Adjustment endpoint (
POST/v3/inventories/actions/find-and-adjust-inventory-counters): Adjusts the counter quantity. Using this endpoint, you can only adjust the counter quantity, not other inventory details. You can increase or decrease the counter quantity by specifying the required quantity in the payload. For example, if the original counter quantity is 100 and you want to increase the quantity to 110, set the counter quantity as '+10' in the payload. The counter quantity is now updated to 110.
- Update inventory endpoint(
POST/v3/inventories/action/find-and-update): Updates counter quantity and other inventory details.
- Adjustment endpoint (
Virtual Counter:. Virtual counters refer to the counters available to purchase,
availableToPurchase, which are calculated or updated during the order workflow. When an order is placed, the Order Management System (OMS) automatically allocates the order for shipping. After the order is allocated and shipped, the counters available to purchase is calculated based on the formula
fabric’s REST APIs are protected with OpenID Connect (OIDC) and the identity introspector mechanism. In OIDC, identity information is communicated using JSON Web Tokens (JWTs). The data in fabric is stored in both MongoDB and S3. The MongoDB data is isolated per tenant in fabric Orders (also called OMS). You must create an AWS Config rule to ensure that the AWS S3 Bucket does not have public access. For example, one should not be able to run the following command:
Whenever data is requested, fabric will generate a S3 presigned URL to ensure secure access.
The primary use case for fabric Inventory is to prevent overselling during transactions by providing real-time inventory data via REST API and event-driven integrations, for the storefront and other downstream applications to accurately display available products for sale.
fabric Copilot is the Graphical User Interface where users may log in to manage their data via interactive web pages. Copilot provides an easy way for users to manage recurring operational workflows such as updating data where the solution architecture requires manual intervention. Copilot is also an easy way for implementation specialists to manage test data creation, updates, and configurations.
fabric’s Inventory service provides over 30 OpenAPI 3.0 compliant REST API endpoints, documented under the API Reference at https://developer.fabric.inc/v3/reference/about-inventory, for users to manage data. These APIs are the same ones utilized in Copilot and can be integrated into the retailers enterprise systems such as the storefront, inventory management systems, search, marketing platforms, and more. Not all APIs are available in Copilot, and some are required to make use of fabric Inventory in the expected utilization of getting inventory in real-time from the storefront for use cases such as Ship-to-home, Omnichannel, and 'Buy Online Pickup In-Store' order placement.
fabric’s Inventory module is typically packaged with fabric Orders (also called OMS). It provides enterprise-level inventory visibility with network aggregation and enables updating of order fulfillment logic without coding.
To get started using fabric’s Inventory module, follow these steps:
- Sign up or log in to your fabric account.
- Get an access token from fabric Copilot or using the fetch access token endpoint.
- Familiarize yourself with the core concepts such as Location, Inventory, Network, Counter, Virtual Counter, and other available features and options as described in the guide.
- Import or add your initial inventory data.
- Set up any additional configurations or preferences specific to your needs.
Counters, also called base counters, refer to inventory positions such as onHand, Allocated, Shipped, and any other counters that are configured using the counter endpoint. These values can be updated via the Inventory detail page in fabric Copilot or using the adjustment endpoint- POST/v3/inventories/actions/find-and-adjust-inventory-counters. This lets you increase or decrease the counter quantity, but it does not allow you to change other inventory details. Alternatively, you can use the update inventory endpoint- POST/v3/inventories/action/find-and-update, which allows you to update both the counter quantity and other inventory details.
Virtual counters refer to the aggregation of real-time inventory availability. The inventory virtual counters are viewable on the inventory landing page in fabric Copilot. Their calculation from counters is configured in the virtual counter calculation. Basically, these are computed from counters at runtime. For example, availableToPurchase = onHand - allocated - shipped.
For most retailers with a warehouse, point of sale, or other inventory source of truth system, the first step to begin using fabric Inventory (after generating your access token) is importing your inventory. As a user of fabric Inventory, you should integrate your one or many inventory systems of record, such as WMS, ERP, or POS, with fabric Inventory. This allows fabric Inventory to manage a SSOT ('Single Source of Truth') for reference of inventory in your commerce applications including storefronts, search functionalities, and other areas within your ecommerce solution architecture.
Single Inventory Management System
If retailers have a single system of record for inventory, the inventory-import process doesn't require any configuration for multiple file groups. If retailers don't have a need to manage inventory aggregation, order fulfillment, or location data in fabric OMS (also called Orders), they can start importing inventory against the default location using the Import API. To import your inventory data to fabric, you must upload a CSV file with all inventory details. You can download sample CSVs from Copilot within the inventory import modal, for your reference.
Multiple Inventory Management Systems
If retailers have multiple systems of record for inventory, they can utilize the "file groups" feature to configure their inventory feeds in fabric. This feature ensures that inventory updates are limited to the specific group of locations corresponding to the inventory system performing the upload
Inventory updates in real-time with event-driven data streaming
If retailers want a more real time approach than relying solely on CSV-driven bulk imports, we recommend to directly update inventory levels on a single-inventory basis using the update inventory API. To create or update inventory, you must provide the necessary fields including SKU, item ID, location, channel ID, and counters. If you are exclusively using the fabric Inventory module without the fabric Orders (OMS) module, you must manually update the reserved, allocated, and shipped counter quantities as orders are fulfilled.
For retailers with distributed inventory, fabric Inventory is an optimal solution for effectively managing the aggregation of real-time inventory into a Single Source of Truth (SSOT). For each location you want to manage inventory for, a location with a unique location number must exist. In addition, you can configure networks of locations sharing inventory using Network APIs.
For testing purposes, fabric Inventory is pre-configured with a default location where all inventory is initially assigned. To manage inventory for each specific location, it is necessary to have a unique location number to every SKU during bulk upload. You can configure networks of locations that share inventory, by using the Networks interface.
Inventory aggregation rules can vary from simple to very complex. This is possible through the Network service of fabric’s Inventory module, which facilitates a real-time inventory aggregation functionality.
If you manage inventory aggregation in an external system and do not plan to manage it within fabric, or if you do not have complex distributed fulfillment and inventory requirements, then the Simple Aggregation approach within fabric Inventory's Network feature may be suitable for your usage.
Your default network configuration is simple and requires no additional configuration to automatically aggregate all inventory in your “Sandbox” environment instance of fabric. This is possible because the rules in your default “starter” Network contains a rule for your default Location which dictates that, as long as the location isActive flag is set to “TRUE”, all inventory uploaded for your default location will be included in the aggregated inventory availability.
Your network configuration can also be very complex. fabric’s Inventory Networks support the ability to create groups of inventory by defining “Inventory Networks” with inclusion and exclusion rules for inventory aggregation. Inventory Networks can aggregate inventory across groups of fulfillment centers for different selling requirements such as channels, brands, or fulfillment method eligibility. For example, you may want to create “Network C”, for domestic selling which includes all stores and warehouses, and “Warehouse Network”, for International selling which only includes warehouses. This can be achieved with the following two steps:
- First, create the rules (https://developer.fabric.inc/v3/reference/createnetwork)for how inventory is aggregated in stores and warehouses. You may want to set up a rule set for “Network A” called “Store Network” and another rule set for “Network B” called “Warehouse Network”, each of which can have different inclusion and exclusion parameters based on the attributes of your location and product data.
- In the second step, you may want to set up “Network C”, naming it “Domestic Selling”, and making it a “Multiple Network” type which is created by selecting the store inventory and warehouse inventory through the Multiple Network setup process. Now, you have a way to combine inventory pools for Domestic, while simply relying on the “Warehouse Network” for International selling. For both networks, you can call the Inventory API to look up inventory in real-time on the storefront, such as the Product Display Page (PDP) and other use cases, by passing the network code in the request object.
Before utilizing Complex Aggregation to use product data in fabric’s Network rule-setting interface, you must decide whether to use fabric's Product Information Management (PIM) system or a third-party PIM system. If you are using a third-party system, you must provide product details to fabric’s PIM-Connector service.
To use product data in the Network rule-setting interface, decide whether you are using fabric’s Product Information Management (PIM) system or a third-party PIM system. If using a third-party system, you need to provide product details to the PIM-Connector service.
Also, define your location details using the Locations service through either Copilot or the APIs. You may also configure custom attributes on the location model if you want to extend the JSON data model to support more fields.
Note: Custom attributes only support key-value data in a single “attributes” object of the service collection response format. Once a custom attribute is configured, it will apply for all data in the service collection.
1. Backorder and Preorder
Managing backorder and preorder inventory follows the same workflows as regular inventory, allowing seamless management through both Copilot and API interfaces. In the fabric Inventory module, the primary feature of Backorder and Preorder is the ability to reduce the available quantity of backorder or preorder products so that the inventory remains balanced even when orders are placed, and the inventory is marked as 'OnHand' for availability.
2. Safety Stock and Low Stock Setting
In addition to the import-inventory and network features, you may configure values for
lowStock fields while creating or updating either networks or inventory.
3. Infinite Inventory Flag
If you want to represent an inventory in unlimited quantities, you may set
infiniteInventory to 'true' and reference that attribute on the storefront and other downstream systems consuming inventory from fabric.
Yes, fabric provides the flexibility of using only Inventory service independently without implementing the whole of fabric’s order management system into your business.
If you're not using the fabric Orders module, you must manually update the 'allocated' and 'shipped' counters using the adjust inventory endpoint everytime an order is created, allocated, and shipped. Similarly, you will have to update inventory records using the update inventory endpoint. When updating the 'onHand' counter, remember that the 'availableToPurchase' quantity is calculated based on the default formula
onHand - allocated - shipped - safetyStock. Note that the
availableToPurchase quantity can be customized based on requirement. Contact fabric Support to customize
To upload inventory data from multiple sources, you must create an upload URL by using the bulk operation endpoint. Prepare a .csv file with all the inventory details from your POS, WMS, or other sources, then upload this file to the URL you have created.