Audience & broadcasts

Suppressions

The team-wide list of addresses Sooner will not send to, how addresses are added automatically, and how to manage the list.

The suppression list holds addresses that Sooner refuses to send to. It protects your sender reputation by stopping repeated sends to addresses that bounce or complain.

The list belongs to the team, so it covers every project. It applies to all email, both transactional and broadcasts.

How addresses get on the list

Each entry has an origin that says why it was added:

OriginAdded when
bounceAn email to the address hard bounced, which means the receiving server permanently rejected it. Soft bounces, such as a full mailbox, do not suppress the address.
complaintThe recipient marked an email as spam.
manualYou added it in the dashboard or with the API.

Bounces and complaints are added automatically within moments of the event. The entry records the ID of the email that caused it as source_id. Adding an address that is already on the list changes nothing, and the original origin is kept.

Unsubscribes are not suppressions. See Unsubscribes.

What happens to a suppressed address

  • Single email, all recipients suppressed. The request still succeeds and returns an ID. The email is recorded as failed with last_event set to suppressed, and it is not sent. It still counts toward your quota.
  • Several recipients, some suppressed. The email is sent to the rest, and the suppressed addresses are dropped when it goes out.
  • Scheduled emails. The list is checked again when the email is released, so an address suppressed after you scheduled the email is dropped.
  • Broadcasts. Suppressed contacts are skipped. See Broadcasts.

Add an address

In the dashboard, open Audience and choose Suppressions. With the API, use a full_access key:

Shell
curl -X POST https://api.sooner.dev/suppressions \
  -H "Authorization: Bearer $SOONER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "email": "bounced@example.com" }'
JSON
{ "object": "suppression", "id": "sup_Ym91bmNlZEBleGFtcGxlLmNvbQ" }

To add up to 1,000 addresses in one request, use POST /suppressions/batch/add with { "emails": [...] }. Invalid addresses in a batch are skipped.

Addresses are matched in lowercase. Adding or removing entries in the dashboard needs the admin role.

Look up and list

Fetch one entry by its ID or by the email address:

Shell
curl https://api.sooner.dev/suppressions/bounced@example.com \
  -H "Authorization: Bearer $SOONER_API_KEY"
JSON
{
  "object": "suppression",
  "id": "sup_Ym91bmNlZEBleGFtcGxlLmNvbQ",
  "email": "bounced@example.com",
  "origin": "bounce",
  "source_id": "01jcz8w3f2x9k4m7n6p5q2r1s0",
  "created_at": "2026-11-14T10:30:00.000Z"
}

GET /suppressions returns a paginated list, and ?origin=bounce, complaint or manual filters it. Do not rely on a particular order. Page with has_more and after until the list is exhausted. See Pagination.

Remove an address

Remove an address only when you know the problem is fixed, for example when a recipient has set up a new mailbox. Sending to an address that keeps bouncing damages your reputation.

Shell
curl -X DELETE https://api.sooner.dev/suppressions/bounced@example.com \
  -H "Authorization: Bearer $SOONER_API_KEY"
JSON
{ "object": "suppression", "id": "sup_Ym91bmNlZEBleGFtcGxlLmNvbQ", "deleted": true }

To remove many at once, use POST /suppressions/batch/remove with { "emails": [...] }. The response lists only the addresses that were on the list.

If the address bounces or complains again, it is added again.

See the suppressions API reference for every endpoint.