Suppressions
Read and manage the addresses Emailit will not send to.
Create a suppression
Adds an address to your workspace’s suppression list. API and SMTP emails to an address with a recipient suppression get the status suppressed instead of being sent, and campaigns skip suppressed addresses. Requires an API key with full scope.
/suppressionsRequest body
emailstringRequiredAddress to suppress. Emailit stores it in lowercase.
typestringSuppression type. Default recipient. Emailit uses recipient, bounce, complaint and unsubscribe.
Only recipient suppressions stop emails sent through the API and SMTP. Campaigns skip every address with an active suppression of any type. An address can have one suppression per type.
reasonstringFree-text note, for example manual or Asked to stop receiving invoices.
keep_untilstring | number | nullWhen the suppression expires. Accepts an ISO 8601 timestamp (2026-12-31T00:00:00Z), a Unix timestamp in seconds (1798675200), or natural language such as in 30 days or tomorrow at 9am. Omit it or send null for a permanent suppression.
After this time the suppression stops blocking sends. It stays in the list until you delete it.
Returns
Returns 201 Created with the suppression object. Emailit also sends a suppression.created webhook event.
| Status | When |
|---|---|
400 |
email isn’t a valid address or keep_until can’t be parsed (the body has an error string), or email is missing (standard validation error). |
409 |
The address already has a suppression of this type. The body includes the existing suppression. |
{
"object": "suppression",
"id": "sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
"type": "recipient",
"email": "ada@example.com",
"reason": "manual",
"created_at": "2026-10-01T09:30:12.481000+00:00",
"keep_until": null
}{
"error": "Invalid keep_until format. Accepts ISO 8601, Unix timestamp, or natural language like \"tomorrow at 9am\"."
}{
"error": "Suppression already exists for this email and type",
"existing": {
"object": "suppression",
"id": "sup_2xKz0Pq5Rm8Nw2Tb7YdLc4HsE1a",
"type": "recipient",
"email": "ada@example.com",
"reason": "too many bounces",
"created_at": "2026-09-12T16:04:51.207000+00:00",
"keep_until": null
}
}Retrieve a suppression
Returns one suppression, looked up by ID or by email address. Requires an API key with full scope.
/suppressions/:idPath parameters
idstringRequiredSuppression ID (sup_…) or the suppressed address. URL-encode the address, for example ada%40example.com.
An address can have one suppression per type. When you look up by address, Emailit returns one of them; use the ID to target a specific type.
Returns
Returns 200 OK with the suppression object. A suppression whose keep_until is in the past no longer blocks sending.
Returns 400 if id is neither a sup_ ID nor a valid email address, and 404 if no suppression matches.
{
"object": "suppression",
"id": "sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
"type": "recipient",
"email": "ada@example.com",
"reason": "too many bounces",
"created_at": "2026-10-01T09:30:12.481000+00:00",
"keep_until": null
}{
"error": "Invalid identifier. Must be a suppression ID (sup_xxx) or valid email address."
}{
"error": "Suppression not found"
}Update a suppression
Updates a suppression. Send only the fields you want to change; at least one is required. Requires an API key with full scope.
/suppressions/:idPath parameters
idstringRequiredSuppression ID (sup_…) or the suppressed address, URL-encoded (ada%40example.com). When an address has suppressions of several types, use the ID.
Request body
emailstringNew address. Stored in lowercase.
typestringNew type: recipient, bounce, complaint or unsubscribe. Only recipient suppressions stop API and SMTP sends.
reasonstringNew free-text reason.
keep_untilstring | number | nullNew expiry, in the same formats as on create: ISO 8601, a Unix timestamp in seconds, or natural language like in 30 days. Send null to make the suppression permanent.
Returns
Returns 200 OK with the updated suppression. Emailit also sends a suppression.updated webhook event.
| Status | When |
|---|---|
400 |
The body has none of the fields above, email is invalid, or keep_until can’t be parsed. |
404 |
No suppression matches id. |
409 |
Another suppression already exists for the new address and type. |
{
"object": "suppression",
"id": "sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
"type": "recipient",
"email": "ada@example.com",
"reason": "Asked to pause invoices until January",
"created_at": "2026-10-01T09:30:12.481000+00:00",
"keep_until": "2027-01-01T00:00:00.000000+00:00"
}{
"error": "No valid fields provided for update. Provide at least one of: email, type, reason, keep_until"
}{
"error": "Suppression not found"
}{
"error": "Another suppression already exists for this email and type combination"
}List suppressions
Returns the suppressions in your workspace, newest first. The list includes the suppressions Emailit adds automatically after bounces and complaints, and expired suppressions whose keep_until has passed. Requires an API key with full scope.
/suppressionsQuery parameters
pageintegerPage number, starting at 1. Default 1.
limitintegerSuppressions per page, from 1 to 100. Default 10.
searchstringCase-insensitive match on the address or the reason. q works as an alias.
matchstringall (default) requires every key.condition filter to match. or matches any of them. See Filtering.
sortstringSort key: email, reason, type or created_at (default).
orderstringSort direction: asc or desc (default).
Filters
List filters are one layer of key.condition=value query parameters. See Filtering for match, order, direction and the condition list per type.
Filter keys
| Key | Type | Conditions | Notes |
|---|---|---|---|
email | string | exact, not_exact, contains, not_contains, starts_with, ends_with, empty, not_empty | |
reason | string | exact, not_exact, contains, not_contains, starts_with, ends_with, empty, not_empty | |
type | string | exact, not_exact, contains, not_contains, starts_with, ends_with, empty, not_empty | |
created_at | date | exact, before, after, empty, not_empty | |
keep_until | date | exact, before, after, empty, not_empty |
Sort keys
This endpoint sorts with sort set to one of these keys and order set to asc or desc (order=<key> returns 400 here): email, reason, type, created_at, keep_until
On this endpoint, order only accepts asc or desc. Pass the sort key in sort, for example sort=email&order=asc.
Returns
Returns 200 OK with the suppressions in data, plus next_page_url and previous_page_url (null when there is no next or previous page). The page URLs keep your search, filters and sort.
{
"data": [
{
"object": "suppression",
"id": "sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
"type": "recipient",
"email": "ada@example.com",
"reason": "too many bounces",
"created_at": "2026-10-01T09:30:12.481000+00:00",
"keep_until": null
},
{
"object": "suppression",
"id": "sup_2xKz0Pq5Rm8Nw2Tb7YdLc4HsE1a",
"type": "complaint",
"email": "grace@example.com",
"reason": "complaint",
"created_at": "2026-09-28T13:17:40.912000+00:00",
"keep_until": null
}
],
"next_page_url": "/v2/suppressions?limit=10&page=2",
"previous_page_url": null
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Invalid API key"
}Delete a suppression
Deletes a suppression so the address can receive email again. Requires an API key with full scope.
/suppressions/:idPath parameters
idstringRequiredSuppression ID (sup_…) or the suppressed address, URL-encoded (ada%40example.com).
A request by address deletes one suppression. If the address has suppressions of several types, delete each by ID, or repeat the request until it returns 404.
Returns
Returns 200 OK with the id and email of the deleted suppression and deleted: true. Emailit also sends a suppression.deleted webhook event.
Returns 400 if id is neither a sup_ ID nor a valid email address, and 404 if no suppression matches.
{
"object": "suppression",
"id": "sup_2xL1c8NqT4pWm6Rb0YsKd3HvF9e",
"email": "ada@example.com",
"deleted": true
}{
"error": "Invalid identifier. Must be a suppression ID (sup_xxx) or valid email address."
}{
"error": "Suppression not found"
}