# create_products

Create one or more products. Required fields: name, product group ID, target unit count, and
unit type ID. Optional fields include target occupancy percentage.

The `rate` configuration (amount in cents, currency, interval) is **conditionally** required —
the product group's rate strategy decides:

| Product group rate strategy | `rate` | If you get it wrong |
| --- | --- | --- |
| Standalone | **Required** | `RATE_REQUIRED_FOR_STRATEGY` |
| Derives from a parent | **Must be omitted** | `PRODUCT_RATE_CANNOT_BE_SET_DIRECTLY` |

A derived product's rate is computed from the paired parent product's rate (the parent's billing
interval, with the group's percentage modifier applied), so there is nothing for a caller to set.

<!-- INPUT_BLOCK_START -->

## Input

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `products` | `CreateProductInput[]` | Yes | Array of product entries to create - [CreateProductInput](#createproductinput) |

### CreateProductInput

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | The name of the product |
| `productGroupId` | `string` | Yes | The ID of the product group this product belongs to |
| `rate` | `CreateRateInput \| null` | No | The rate details for the product. Required for a product group with a standalone rate strategy; MUST be omitted for a group that derives its rates from a parent (the rate is derived from the parent product). Explicit null is normalized to omission. - [CreateRateInput](#createrateinput) |
| `targetUnitCount` | `number` | Yes | The target count of units for this product |
| `unitTypeId` | `string` | Yes | The ID of the unit type associated with this product |
| `targetOccupancyPercentage` | `number` | No | The target occupancy percentage (0-100) |

### CreateRateInput

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `amountCents` | `number` | Yes | The amount in cents for the rate |
| `currency` | `string` | Yes | The currency code (e.g., GBP, USD) |
| `interval` | `Interval` | Yes | The interval of the rate - [Interval](#interval) |

### Interval

| Value | Description |
| --- | --- |
| `MONTHLY` | Billed on a monthly basis |
| `WEEKLY` | Billed on a weekly basis |
| `NIGHTLY` | Billed on a nightly basis |

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