Get Product Unlotted Stock
GET/api/v2/products/:product/unlotted-stock
On-hand stock for a product that has no lot identity yet — open cost layers with no batch number and no expiry date, summed per stock-holding warehouse. This is stock received before lot tracking was switched on for the product; it still fulfils normally but carries nothing for FEFO, near-expiry alerts or recall tracing until it is backfilled.
Use it to decide whether a backfill is needed, then download a pre-filled CSV with GET /api/inventory-expiry/lot-backfill/template?product_id={product} and upload it to POST /api/inventory-expiry/lot-backfill. Once every layer carries a lot, total_quantity is 0 and warehouses is empty.
Reported for products that are not lot-tracked yet too (is_lot_tracked: false) — there it is simply all of the product's stock, which is the amount that will be left without a lot if tracking is enabled now.
Supplier and archived warehouses are excluded. Quantities are in the product's stock unit.
Authentication: Requires Bearer token. Scope: products:read.
products:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Request
Responses
- 200
- 401
- 403
- 404
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not Found
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.