Retrieve your Erply inventory — quantities on hand, reserved amounts, Reorder Points and Restock Levels, FIFO costs, and most recent purchase prices.
By default, API returns all products that have a non-zero inventory quantity in the warehouse you specified. In other words, items with a zero inventory quantity are skipped.
However, if you use input parameters "changedSince" (all quantities that have changed since last synchronization), or "getProductsWithReorderPointDefined" / "getProductsWithRestockLevelDefined", API will also return items with zero inventory quantity.
To retrieve only a list of reserved inventory quantities, see getReservedStock.
If you need to get total stock across all warehouses, then use API call syncTotalProductStock.
Parameter name | Description | Possible value | Required |
---|---|---|---|
warehouseID | When using old inventory system, then warehouseID is a required parameter. If this parameter is omitted, then the total stock will be returned. Don't omit the warehouseID when syncing stock amounts, use API call syncTotalProductStock instead. |
integer | |
productID | Retrieve one specific product. | integer | |
productIDs | Retrieve specific products. Multiple product IDs, separated by commas, such as: 1,2,3,4,5 | string | |
groupID | Retrieve products in this specific product group. (See getProductGroups.) | integer | |
groupIDWithSubgroups | Retrieve products in this product group, or in any of its sub-groups, sub-subgroups etc. | integer | |
supplierID | Retrieve products of this supplier. (See getSuppliers.) | integer | |
brandID | Retrieve products of this brand. (See getBrands.) | integer | |
priorityGroupID | Retrieve products in this priority group. (See getProductPriorityGroups.) | integer | |
categoryID | Retrieve products in this specific category. (See getProductCategories.) | integer | |
categoryIDWithSubcategories | Retrieve products in this category, or in any of its sub-categories, sub-sub-categories etc. | integer | |
parentProductID | Retrieve variations of this matrix product. | integer | |
status | Filter products by status: ACTIVE, NO_LONGER_ORDERED, NOT_FOR_SALE, ACTIVE_AND_NOT_FOR_SALE, ARCHIVED, or ALL_EXCEPT_ARCHIVED. The last one returns all non-archived items (ie. items that are active, not for sale or no longer ordered). IF you are building a Stock Replenishment Report, ACTIVE_AND_NOT_FOR_SALE is the recommended option. It returns all items that can be ordered, skipping archived products and those marked as "not ordered any more". |
string | |
excludeOfflineWarehouses | If set to 1, then offline warehouses are not included in the result. This parameter should be used, when warehouseID is not set. |
integer | |
getReorderPoints | If set to 1, API also returns Reorder Points and Restock Levels for each item. When set to 1, then warehouseID is required |
integer | |
getAmountReserved | If set to 1, API also returns reserved amounts. | integer | |
getSuggestedPurchasePrice | If set to 1, API also returns suggested cost for each item. For a definition of "suggested cost", see the description of the "suggestedPurchasePrice" field below. When set to 1, then warehouseID is required |
integer | |
getAveragePrices | If set to 1, API also returns average purchase price and average cost. When set to 1, then warehouseID is required |
integer | |
getFirstPurchaseDate | If set to 1, API also returns first purchase date. | ISO date (yyyy-mm-dd) | |
getLastPurchaseDate | If set to 1, API also returns most recent purchase date. | ISO date (yyyy-mm-dd) | |
getLastSoldDate | If set to 1, API also returns most recent sale date. | ISO date (yyyy-mm-dd) | |
getProductsWithReorderPointDefined | If set to 1, API returns only products with Reorder Point defined. When set to 1, then warehouseID is required |
integer | |
getLastInventoryInTransactionDate | If set to 1, API also returns the date of the most recent "inventory in" transaction (purchase document, inventory registration, credit invoice, inventory transfer in etc.). | ISO date (yyyy-mm-dd) | |
getLastInventoryOutTransactionDate | If set to 1, API also returns the date of the most recent "inventory out" transaction (sale, inventory write-off, inventory transfer out etc.). | ISO date (yyyy-mm-dd) | |
getProductsWithRestockLevelDefined | If set to 1, API returns only products with Restock Level defined. When set to 1, then warehouseID is required |
integer | |
date | Retrieve inventory quantities on given date. Either date or changedSince can be set, but not both at the same time. | ISO date (yyyy-mm-dd) | |
changedSince | Get only items for which the amount on hand has recently changed | Unix timestamp |
Field name | Type | Description |
---|---|---|
productID | integer | Product ID. |
amountInStock | number | Total amount on hand. This includes the amounts that are reserved to specific customers: via Sales Orders, for example. If you want to get only available inventory, subtract amountReserved from amountInStock . |
amountReserved | number | Reserved amount (eg. pending Sales Orders). To retrieve this field, set getAmountReserved = 1 . |
suggestedPurchasePrice | number | "Suggested cost" for the item. If you add this product to a Purchase Order, Erply will populate the "Price" field with this value. The value is derived as follows:
To retrieve this field, set |
averagePurchasePrice | number | Weighted average purchase price, for the batches that are currently in stock. To retrieve this field, set getAveragePrices = 1 . |
averageCost | number | Weighted average cost, for the batches that are currently in stock. Cost = purchase price + freight costs. If you multiply this field by amountInStock , you will get the total current value of your inventory.Whenever you sell from inventory, Erply will naturally calculate cost for the specific sold items, not use this average value. Each sold item has its own cost, since it is drawn from a specific batch (according to FIFO). If you are interested in the cost of the sold item, you can use API calls:
To retrieve this field, set getAveragePrices = 1 . |
firstPurchaseDate | string | First purchase date. To retrieve this field, set getFirstPurchaseDate = 1 . ISO date (yyyy-mm-dd) |
lastPurchaseDate | string | Most recent purchase date. To retrieve this field, set getLastPurchaseDate = 1 . ISO date (yyyy-mm-dd) |
lastSoldDate | string | Most recent sale date. To retrieve this field, set getLastSoldDate = 1 . ISO date (yyyy-mm-dd) |
lastInventoryInTransactionDate | string | The date of the most recent "inventory in" transaction. To retrieve this field, set getLastInventoryInTransactionDate = 1 . ISO date (yyyy-mm-dd) |
lastInventoryOutTransactionDate | string | The date of the most recent "inventory out" transaction. To retrieve this field, set getLastInventoryOutTransactionDate = 1 . ISO date (yyyy-mm-dd) |
reorderPoint | integer | Reorder point. (If amount on hand drops below that point, the item should be re-stocked.) |
restockLevel | integer | Restock level. (Suggested amount to have on hand. The item is usually re-stocked up to this quantity.) |
This API call may return a lot of data (tens of thousands of records) and the output is non-pageable. If you have a large database, API may be unable to serve the request — you will get an error code or empty output. However, there is an alternative way: you may request output in CSV format.
To retrieve output as CSV, specify responseType = "CSV"
. API will respond you in JSON, providing a link to a CSV file::
{
"status":
{
"request":"getProductStock",
"requestUnixTime":1371221184,
"responseStatus":"ok",
"errorCode":0,
"generationTime":0.10201191902161,
"recordsTotal":1,
"recordsInResponse":1
},
"records":
[
{"reportLink":"http:\/\/sample.erply.com\/link\/to\/file.csv"}
]
}