# Edit product facts

> Replace a product's facts. Read them with context.products, change what the user asked, and send the whole structuredFacts object back: lists left out are cleared. Call it only when the user asked for this in the conversation; never on your own initiative.

`context.update_product` · write

- **MCP tool:** `context_update_product`. Catalog: reach it with `find_actions` and `run_write_action`, or turn on the full toolset.
- **REST:** `POST /v1/context/update-product`
- **CLI:** `xholic context update-product`
- **Scope:** `write`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`

## Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `productId` | string ≤ 120 chars | Yes | Product id from context.products. |
| `structuredFacts` | object | Yes | The product's full facts object (name, tagline, summary, audience, features, benefits, proofPoints...) as context.products returns it. |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |
