Skip to the documentation
API

Suppressions

Every operation in this group: what it accepts, what it returns and the errors it can answer with.

Operations

The addresses this workspace will not send to: hard bounces and complaints, recorded as they happen, and any address somebody blocks by hand. A send to one is refused for that recipient before anything leaves. A hard bounce stays for good; a complaint or a manual entry can be removed. Reading needs settings:read and changing needs settings:write, the scopes the Blocked addresses screen in Settings is gated on.

GET/suppressions

List suppressed addresses

Scopessettings:readReads

The addresses this workspace will not send to, newest first: every address that bounced hard, complained, or was added by hand. It is the Blocked addresses screen in Settings. A send to a suppressed address is refused for that recipient before anything leaves, and a message whose recipients are all suppressed fails outright.

The list belongs to the whole workspace, so a key limited to particular addresses or domains reads all of it. A row names the recipient and never which of your addresses sent to it.

Requires the settings:read scope.

Query parameters

qstring

Searches the address, the reason and the detail. Words match loosely, and a close spelling is tried when nothing matches exactly.

Up to 320 characters
reasonstring

Keeps one kind.

One of"bounce""complaint""manual"
limitinteger

Rows per page, 1 to 100.

At least 1At most 100Default25
cursorstring

The previous page's nextCursor, passed back as it came. It is opaque: it holds where the last row sat in this list's order, so a row deleted or edited between pages never breaks the walk, and the next page starts at the first row that sorts after it. A value this list did not hand out is a 400 invalid_cursor.

Returns

A page of the suppression list, newest first.

Errors

The errors every operation can return400401403404422500Error catalog

Also available in

SDK
suppressions.list()suppressions.listAll()suppressions.iterate()
CLI
openemail suppressions list
MCP
listSuppressions

POST/suppressions

Add a suppressed address

Scopessettings:writeChanges data

Puts an address on the list by hand, with reason: "manual", so no address in the workspace sends to it until it is removed. Adding one that is already there changes nothing and answers 200 with the row it already holds, whatever its reason. A new entry fires suppression.added.

The list stops mail from every address in the workspace, so a key limited to particular addresses or domains, and an app connected by anybody but the owner, cannot change it.

Requires the settings:write scope.

Request body

emailstringRequired

The address to stop sending to. Trimmed and lower-cased on the way in.

Up to 320 charactersFormatemail

Returns

It was already on the list. The row that was there, unchanged.

Added. Nothing is sent to the address from here on.

Errors

422

invalid_parameter for an address that is not one, or capability_unsupported for a key limited to particular addresses or domains.

The errors every operation can return400401403404500Error catalog

Also available in

SDK
suppressions.add()
CLI
openemail suppressions add
MCP
addSuppression

DELETE/suppressions/{id}

Remove a suppressed address

Scopessettings:writeDeletes

Takes an address off the list, so mail may go to it again. It is Allow again on the Blocked addresses screen, and it fires suppression.removed. Only a complaint or a manual entry can be removed.

Requires the settings:write scope.

Path parameters

idstringRequired

The id from GET /suppressions.

Returns

200object

Removed. Mail may go to the address again.

objectstring
One of"suppression"
idstring
emailstring
deletedboolean
One oftrue

Errors

409

suppression_not_removable: the address bounced hard, so it stays. Check the address is right and send to the corrected one.

422

capability_unsupported for a key limited to particular addresses or domains.

The errors every operation can return400401403404500Error catalog

Also available in

SDK
suppressions.remove()
CLI
openemail suppressions remove
MCP
removeSuppression

Objects

Suppressionobject

objectstring
One of"suppression"
idstring
emailstring

The recipient address, lower-cased. It is somebody you sent to, not one of your own.

reasonstring

bounce is a hard bounce and stays for good. complaint means the recipient marked a message as spam. manual means somebody added it.

One of"bounce""complaint""manual"
detailstring

What the bounce or complaint said, when it said anything.

Can be null
removableboolean

Whether DELETE /suppressions/{id} will take it off. False for a bounce.

createdAtstring
Formatdate-time

SuppressionListobject

objectstring
One of"list"
hasMoreboolean

True when another page follows. Pass nextCursor back as cursor to read it.

nextCursorstring

An opaque cursor for the next page, or null on the last page. Pass it back unchanged.

Can be null