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

# Update webhook subscription

`PATCH /webhook/webhooks/{id}`

Update a webhook subscription.

**Delivery URL Validation**: When updating the `delivery_url`, it will be validated synchronously by sending an HTTP POST request with an HMAC signature. If validation fails (network error, timeout, non-2xx response), the webhook will still be updated but with `status: "disabled"` and `disabled_reason: "delivery_url_validation_failed"`. Validation only occurs when the URL is changed.

**Delivery Timeout**: Each delivery attempt has a hard 60-second timeout. Endpoints that do not respond within 60 seconds are recorded as failed deliveries (`success: false`, `status_code: 0` on the event log) and follow the standard retry policy. Endpoints should acknowledge requests quickly (HTTP 2xx) and defer work asynchronously.

**Important**: Always check the `status` and `disabled_reason` fields in the response to ensure the webhook is active.

## Path parameters

- `id` string, required

## Headers

- `x-apideck-app-id` string, required

## Request body

- UpdateWebhookRequest
  - `description` string, nullable — A description of the object.
  - `status` 'enabled' | 'disabled' — The status of the webhook.
  - `delivery_url` string, uri — The delivery url of the webhook endpoint. The endpoint must respond within 60 seconds or the delivery is recorded as failed.
  - `events` WebhookEventType[] — The list of subscribed events for this webhook. [`*`] indicates that all events are enabled.

## Response `200`

Webhooks

- UpdateWebhookResponse
  - `status_code` integer, required — HTTP Response Status Code
  - `status` string, required — HTTP Response Status
  - `data` Webhook, required
    - `id` string
    - `description` string, nullable — A description of the object.
    - `unified_api` 'accounting' | 'ats' | 'calendar' | 'crm' | 'csp' | 'customer-support' | 'ecommerce' | 'email' | 'email-marketing' | 'expense-management' | 'file-storage' | 'form' | 'hris' | 'lead' | 'payroll' | 'pos' | 'procurement' | 'project-management' | 'script' | 'sms' | 'spreadsheet' | 'subscription-analytics' | 'team-messaging' | 'issue-tracking' | 'time-registration' | 'transactional-email' | 'vault' | 'data-warehouse', required — Name of Apideck Unified API
    - `status` 'enabled' | 'disabled', required — The status of the webhook.
    - `disabled_reason` 'none' | 'retry_limit' | 'usage_limit' | 'delivery_url_validation_failed' — Indicates why the webhook has been disabled. `retry_limit`: webhook reached its retry limit. `usage_limit`: account is over its usage limit. `delivery_url_validation_failed`: delivery URL failed validation during webhook creation or update.
    - `delivery_url` string, uri, required — The delivery url of the webhook endpoint. The endpoint must respond within 60 seconds or the delivery is recorded as failed.
    - `execute_base_url` string, uri, required — The Unify Base URL events from connectors will be sent to after service id is appended.
    - `events` WebhookEventType[], required — The list of subscribed events for this webhook. [`*`] indicates that all events are enabled.
    - `updated_at` string, date-time, nullable — The date and time when the object was last updated.
    - `created_at` string, date-time, nullable — The date and time when the object was created.
  - `_raw` Raw, nullable — Raw response from the integration when raw=true query param is provided

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `402` — Payment Required
- `404` — The specified resource was not found
- `422` — Unprocessable
- `default` — Unexpected error

---

[API](https://skmtc.net/apideck-libraries/apis/webhook-api.md) · [All operations](https://skmtc.net/apideck-libraries/apis/webhook-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/apideck-libraries/webhook-api/versions/d4b6f36bd716/schema)
