Multi-Location Inventory
Published by Miranda Posthumus on January 4, 2022
Last updated on April 3, 2023
New feature to allow tracking of product inventory across multiple locations. Updated in April 2023 to include the option to limit shopper access to inventory at specific locations by using granular assignments.
New Resource: InventoryRecord
"InventoryRecord" : {
"ID": "",
"OwnerID": "",
"AddressID": "",
"Address": {...}, //read-only Address object
"OrderCanExceed": false,
"QuantityAvailable": 0,
"LastUpdated": "2022-01-04T00:00:00.00+00:00",
"AllowAllBuyers": true,
"xp": {}
}
Optionally used in conjunction with InventoryRecordAssignment
"InventoryRecordAssignment": {
"InventoryRecordID": "",
"BuyerID": "",
"UserGroupID": ""
}
The InventoryRecord
resource exists only in the context of a given Product, and can be extended to Product Variants.
The ID property is writable and follows the same convention as all other writable IDs in OrderCloud.
The
OwnerID
property is writable only by the Marketplace Owner. Otherwise this ID reflects the Supplier that created the Inventory Record.The
Product.Inventory
object will remain on the Product resource, even if Inventory Records are associated with the given Product.If any InventoryRecords exist for a product,
Product.Inventory.QuantityAvailable
will be the derived sum of allInventoryRecord.QuantityAvailable
. If you write to it, the value will never be returned unless all InventoryRecords are deleted.
Address
is a read-only object derived from theAddressID
given.Multiple InventoryRecords for the same Product/Address combination are allowed. This can be useful if you need to track different inventory levels for different fulfillment methods.
The
AddressID
used to create anInventoryRecord
must be owned by theOwnerID
.AllowAllBuyers
defaults totrue
. If you want to control Inventory Records more granularly, set this value tofalse
and use assignments.InventoryRecords are not returned on the Product resource; however, you can use filters on InventoryRecord information in product queries, e.g.
v1/me/products?InventoryRecords.AddressID={address1}|{address2}&InventoryRecords.QuantityAvailable=>5
.
New Endpoints
Products
GET v1/products/{productID}/inventoryrecords
GET v1/products/{productID}/inventoryrecords/{inventoryRecordID}
POST v1/products/{productID}/inventoryrecords
PUT v1/products/{productID}/inventoryrecords/{inventoryRecordID}
PATCH v1/products/{productID}/inventoryrecords/{inventoryRecordID}
DELETE v1/products/{productID}/inventoryrecords/{inventoryRecordID}
GET v1/products/{productID}/inventoryrecords/assignments
POST v1/products/{productID}/inventoryrecords/assignments
DELETE v1/products/{productID}/inventoryrecords/{inventoryRecordID}/assignments
Variants
GET v1/products/{productID}/variants/{variantID}/inventoryrecords
GET v1/products/{productID}/variants/{variantID}/inventoryrecords/{inventoryRecordID}
POST v1/products/{productID}/variants/{variantID}/inventoryrecords
PUT v1/products/{productID}/variants/{variantID}/inventoryrecords/{inventoryRecordID}
PATCH v1/products/{productID}/variants/{variantID}/inventoryrecords/{inventoryRecordID}
DELETE v1/products/{productID}/variants/{variantID}/inventoryrecords/{inventoryRecordID}
GET v1/products/{productID}/variants/{variantID}/inventoryrecords/assignments
POST v1/products/{productID}/variants/{variantID}/inventoryrecords/assignments
DELETE v1/products/{productID}/variants/{variantID}/inventoryrecords/{inventoryRecordID}/assignments
Me
GET v1/me/products/{productID}/inventoryrecords
GET v1/me/products/{productID}/variants/{variantID}/inventoryrecords
New Properties
LineItem.InventoryRecordID
Only writable prior to submitting an order
References the
InventoryRecord
that will be decremented on submit.If using Inventory Records for a given Product, you must provide an
InventoryRecordID
on theLineItem
in order to track inventory. If any Inventory Records exist for a Product on aLineItem
whereInventoryRecordID
is null, no inventory will be decremented on order submit.
OrderCalculateResponse.LineItemOverrides.InventoryRecordID
Allows an override of InventoryRecordID on a given
LineItem
Not validated for
AllowAllBuyers
or explicit assignments
Was this page helpful? Give it a bravo!
Still have questions?
Ask in our Community Channel