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:
| Origin | Added when |
|---|---|
bounce | An 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. |
complaint | The recipient marked an email as spam. |
manual | You 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
failedwithlast_eventset tosuppressed, 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:
curl -X POST https://api.sooner.dev/suppressions \
-H "Authorization: Bearer $SOONER_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "email": "bounced@example.com" }'{ "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:
curl https://api.sooner.dev/suppressions/bounced@example.com \
-H "Authorization: Bearer $SOONER_API_KEY"{
"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.
curl -X DELETE https://api.sooner.dev/suppressions/bounced@example.com \
-H "Authorization: Bearer $SOONER_API_KEY"{ "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.