# Merchandising (/ai/reference/catalog/catalog-merch)

Toolset `catalog_merch`, 7 tools.

## Actions [#actions]

### `product_coverage_clear` [#product_coverage_clear]

Remove the geographic limits from a product so it sells everywhere the store does.

- Action key: `product_coverage.clear`
- Permission: `products.write`
- Approval: Always waits for a person to approve it.
- Effect: Changes the live store.
- Destructive: in compact mode it runs with `run_destructive_action`.
- Retries: safe to repeat with the same input.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `product_id` | string | yes | Product ID |

Example input:

```json
{
  "product_id": "019bb58e-0ec1-79c1-9f40-d39d8d07674b"
}
```

### `product_coverage_set` [#product_coverage_set]

Limit where a product is sold to the given countries or territories.

include_codes are country or territory codes the product is sold in; exclude_codes carves exceptions out of them. Replaces the current coverage.

- Action key: `product_coverage.set`
- Permission: `products.write`
- Approval: Waits for approval when the store requires it for this action.
- Effect: Changes the live store.
- Retries: safe to repeat with the same input.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `product_id` | string | yes | Product ID |
| `include_codes` | list of string | yes | at least 1 items |
| `exclude_codes` | list of string |  |  |

Example input:

```json
{
  "product_id": "019bb58e-0ec1-79c1-9f40-d39d8d07674b",
  "include_codes": [
    "HU",
    "AT"
  ],
  "exclude_codes": []
}
```

### `product_highlighted_features_clear` [#product_highlighted_features_clear]

Remove a product's highlighted features.

- Action key: `product_highlighted_features.clear`
- Permission: `products.write`
- Approval: Always waits for a person to approve it.
- Effect: Changes the live store.
- Destructive: in compact mode it runs with `run_destructive_action`.
- Retries: safe to repeat with the same input.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `product_id` | string | yes | Product ID |

Example input:

```json
{
  "product_id": "019bb58e-0ec1-79c1-9f40-d39d8d07674b"
}
```

### `product_highlighted_features_set` [#product_highlighted_features_set]

Set the short feature list shown at the top of a product's page.

items_text holds one feature per line and replaces the current list; an empty text removes it. Read the current list with product_get include highlighted_features.

- Action key: `product_highlighted_features.set`
- Permission: `products.write`
- Approval: Waits for approval when the store requires it for this action.
- Effect: Changes the live store.
- Retries: safe to repeat with the same input.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `product_id` | string | yes | Product ID |
| `items_text` | string | yes |  |

Example input:

```json
{
  "product_id": "019bb58e-0ec1-79c1-9f40-d39d8d07674b",
  "items_text": "100% cotton\nMachine washable"
}
```

### `product_popularity_set` [#product_popularity_set]

Pin a product's rank in popularity-sorted lists, or link it to an IGDB game.

manual_rank overrides the computed popularity (null removes the override); igdb_game_id links the product to a game catalog entry (null unlinks it). Read the current values with product_get include popularity. Refused while a popularity sync is running.

- Action key: `product_popularity.set`
- Permission: `products.write`
- Approval: Waits for approval when the store requires it for this action.
- Effect: Changes the live store.
- Retries: safe to repeat with the same input.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `product_id` | string | yes | Product ID |
| `manual_rank` | integer or null |  | at least 0 |
| `igdb_game_id` | integer or null |  | above 0 |

Example input:

```json
{
  "product_id": "019bb58e-0ec1-79c1-9f40-d39d8d07674b",
  "manual_rank": 1
}
```

### `product_visibility_set` [#product_visibility_set]

Choose whether a product is listed in the storefront or reachable by direct link only.

- Action key: `product_visibility.set`
- Permission: `products.write`
- Approval: Waits for approval when the store requires it for this action.
- Effect: Changes the live store.
- Retries: safe to repeat with the same input.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `product_id` | string | yes | Product ID |
| `storefront_visibility` | string | yes | one of "public", "direct_link_only" |

Example input:

```json
{
  "product_id": "019bb58e-0ec1-79c1-9f40-d39d8d07674b",
  "storefront_visibility": "direct_link_only"
}
```

### `product_warranty_set` [#product_warranty_set]

Assign a warranty policy to a product, or remove its own so the store default applies.

Pass null to remove the assignment.

- Action key: `product_warranty.set`
- Permission: `products.write`
- Approval: Waits for approval when the store requires it for this action.
- Effect: Changes the live store.
- Retries: safe to repeat with the same input.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `product_id` | string | yes | Product ID |
| `warranty_policy_id` | string or null | yes |  |

Example inputs:

```json
{
  "product_id": "019bb58e-0ec1-79c1-9f40-d39d8d07674b",
  "warranty_policy_id": "019bb819-4494-70f4-a487-4e536b0d042e"
}
```

```json
{
  "product_id": "019bb58e-0ec1-79c1-9f40-d39d8d07674b",
  "warranty_policy_id": null
}
```
