# List items

Operation ID: `items`

Group: Inventory › Items

[Open in the interactive reference](https://docs.api.lensing.ai/lensing/v1/endpoints/items)

`GET /inventory/items`

Read-only: Reads and returns; changes nothing.

Lists items. Each item comes back without standardCost, itemPurchasePrice, and currency. To read those, use GET inventory/items/:id or POST inventory/items/search.

The collection cannot filter on a missing weight or missing dimensions. For those, use POST inventory/items/search with missingWeight or missingDimensions.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Api-Version` | header | string · v1 | yes | The API version this request targets, named by its public identifier. Required on every request; omitting it, or naming a version this company does not have, is answered with 400. This document describes version `v1`. |

## Query surface

- `id` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `itemCode` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `externalItemId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `brandName` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `itemTypeId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `categoryId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `unitGroupId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `valuationMethod` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `isBatch` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `isSerial` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `isInventory` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `isSalesItem` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `isPurchaseItem` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `active` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `countryOfOrigin` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `isPerishable` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `lastModifiedDate` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- Orderable: id, itemCode, valuationMethod, active, createdDate, lastModifiedDate
- Selectable: id, itemCode, itemName, externalItemId, brandName, notes, imageAvatar, itemTypeId, itemTypeName, categoryId, categoryName, inventoryUnitId, inventoryUnitCode, salesUnitId, salesUnitCode, purchaseUnitId, purchaseUnitCode, unitGroupId, unitGroupName, valuationMethod, isBatch, isSerial, isInventory, isSalesItem, isPurchaseItem, active, eccnNumber, htsCode, countryOfOrigin, minStockLevel, minimumTransactionQuantity, leadTime, weight, weightUnit, grossWeight, netWeight, length, width, height, volumePerUnit, volumeUnit, defaultAllocationMode, isPerishable, shelfLifeDays, minShelfLifeDaysOnReceipt, minShelfLifeDaysOnDispatch, bestBeforeOffsetDays, storageTempMin, storageTempMax, createdDate, lastModifiedDate
- `page[size]` — Page size
- `page[cursor]` — Opaque continuation cursor

## Response

`200` Success

Under `data`, an array of itemsRow:

| Field | Type | Required | Filter | Sort | Description |
| --- | --- | --- | --- | --- | --- |
| `id` | string | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | yes | The unique identifier for the item. Example: `"517a93e4-cbb4-4571-9e3d-2343e56cfd84"`. |
| `itemCode` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | yes | The item code, for example 'WIDGET-01'. Unique within the tenant. It is set when the item is created and cannot be changed. Example: `"WIDGET-01"`. |
| `itemName` | string \| null | no | no | no | The display name of the item. Example: `"Standard widget"`. |
| `externalItemId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | Your own identifier for this item in an external system. |
| `brandName` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The display name of the brand. |
| `notes` | string \| null | no | no | no | Free text on the item. |
| `imageAvatar` | string \| null | no | no | no | The URL of the item's avatar image. Absent when none is set. |
| `itemTypeId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The unique identifier of the item's type. It is set when the item is created and cannot be changed. See id on GET inventory/item-types/:id. Example: `"66aea173-07b8-4c4e-bc4a-5c35dedfdc16"`. |
| `itemTypeName` | string \| null | no | no | no | The display name of the item's type. Example: `"Stocked good"`. |
| `categoryId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The unique identifier of the item's category. See id on GET inventory/item-categories/:id. Example: `"6709e2bf-d6cf-4800-9ffa-d5a496ec4d0b"`. |
| `categoryName` | string \| null | no | no | no | The display name of the item's category. Example: `"Components"`. |
| `inventoryUnitId` | string \| null | no | no | no | The unique identifier of the unit stock is counted in. Every quantity on an inventory level or transaction is in this unit. See id on GET inventory/unit-of-measures/:id. Example: `"77bd4c16-e1f0-426d-a98f-07b063df2d9c"`. |
| `inventoryUnitCode` | string \| null | no | no | no | The code of the inventory unit. Example: `"EA"`. |
| `salesUnitId` | string \| null | no | no | no | The unique identifier of the unit used on sales documents. Absent when it is the same as the inventory unit. See id on GET inventory/unit-of-measures/:id. |
| `salesUnitCode` | string \| null | no | no | no | The code of the sales unit. |
| `purchaseUnitId` | string \| null | no | no | no | The unique identifier of the unit used on purchase documents. Absent when it is the same as the inventory unit. See id on GET inventory/unit-of-measures/:id. |
| `purchaseUnitCode` | string \| null | no | no | no | The code of the purchase unit. |
| `unitGroupId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The unique identifier of the unit of measure group that has the conversions between the item's units. See id on GET inventory/unit-of-measure-groups/:id. Example: `"38b5454a-c3fe-452b-9754-61f9ead49e87"`. |
| `unitGroupName` | string \| null | no | no | no | The display name of the unit of measure group. Example: `"Each"`. |
| `valuationMethod` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | yes | How the item's stock is valued. Possible values: 'movingAverage', 'batch', 'serials', 'none'. 'none' is for an item that is not stocked. 'fifo' can be returned but cannot be written, because it is under development. Example: `"movingAverage"`. |
| `isBatch` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | no | Whether the item is tracked by batch. Receipts and shipments of it name batches. Example: `false`. |
| `isSerial` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | no | Whether the item is tracked by serial number. Receipts and shipments of it name one serial per unit. Example: `false`. |
| `isInventory` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | no | Whether stock levels are kept for the item. False for a service or charge item. Example: `true`. |
| `isSalesItem` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | no | Whether the item can appear on sales documents. Example: `true`. |
| `isPurchaseItem` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | no | Whether the item can appear on purchase documents. Example: `true`. |
| `active` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | yes | Whether the item can be selected on new documents. False means it is retired, and historical records keep it. Example: `true`. |
| `eccnNumber` | string \| null | no | no | no | The Export Control Classification Number. |
| `htsCode` | string \| null | no | no | no | The Harmonized Tariff Schedule code. |
| `countryOfOrigin` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The country the item originates from. |
| `minStockLevel` | decimal \| null | no | no | no | The stock level below which the item should be reordered, in the inventory unit. |
| `minimumTransactionQuantity` | decimal \| null | no | no | no | The smallest quantity any document can move. Absent when there is no restriction. |
| `leadTime` | decimal \| null | no | no | no | The number of weeks between ordering the item and receiving it. |
| `weight` | decimal \| null | no | no | no | The weight of one item, in weightUnit. A landed cost Weight allocation fails rather than falling back when an item on the receipt has none. Example: `"1.4"`. |
| `weightUnit` | string \| null | no | no | no | The unit weight is expressed in. Possible values: 'G', 'Kg', 'Lbs'. Example: `"Kg"`. |
| `grossWeight` | decimal \| null | no | no | no | The weight including packaging, in weightUnit. |
| `netWeight` | decimal \| null | no | no | no | The weight excluding packaging, in weightUnit. |
| `length` | decimal \| null | no | no | no | The length of one item. A landed cost Volume allocation needs length, width and height together, and fails when the set is incomplete. |
| `width` | decimal \| null | no | no | no | The width of one item. |
| `height` | decimal \| null | no | no | no | The height of one item. |
| `volumePerUnit` | decimal \| null | no | no | no | The volume of one item, in volumeUnit. |
| `volumeUnit` | string \| null | no | no | no | The unit volumePerUnit is expressed in. Possible values: 'L'. |
| `defaultAllocationMode` | string \| null | no | no | no | The allocation mode a landed cost charge for this item falls back to when it names none. Possible values: 'Equal', 'Quantity', 'LineTotal', 'Weight', 'Volume'. |
| `isPerishable` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | no | Whether the item expires. |
| `shelfLifeDays` | number \| null | no | no | no | The number of days the item keeps from production. |
| `minShelfLifeDaysOnReceipt` | number \| null | no | no | no | The least remaining shelf life a receipt of this item will accept. |
| `minShelfLifeDaysOnDispatch` | number \| null | no | no | no | The least remaining shelf life a dispatch of this item will accept. |
| `bestBeforeOffsetDays` | number \| null | no | no | no | The number of days between the expiry date and the best-before date printed on it. |
| `storageTempMin` | decimal \| null | no | no | no | The lowest temperature the item can be stored at, in degrees Celsius. |
| `storageTempMax` | decimal \| null | no | no | no | The highest temperature the item can be stored at, in degrees Celsius. |
| `createdDate` | date-time \| null | no | no | yes | The date and time the item was created, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
| `lastModifiedDate` | date-time \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | yes | The date and time the item record last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. Example: `"2026-08-18T09:14:22.517Z"`. |

```json
{
  "data": [
    {
      "id": "517a93e4-cbb4-4571-9e3d-2343e56cfd84",
      "itemCode": "WIDGET-01",
      "itemName": "Standard widget",
      "externalItemId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "brandName": "<brandName>",
      "notes": "<notes>",
      "imageAvatar": "<imageAvatar>",
      "itemTypeId": "66aea173-07b8-4c4e-bc4a-5c35dedfdc16",
      "itemTypeName": "Stocked good",
      "categoryId": "6709e2bf-d6cf-4800-9ffa-d5a496ec4d0b",
      "categoryName": "Components",
      "inventoryUnitId": "77bd4c16-e1f0-426d-a98f-07b063df2d9c",
      "inventoryUnitCode": "EA",
      "salesUnitId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "salesUnitCode": "<salesUnitCode>",
      "purchaseUnitId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "purchaseUnitCode": "<purchaseUnitCode>",
      "unitGroupId": "38b5454a-c3fe-452b-9754-61f9ead49e87",
      "unitGroupName": "Each",
      "valuationMethod": "movingAverage",
      "isBatch": false,
      "isSerial": false,
      "isInventory": true,
      "isSalesItem": true,
      "isPurchaseItem": true,
      "active": true,
      "eccnNumber": "<eccnNumber>",
      "htsCode": "<htsCode>",
      "countryOfOrigin": "<countryOfOrigin>",
      "minStockLevel": "19.99",
      "minimumTransactionQuantity": "19.99",
      "leadTime": "19.99",
      "weight": "1.4",
      "weightUnit": "Kg",
      "grossWeight": "19.99",
      "netWeight": "19.99",
      "length": "19.99",
      "width": "19.99",
      "height": "19.99",
      "volumePerUnit": "19.99",
      "volumeUnit": "<volumeUnit>",
      "defaultAllocationMode": "<defaultAllocationMode>",
      "isPerishable": true,
      "shelfLifeDays": 0,
      "minShelfLifeDaysOnReceipt": 0,
      "minShelfLifeDaysOnDispatch": 0,
      "bestBeforeOffsetDays": 0,
      "storageTempMin": "19.99",
      "storageTempMax": "19.99",
      "createdDate": "2026-01-15T09:30:00.000Z",
      "lastModifiedDate": "2026-08-18T09:14:22.517Z"
    }
  ],
  "pagination": {
    "hasMore": true,
    "nextCursor": "<nextCursor>"
  }
}
```

## Statuses

- `400` — Invalid request or business failure
- `401` — The request carries no valid access token.
- `403` — Not authorized
- `404` — Not found
- `429` — Too many requests from this client address. The response has no body and no `Retry-After` header.
- `500` — Internal server error
