# /webhooks

9 routes.

## POST /v1/webhooks

Subscribe to events (the secret is shown once)

**Scopes** — `webhooks:write`

**Request body**

| field | type | | limit |
|---|---|---|---|
| `url` | string | required | max 2048 chars, min 1 |
| `events` | array of `todo.created` · `todo.updated` · `todo.deleted` · `container.created` · `container.updated` · `container.deleted` · `inbox.created` · `inbox.updated` · `inbox.deleted` · `tag.created` · `tag.updated` · `tag.deleted` · `filter.created` · `filter.updated` · `filter.deleted` · `attachment.created` · `attachment.updated` · `attachment.deleted` · `webhook.ping` · `webhook.disabled` | required | max 20 items |
| `description` | string | optional | max 256 chars, — |

**Errors** — [validation_failed](/errors/validation_failed) · [rate_limited](/errors/rate_limited) · [unauthorized](/errors/unauthorized)

## GET /v1/webhooks

List subscriptions

**Scopes** — `webhooks:write`

**Errors** — [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)

## GET /v1/webhooks/{id}

One subscription

**Scopes** — `webhooks:write`

**Errors** — [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)

## PATCH /v1/webhooks/{id}

Change url, events or active

**Scopes** — `webhooks:write`

**Request body**

| field | type | | limit |
|---|---|---|---|
| `url` | string | optional | max 2048 chars, min 1 |
| `events` | array of `todo.created` · `todo.updated` · `todo.deleted` · `container.created` · `container.updated` · `container.deleted` · `inbox.created` · `inbox.updated` · `inbox.deleted` · `tag.created` · `tag.updated` · `tag.deleted` · `filter.created` · `filter.updated` · `filter.deleted` · `attachment.created` · `attachment.updated` · `attachment.deleted` · `webhook.ping` · `webhook.disabled` | optional | max 20 items |
| `active` | boolean | optional | — |
| `description` | string | optional | max 256 chars, — |

**Errors** — [validation_failed](/errors/validation_failed) · [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)

## DELETE /v1/webhooks/{id}

Delete a subscription

**Scopes** — `webhooks:write`

**Errors** — [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)

## POST /v1/webhooks/{id}/rotate-secret

New secret; the old one verifies for 24 h

**Scopes** — `webhooks:write`

**Errors** — [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)

## POST /v1/webhooks/{id}/ping

Deliver a webhook.ping event

**Scopes** — `webhooks:write`

**Errors** — [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)

## GET /v1/webhooks/{id}/deliveries

The last 100 delivery attempts

**Scopes** — `webhooks:write`

**Query**

| parameter | type | | limit |
|---|---|---|---|
| `limit` | integer | optional | max 200 |

**Errors** — [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)

## POST /v1/webhooks/{id}/deliveries/{did}/redeliver

Queue the same event again

**Scopes** — `webhooks:write`

**Errors** — [unauthorized](/errors/unauthorized) · [rate_limited](/errors/rate_limited)
