RefreshDocsConsole →

API reference

Suppressions

List, add and remove suppressed addresses through the API.

The suppression list stops mail to an address before the platform queues it. The worker adds hard bounces and complaints automatically, and the third soft bounce within 7 days; unsubscribes add themselves. This API manages manual entries and reads the whole list. The console has the same controls (see Suppressions).

List suppressions

GET /api/v1/suppressions?email=&reason=manual&limit=25&cursor=…

Newest first. reason is one of hard_bounce, complaint, manual, unsubscribe. Pagination works like List emails.

{
  "object": "list",
  "data": [
    { "object": "suppression", "id": "cmfa…", "email": "dead@example.org", "reason": "hard_bounce", "domain": null, "source": "event:cmf9…", "expires_at": null, "created_at": "2026-08-18T09:12:40.000Z" }
  ],
  "next_cursor": null
}

domain is null for an organization-wide entry, or the domain name for a scoped one.

Add a suppression

POST /api/v1/suppressions
Field Required Notes
email yes Lower-cased.
domain no Scope to one verified domain of the organization; omit for organization-wide.
expires_at no ISO 8601 with offset. The platform ignores the entry after this time.
note no Stored as source (up to 500 characters).

SEND and FULL keys can add; f5_test_ keys cannot (403 test_key_not_allowed). The platform upserts on (organization, scope, email), so a repeat answers 201 with the same id.

Reasons have a precedence: complaint > hard_bounce > unsubscribe > manual. This endpoint creates or updates manual entries only. When the address already has a stronger entry at that scope, the call answers 409 suppression_conflict and changes nothing. An expired entry counts as absent. The worker and the unsubscribe links follow the same rule: they upgrade a weaker entry, clear its expiry, and never downgrade a stronger one. A domain-restricted key must pass domain and can only name its own domains (403 forbidden_domain); it also lists and deletes only entries scoped to those domains.

Remove a suppression

DELETE /api/v1/suppressions/:id

FULL keys only — removing an entry lets mail flow to that address again. Answers { "object": "suppression", "id", "deleted": true }, or 404 not_found for an id outside the organization.