# update_product_services

Update the offering type (INCLUDED or OPTIONAL) for one or more product services. Each entry requires a product ID,
service ID, and the new offering type. Processes updates in parallel with bounded concurrency.

<!-- INPUT_BLOCK_START -->

## Input

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `productServices` | `UpdateProductServiceInput[]` | Yes | Array of product service updates (max 100) - [UpdateProductServiceInput](#updateproductserviceinput) |

### UpdateProductServiceInput

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `productId` | `string` | Yes | The ID of the product |
| `serviceId` | `string` | Yes | The ID of the product service to update |
| `serviceOffering` | `ServiceOffering` | Yes | Whether the service is INCLUDED in the product price or OPTIONAL for the guest - [ServiceOffering](#serviceoffering) |

### ServiceOffering

| Value | Description |
| --- | --- |
| `INCLUDED` | Service is bundled into the product price (charged automatically) |
| `OPTIONAL` | Service is optional and the guest can add it at booking time |

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