Skip to the page

API reference

List webhooks

Every webhook on the account.

GET/v1/webhooks

Every webhook on the account.

Needs a key with the webhooks:manage scope. Keys and scopes

Query parameters

  • limitinteger

    How many to return, 1 to 100. Default 25.

    1 to 100.Default 25.

  • cursorstring

    The next_cursor of the page before. Leave it out for the first page.

    Up to 200 characters.

Example

GET/v1/webhooksList webhooks →
curl "https://usebluebot.com/api/v1/webhooks" \
  -H "Authorization: Bearer $BLUEBOT_API_KEY"

Response

200: A page of webhooks.

  • object"list"required
  • dataarray of Webhookrequired
    Show its 16 fields
    • idstringrequired

      A wh_ id.

      Starts with wh_.

    • object"webhook"required
    • urlstringrequired
    • descriptionstring or nullrequired
    • eventsarray of stringsrequired

      The 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_eventsbooleanrequired

      True when it was made with ["*"]: it also receives event types BlueBot adds later.

    • api_versionstringrequired

      The payload version it was made with and keeps.

    • statusstringrequired

      active; failing while deliveries fail (retried for about 3 days); paused by you, or after 72 hours with no successful answer.

      One of active, failing, paused.

    • paused_attimestamp or nullrequired

      When it was paused.

    • pause_reasonstring or nullrequired

      Who paused it: failing (72 hours of failures), customer or staff.

      One of failing, customer, staff.

    • failing_sincetimestamp or nullrequired

      The first failure since the last success.

    • last_success_attimestamp or nullrequired

      The last delivery answered with a 2xx.

    • last_failure_attimestamp or nullrequired

      The last delivery that failed.

    • last_statusinteger or nullrequired

      The HTTP status of the last answer.

    • previous_secret_expires_attimestamp or nullrequired

      After a rotation, when the old secret stops signing alongside the new one.

    • created_attimestamprequired

      When it was made.

  • has_morebooleanrequired

    Whether another page follows.

  • next_cursorstring or nullrequired

    Send as cursor for the next page; null on the last.

Response200
{
  "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.

CodeStatusWhat it means
unauthorized401The request carried no key, or a key BlueBot doesn’t know: mistyped, revoked, or a test key sent to the live API.
insufficient_scope403The key doesn’t carry the scope the endpoint needs. Each endpoint’s reference names its scope.
rate_limited429Too 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.
internal500Something went wrong on BlueBot’s side. It was reported. Send the request again; with an Idempotency-Key that is always safe.
invalid_request400Something 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.