This page explains how Norce Commerce manages and displays product availability. It covers the data model, configuration, and best practices for integrating and presenting availability information in applications.
Why is this important?
Accurate availability data helps customers make informed purchasing decisions and supports business processes like inventory management and order fulfillment.
Norce Commerce provides a flexible system for displaying product availability. You can integrate on-hand product information from multiple warehouses and use business rules to determine what data is shown to applications. This ensures customers see the most accurate availability promise.
Each product or variant in Norce Commerce exposes three main availability elements:
OnHand Model Diagram
The following image shows the on-hand part of the Product model:
- OnHand: Aggregated stock from all warehouses and locations configured for the application and price list.
- OnHandStore: Aggregated stock from all stores specified in the
storeSeed
parameter (store IDs can be retrieved viaListStores2
). - OnHandSupplier: Availability from the primary supplier, selected based on Norce rules for the price list.
Each on-hand object contains several important fields:
Value
: Number of units currently available (excluding reserved units if reservations are enabled).IncomingValue
: Number of units on the way from the supply chain.NextDeliveryDate
: Estimated arrival date for the next purchase.LeadTimeDayCount
: Estimated time to ship items to the customer (unit defined in setup).IsReturnable
: Indicates if the item can be returned (set by the source, e.g., supplier).Info
: Used for extended information when querying specific warehouse data.
StockDisplayBreakPoint
: Threshold for displaying "low stock" messages instead of exact numbers.IsDropShipOnly
: If true, availability is determined by supplier stock, not local stock.
Norce Commerce provides raw availability data and supporting fields. How you present this data is up to your application logic.
Note:
The examples below are suggestions. You can use fields likeLeadTimeDayCount
,IncomingValue
, andNextDeliveryDate
to create custom availability messages.
For more on extending availability data, see Extending Availability.
Scenario | Criteria | Lead Time | Suggested Display |
---|---|---|---|
Plenty in local stock, short lead time | OnHand > Stock Breakpoint | Lead time = 1 | “deliver in 1-3 days” |
Plenty in local stock, longer lead time | OnHand > Stock Breakpoint | Lead time > 1 | “deliver in 4-10 days” |
Short supply in local stock | OnHand ≤ Stock Breakpoint | - | “only few left, 1-3 days” or “only few left, 4-10 days” |
No local stock, units incoming | OnHand ≤ 0, Incoming > 0, NextDeliveryDate exists | Lead time exists | “estimated delivery [nextdeliverydate + lead time]” |
No local stock, no incoming, supplier has stock | OnHand ≤ 0, Incoming = 0, Supplier OnHand > 0 | Supplier lead time = X | “estimated delivery [X]-[X+5] days” |
Dropshipping only, supplier has stock | DropShipping Only = true, any OnHand, any Incoming, Supplier OnHand > 0 | Supplier lead time = X | “estimated delivery [X]-[X+5] days” |
Dropshipping only, supplier has no stock | DropShipping Only = true, any OnHand, any Incoming, Supplier OnHand = 0 | - | “estimated delivery over 3 weeks” |
Scenario | Criteria | Lead Time | Suggested Display |
---|---|---|---|
Local stock, lead time | OnHand = X | Lead time = 1 or >1 (Y) | “X in stock, deliver in 1 day” or “X in stock, deliver in Y days” |
No local stock, units incoming | OnHand ≤ 0, Incoming > 0, NextDeliveryDate exists | Lead time exists | “Not in stock, estimated delivery [nextdeliverydate + lead time]” |
No local stock, no incoming, supplier has stock | OnHand ≤ 0, Incoming = 0, Supplier OnHand > 0 | Supplier lead time = Y | “X in stock, estimated delivery in [Y] days” |
You can get availability data in two ways:
- With product data: OnHand fields are included in product responses.
- Direct on-hand checks: Use these methods to get warehouse-specific data (no aggregation, and bypasses API cache):
GetProductOnHandByPartNo
GetProductOnHandByProductId
ListProductOnHandByBasket
Warehouse/Store Input Example:
[
{ "WarehouseId": 529, "LocationId": 529 },
{ "StoreId": 268 },
{ "StoreId": 269 },
{ "WarehouseId": 4131, "LocationId": 4131 }
]
Note:
Extended info types are only returned by these methods, since aggregation is not possible.
Warehouse and Store IDs can be found using Listwarehouseinfo
.
Norce Commerce can reserve stock for orders. When enabled, reservations reduce the available on-hand value for the standard warehouse on the price list.
Reservation Workflow:
- Order is created; reservation is made in the standard warehouse.
- Reservation is visible in the admin interface.
- On-hand value is reduced by the reservation amount. The warehouse/location marked as "standard" for the active price list will get the reservation.
- When a new on-hand update is imported, the reservation is cleared.
How to enable:
SetUseOnHandSubstraction
in client settings, default istrue
.
Note: Only physical product types have reservation functionality. Service, Fee, Virtual product types will never run out on stock.
Step 1. A product purchased on the Standard pricelist. The warehouse set as “Standard” for the used price list gets the reservation (in this example it is the European standard warehouse/location).
Step 2. These reservations are shown in the admin. This client has reservation enabled and in this case, 3 pcs are reserved for a product:
Figure of the onhand information in Admin, showing 3 reserved.
Note: that 515 is not the stored Onhand value, it is actually 518, but admin will show the same value as the API.
Step 3. When getting OnHand using the API, for the specific warehouse from Norce we get (from GetProduct
):
Figure of the onhand information in the API result.
Step 4. Later, a new OnHand value updated in Norce from a WMS using Connect:
Figure of the onhand information imported to the Connect API.
The reservation is then cleared, while Onhand is set to the new value 510 from the Import.
Image: Example warehouse configuration screen
Key configuration fields:
- Code: Identifier for integrations/imports (should match source systems).
- Type: Warehouse, Store, Transport, or Other.
- Primary: Default warehouse for the client (only one allowed).
- Lead time: Estimated shipping time (can be overridden per product/variant).
- Primary pricelist: Main price list for the warehouse.
- Included in stock calculation: If enabled, warehouse is included in aggregated availability.
- Warehouse and Store: Used in aggregated availability (
OnHand
,OnHandStore
). - Other and Transport: Not aggregated; only available via direct on-hand checks.
- Status rules: Only use "Warehouse" type for in-stock-based status changes.
To control which warehouses are aggregated for each application, connect price lists to warehouses.
Image: Example price list configuration screen
- Only one warehouse can be marked as "standard" (receives reservations).
- Add warehouses to all price lists used by the application (including campaign/customer price lists).
To show supplier availability:
Image: Example supplier on-hand configuration screen
- Enable the supplier as the chosen supplier.
- Connect the supplier price list to the supplier warehouse.
- Connect the supplier price list to the main price list.
You can update on-hand data via:
- Admin UI: Manual updates.
- Excel import: Bulk updates.
- Norce Commerce Connect: Automated integration.
API Methods:
ImportOnhands
(product service): For client on-hand data.ImportProducts
(supplier service): For supplier on-hand data.