# Suppressions

> Hard bounces, spam complaints and unsubscribes are suppressed automatically, account-wide. How suppression affects sends and how to manage the list.

Source: https://docs.pidgely.com/guides/suppressions/

The suppression list holds addresses Pidgely won't deliver to. It protects your sender reputation: sending again to an address that bounced or complained is the fastest way to land in spam.

## What gets suppressed

| Origin | Added when |
|---|---|
| `bounce` | A **hard bounce**: the receiving server rejected the address permanently (SMTP `5xx` that isn't a policy block or a full mailbox), or an asynchronous bounce report (DSN) arrived |
| `complaint` | The recipient marked a message as spam (feedback loop) |
| `unsubscribe` | The recipient used a one-click unsubscribe link, or you set a contact to `unsubscribed: true` |
| `manual` | You added the address ([`POST /suppressions`](https://docs.pidgely.com/api-reference/suppressions/create/)) |

Temporary failures (soft bounces, full mailboxes) and blocks caused by reputation or policy are **retried, not suppressed**. There is no soft-bounce counter. See [Hard vs soft bounces](https://pidgely.com/blog/hard-vs-soft-bounces/).

## How it affects sending

- The list is **per account and covers every stream**: an address that unsubscribed from a broadcast is also skipped for transactional mail.
- Sends to a suppressed address are **accepted**, not rejected: that recipient ends as `suppressed`, emits `email.suppressed` and does not count toward your quota. The rest of the email is delivered normally.
- The list is checked when you send and again before each delivery attempt.
- An address is suppressed once: the first origin recorded wins, and adding it again is a no-op.

## Managing the list

| Task | Endpoint |
|---|---|
| List, optionally `?origin=bounce` | [`GET /suppressions`](https://docs.pidgely.com/api-reference/suppressions/list/) |
| Look up by id or email | [`GET /suppressions/{id_or_email}`](https://docs.pidgely.com/api-reference/suppressions/retrieve/) |
| Add one / up to 100 | [`POST /suppressions`](https://docs.pidgely.com/api-reference/suppressions/create/), [`POST /suppressions/batch/add`](https://docs.pidgely.com/api-reference/suppressions/batch-add/) |
| Remove one / up to 100 | [`DELETE /suppressions/{id_or_email}`](https://docs.pidgely.com/api-reference/suppressions/delete/), [`POST /suppressions/batch/remove`](https://docs.pidgely.com/api-reference/suppressions/batch-remove/) |

Batch add is not atomic: it stops at the first invalid address and keeps those added before it. Batch remove skips entries that don't exist.

> [!WARNING]
> Only remove a `bounce` or `complaint` suppression when you are sure the address is valid and wants your mail (for example, the person contacted you). Re-sending to bad addresses raises your bounce and complaint rates, and the [reputation guard](https://docs.pidgely.com/rate-limits/#reputation-guard) pauses sending above 4% bounces or 0.1% complaints.

Removing an `unsubscribe` suppression re-subscribes the matching [contact](https://docs.pidgely.com/guides/contacts/#unsubscribes-and-the-suppression-list).
