> ## Documentation Index
> Fetch the complete documentation index at: https://docs.senderz.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhooks

> Subscribe, list and delete outbound webhook endpoints.

Manage the endpoints that receive Senderz [outbound webhooks](/en/integrations/webhooks-outbound). All endpoints use the [`X-Sender-Tenant` + `X-API-Key`](/en/api-reference/authentication) headers.

## List endpoints

```http theme={null}
GET /api/v1/public/webhooks
```

Returns a **raw array** (not paginated) of endpoints:

<ResponseField name="id" type="string">Endpoint UUID.</ResponseField>
<ResponseField name="name" type="string">Label.</ResponseField>
<ResponseField name="url" type="string">Delivery URL.</ResponseField>
<ResponseField name="events" type="string[]">Subscribed event types.</ResponseField>
<ResponseField name="active" type="boolean">Whether it's active.</ResponseField>

<ResponseField name="createdAt" type="string" />

## Create an endpoint

```http theme={null}
POST /api/v1/public/webhooks
```

<ParamField body="url" type="string" required>HTTPS delivery URL (max 1000).</ParamField>

<ParamField body="events" type="string[]" required>
  Non-empty list of event types from the
  [vocabulary](/en/integrations/webhooks-outbound#event-vocabulary).
</ParamField>

<ParamField body="name" type="string">Label (max 255).</ParamField>

### Response

Returns the endpoint object **plus** the signing secret — shown **once**:

<ResponseField name="signingSecret" type="string">
  Used to verify the `X-Sender-Signature` HMAC on every delivery. Store it
  now; it's never returned again.
</ResponseField>

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.senderz.app/api/v1/public/webhooks \
    -H "X-Sender-Tenant: your-workspace-slug" \
    -H "X-API-Key: your-api-key" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Order events → Zapier",
      "url": "https://hooks.example.com/senderz",
      "events": ["order.completed", "cart.abandoned"]
    }'
  ```

  ```json Response theme={null}
  {
    "success": true,
    "data": {
      "id": "wh_…",
      "name": "Order events → Zapier",
      "url": "https://hooks.example.com/senderz",
      "events": ["order.completed", "cart.abandoned"],
      "active": true,
      "createdAt": "2026-01-10T12:00:00.000Z",
      "signingSecret": "whsec_…"
    }
  }
  ```
</CodeGroup>

## Delete an endpoint

```http theme={null}
DELETE /api/v1/public/webhooks/:id
```

Returns `204 No Content`.

<Note>
  For the delivery format and signature verification, see
  [Outbound webhooks](/en/integrations/webhooks-outbound). For no-code
  consumption, the [Make integration](/en/integrations/make) manages this
  lifecycle for you.
</Note>
