Skip to main content
import { createClient } from "@mailsai/sdk";

const client = createClient(); // reads MAILS_API_KEY

const result = await client.webhooks.get(
  "whe_01JZX8K3M9Q4P7VN2YB6RTDC0E",
);
console.log(result);
{
  "id": "whe_01JZX8K3M9Q4P7VN2YB6RTDC0E",
  "url": "https://example.com",
  "event_types": ["<event_types>"],
  "description": "<description>",
  "active": false,
  "secret_rotated_at": "2026-10-04T12:00:00.000Z",
  "previous_secret_expires_at": "2026-10-04T12:00:00.000Z",
  "created_at": "<created_at>"
}

Retrieve a webhook endpoint

GET/v1/webhooks/{id}scope · read
import { createClient } from "@mailsai/sdk";

const client = createClient(); // reads MAILS_API_KEY

const result = await client.webhooks.get(
  "whe_01JZX8K3M9Q4P7VN2YB6RTDC0E",
);
console.log(result);
{
  "id": "whe_01JZX8K3M9Q4P7VN2YB6RTDC0E",
  "url": "https://example.com",
  "event_types": ["<event_types>"],
  "description": "<description>",
  "active": false,
  "secret_rotated_at": "2026-10-04T12:00:00.000Z",
  "previous_secret_expires_at": "2026-10-04T12:00:00.000Z",
  "created_at": "<created_at>"
}

Path Parameters

idstringrequired

Webhook endpoint id (whe_…).

Response

idstring

Webhook endpoint id (whe_…).

urlstring

The URL events are POSTed to.

event_typesstring[]

The event types this endpoint receives. * is every type except thread.created, thread.updated, thread.deleted and message.delayed, which reach an endpoint only when it lists them by name.

descriptionstring | null

Your note about the endpoint, or null when it has none.

activeboolean

false while the endpoint is paused: nothing is delivered to it until PATCH /v1/webhooks/{id} sets it back to true.

secret_rotated_atstring | null

When the signing secret was last rotated.

previous_secret_expires_atstring | null

While set, deliveries are signed with both the new and the previous secret; null once the previous one stops signing.

created_atstring

When the endpoint was created (ISO 8601, UTC).

Was this page helpful?