# List inventory transactions

Operation ID: `inventoryTransactions`

Group: Inventory › Inventory Transactions

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

`GET /inventory/inventory-transactions`

Read-only: Reads and returns; changes nothing.

Lists inventory transactions. To order them, use the `sort` parameter, for example `sort=-transactionDate` for newest first.

## 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
- `itemId` — 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
- `locationId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `locationCode` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `transactionDate` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `sourceDocumentLineType` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `isReturn` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `isPriceDiff` — 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, transactionDate, inQuantity, outQuantity, totalCost, itemCode, locationCode, lastModifiedDate
- Selectable: id, itemId, itemCode, itemName, locationId, locationCode, locationName, unitId, unitCode, unitName, transactionDate, inQuantity, outQuantity, unitInQuantity, unitOutQuantity, unitCost, totalCost, salesAmount, currency, sourceDocumentLineType, isReturn, isPriceDiff, lastModifiedDate
- `page[size]` — Page size
- `page[cursor]` — Opaque continuation cursor

## Response

`200` Success

Under `data`, an array of inventoryTransactionsRow:

| 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 inventory transaction. Format: UUID. Example: `"3a7c1f95-04eb-4d62-8917-5c0e2b8d4a63"`. |
| `itemId` | string | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The unique identifier of the item. Format: UUID. See `id` on GET inventory/items/:id (getItem). Example: `"5f21c8b0-9d34-4a76-8e12-04b93c7de5a8"`. |
| `itemCode` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | yes | The code of the item in `itemId`. Example: `"WIDGET-01"`. |
| `itemName` | string \| null | no | no | no | The name of the item in `itemId`. Example: `"Standard widget"`. |
| `locationId` | string | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The unique identifier of the warehouse. Format: UUID. See `id` on GET inventory/warehouses/:id (getWarehouse). Example: `"e1d84c07-5b39-4a26-9f70-2c8b613ad495"`. |
| `locationCode` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | yes | The code of the warehouse in `locationId`. Example: `"WH-01"`. |
| `locationName` | string \| null | no | no | no | The name of the warehouse in `locationId`. Example: `"Rotterdam Distribution Centre"`. |
| `unitId` | string \| null | no | no | no | The unique identifier of the unit of measure the inventory transaction was recorded in. Format: UUID. For receipts, shipments, and warehouse transfers, it is the unit on the document line. For inventory increases, inventory decreases, and inventory revaluations, it is the item's stocking unit. See `id` on GET inventory/unit-of-measures/:id (getUnitOfMeasure). Example: `"3b7d5e9c-1a24-4f80-9c6d-2e8f70b13a45"`. |
| `unitCode` | string \| null | no | no | no | The code of the unit of measure in `unitId`. Example: `"EA"`. |
| `unitName` | string \| null | no | no | no | The name of the unit of measure in `unitId`. Example: `"Each"`. |
| `transactionDate` | date | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | yes | The date the stock came in or went out, or its value changed. Format: YYYY-MM-DD. Example: `"2026-08-03"`. |
| `inQuantity` | decimal | no | no | yes | The quantity that this inventory transaction brought into stock, in the item's stocking unit. It is 0 when the inventory transaction takes stock out or changes only the value of the stock. Example: `"500.00"`. |
| `outQuantity` | decimal \| null | no | no | yes | The quantity that this inventory transaction took out of stock, in the item's stocking unit. It is 0 when the inventory transaction brings stock in or changes only the value of the stock. Example: `"0.00"`. |
| `unitInQuantity` | decimal \| null | no | no | no | The quantity that this inventory transaction brought into stock, in the unit of measure named by `unitId`. It can differ from `inQuantity`, which is in the item's stocking unit. Example: `"500.00"`. |
| `unitOutQuantity` | decimal \| null | no | no | no | The quantity that this inventory transaction took out of stock, in the unit of measure named by `unitId`. It can differ from `outQuantity`, which is in the item's stocking unit. |
| `unitCost` | decimal \| null | no | no | no | The cost of one unit of the item, in the item's stocking unit and in the currency named by `currency`. When stock goes out, it is the item's cost at that time, from its valuation method. Example: `"3.75"`. |
| `totalCost` | decimal \| null | no | no | yes | The total cost of the stock that this inventory transaction brought in or took out, in the currency named by `currency`. It is positive whichever way the stock moved, so use `inQuantity` and `outQuantity` to tell the direction. On an inventory revaluation, it is the change in the value of the stock: a positive amount raises the value and a negative amount lowers it. Example: `"1875.00"`. |
| `salesAmount` | decimal \| null | no | no | no | The total selling price of the stock on the shipment line, in the currency named by `currency`. It is the line's unit price multiplied by the quantity. Only inventory transactions created by shipments have it. |
| `currency` | string \| null | no | no | no | The currency that `unitCost`, `totalCost`, and `salesAmount` are in. Format: ISO 4217, for example 'USD'. Example: `"EUR"`. |
| `sourceDocumentLineType` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The type of document line the inventory transaction came from. Possible values: 'IMInventorySalesOrderLine', 'IMInventorySalesDeliveryLine', 'IMSalesOrderLine', 'IMInventoryPurchaseReturnLine', 'IMInventorySalesReturnLine', 'IMWarehouseTransferLine', 'IMInventoryDecreaseLine', 'IMInventoryIncreaseLine', 'IMInventoryRevaluationLine', 'IMInventoryTransferLine', 'IMInventoryAdjustmentLine', 'IMInventoryCountLine', 'IMInventoryPutAwayTask', 'IMInventoryPurchaseReturnReversal', 'PurchaseOrderLine', 'IMLandedCostAllocationLine', 'SalesOrderProductItem', 'IMWarehouseTransferOrderLine', 'VendorBillItemBase', 'InvPurchaseDeliveryLine'. Example: `"InvPurchaseDeliveryLine"`. |
| `isReturn` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | no | Whether the inventory transaction comes from a sales return or a purchase return, including the inventory transactions created when a return is canceled. Example: `false`. |
| `isPriceDiff` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | no | Whether the inventory transaction changes only the value of stock, without moving any, such as an inventory revaluation or a landed cost. Example: `false`. |
| `lastModifiedDate` | date-time \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | yes | The date and time the inventory transaction last changed, in UTC. Format: YYYY-MM-DDTHH:mm:ss.sssZ. Changes to the item, warehouse, or unit of measure do not update this field. Example: `"2026-08-03T11:15:00.000Z"`. |

```json
{
  "data": [
    {
      "id": "3a7c1f95-04eb-4d62-8917-5c0e2b8d4a63",
      "itemId": "5f21c8b0-9d34-4a76-8e12-04b93c7de5a8",
      "itemCode": "WIDGET-01",
      "itemName": "Standard widget",
      "locationId": "e1d84c07-5b39-4a26-9f70-2c8b613ad495",
      "locationCode": "WH-01",
      "locationName": "Rotterdam Distribution Centre",
      "unitId": "3b7d5e9c-1a24-4f80-9c6d-2e8f70b13a45",
      "unitCode": "EA",
      "unitName": "Each",
      "transactionDate": "2026-08-03",
      "inQuantity": "500.00",
      "outQuantity": "0.00",
      "unitInQuantity": "500.00",
      "unitOutQuantity": "19.99",
      "unitCost": "3.75",
      "totalCost": "1875.00",
      "salesAmount": "19.99",
      "currency": "EUR",
      "sourceDocumentLineType": "InvPurchaseDeliveryLine",
      "isReturn": false,
      "isPriceDiff": false,
      "lastModifiedDate": "2026-08-03T11:15:00.000Z"
    }
  ],
  "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
