/v1/webhooks
Every webhook on the account.
Needs a key with the webhooks:manage scope.
Query parameters
limitintegerHow many to return, 1 to 100. Default 25.
1 to 100.Default
25.cursorstringThe
next_cursorof the page before. Leave it out for the first page.Up to 200 characters.
Example
/v1/webhookscurl "https://usebluebot.com/api/v1/webhooks" \
-H "Authorization: Bearer $BLUEBOT_API_KEY"Response
200: A page of webhooks.
object"list"requireddataarray of WebhookrequiredShow its 16 fieldsHide its fields
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.
has_morebooleanrequiredWhether another page follows.
next_cursorstring or nullrequiredSend as
cursorfor the next page; null on the last.
{
"object": "list",
"data": [
{
"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": "active",
"paused_at": null,
"pause_reason": null,
"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"
}
],
"has_more": false,
"next_cursor": null
}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. |
Try it
Call this operation from the page with your own key. The key stays in this tab and is forgotten when you leave.