Emails
Suppressions
Stop sending to addresses that bounced, complained, or asked not to be contacted.
How suppressions work
Before an email is submitted to Amazon SES, Opensend removes every recipient on the team's suppression list. If no recipient is left, the email ends as Suppressed and fires email.suppressed. Suppressions never expire on their own.
Addresses are added automatically after a permanent bounce or a complaint, and by hand in the dashboard or API. A transient bounce does not suppress an address.
Manage them in the dashboard
Open Emails → Suppressions. The list shows Email, Origin and Added, with search, a date range, an origin filter, and CSV export.
To add an address, click Add suppression, enter the Email, choose the Reason (Manual, Hard bounce, or Complaint) and click Add. Future sends to it are skipped and recorded as suppressed.
To let an address receive mail again, choose Remove on its row and confirm Remove suppression?. Do this only when you know the bounce or complaint is resolved. Removing a bounce or complaint entry queues removal from the team's SES suppression list in each provisioned region.
Use the API
All suppression endpoints need a full-access key. Add a suppression with an email; addresses are trimmed and lowercased, and API additions have origin: "manual".
curl "$OPENSEND_BASE_URL/suppressions" \
-H "Authorization: Bearer $OPENSEND_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"email":"you@example.net"}'The 201 response contains object: "suppression" and id. Adding an address that is already suppressed returns the existing ID and fires no new event.
List suppressions with ID pagination and an optional origin filter: manual, bounce, or complaint. Retrieve or remove one by ID or by URL-encoded email. Entries created from a bounce or complaint carry the email that caused them in source_id; manual entries and older automatic entries have null.
Batch add accepts emails; batch remove accepts exactly one of emails or ids. Batches take 1–100 entries, return results in input order, and succeed or fail as a whole. A missing or foreign entry in a removal refuses the whole batch with 404.
Follow changes
Subscribe to suppression.added and suppression.removed through the webhooks API. Retrying a POST with the same idempotency key fires no second event.