---
title: "Update a webhook endpoint"
method: PATCH
path: "/v1/webhook-endpoints/{endpoint_id}"
tags: ["Webhooks"]
---

# Update a webhook endpoint

`PATCH /v1/webhook-endpoints/{endpoint_id}`

## Request

- Base URL: `https://api-eu.dynamicdocumentapi.com`
- URL: `https://api-eu.dynamicdocumentapi.com/v1/webhook-endpoints/{endpoint_id}`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Partial update; omitted fields keep their value. The secret is not changed — use `POST /v1/webhook-endpoints/{id}/roll-secret`.

## Path parameters

- `endpoint_id` string, required

## Request body

- PatchedWebhookEndpointWrite
  - `description` string
  - `enabled` boolean
  - `events` string[]
  - `headers` object: Extra request headers.
  - `is_default` boolean: Receive events from renders without an inline `webhook`.
  - `managed_by` 'zapier' | 'make' | 'n8n' | 'bubble' | 'pipedream' | 'activepieces' | 'power_automate': Create only. Set from the OAuth token when it belongs to an integration's app (e.g. Zapier's), which may send the same value; API keys can't set it. * `zapier` - zapier * `make` - make * `n8n` - n8n * `bubble` - bubble * `pipedream` - pipedream * `activepieces` - activepieces * `power_automate` - power_automate
  - `template_ids` string[]: Only deliver events for these templates.
  - `url` string, uri: Absolute https URL with a public host and no credentials, on port 443, 80, 8080 or 8443.

## Response `200`

- WebhookEndpoint
  - `created_at` string, date-time, required
  - `description` string, required
  - `disabled_reason` string, nullable, required: Set when Dynamic Document API disabled the endpoint after repeated failures, or because its URL answered `410 Gone`.
  - `enabled` boolean, required
  - `events` string[], required
  - `headers` object, required: Header names; the values are masked.
  - `id` string, required: `whe_…`
  - `is_default` boolean, required
  - `managed_by` 'zapier' | 'make' | 'n8n' | 'bubble' | 'pipedream' | 'activepieces' | 'power_automate' | 'null', nullable, required: The integration (e.g. `zapier`) that created the endpoint for its instant triggers; null for your own endpoints. It is never the default endpoint, the dashboard shows it read-only, and it is deleted when you disconnect the integration or when its URL answers `410 Gone`. * `zapier` - zapier * `make` - make * `n8n` - n8n * `bubble` - bubble * `pipedream` - pipedream * `activepieces` - activepieces * `power_automate` - power_automate
  - `object` string
  - `secret_rotation` WebhookSecretRotation, required
    - `previous_expires_at` string, date-time, nullable, required: When the previous secret stops being accepted.
  - `template_ids` string[], required: Empty list = every template.
  - `updated_at` string, date-time, required
  - `url` string, uri, required

## Other responses

- `400`: Invalid request body (`errors[]` with JSON pointers).
- `401`: Missing, invalid, expired or revoked credentials.
- `403`: Insufficient scope, IP not allowed, workspace suspended or scheduled for deletion, or email not verified.
- `404`: Webhook endpoint not found.
- `429`: Rate limited (`Retry-After`).
- `503`: The control plane is unreachable (`Retry-After`).

## Changes

- **2026-10-19** `0f14bc0000f4`: 2 info
  - added the new optional request property `managed_by`
  - added the required property `managed_by` to the response with the `200` status

[Operation history](https://skmtc.dev/dynamicdocumentapi/apis/dynamic-document-api/changes/v1/webhook-endpoints/:endpoint_id/patch.md)

---

[API](https://skmtc.dev/dynamicdocumentapi/apis/dynamic-document-api.md) · [All operations](https://skmtc.dev/dynamicdocumentapi/apis/dynamic-document-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dynamicdocumentapi/apis/dynamic-document-api/revisions/0f14bc0000f4?raw)
