# Returns the product with the given identifier.

`GET /accounting/products/{id}`

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

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

## 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`. |
| `id` | path | string | yes | The unique identifier for the product to return. |

## Response

`200` Success

Under `data` (getAccountingProductOutput):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes | The unique identifier for the product. |
| `productName` | string | yes | The product's display name. |
| `productCode` | string | yes | The product's code, unique within the tenant. |
| `productNumber` | string | no | The product number, assigned by the system and unique within the tenant. Absent while none has been assigned. |
| `description` | string | no | A description of the product shown to customers. |
| `internalDescription` | string | no | A description of the product for internal use, not shown to customers. |
| `crmProductId` | string | no | The product's identifier in an external CRM system. |
| `effectiveStartDate` | string (date) | yes | The date the product becomes available. Format YYYY-MM-DD. |
| `effectiveEndDate` | string (date) | no | The date the product is no longer available. Format YYYY-MM-DD. Absent for a product with no end date. |
| `productFamily` | string | no | The product family. Possible values: 'software', 'services', 'physicalProducts'. |
| `productType` | string | no | The product type. Possible values: 'sub', 'termLicense', 'support', 'professionalServices', 'training', 'usage', 'billableTravelExpense', 'bundle', 'hardwareConsumables', 'billablePassThrough', 'merchandise', 'shipping'. |
| `productStatus` | string | 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 | no | Whether the product is tracked as inventory. |
| `itemIds` | array of string | no | The inventory items linked to this product. Used only when isInventory is true. Absent when the product has none. There is no endpoint for inventory items. |
| `createdDate` | string (date-time) | no | The date and time the product record was created, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
| `lastModifiedDate` | string (date-time) | yes | The date and time the product record last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
| `externalIdentifiers` | array of object | no | External identifiers owned by other systems, at most one per fieldName. Absent when the product has none. This collection is read-only. Create and update do not accept it. |
| `externalIdentifiers[].fieldName` | string | yes | The configured key of the external identifier, a camelCase slug rather than the display label. It must match an active external-identifier configuration for products. |
| `externalIdentifiers[].value` | string | yes | The identifier's value in the source system. |
| `externalIdentifiers[].externalUrl` | string | no | An absolute http or https link to the object in the source system. Absent when none is stored. |

## Errors

| Code | Status |
| --- | --- |
| `INVALID_ID` | 400 |
| `NOT_FOUND` | 400 |

## Statuses

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