Skip to content

List webhooks

Every webhook on your team. No signing secrets — see below.

http
GET /v1/webhooks

Requires a Full access API key.

Query parameters

ParameterTypeDescription
limitnumberHow many to return. Default 20, min 1, max 100.
afterstringReturn webhooks after this id. Cannot be combined with before.
beforestringReturn webhooks before this id. Cannot be combined with after.

Newest first. Cursor-paginated.

Example

bash
curl "https://api.sendgrail.com/v1/webhooks" \
  -H "Authorization: Bearer $SENDGRAIL_API_KEY"
js
const res = await fetch('https://api.sendgrail.com/v1/webhooks', {
  headers: { Authorization: `Bearer ${process.env.SENDGRAIL_API_KEY}` },
});

const { data, has_more } = await res.json();

Response

json
{
  "object": "list",
  "has_more": false,
  "data": [
    {
      "object": "webhook",
      "id": "4dd369bc-aa82-4ff3-97de-514ae3000ee0",
      "name": "Production handler",
      "endpoint": "https://example.com/handler",
      "events": ["email.sent", "email.bounced"],
      "status": "enabled",
      "created_at": "2026-08-22T15:28:00+00:00"
    }
  ]
}

No secrets in the list

A list is the call you make casually — on a dashboard load, in a health check — and there is no reason for every one of them to hand back every signing secret you own. So signing_secret is omitted here. Fetch a single webhook with Retrieve a webhook when you actually need its secret, or rotate it for a fresh one.

Transactional email on your own domain.