> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mailbreeze.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Suppress Contact

> Suppress a contact to stop sending emails

Suppress a contact to prevent them from receiving any emails. Unlike deletion, suppression preserves the contact record and email history.

## Path Parameters

<ParamField path="listId" type="string" required>
  The unique list ID (e.g., `lst_abc123`).
</ParamField>

<ParamField path="id" type="string" required>
  The unique contact ID (e.g., `cnt_abc123`).
</ParamField>

## Request Body

<ParamField body="reason" type="string" required>
  Reason for suppression. One of:

  * `manual` - Manual suppression by admin
  * `unsubscribed` - Contact unsubscribed
  * `bounced` - Email address bounced
  * `complained` - Contact reported as spam
  * `spam_trap` - Address identified as spam trap
</ParamField>

## Examples

<CodeGroup>
  ```typescript JavaScript theme={null}
  import { MailBreeze } from "mailbreeze";

  const mailbreeze = new MailBreeze({ apiKey: "sk_live_xxx" });
  const contacts = mailbreeze.contacts("lst_abc123");

  // Suppress manually
  await contacts.suppress("cnt_abc123", "manual");

  // Suppress due to bounce
  await contacts.suppress("cnt_def456", "bounced");

  console.log("Contact suppressed");
  ```

  ```python Python theme={null}
  from mailbreeze import MailBreeze

  client = MailBreeze(api_key="sk_live_xxx")
  contacts = client.contacts("lst_abc123")

  # Suppress manually
  await contacts.suppress("cnt_abc123", "manual")

  # Suppress due to bounce
  await contacts.suppress("cnt_def456", "bounced")

  print("Contact suppressed")
  ```

  ```go Go theme={null}
  client := mailbreeze.NewClient("sk_live_xxx")
  contacts := client.Contacts("lst_abc123")

  // Suppress manually
  err := contacts.Suppress(ctx, "cnt_abc123", "manual")
  if err != nil {
      log.Fatal(err)
  }

  // Suppress due to bounce
  err = contacts.Suppress(ctx, "cnt_def456", "bounced")

  fmt.Println("Contact suppressed")
  ```

  ```php PHP theme={null}
  $mailbreeze = new MailBreeze('sk_live_xxx');

  // Suppress manually
  $mailbreeze->contacts->suppress('lst_abc123', 'cnt_abc123', ['reason' => 'manual']);

  // Suppress due to bounce
  $mailbreeze->contacts->suppress('lst_abc123', 'cnt_def456', ['reason' => 'bounced']);

  echo "Contact suppressed";
  ```

  ```rust Rust theme={null}
  let client = Client::new("sk_live_xxx");
  let contacts = client.contacts("lst_abc123");

  // Suppress manually
  contacts.suppress("cnt_abc123", SuppressReason::Manual).await?;

  // Suppress due to bounce
  contacts.suppress("cnt_def456", SuppressReason::Bounced).await?;

  println!("Contact suppressed");
  ```

  ```bash cURL theme={null}
  curl -X POST "https://api.mailbreeze.com/api/v1/contact-lists/lst_abc123/contacts/cnt_abc123/suppress" \
    -H "Authorization: Bearer sk_live_xxx" \
    -H "Content-Type: application/json" \
    -d '{
      "reason": "manual"
    }'
  ```
</CodeGroup>

## Response

Returns `204 No Content` on success with no response body.

## Suppression Reasons

| Reason         | Description        | Typical Use Case                      |
| -------------- | ------------------ | ------------------------------------- |
| `manual`       | Manual suppression | Admin removing contact, legal request |
| `unsubscribed` | User opted out     | Unsubscribe link clicked              |
| `bounced`      | Hard bounce        | Invalid email address                 |
| `complained`   | Spam complaint     | User marked email as spam             |
| `spam_trap`    | Known spam trap    | Address identified as honeypot        |

## Errors

| Code                 | HTTP Status | Description                        |
| -------------------- | ----------- | ---------------------------------- |
| `CONTACT_NOT_FOUND`  | 404         | Contact with this ID doesn't exist |
| `LIST_NOT_FOUND`     | 404         | List with this ID doesn't exist    |
| `ALREADY_SUPPRESSED` | 409         | Contact is already suppressed      |
| `VALIDATION_ERROR`   | 400         | Invalid suppression reason         |

## Notes

<Note>
  Suppressed contacts are automatically added to the domain's global suppression list. They won't receive emails from any list in your domain.
</Note>

### What happens when a contact is suppressed:

1. Contact status changes to `suppressed`
2. Email is added to global suppression list
3. All future sends to this email are blocked
4. Contact record and history are preserved
5. Contact appears in list stats as suppressed

### To unsuppress a contact:

Contact our support team if you need to remove a contact from the suppression list. This ensures proper review of bounces and complaints before re-enabling sending.
