Suppressions
| Method | Path | Scope | SDK |
|---|---|---|---|
GET | /api/v1/suppressions | any valid key | suppressions.list |
POST | /api/v1/suppressions | suppressions:write | suppressions.add |
DELETE | /api/v1/suppressions/:email | suppressions:write | suppressions.remove |
A suppressed address is never handed to the delivery provider: POST /send fails
with send_failed ("recipient is suppressed") and campaign/sequence sends skip it.
This is the mechanism that protects your sending reputation, so it is enforced
before anything else.
Bounces and complaints are added automatically from provider webhooks. These endpoints exist for manual entries and corrections.
GET /api/v1/suppressions
{
"ok": true,
"suppressions": [
{ "email": "bounced@example.com", "reason": "bounce", "created_at": "2026-07-20T11:02:00.000Z" },
{ "email": "typo@exmaple.com", "reason": "manual", "created_at": "2026-07-25T09:14:00.000Z" }
]
}
reason | Source |
|---|---|
bounce | Hard/soft bounce reported by the provider |
complaint | Recipient marked it as spam |
manual | Added through this endpoint or the console |
global_unsubscribe | Platform-wide opt-out |
Not paginated — the list is expected to stay small relative to the contact list.
POST /api/v1/suppressions
| Field | Type | Notes |
|---|---|---|
email | string | Required. |
reason | bounce | complaint | manual | global_unsubscribe | Defaults to manual. |
curl -X POST https://mailroom.example.com/api/v1/suppressions \
-H "Authorization: Bearer pk_live_…" \
-H "Content-Type: application/json" \
-d '{"email":"typo@exmaple.com","reason":"manual"}'
201
{ "ok": true, "email": "typo@exmaple.com", "reason": "manual" }
Adding an address that is already suppressed is not an error.
DELETE /api/v1/suppressions/:email
URL-encode the address (ada%40example.com).
{ "ok": true, "email": "typo@exmaple.com", "deleted": true }
404 not_found — the address is not on the list.
Un-suppressing makes the address sendable again. Do it for a typo you added by hand or an address the owner has re-verified — not to retry a hard bounce. Repeatedly mailing dead addresses is what gets a sending domain blocked.
Suppression vs unsubscribe
They are different lists. Unsubscribing sets a contact's status to
unsubscribed, which stops marketing mail but still allows transactional mail.
Suppression blocks an address entirely, whether or not a contact exists for it.