# Returns the serial transactions that match the given filters.

`POST /inventory/serial-transactions/search`

Group: Inventory › Serial Transactions · Operation ID: `searchSerialTransactions`

Every criterion is exact or a date range, and criteria combine with AND. Send an empty filters object to return every serial transaction.

[Open in the interactive reference](https://docs.api.lensing.ai/?op=searchSerialTransactions)

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Api-Version` | header | `"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`. |

## Request body

Required, `application/json`: searchSerialTransactionsInput.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `filters` | object | yes | The filters to apply. A serial transaction must match every filter you send. Send an empty object to return all serial transactions. |
| `filters.serialNumberId` | string | no | Limits results to movements of the serial number with this identifier. |
| `filters.serialNumber` | string | no | Limits results to movements of the unit with this serial number. The match is exact. |
| `filters.manufacturerSerialNumber` | string | no | Limits results to movements of the unit with this manufacturer serial number. The match is exact. |
| `filters.isSold` | boolean | no | Limits results to movements of units that have been sold when true, and to those not yet sold when false. This is a property of the unit, not of the movement. |
| `filters.itemId` | string | no | Limits results to movements of this item. This matches the ledger row's item, what moved. |
| `filters.locationId` | string | no | Limits results to movements posted at this location. This matches the ledger row's location, not where the unit is now. |
| `filters.fromDate` | string (date) | no | Limits results to movements on or after this date. Format YYYY-MM-DD. |
| `filters.toDate` | string (date) | no | Limits results to movements on or before this date. Format YYYY-MM-DD. |
| `filters.modifiedSince` | string (date-time) | no | Limits results to serial lines changed on or after this time. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
| `page` | object | no | The pagination controls. Omit for the first page. |
| `page.cursor` | string | no | The cursor from the previous response's pagination.nextCursor. Omit for the first page. |
| `page.size` | number | no | The number of serial transactions per page. Defaults to 50. A value above 200 is treated as 200, not rejected. |

Example:

```json
{
  "filters": {
    "serialNumber": "SN-000412"
  },
  "page": {
    "cursor": "<cursor>",
    "size": 0
  }
}
```

## Response

`200` Success

Under `data` (searchSerialTransactionsOutput):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `items` | array of object | yes | The serial transactions on this page, oldest first. An empty array when nothing matches. |
| `items[].id` | string | yes | The unique identifier for the serial transaction line. This is a different record from the ledger row (transactionId) and the unit (serialNumberId). |
| `items[].serialNumberId` | string | yes | The unique identifier for the serial number that moved. See id on GET inventory/serial-numbers/:id. |
| `items[].serialNumber` | string | no | The serial number stamped on the unit, for example 'SN-000412'. |
| `items[].manufacturerSerialNumber` | string | no | The manufacturer's own serial number for the unit, where one is recorded. |
| `items[].expirationDate` | string (date) | no | The date the unit expires, from the serial record. Format YYYY-MM-DD. |
| `items[].entryDate` | string (date) | no | The date the unit entered inventory, from the serial record. Format YYYY-MM-DD. |
| `items[].isSold` | boolean | no | Whether the unit has since been sold. This is a current property of the unit, not of this movement, so a receipt line shows true once the unit is later sold. |
| `items[].transactionId` | string | no | The unique identifier for the ledger row this serial line belongs to. See id on GET inventory/inventory-transactions/:id. |
| `items[].itemId` | string | no | The unique identifier for the item that moved, from the ledger row, not the unit's current item. See id on GET inventory/items/:id. |
| `items[].itemCode` | string | no | The code of that item. |
| `items[].itemName` | string | no | The display name of that item. |
| `items[].locationId` | string | no | The unique identifier for the location the movement was posted at, from the ledger row, not where the unit is now. See id on GET inventory/warehouses/:id. |
| `items[].locationCode` | string | no | The code of that location. |
| `items[].locationName` | string | no | The display name of that location. |
| `items[].transactionDate` | string (date) | no | The date the movement was posted. Format YYYY-MM-DD. |
| `items[].inQuantity` | string (decimal) | no | The quantity into stock for this movement. It is 1 when the movement received the unit and 0 otherwise. |
| `items[].outQuantity` | string (decimal) | no | The quantity out of stock for this movement. It is 1 when the movement issued the unit and 0 otherwise. |
| `items[].cost` | string (decimal) | no | The cost of the unit at this movement, in the currency named by currency. |
| `items[].currency` | string | no | The currency the cost is stated in. Format ISO 4217, for example 'USD'. |
| `items[].sourceDocumentLineType` | string, one of `"IMInventorySalesOrderLine"`, `"IMInventorySalesDeliveryLine"`, `"IMSalesOrderLine"`, `"IMInventoryPurchaseReturnLine"`, `"IMInventorySalesReturnLine"`, `"IMWarehouseTransferLine"`, `"IMInventoryDecreaseLine"`, `"IMInventoryIncreaseLine"`, `"IMInventoryRevaluationLine"`, `"IMInventoryTransferLine"`, `"IMInventoryAdjustmentLine"`, `"IMInventoryCountLine"`, `"IMInventoryPutAwayTask"`, `"IMInventoryPurchaseReturnReversal"`, `"PurchaseOrderLine"`, `"IMLandedCostAllocationLine"`, `"SalesOrderProductItem"`, `"IMWarehouseTransferOrderLine"`, `"VendorBillItemBase"`, `"InvPurchaseDeliveryLine"` | no | The kind of document line that produced the movement, from the ledger row. |
| `items[].lastModifiedDate` | string (date-time) | no | The date and time the serial line last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
| `pagination` | object | yes | The pagination cursor for this page. |
| `pagination.nextCursor` | string | no | The cursor for the next page. Pass it as page.cursor. Absent on the last page. |
| `pagination.hasMore` | boolean | yes | True when more serial transactions remain beyond this page. |

## Statuses

- `400` — Invalid request or business failure
- `401` — Missing or invalid access token
- `403` — Not authorized
- `404` — Not found
- `429` — Too many requests
- `500` — Internal server error
