Skip to content

List suppressions

Every address on your team's suppression list, newest first.

http
GET /v1/suppressions

Requires a Full access API key.

Query parameters

Cursor-paginated:

ParameterTypeDescription
limitnumberHow many to return. Default 20, min 1, max 100.
afterstringReturn suppressions after this id. Cannot be combined with before.
beforestringReturn suppressions before this id. Cannot be combined with after.
originstringOnly 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.

Transactional email on your own domain.