---
title: "Update a webhook subscription"
method: PATCH
path: "/api/v1/webhooks/{id}"
tags: ["webhooks"]
---

# Update a webhook subscription

`PATCH /api/v1/webhooks/{id}`

## Request

- Base URL: `https://app.blueticked.com`
- URL: `https://app.blueticked.com/api/v1/webhooks/{id}`
- Auth: HTTP bearer

Update a subscription's url, subscribed events, or active flag.

Subscribable events: message.received, message.sent, message.delivered, message.read, message.failed, email.opened, email.clicked, email.bounced, email.complained, contact.created, contact.updated, suppression.created, suppression.removed, suppression.imported, flow.submitted, channel.connected, agent.run.completed, ticket.created, ticket.assigned, ticket.updated, ticket.reopened, ticket.resolved, commerce.order.paid, commerce.order.fulfilled, commerce.order.refunded, commerce.order.abandoned, table_row.created, table_row.status_changed.

suppression.created / suppression.removed fire on every do-not-contact change (STOP, unsubscribe, START resubscribe, dashboard or API add/remove) with { identifier, channel, message_type, reason, business_id, contact_id }.

suppression.imported fires ONCE per bulk opt-out import as a digest with { channel, message_type, reason, business_id, added, skipped, invalid, note }. Re-pull GET /api/v1/suppression to sync the individual rows.

Rotate a webhook secret: Issue a new signing secret for a webhook subscription. The new secret is returned once.

## Path parameters

- `id` string, required

## Request body

- object
  - `events` string[]
  - `is_active` boolean
  - `rotate_secret` boolean

## Response `200`

Success

- object
  - `webhook` object, required
    - `description` string, nullable, required
    - `auto_disabled_at` string, nullable, required
    - `auto_disabled_reason` string, nullable, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `id` string, uuid, required
    - `url` string, required
    - `events` string[], required
    - `is_active` boolean, required
    - `secret` string: The new signing secret, present only when the request set rotate_secret: true. Returned once.
  - `request_id` string, required

## Other responses

- `400`: Validation failed
- `401`: Unauthorized: missing or invalid API key
- `402`: Insufficient wallet balance
- `403`: Forbidden: scope, plan limit, or suspension
- `404`: Not found
- `409`: Conflict (idempotency-key reuse or resource in use)
- `413`: Request body above the endpoint's size limit
- `422`: Understood but refused: the request is well-formed, the action is not permitted for this resource
- `429`: Rate limited
- `500`: Internal error
- `502`: An upstream provider refused or failed the request
- `503`: Channel or send queue unavailable

---

[API](https://skmtc.dev/blueticked/apis/blueticked-api.md) · [All operations](https://skmtc.dev/blueticked/apis/blueticked-api/llms.txt) · [OpenAPI document](https://skmtc.dev/blueticked/apis/blueticked-api/revisions/07132284f4ff?raw)
