Appearance
List suppressions
Every address on your team's suppression list, newest first.
http
GET /v1/suppressionsRequires a Full access API key.
Query parameters
| Parameter | Type | Description |
|---|---|---|
limit | number | How many to return. Default 20, min 1, max 100. |
after | string | Return suppressions after this id. Cannot be combined with before. |
before | string | Return suppressions before this id. Cannot be combined with after. |
origin | string | Only suppressions with this origin — bounce, complaint, or manual. |
Example
bash
# every address suppressed for a complaint
curl "https://api.sendgrail.com/v1/suppressions?origin=complaint" \
-H "Authorization: Bearer $SENDGRAIL_API_KEY"js
const res = await fetch(
'https://api.sendgrail.com/v1/suppressions?origin=complaint',
{ headers: { Authorization: `Bearer ${process.env.SENDGRAIL_API_KEY}` } },
);
const { data, has_more } = await res.json();Response
Each row is the full suppression object:
json
{
"object": "list",
"has_more": true,
"data": [
{
"object": "suppression",
"id": "a2f5c1d0-7b3e-4c9a-8f21-6d0e5b4c3a10",
"email": "woz@example.com",
"origin": "bounce",
"source_id": "e139e0a4-8c72-4b1e-9d3a-2f6b0c1d4e58",
"created_at": "2026-07-14T19:44:32+00:00"
}
]
}For what each field means, see Retrieve a suppression.
has_more tells you whether another page exists — there is no total, because a keyset paginator never counts the table. To walk every page, pass the last id you saw as after until has_more is false. See Pagination.
Filtering by origin
origin narrows the list to one kind of suppression. origin=manual is the set you added by hand — and the only set you can remove. origin=bounce and origin=complaint are the permanent ones SendGrail added for you when a send failed or was reported as spam.