# Review programs: publish, remove, withhold

URL: /code/mcp/review/verbs · Id: `page:code/mcp/review/verbs`

> The Review Verbs publish, remove, withhold as MCP do programs, with inputs, result, refusals and an example.

Reference for [Review](/business/nouns/review), one group of [Review programs](/code/mcp/review).

### Review.publish
Publish shows a Review on the Startup’s Pages with its rating counted, whatever the rating. [Verb page](/business/nouns/review/publish?interface=mcp).

```text
do: return await $.Review.publish(input)
```

Emits [`Review.published`](/business/events/Review.published).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `review` | [Review](/business/nouns/review) | Yes | The Review to show. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `review` | [Review](/business/nouns/review) | Yes | The Review, now `published`. |

**Refuses when**

| Check | Error | Fix | Then call |
| --- | --- | --- | --- |
| The key is valid, but its scopes do not allow this operation. | [`forbidden`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |

**Example**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Review.publish({ review: 'review_1XPL2xTlfx' })"
  }
}
```

### Review.remove
Remove takes a Review down for good when its author or its venue asks; the record is kept. [Verb page](/business/nouns/review/remove?interface=mcp).

```text
do: return await $.Review.remove(input)
```

Emits [`Review.removed`](/business/events/Review.removed).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `review` | [Review](/business/nouns/review) | Yes | The Review to take down. |
| `reason` | `string` | Yes | Who asked. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `review` | [Review](/business/nouns/review) | Yes | The Review, now `removed`. |

**Refuses when**

| Check | Error | Fix | Then call |
| --- | --- | --- | --- |
| The key is valid, but its scopes do not allow this operation. | [`forbidden`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |

**Example**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Review.remove({ review: 'review_1XPL2xTlfx', reason: 'authorRequest' })"
  }
}
```

### Review.withhold
Withhold keeps a Review off display for one of five reasons, none of them its rating or its tone. [Verb page](/business/nouns/review/withhold?interface=mcp).

```text
do: return await $.Review.withhold(input)
```

Emits [`Review.withheld`](/business/events/Review.withheld).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `review` | [Review](/business/nouns/review) | Yes | The Review to withhold. |
| `reason` | `string` | Yes | Why it is not shown. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `review` | [Review](/business/nouns/review) | Yes | The Review, now `withheld`. |

**Refuses when**

| Check | Error | Fix | Then call |
| --- | --- | --- | --- |
| The key is valid, but its scopes do not allow this operation. | [`forbidden`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |

**Example**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Review.withhold({ review: 'review_1XPL2xTlfx', reason: 'fake' })"
  }
}
```