---
title: "Create a webhook subscription"
method: POST
path: "/v3/webhooks"
tags: ["Webhooks"]
---

# Create a webhook subscription

`POST /v3/webhooks`

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

Creates a new webhook subscription for the authenticated user.

`scope` defaults to `personal` when omitted. `team`-scope subscriptions are accepted
only when policy allows: any member may create them for public teams or organization
mode; only the team owner may create them for private teams.

Attempting to create an `organization`-scope subscription is rejected with
`code: webHook.organizationScopeNotImplemented` — the value is reserved for future use.

## Request body

- object — Request body for creating a webhook subscription.
  - `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' — 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 — Create the subscription in an enabled (firing) state. Defaults to `true`. After creation, toggle the state via the dedicated `POST /v3/webhooks/{id}/enable` and `POST /v3/webhooks/{id}/disable` endpoints.
  - `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 `201`

Webhook subscription created 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` — Request-body validation failed, or a domain rule rejected the create (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 create a `team`-scope subscription for their team (private team, caller is not the owner).
- `409` — The active webhook-subscription limit for the user has been reached.
- `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)
