# Retrieve a webhook

Source: https://kirora.io/docs/api/reference/getWebhook

`GET /v1/webhooks/{id}`

Requires an API key with the `webhooks:read` scope. [About keys and scopes](https://kirora.io/docs/api/reference/authentication)

Works with integration, agent and partner keys.

Returns one webhook subscription: its URL, events and status. The secret is never returned by a read.

## Path parameters

- `id` (string, required, uuid) — The webhook's id.

## Header parameters

- `Kirora-Workspace` (string, optional, pattern `^[A-Za-z0-9._:-]{1,128}$`) — Partner keys only: the child workspace to act in, by the external id the partner gave it. Without it, a partner key acts in its own workspace. Any other key that sends it is refused with 403, and an unknown workspace is 404.

## Returns

Returns `200 OK` with a `Webhook` in `data`. Otherwise returns an error; [Errors](https://kirora.io/docs/api/reference/errors) lists every code and which to retry.

- `id` (string, required, uuid)
- `url` (string, required, uri)
- `events` (string[], required) — The event types it receives.
- `source` (string | null, required, one of `zapier`, `make`, `n8n`) — The integration that created it; null when created directly.
- `status` (string, required, one of `active`, `paused`, `disabled`) — `disabled` is set only by the platform; `active` re-enables it.
- `previousSecretExpiresAt` (string | null, required, date-time) — Until when the replaced secret still signs requests after a rotation.
- `createdAt` (string, required, date-time)

## Example

```bash
curl https://api.kirora.io/v1/webhooks/018f2a4e-6b1c-7d3e-9f40-37386ae05a6b \
  -H "Authorization: Bearer $KIRORA_API_KEY"
```

Response `200`:

```json
{
  "data": {
    "id": "0192f3f1-2b3c-7d4e-9f50-6b7c8d9e0f1a",
    "url": "https://hooks.acme-shop.com/kirora",
    "events": [
      "contact.created",
      "contact.unsubscribed"
    ],
    "source": null,
    "status": "active",
    "previousSecretExpiresAt": null,
    "createdAt": "2026-10-01T09:30:00.000Z"
  }
}
```
