Reference
Suppressions
Workspace-global block list. Sends to suppressed addresses are rejected at scheduler time.
List suppressions
get
/v1/suppressions curl -X GET "https://api.clement.so/v1/suppressions" \
-H "Authorization: Bearer $CLEMENT_API_KEY" Query parameters
-
limitinteger -
starting_afterstring -
ending_beforestring -
emailstring -
reasonstring
Response200
OK
| Property | Type | Description |
|---|---|---|
object
required
| enum (1) | "list" |
data
required
| array<Suppression> | |
has_more
required
| boolean | |
next_cursor
required
| string | null | |
prev_cursor
required
| string | null |
Example response
{
"object": "list",
"data": [
{
"id": "sup_01HZ8X3J9K7P2QV6R5N4M3T2L8",
"object": "suppression",
"mode": "live",
"email": "alice@example.com",
"reason": "unsubscribe",
"source_send_id": "snd_01HZ8X3J9K7P2QV6R5N4M3T2L4",
"created_at": "2026-04-30T08:14:22Z"
}
],
"has_more": false,
"next_cursor": "string",
"prev_cursor": "string"
} Errors
-
400Invalid request -
401Authentication failed -
403Insufficient scope -
404Not found -
409Conflict -
422Validation failed -
429Rate limited
See Errors for the full envelope and per-code reference.
Add an email to the suppression list
post
/v1/suppressions Idempotent on email — re-POSTing the same email returns the existing row (200) rather than 201.
curl -X POST "https://api.clement.so/v1/suppressions" \
-H "Authorization: Bearer $CLEMENT_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"email": "alice@example.com",
"reason": "unsubscribe"
}' Request body
| Property | Type | Description |
|---|---|---|
email
required
| string (email) | |
reason | enum (3) | "unsubscribe""hard_bounce""manual" |
Response200
Existing
| Property | Type | Description |
|---|---|---|
id
required
| string | |
object
required
| enum (1) | "suppression" |
mode
required
| enum (2) | "live""test" |
email
required
| string (email) | |
reason
required
| enum (3) | "unsubscribe""hard_bounce""manual" |
source_send_id
required
| string | null | |
created_at
required
| string (date-time) |
Example response
{
"id": "sup_01HZ8X3J9K7P2QV6R5N4M3T2L8",
"object": "suppression",
"mode": "live",
"email": "alice@example.com",
"reason": "unsubscribe",
"source_send_id": "snd_01HZ8X3J9K7P2QV6R5N4M3T2L4",
"created_at": "2026-04-30T08:14:22Z"
} Errors
-
400Invalid request -
401Authentication failed -
403Insufficient scope -
404Not found -
409Conflict -
422Validation failed -
429Rate limited
See Errors for the full envelope and per-code reference.
Add up to 1,000 suppressions in one call
post
/v1/suppressions/batch curl -X POST "https://api.clement.so/v1/suppressions/batch" \
-H "Authorization: Bearer $CLEMENT_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"suppressions": [
{
"email": "alice@example.com",
"reason": "unsubscribe"
}
]
}' Request body
| Property | Type | Description |
|---|---|---|
suppressions
required
| array<SuppressionCreate> |
Response200
Result
| Property | Type | Description | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
object
required
| enum (1) | "batch_result" | ||||||||||||||||||||||||
created
required
| array<Suppression> | |||||||||||||||||||||||||
errors
required
| array<object> | Show properties
|
Example response
{
"object": "batch_result",
"created": [
{
"id": "sup_01HZ8X3J9K7P2QV6R5N4M3T2L8",
"object": "suppression",
"mode": "live",
"email": "alice@example.com",
"reason": "unsubscribe",
"source_send_id": "snd_01HZ8X3J9K7P2QV6R5N4M3T2L4",
"created_at": "2026-04-30T08:14:22Z"
}
],
"errors": [
{
"index": 0,
"email": "alice@example.com",
"error": {
"type": "string",
"code": "string",
"message": "string"
}
}
]
} Errors
-
400Invalid request -
401Authentication failed -
403Insufficient scope -
404Not found -
409Conflict -
422Validation failed -
429Rate limited
See Errors for the full envelope and per-code reference.
Retrieve a suppression
get
/v1/suppressions/{id} curl -X GET "https://api.clement.so/v1/suppressions/obj_01HZ8X3J9K7P2QV6R5N4M3T2L1" \
-H "Authorization: Bearer $CLEMENT_API_KEY" Path parameters
-
idstring required
Response200
OK
| Property | Type | Description |
|---|---|---|
id
required
| string | |
object
required
| enum (1) | "suppression" |
mode
required
| enum (2) | "live""test" |
email
required
| string (email) | |
reason
required
| enum (3) | "unsubscribe""hard_bounce""manual" |
source_send_id
required
| string | null | |
created_at
required
| string (date-time) |
Example response
{
"id": "sup_01HZ8X3J9K7P2QV6R5N4M3T2L8",
"object": "suppression",
"mode": "live",
"email": "alice@example.com",
"reason": "unsubscribe",
"source_send_id": "snd_01HZ8X3J9K7P2QV6R5N4M3T2L4",
"created_at": "2026-04-30T08:14:22Z"
} Errors
-
400Invalid request -
401Authentication failed -
403Insufficient scope -
404Not found -
409Conflict -
422Validation failed -
429Rate limited
See Errors for the full envelope and per-code reference.
Remove a suppression
delete
/v1/suppressions/{id} Admin-scope required (recipient comes off the global block list and may receive future sends).
curl -X DELETE "https://api.clement.so/v1/suppressions/obj_01HZ8X3J9K7P2QV6R5N4M3T2L1" \
-H "Authorization: Bearer $CLEMENT_API_KEY" Path parameters
-
idstring required
Response200
Deleted
| Property | Type | Description |
|---|---|---|
id
required
| string | |
object
required
| enum (1) | "suppression" |
mode
required
| enum (2) | "live""test" |
email
required
| string (email) | |
reason
required
| enum (3) | "unsubscribe""hard_bounce""manual" |
source_send_id
required
| string | null | |
created_at
required
| string (date-time) |
Example response
{
"id": "sup_01HZ8X3J9K7P2QV6R5N4M3T2L8",
"object": "suppression",
"mode": "live",
"email": "alice@example.com",
"reason": "unsubscribe",
"source_send_id": "snd_01HZ8X3J9K7P2QV6R5N4M3T2L4",
"created_at": "2026-04-30T08:14:22Z"
} Errors
-
400Invalid request -
401Authentication failed -
403Insufficient scope -
404Not found -
409Conflict -
422Validation failed -
429Rate limited
See Errors for the full envelope and per-code reference.