Change a webhook
Changes the address, the event types or the description, or pauses or resumes it.
/v1/webhooks/{id}
Changes the address, the event types or the description, or pauses or resumes it. Resuming sends what waited from the last 72 hours.
Needs a key with the webhooks:manage scope.
Path parameters
idstringrequiredThe webhook’s id.
Starts with
wh_.
Request body
urlstringUp to 2,048 characters.
eventsarray of anyReplaces its event types.
["*"]for every type, including types BlueBot adds later; a list stops new types reaching it.descriptionstring or nullUp to 200 characters.
pausedbooleantruepauses it;falseresumes it and sends what waited from the last 72 hours.
Example
/v1/webhooks/wh_1Hq2LxW9cVbN3mKpRtYs0acurl -X PATCH "https://usebluebot.com/api/v1/webhooks/wh_1Hq2LxW9cVbN3mKpRtYs0a" \
-H "Authorization: Bearer $BLUEBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"paused": true
}'Response
200: The webhook after the change.
idstringrequiredA wh_ id.
Starts with
wh_.object"webhook"requiredurlstringrequireddescriptionstring or nullrequiredeventsarray of stringsrequiredThe event types it receives. For a webhook made with
["*"], every type there is now.One of
message.queued,message.sent,message.delivered,message.read,message.failed,message.unconfirmed,message.expired,message.canceled,message.received,message.edited,message.unsent,reaction.added,reaction.removed,chat.created,contact.created,contact.stopped,contact.unstopped,sequence.completed,broadcast.completed,automation.matched,device.online,device.offline,device.check_failed.all_eventsbooleanrequiredTrue when it was made with
["*"]: it also receives event types BlueBot adds later.api_versionstringrequiredThe payload version it was made with and keeps.
statusstringrequiredactive;failingwhile deliveries fail (retried for about 3 days);pausedby you, or after 72 hours with no successful answer.One of
active,failing,paused.paused_attimestamp or nullrequiredWhen it was paused.
pause_reasonstring or nullrequiredWho paused it:
failing(72 hours of failures),customerorstaff.One of
failing,customer,staff.failing_sincetimestamp or nullrequiredThe first failure since the last success.
last_success_attimestamp or nullrequiredThe last delivery answered with a 2xx.
last_failure_attimestamp or nullrequiredThe last delivery that failed.
last_statusinteger or nullrequiredThe HTTP status of the last answer.
previous_secret_expires_attimestamp or nullrequiredAfter a rotation, when the old secret stops signing alongside the new one.
created_attimestamprequiredWhen it was made.
{
"id": "wh_1Hq2LxW9cVbN3mKpRtYs0a",
"object": "webhook",
"url": "https://hooks.zapier.com/hooks/standard/1234567/abcdef/",
"description": "New replies to my CRM",
"events": [
"message.received",
"message.failed"
],
"all_events": false,
"api_version": "2026-11-13",
"status": "paused",
"paused_at": "2026-11-13T19:41:00.000Z",
"pause_reason": "customer",
"failing_since": null,
"last_success_at": "2026-11-13T19:44:13.000Z",
"last_failure_at": null,
"last_status": 200,
"previous_secret_expires_at": null,
"created_at": "2026-11-01T15:10:00.000Z"
}Errors
Every refusal has the same envelope and a page of its own. These are the ones this operation can give.
| Code | Status | What it means |
|---|---|---|
| 401 | The request carried no key, or a key BlueBot doesn’t know: mistyped, revoked, or a test key sent to the live API. | |
| 403 | The key doesn’t carry the scope the endpoint needs. Each endpoint’s reference names its scope. | |
| 429 | Too many requests. A key may make 120 requests a minute. The RateLimit header says how many are left, and Retry-After how long to wait. | |
| 500 | Something went wrong on BlueBot’s side. It was reported. Send the request again; with an Idempotency-Key that is always safe. | |
| 400 | Something in the request doesn’t fit: a missing or malformed field, a bad id, or a combination the endpoint refuses. details names each field. | |
| 404 | There is no such thing on this account. Ids are prefixed by kind, so a message id starts with msg_. |
Try it
Call this operation from the page with your own key. The key stays in this tab and is forgotten when you leave.