Skip to content
New to this? Read the Webhooks guide.

Update a webhook

PATCH
/v2/webhooks/{id}
curl --request PATCH \
--url https://api.connect.ms/v2/webhooks/example \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "url": "example", "description": "example", "events": [ "example" ], "apiVersion": "example", "active": true, "autoDisableExempt": true, "autoDisableAfterMinutes": 1, "atRiskAlertPercent": 1 }'

Changes the fields given and leaves the rest as they are. Setting apiVersion and events together on a legacy webhook converts it to v2 deliveries; a secret is issued and returned once if it had none.

id
required
string

The id of the webhook.

Connect-Version
string

The API version to use, for example 2026-10-01. Defaults to the version set on your API key.

Idempotency-Key
string

A unique value of up to 255 characters, so a retried request is not acted on twice. Required for keys in Strict API Mode.

The fields to change. Omitted fields are left as they are.

Media typeapplication/json

The fields to change. Omitted fields are left as they are.

object
url

A new URL to post deliveries to. An absolute http or https URL without embedded credentials.

string
nullable
description

A new description, up to 500 characters.

string
nullable 0 <= 500 characters
events

The event types to deliver, as dotted names such as sms.delivered; at least one. On a legacy webhook, send it together with apiVersion to convert it to v2 deliveries.

Array<string>
nullable
apiVersion

The Connect-Version the delivery bodies should follow. Setting it on a legacy webhook, together with events, converts it to v2 deliveries.

string
nullable
active

Turn deliveries on or off. Setting true also clears an automatic disable.

boolean
nullable
autoDisableExempt

Never switch the webhook off automatically, however long it fails.

boolean
nullable
autoDisableAfterMinutes

How many minutes of continuous failure before the webhook is switched off, between 5 and 10080 (7 days).

integer format: int32
nullable >= 5 <= 10080
atRiskAlertPercent

The percentage of the disable window after which to send one warning per outage, between 0 and 99. 0 means never and 1 means on the first failure.

integer format: int32
nullable <= 99

Example generated

{
"url": "example",
"description": "example",
"events": [
"example"
],
"apiVersion": "example",
"active": true,
"autoDisableExempt": true,
"autoDisableAfterMinutes": 1,
"atRiskAlertPercent": 1
}

The updated webhook.

Media typeapplication/json

A webhook endpoint that receives event deliveries.

object
id
required

The unique id of the webhook.

string
url
required

The URL deliveries are posted to.

string
description

A description for your own reference, or null.

string
nullable
events
required

The event types delivered, as dotted names such as sms.delivered. A legacy webhook (apiVersion null) shows its legacy names instead.

Array<string>
apiVersion

The Connect-Version the delivery bodies follow. Null means the webhook still uses the legacy payload; set apiVersion and v2 event names together on update to convert it.

string
nullable
active
required

True while the webhook receives deliveries.

boolean
autoDisabled
required

True when Connect switched the webhook off after it kept failing. Set active to true to turn it back on.

boolean
autoDisableExempt
required

True when the webhook is never switched off automatically.

boolean
autoDisableAfterMinutes
required

How many minutes of continuous failure switch the webhook off: its own setting, or the default when none is set.

integer format: int32
atRiskAlertPercent
required

The percentage of the disable window after which one warning is sent per outage. 0 means never and 1 means on the first failure; no warning is sent when autoDisableExempt is true.

integer format: int32
failingSince

When (UTC) the current run of failures began, or null when deliveries are succeeding.

string format: date-time
nullable
consecutiveFailures
required

How many delivery attempts in a row have failed. A 429 response from your endpoint is not counted.

integer format: int32
inboundNumber

The inbound number (E.164 format) this webhook is limited to, so it only receives sms.received for that number. Null means the whole workspace.

string
nullable
secretVersion
required

The version of the signing secret, used as the keyid of v2 delivery signatures. Goes up by one on each rotation.

integer format: int32
secret

The secret used to sign deliveries. Only returned by the response that issued it (create, rotate-secret, or an update that converts a legacy webhook); null everywhere else.

string
nullable
createdAt
required

When (UTC) the webhook was created.

string format: date-time

Example generated

{
"id": "example",
"url": "example",
"description": "example",
"events": [
"example"
],
"apiVersion": "example",
"active": true,
"autoDisabled": true,
"autoDisableExempt": true,
"autoDisableAfterMinutes": 1,
"atRiskAlertPercent": 1,
"failingSince": "2026-04-15T12:00:00Z",
"consecutiveFailures": 1,
"inboundNumber": "example",
"secretVersion": 1,
"secret": "example",
"createdAt": "2026-04-15T12:00:00Z"
}

The request is not valid. The detail field says why, and errors lists any problems by field name.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

The API key or bearer token is missing or not valid, or the request signature could not be verified.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

The caller is not allowed to do this, or the workspace is not enabled for v2 webhooks.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

No webhook with that id.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

A request with this Idempotency-Key is still being processed. Retry after the Retry-After header.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

This Idempotency-Key was already used for a different request. Use a new key.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

This API key requires an Idempotency-Key header on every POST and PATCH.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

The service is temporarily unavailable. Retry after the Retry-After header.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}