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