> ## Documentation Index
> Fetch the complete documentation index at: https://dronebundle.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# List Webhooks

> List all webhook subscriptions in your workspace.

Requires an API key with `read_only` or `full_access` scope.

Returns a paginated list of webhooks. Results are returned in pages of up to 50 webhooks.

## Query parameters

<ParamField query="cursor" type="string">
  Pagination cursor from a previous response. Omit for the first page.
</ParamField>

## Response

<ResponseField name="webhooks" type="object[]">
  Array of webhook objects.

  <Expandable title="webhook object">
    <ResponseField name="id" type="string">
      Webhook ID.
    </ResponseField>

    <ResponseField name="name" type="string">
      Webhook name.
    </ResponseField>

    <ResponseField name="url" type="string">
      The HTTPS endpoint that receives webhook deliveries.
    </ResponseField>

    <ResponseField name="event_types" type="string[]">
      List of event types this webhook is subscribed to.
    </ResponseField>

    <ResponseField name="status" type="string">
      Webhook status. Either `active` or `paused`.
    </ResponseField>

    <ResponseField name="failure_count" type="number">
      Number of consecutive delivery failures. Resets to `0` when reactivated.
    </ResponseField>

    <ResponseField name="created" type="number">
      Unix timestamp (milliseconds) when the webhook was created.
    </ResponseField>

    <ResponseField name="updated" type="number">
      Unix timestamp (milliseconds) when the webhook was last updated.
    </ResponseField>

    <ResponseField name="created_by" type="object | null">
      The user or API key that created the webhook.

      <Expandable title="properties">
        <ResponseField name="id" type="string">
          User ID or API key ID.
        </ResponseField>

        <ResponseField name="email" type="string | null">
          User email. `null` for API key-created webhooks.
        </ResponseField>

        <ResponseField name="first_name" type="string | null">
          First name, or API key name for API key-created webhooks.
        </ResponseField>

        <ResponseField name="last_name" type="string | null">
          Last name. `null` for API key-created webhooks.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="last_triggered_at" type="number | null">
      Unix timestamp (milliseconds) of the last delivery attempt, or `null` if never triggered.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="count" type="number">
  Number of webhooks in the current page.
</ResponseField>

<ResponseField name="cursor" type="string | null">
  Cursor for the next page. `null` when there are no more results.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET https://api.dronebundle.com/v1/webhooks \
    -H "Authorization: Bearer v1_your_api_key_here"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "webhooks": [
      {
        "id": "019d5221-b413-71a9-a56b-f70bc91efe63",
        "name": "Project notifications",
        "url": "https://hooks.example.com/dronebundle",
        "event_types": ["project.created", "project.updated"],
        "status": "active",
        "failure_count": 0,
        "created": 1743400000000,
        "updated": 1743400000000,
        "created_by": {
          "id": "user-abc-123",
          "email": "sarah@example.com",
          "first_name": "Sarah",
          "last_name": "Chen"
        },
        "last_triggered_at": 1743500000000
      }
    ],
    "count": 1,
    "cursor": null
  }
  ```
</ResponseExample>
