# List bins

Operation ID: `bins`

Group: Inventory › Bins

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

`GET /inventory/bins`

Read-only: Reads and returns; changes nothing.

Lists bins. Each bin comes back with its layout, limits, and settings, but not capacity. Only GET inventory/bins/:id returns capacity.

Sort on aisle, rack, and shelfLevel to list the bins in warehouse layout order.

To find bins that have no capacity limit, use POST inventory/bins/search.

## 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
- `binCode` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `barcode` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `locationId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `aisle` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `rack` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `zone` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `isPickingBin` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `isReceivingBin` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `isProductionBin` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `capacityCheckMode` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `tempZone` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `supportsPerishable` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `active` — 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, binCode, aisle, rack, shelfLevel, active, lastModifiedDate
- Selectable: id, binCode, barcode, locationId, locationCode, locationName, aisle, rack, shelfLevel, zone, itemPosition, isPickingBin, isReceivingBin, isProductionBin, maxQuantity, maxWeight, maxWeightUnit, maxVolume, maxVolumeUnit, capacityCheckMode, tempZone, tempMin, tempMax, supportsPerishable, active, createdDate, lastModifiedDate
- `page[size]` — Page size
- `page[cursor]` — Opaque continuation cursor

## Response

`200` Success

Under `data`, an array of binsRow:

| 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 bin. Example: `"8e1c40a7-5b93-4d26-a0f8-3c74e19b5d02"`. |
| `binCode` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | yes | The short code that identifies the bin, for example 'A-01-1'. It is unique within the tenant, not per warehouse, and cannot be changed after the bin is created. Example: `"A-01-1"`. |
| `barcode` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The barcode printed on the bin label. It is unique within the tenant and cannot be changed after the bin is created. Example: `"BIN-A011"`. |
| `locationId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The unique identifier for the warehouse the bin is in. It cannot be changed after the bin is created. See id on GET inventory/warehouses/:id. Example: `"f5272ae0-0f0b-47d2-b78a-2158fec2cc32"`. |
| `locationCode` | string \| null | no | no | no | The code of that warehouse. Example: `"WH-02"`. |
| `locationName` | string \| null | no | no | no | The name of that warehouse. Example: `"Main warehouse"`. |
| `aisle` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | yes | The aisle in the warehouse layout. Example: `"A"`. |
| `rack` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | yes | The rack within the aisle. Example: `"01"`. |
| `shelfLevel` | string \| null | no | no | yes | The shelf level within the rack. Example: `"1"`. |
| `zone` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The logical zone of the bin, as your tenant names them. For example 'Picking', 'Storage' or 'Quarantine'. Example: `"Picking"`. |
| `itemPosition` | string \| null | no | no | no | The position within the shelf, where a bin is subdivided further. |
| `isPickingBin` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | no | Whether the bin is a picking location, a fast-access place stock is taken from to fulfill shipments. Example: `true`. |
| `isReceivingBin` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | no | Whether the bin stages newly received goods before they are put away. |
| `isProductionBin` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | no | Whether the bin feeds or receives production. |
| `maxQuantity` | number \| null | no | no | no | The largest number of units the bin will hold. It is meaningful only when everything in the bin is counted in the same unit. Example: `500`. |
| `maxWeight` | decimal \| null | no | no | no | The largest weight the bin will hold, in maxWeightUnit. Example: `"250"`. |
| `maxWeightUnit` | string \| null | no | no | no | The unit maxWeight is given in. Possible values: 'G', 'Kg', 'Lbs'. Example: `"Kg"`. |
| `maxVolume` | decimal \| null | no | no | no | The largest volume the bin will hold, in maxVolumeUnit. |
| `maxVolumeUnit` | string \| null | no | no | no | The unit maxVolume is given in. Possible values: 'L'. |
| `capacityCheckMode` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | What happens when a movement would exceed a limit. Possible values: 'HardBlock', which refuses the movement, and 'SoftWarning', which allows it and flags it. Example: `"HardBlock"`. |
| `tempZone` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The temperature zone the bin belongs to, as your tenant names them. For example 'Ambient', 'Chilled' or 'Frozen'. Example: `"Ambient"`. |
| `tempMin` | decimal \| null | no | no | no | The lowest temperature kept in the bin, in degrees Celsius. |
| `tempMax` | decimal \| null | no | no | no | The highest temperature kept in the bin, in degrees Celsius. |
| `supportsPerishable` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | no | Whether perishable stock may be kept in the bin. |
| `active` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | yes | Whether the bin may be chosen for new movements. When false, the stock already in the bin stays there but no new movement can be assigned to it. Example: `true`. |
| `createdDate` | date-time \| null | no | no | no | The date and time the bin 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 bin record last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. Example: `"2026-08-18T09:14:22.517Z"`. |

```json
{
  "data": [
    {
      "id": "8e1c40a7-5b93-4d26-a0f8-3c74e19b5d02",
      "binCode": "A-01-1",
      "barcode": "BIN-A011",
      "locationId": "f5272ae0-0f0b-47d2-b78a-2158fec2cc32",
      "locationCode": "WH-02",
      "locationName": "Main warehouse",
      "aisle": "A",
      "rack": "01",
      "shelfLevel": "1",
      "zone": "Picking",
      "itemPosition": "<itemPosition>",
      "isPickingBin": true,
      "isReceivingBin": true,
      "isProductionBin": true,
      "maxQuantity": 500,
      "maxWeight": "250",
      "maxWeightUnit": "Kg",
      "maxVolume": "19.99",
      "maxVolumeUnit": "<maxVolumeUnit>",
      "capacityCheckMode": "HardBlock",
      "tempZone": "Ambient",
      "tempMin": "19.99",
      "tempMax": "19.99",
      "supportsPerishable": true,
      "active": true,
      "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
