---
title: "List webhook endpoints"
method: GET
path: "/v1/webhooks"
tags: ["webhooks"]
---

# List webhook endpoints

`GET /v1/webhooks`

## Request

- Base URL: `https://us1.platform.bird.com`
- URL: `https://us1.platform.bird.com/v1/webhooks`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `bird_session`

Returns the workspace's webhook endpoints as a cursor-paginated list, newest first by default. Endpoint objects never include the signing secret; to inspect a single endpoint, use [Get a webhook endpoint](/docs/api/reference/get-webhook).

## Query parameters

- `sort` 'created_at' | 'url': Field to sort webhook endpoints by: `created_at` (the default; newest first with the default `order`) or `url`.
- `order` 'asc' | 'desc': Sort direction, ascending or descending.
- `limit` integer
- `starting_after` string
- `ending_before` string
- `include_total` boolean
- `url` string

## Headers

- `X-Workspace-Id` string
- `X-Organization-Id` string

## Response `200`

Paginated list of webhook endpoints.

- WebhookEndpointList
  - `data` WebhookEndpoint[], required
    - `id` string, required
    - `url` string, uri, required: HTTPS URL where the API delivers events for this endpoint.
    - `description` string: Human-readable label for the endpoint.
    - `filter` WebhookFilter, required: Exact match on `mailbox_id`, for `email_mailbox.*` events only; the mailbox must belong to this workspace. Cannot be combined with Realtime app scope. Omit on create for all resources; on update omit to keep, send `null` to clear.
      - `mailbox_id` string, required
    - `events` WebhookEventType[], required: Event types this endpoint is subscribed to; only matching events are delivered. Change the set with [Update a webhook endpoint](/docs/api/reference/update-webhook).
    - `status` 'active' | 'degraded' | 'paused', required: Delivery state of the endpoint. - `active`: The initial state; events are being delivered normally. - `degraded`: Recent deliveries are failing. We keep delivering and retrying, and the endpoint returns to `active` automatically once deliveries succeed again. - `paused`: All delivery is stopped, either because an update set `status` to `paused` or automatically after sustained delivery failures. A paused endpoint never resumes on its own: re-enable it with [Update a webhook endpoint](/docs/api/reference/update-webhook), then [Replay failed deliveries](/docs/api/reference/create-webhook-replay) to recover the deliveries that failed before the pause. Events that arrived while it was paused were never attempted, so a replay does not reach them.
    - `destination` union: How each delivery to the endpoint is built. The type cannot change after the endpoint is created.
      - WebhookRawDestination: Posts the signed event to the endpoint's `url` unchanged.
        - `type` 'webhook', required
      - WebhookConnectorDestination: Sends the request a connector action builds, with the credentials stored for this endpoint. The endpoint's URL comes from its connector setup, so updating the endpoint with a `url` returns a `422`.
        - `type` 'connector', required
        - `connector` WebhookConnectorBinding, required
          - `connector_id` string, required: Stable identifier of a connector, such as `claude_managed_agents`.
          - `action` string, required: Identifier of an action, unique within its connector.
          - `connection_name` string, required: Label of the credentials the endpoint delivers with.
          - `config` ConnectionConfig: Values for the connector's nonsecret fields, keyed by field `name`, such as the URL the endpoint's requests go to. A URL must be HTTPS, on one of the connector's `allowed_origins`, and under its `path_prefix` when it has one. It cannot include user info, a fragment, an IP address as its host, dot segments, or encoded slashes.
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `next_cursor` string, nullable, required: Cursor for the next page. Pass back as `starting_after` to advance forward. `null` when no next page exists.
  - `prev_cursor` string, nullable, required: Cursor for the previous page. Pass back as `ending_before` to step backward. `null` when no previous page exists.
  - `refresh_cursor` string, nullable, required: Refresh anchor, the first row of this response. Pass back as `ending_before` to fetch what precedes it in the current sort order. On a newest-first sort those are the items that have appeared since; on any other sort they are the items that sort earlier, so refreshing such a list means re-fetching it instead. Non-`null` whenever `data` is non-empty; `null` only on an empty page. Distinct from `prev_cursor`.
  - `total` integer, nullable: Total number of items matching the request's filters across all pages. Present only when `include_total=true` was passed; otherwise `null`.

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Insufficient permissions
- `404`: Resource not found
- `422`: The request has invalid field values, violates a business rule, or carries a query parameter the endpoint does not declare. Field validation errors use `type: validation_error` and include the affected fields in `details`. Business-rule errors identify the failed rule in `type`.
- `429`: Rate limit exceeded
- `500`: Internal server error

---

[API](https://skmtc.dev/messagebird/apis/bird-api.md) · [All operations](https://skmtc.dev/messagebird/apis/bird-api/llms.txt) · [OpenAPI document](https://skmtc.dev/messagebird/apis/bird-api/revisions/3e2a50466454?raw)
