# Products

`GET /accounting/products`

Group: Accounting › Products · Operation ID: `products`

Returns a list of products. To match by free text or filter by CRM id, use POST accounting/products/search.

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

## 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`. |

## Query surface

- `id` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `productCode` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `effectiveStartDate` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `effectiveEndDate` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `productFamily` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `productType` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `productStatus` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `isInventory` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `lastModifiedDate` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- Orderable: id, productCode, productName, productStatus, productFamily, productType, isInventory, effectiveStartDate, effectiveEndDate, lastModifiedDate
- Selectable: id, productName, productCode, productNumber, description, internalDescription, crmProductId, effectiveStartDate, effectiveEndDate, productFamily, productType, productStatus, isInventory, lastModifiedDate

## Response

`200` Success

Under `data`, an array of productsRow:

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | no | The unique identifier for the product. |
| `productName` | string | no | The product's display name. |
| `productCode` | string | no | The product's code, unique within the tenant. |
| `productNumber` | string or null | no | The product number, assigned by the system and unique within the tenant. Absent while none has been assigned. |
| `description` | string or null | no | A description of the product shown to customers. |
| `internalDescription` | string or null | no | A description of the product for internal use, not shown to customers. |
| `crmProductId` | string or null | no | The product's identifier in an external CRM system. |
| `effectiveStartDate` | string (date) | no | The date the product becomes available. Format YYYY-MM-DD. |
| `effectiveEndDate` | string (date) or null | no | The date the product is no longer available. Format YYYY-MM-DD. Absent for a product with no end date. |
| `productFamily` | string or null | no | The product family. Possible values: 'software', 'services', 'physicalProducts'. |
| `productType` | string or null | no | The product type. Possible values: 'sub', 'termLicense', 'support', 'professionalServices', 'training', 'usage', 'billableTravelExpense', 'bundle', 'hardwareConsumables', 'billablePassThrough', 'merchandise', 'shipping'. |
| `productStatus` | string or null | no | The product's availability status, computed by the system. Possible values: 'draft', 'available', 'unavailable', 'incomplete'. It is derived from the product's lines, pricing and effective dates and cannot be set directly. |
| `isInventory` | boolean or null | no | Whether the product is tracked as inventory. |
| `lastModifiedDate` | string (date-time) | no | The date and time the product record last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |

## 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
