---
title: "List inventory levels"
method: POST
path: "/inventory_levels"
tags: ["Inventory"]
---

# List inventory levels

`POST /inventory_levels`

Returns a paginated list of inventory levels.

🔒 Requires: `inventory:read` scope

## Request body

- InventoryLevelsRequest
  - `group_variants` boolean — If filtering by `root_product_ids` and `group_variants` is true, one aggregated level will be returned for each variant family at each outlet.
  - `include_composites` boolean — Include composite products in the response.
  - `include_inactive` boolean — Include inactive products in the response.
  - `location_ids` string[] — Optional outlet IDs to filter response by.
  - `offset` integer — How many inventory levels to skip.
  - `product_ids` string[] — Optional product IDs to filter response by. Mutually exclusive with `root_product_ids`. When omitted, returns inventory levels for all products.
  - `root_product_ids` string[] — Optional root product IDs to filter response by. Mutually exclusive with `product_ids`. When omitted, returns inventory levels for all products.
  - `size` integer — How many inventory levels to return.
  - `sort_direction` 'asc' | 'desc' — Whether to sort the response ascending or descending.
  - `sort_type` 'total_count' | 'total_cost' | 'average_cost' | 'reorder_point' | 'reorder_amount' | 'product_name' | 'created_at' — Which response field to sort by.
  - `supplier_ids` string[] — Optional supplier IDs to filter response by.
  - `to_be_procured_only` boolean — Only include inventory with a positive quantity to procure.

## Response `200`

- InventoryLevel[]
  - `average_cost` number, double — The average cost of inventory available to sell. 🔒 Requires: `product:cost:view` scope
  - `brand_id` string, uuid
  - `current_inventory_level` number, double — Total inventory available to sell.
  - `location_id` string, uuid
  - `name` string
  - `product_id` string, uuid
  - `product_type_id` string, uuid
  - `quantity_to_procure` number, double — Quantity of stock to procure in order to satisfy current fulfilments and service orders.
  - `reorder_amount` number, double — The quantity of stock to reorder. For `FIXED`, this is the static amount configured when the reorder method was set up. For `MIN_MAX`, this is dynamically computed as `reorder_target` minus `current_inventory_level` (or zero if current stock already meets or exceeds the target). Omitted if no reorder method is configured.
  - `reorder_method` 'FIXED' | 'MIN_MAX' | 'null', nullable — The reorder strategy in use. `FIXED` uses a static reorder amount each time the threshold is reached. `MIN_MAX` dynamically computes the reorder amount to bring stock up to the configured maximum. Omitted if no reorder method is configured.
  - `reorder_target` number, double — The target inventory level for replenishment. For `FIXED`, this equals `reorder_threshold` + `reorder_amount`. For `MIN_MAX`, this is the maximum inventory level to restock to. Omitted if no reorder method is configured.
  - `reorder_threshold` number, double — The inventory level at which reordering is triggered. For `FIXED`, this is the reorder point below which a reorder is suggested. For `MIN_MAX`, this is the minimum inventory level. Omitted if no reorder method is configured.
  - `root_product_id` string, uuid — The root product ID of the product's variant family.
  - `supplier_id` string, uuid
  - `total_cost` number, double — The total cost of inventory available to sell.

---

[API](https://skmtc.net/lightspeedhq/apis/api-2026-07.md) · [All operations](https://skmtc.net/lightspeedhq/apis/api-2026-07/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lightspeedhq/api-2026-07/revisions/72d4ceb46dbb/schema)
