---
title: "List Webhook Deliveries"
method: GET
path: "/v1/webhooks/{id}/events"
tags: ["Webhooks"]
---

# List Webhook Deliveries

`GET /v1/webhooks/{id}/events`

## Request

- Base URL: `https://api.anchorbrowser.io`
- URL: `https://api.anchorbrowser.io/v1/webhooks/{id}/events`
- Auth: API key in header `anchor-api-key`

Paginated history of every delivery attempt for this webhook (succeeded,
failed, or dead-lettered). Filter by status, event type, or time range.
Retention: 7 days.

## Path parameters

- `id` string, required

## Query parameters

- `limit` integer
- `offset` integer
- `status` 'pending' | 'succeeded' | 'failed' | 'dead'
- `event_type` 'task.completed' | 'task.failed' | 'task.cancelled' | 'task.healed' | 'session.ready' | 'session.completed' | 'session.failed' | 'session.recording.ready' | 'batch.completed' | 'batch.failed' | 'intervention.requested' | 'intervention.resolved' | 'identity.authenticated' | 'identity.authentication_failed': Catalog of webhook event types Anchor can deliver. Adding a new event type is a coordinated change between session-manager (publisher), webhook-dispatcher (consumer), and the dashboard.
- `since` string, date-time
- `until` string, date-time
- `include_payload` 'true' | 'false'

## Response `200`

Page of delivery rows plus pagination metadata.

- WebhookEventsListResponse
  - `events` WebhookEventDeliveryRow[], required
    - `id` string, required: Internal events-row id (one row per logical delivery to one webhook).
    - `external_event_id` string, required: Customer-facing event id. Same value lands in the envelope `id` field.
    - `event_type` 'task.completed' | 'task.failed' | 'task.cancelled' | 'task.healed' | 'session.ready' | 'session.completed' | 'session.failed' | 'session.recording.ready' | 'batch.completed' | 'batch.failed' | 'intervention.requested' | 'intervention.resolved' | 'identity.authenticated' | 'identity.authentication_failed', required: Catalog of webhook event types Anchor can deliver. Adding a new event type is a coordinated change between session-manager (publisher), webhook-dispatcher (consumer), and the dashboard.
    - `status` 'pending' | 'succeeded' | 'failed' | 'dead', required: * `pending` — accepted; delivery in progress or awaiting retry. * `succeeded` — receiver returned 2xx. * `failed` — receiver returned non-retryable 4xx. * `dead` — exhausted all retry attempts.
    - `attempt` integer, required: Attempt number for the most recent completed try (0 = no attempt finished yet, 1 = first attempt, ≤ 6 with default policy).
    - `response_status` integer, nullable: HTTP status code from the most recent attempt, if any.
    - `error_message` string, nullable
    - `scheduled_at` string, date-time, nullable
    - `completed_at` string, date-time, nullable
    - `payload` object: The sanitized event `data` exactly as delivered to your endpoint. Only present when the request sets `include_payload=true`.
  - `pagination` object, required
    - `limit` integer, required: Number of rows in this response (max 100).
    - `offset` integer, required: How many rows were skipped from the beginning of the result set.
    - `total` integer, required: Total matching rows across all pages.

## Other responses

- `404`: Webhook not found in this project.
- `500`: Failed to load webhook events.

## Changes

- **2026-10-16** `b3bfdb98c79e`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/anchorbrowser/apis/anchorbrowser-api/changes/v1/webhooks/:id/events/get.md)

---

[API](https://skmtc.dev/anchorbrowser/apis/anchorbrowser-api.md) - [All operations](https://skmtc.dev/anchorbrowser/apis/anchorbrowser-api/llms.txt) - [OpenAPI document](https://skmtc.dev/anchorbrowser/apis/anchorbrowser-api/revisions/9d755f22df0e?raw)
