# get_product

Get a product by ID with `discardedAt` (null while active), services, rate calendars, eligible services, and optional
allocated units.

<!-- INPUT_BLOCK_START -->

## Input

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `productId` | `string` | Yes | The ID of the product to retrieve |
| `includeAllocatedUnits` | `boolean` | No | Whether to include the product's currently allocated units in the response. Defaults to false to skip the allocation lookup; set true only when the caller actually needs the unit list. |
| `allocatedUnitsFirst` | `number` | No | Maximum number of allocated units to return in the connection (1-25). Only applies when includeAllocatedUnits is true. |
| `allocatedUnitsAfter` | `string` | No | Cursor returned by a previous page of allocated units. Only applies when includeAllocatedUnits is true. |

<!-- INPUT_BLOCK_END -->

<!-- OUTPUT_BLOCK_START -->

## Output

| Field | Type | Description |
| --- | --- | --- |
| `content` | `ContentItem[]` | Array of content items returned by the tool - [ContentItem](#contentitem) |
| `isError` | `boolean` | Whether the tool execution resulted in an error |

### ContentItem

| Field | Type | Description |
| --- | --- | --- |
| `type` | `'text'` | Content type (currently only 'text' is supported) |
| `text` | `string` | The text content to display |

<!-- OUTPUT_BLOCK_END -->
