---
title: "Lists items below one of their reorder points, with on-hand, reorder quantity and vendor."
method: GET
path: "/api/v1/items/low-stock"
tags: ["Reorder"]
---

# Lists items below one of their reorder points, with on-hand, reorder quantity and vendor.

`GET /api/v1/items/low-stock`

## Request

- Base URL: `https://app.flexonthejob.com`
- URL: `https://app.flexonthejob.com/api/v1/items/low-stock`
- Auth: HTTP bearer

Requires `ViewInventory`. One line per active reorder point whose watched stock is
strictly below its `minimumStock` — an item with reorder points at two locations can
appear twice. Stock is the count of non-deleted units at the reorder point's location, or
everywhere when it has none (the Reorder page's rule). `vendorId` is the item's
preferred vendor (set on Item Templates → Edit or `PATCH /api/v1/items/{id}`), else
the vendor of the CSV import that created it. Computed on request and read-only: unlike
opening the Reorder page it raises no alert and fires no `inventory.low_stock`
webhook. Ordered by item name then location. Not cursor-paginated (the list is bounded by
the reorder points): everything comes back with `nextCursor` always `null`.
Example: `GET /api/v1/items/low-stock?vendorId=3`.
Also available as CSV (`Accept: text/csv` or `?format=csv`); paging cursor in `X-Next-Cursor`.

## Query parameters

- `vendorId` integer
- `locationId` integer
- `format` 'csv'

## Response `200`

Every low-stock line (possibly none).

- PagedResponseOfLowStockItemDto: One page of a cursor-paginated /api/v1 collection (API_AND_MCP.md: `?after=<syncId>&limit=`).
  - `items` LowStockItemDto[]: Items of this page in ascending creation order.
    - `itemId` integer: Item id, usable in `/api/v1/items/{id}`. Example: `42`.
    - `itemName` string: Item display name. Example: `"1/2\" PEX Coupling"`.
    - `description` string, nullable: Item description, if any.
    - `reorderPointId` integer: Id of the reorder point that triggered this line (see `GET /api/v1/items/{id}/reorder-points`).
    - `locationId` integer, nullable: Location the reorder point watches; null = the item's stock at all locations together.
    - `locationName` string, nullable: Name of LocationId; null for all locations.
    - `onHand` integer: Whole units counted for the reorder point: non-deleted stock rows at LocationId, or everywhere (job sites included) when it is null. Example: `3`.
    - `minimumStock` integer: The reorder point: the item is listed while OnHand is strictly below this. Example: `10`.
    - `reorderQuantity` integer, nullable: Quantity configured to reorder; null when the reorder point has none.
    - `suggestedOrderQuantity` integer: Units to order: ReorderQuantity, or twice MinimumStock when unset (the Reorder page's default). Example: `20`.
    - `cost` number, double, nullable: Purchase cost per unit from the item's `Cost` property, in the organization's currency; null when unknown. Example: `0.40`.
    - `vendorId` integer, nullable: Vendor to order from: the item's preferred vendor, else the vendor of the CSV import that created the item; null when unknown. Example: `3`.
    - `vendorName` string, nullable: Name of VendorId; null when unknown.
    - `isPreferredVendor` boolean: True when VendorId is the item's preferred vendor; false when it came from the import (or there is none).
    - `vendorPartNumber` string, nullable: The vendor's part number for the item, if recorded. Example: `"PX-12C"`.
  - `nextCursor` string, nullable: SyncId of the last item; pass it back as `?after=` to fetch the next page. `null` when this is the last page.

## Other responses

- `304`: Unchanged since the supplied `If-None-Match`.
- `401`: Unauthorized
- `403`: Forbidden
- `429`: Too Many Requests

---

[API](https://skmtc.dev/flexonthejob/apis/flex-api.md) · [All operations](https://skmtc.dev/flexonthejob/apis/flex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/flexonthejob/apis/flex-api/revisions/19c8f4d27acf?raw)
