---
title: "Update a webhook subscription"
method: PUT
path: "/v3/webhooks/{id}"
tags: ["Webhooks"]
---

# Update a webhook subscription

`PUT /v3/webhooks/{id}`

<small>_Requires the `webhooks:write` scope (or a broader one that includes it)._</small>

Full replacement of the mutable fields of an existing subscription. `organization`
scope is rejected with `code: webHook.organizationScopeNotImplemented`.

## Path parameters

- `id` integer, required

## Request body

- object — Request body for updating a webhook subscription. `PUT` performs a full replacement of the mutable fields — every required field listed below must be provided on every call. To toggle the paused state use the dedicated `POST /v3/webhooks/{id}/enable` / `POST /v3/webhooks/{id}/disable` endpoints — the `enabled` flag is not accepted on update.
  - `eventType` string, required — Event type this subscription should fire on. Must be one of the values returned by `GET /v3/webhooks/events`.
  - `url` string, uri, required — Absolute `http`/`https` URL that will receive the webhook payload.
  - `scope` 'personal' | 'team' | 'organization', required — Scope that determines which users' activity triggers the webhook. - `personal` — fires only for activity of the subscription owner. - `team` — fires for activity of any member of the owner's team. Creation requires the current user to be the team owner for private teams; anyone can create for public teams. - `organization` — reserved for future use. The API currently rejects creation/update with this value (`errorCode: 5`).
  - `payloadConfig` object — Optional flags that enrich the delivered webhook payload with extra fields from the originating email/contact.
    - `includeEmailUrl` boolean — Include a link to the tracked email in the delivered payload.
    - `includeEmailText` boolean — Include the plain-text body of the email in the delivered payload.
    - `includeProspectCustomFields` boolean — Include the contact's custom-field values in the delivered payload.

## Response `200`

Webhook subscription updated successfully.

- object — A webhook subscription. The subscription fires a single event type to a configured URL when activity matching the subscription's `scope` occurs.
  - `id` integer — Unique identifier for the webhook subscription.
  - `eventType` string — Event type this subscription fires on. One of the values returned by `GET /v3/webhooks/events`.
  - `url` string, uri — Absolute `http`/`https` URL that receives the webhook payload.
  - `scope` 'personal' | 'team' | 'organization' — Scope that determines which users' activity triggers the webhook. - `personal` — fires only for activity of the subscription owner. - `team` — fires for activity of any member of the owner's team. Creation requires the current user to be the team owner for private teams; anyone can create for public teams. - `organization` — reserved for future use. The API currently rejects creation/update with this value (`errorCode: 5`).
  - `enabled` boolean — If `false`, the subscription does not fire. Toggle via the dedicated `POST /v3/webhooks/{id}/enable` and `POST /v3/webhooks/{id}/disable` endpoints — the state cannot be changed through `PUT`.
  - `createdAt` string, date-time — ISO-8601 timestamp (UTC) when the subscription was created.
  - `payloadConfig` object — Optional flags that enrich the delivered webhook payload with extra fields from the originating email/contact.
    - `includeEmailUrl` boolean — Include a link to the tracked email in the delivered payload.
    - `includeEmailText` boolean — Include the plain-text body of the email in the delivered payload.
    - `includeProspectCustomFields` boolean — Include the contact's custom-field values in the delivered payload.

## Other responses

- `400` — Invalid `id`, request-body validation failure, or a domain rule rejected the update (unknown event, invalid URL, invalid scope value, or organization scope reserved for future use).
- `401` — Unauthorized. The response body is empty; check the `WWW-Authenticate` header for the expected scheme.
- `403` — The caller is not allowed to set the subscription to `team` scope for their team (private team, caller is not the owner).
- `404` — Webhook subscription not found or not owned by the caller.
- `429` — Too Many Requests

---

[API](https://skmtc.net/reply/apis/reply-api.md) · [All operations](https://skmtc.net/reply/apis/reply-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/reply/reply-api/revisions/1c3d32eaf95e/schema)
