# Check suppression

> check_suppression: Checks the suppression status of up to 1,000 delivered records by record id, as of now, and names the lists that suppress each.

Source: https://emailmovers.com/mydatahub/docs/reference/mcp/check_suppression

Checks the suppression status of up to 1,000 delivered records by record id, as of now, and names the lists that suppress each. Use it before every send, because objections reach records after delivery. Free; it needs suppressions:read. Leave suppressed records out of the send, and call report_objection when someone objects. Lawful basis is UK GDPR Article 6(1)(f) legitimate interests; email audiences include corporate subscribers only by default (PECR), so sole traders and ordinary partnerships are left out unless the toggle is changed.

| Property | Value |
| --- | --- |
| Tool name | `check_suppression` |
| Position in tools/list | 20 of 22 |
| Cost | Free |
| Scope | `suppressions:read` |
| Annotations | readOnlyHint true, destructiveHint false, idempotentHint true, openWorldHint false |
| Kind | Read only; idempotent, not destructive, closed world |
| REST equivalent | [`POST /v1/suppressions/check`](https://emailmovers.com/mydatahub/docs/reference/rest/check-suppression.md) |

> **Not yet live.** MyDataHub v2 is built and tested locally and is not yet live. The v2 hosts open at launch, date to confirm. This is what `tools/list` returns from https://mydatahub.emailmovers.com/mcp once v2 launches.

## Input

The schema sets `additionalProperties` to false, so a member that is not listed is refused.

| Member | Type | Required | Description |
| --- | --- | --- | --- |
| `record_ids` | array of string | yes |  |

## Example call

The `params` of a `tools/call` request:

```json
{
  "name": "check_suppression",
  "arguments": {
    "record_ids": ["contact_01JA9X2V7XN3M9R6T1Y5W8ZAK8"]
  }
}
```

## Output

The result carries `structuredContent` that matches this schema, and one line of text that leads with the number.

| Member | Type | Always present | Description |
| --- | --- | --- | --- |
| `checked_at` | string (date-time) | yes |  |
| `results` | array of object | yes |  |
| `results[].record_id` | string | yes | Format: a contact id: contact_ followed by a 26 character ULID in upper case Crockford base32, such as contact_01JA9X2V7XN3M9R6T1Y5W8ZAK8. |
| `results[].suppressed` | boolean | yes |  |
| `results[].suppression_status` | enum: `none`, `objected_to_emailmovers`, `objected_to_licensee`, `deceased`, `left_company` | yes |  |
| `results[].list_ids` | array of string | yes |  |

## Errors

A failed call returns `isError` true. The text content leads with the sentence a person acts on, then the whole problem as JSON, with `code`, `detail`, `next_step` and `did_you_mean`. A 401 and a step-up 403 are answered at HTTP level so the client can start authorisation. See [Errors](https://emailmovers.com/mydatahub/docs/errors.md).
