Retrieve a product
Operation ID: getAccountingProduct
Group: Accounting › Products
Open in the interactive reference
GET /accounting/products/{id}
Read-only: Reads and returns; changes nothing.
Retrieves a product. Use the product's id, not its productNumber or productCode.
The response doesn't include the product's product lines. To get the product lines, use GET accounting/product-lines and filter by productId.
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. |
id |
path | string | yes | The unique identifier of the product you want to retrieve. |
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 |
date | yes | The date the product becomes available. Format YYYY-MM-DD. |
effectiveEndDate |
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<string> | no | The inventory items linked to this product. Used only when isInventory is true. Absent when the product has none. See id on GET inventory/items/:id. |
createdDate |
date-time | no | The date and time the product record was created, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
lastModifiedDate |
date-time | yes | The date and time the product record last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
externalIdentifiers |
array<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 set. |
{
"data": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"productName": "<productName>",
"productCode": "<productCode>",
"productNumber": "<productNumber>",
"description": "<description>",
"internalDescription": "<internalDescription>",
"crmProductId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"effectiveStartDate": "2026-01-15",
"effectiveEndDate": "2026-01-15",
"productFamily": "<productFamily>",
"productType": "<productType>",
"productStatus": "<productStatus>",
"isInventory": true,
"itemIds": [
"<itemIds>"
],
"createdDate": "2026-01-15T09:30:00.000Z",
"lastModifiedDate": "2026-01-15T09:30:00.000Z",
"externalIdentifiers": [
{
"fieldName": "<fieldName>",
"value": "<value>",
"externalUrl": "<externalUrl>"
}
]
},
"diagnostics": [
{
"code": "<code>",
"message": "<message>",
"severity": "error",
"path": [
"<path>"
],
"details": "<details>"
}
]
}
Errors
| Code | Status |
|---|---|
INVALID_ID |
400 |
NOT_FOUND |
400 |
Statuses
400— Invalid request or business failure. Codes: INVALID_ID, NOT_FOUND401— The request carries no valid access token.403— Not authorized404— Not found429— Too many requests from this client address. The response has no body and noRetry-Afterheader.500— Internal server error