---
title: "Recent webhook deliveries"
method: GET
path: "/v1/projects/{projectId}/webhooks/{endpointId}/deliveries"
tags: ["Webhooks"]
---

# Recent webhook deliveries

`GET /v1/projects/{projectId}/webhooks/{endpointId}/deliveries`

## Request

- Base URL: `https://hootlens-api-368877148687.us-east1.run.app`
- URL: `https://hootlens-api-368877148687.us-east1.run.app/v1/projects/{projectId}/webhooks/{endpointId}/deliveries`
- Auth: HTTP bearer

The latest 25 deliveries to the endpoint, newest first, each with its attempts (time, HTTP status, latency, and a short snippet of a non-2xx answer). Payloads are not returned. Personal access tokens receive 403.

Required token scopes are listed in x-hootlens-scopes. A signed-in person needs the matching permission on the site instead (the viewer and editor roles are presets of the permissions).

## Path parameters

- `projectId` string, required: An identifier: 1 to 80 letters, digits, underscores or hyphens.
- `endpointId` string, required: An identifier: 1 to 80 letters, digits, underscores or hyphens.

## Response `200`

The deliveries.

- object
  - `deliveries` WebhookDelivery[], required
    - `id` string, required
    - `eventId` string, required: The event id, also sent as the webhook-id header.
    - `type` 'snag.spike' | 'finding.new' | 'change.verdict' | 'test.ping', required
    - `createdAt` integer, required: Epoch milliseconds.
    - `status` 'pending' | 'delivered' | 'failed' | 'cancelled', required
    - `attemptCount` integer, required
    - `nextAttemptAt` integer: While pending.
    - `deliveredAt` integer: Epoch milliseconds.
    - `attempts` object[], required: The latest 10 attempts.
      - `at` integer, required: Epoch milliseconds.
      - `status` integer: The HTTP status, when the endpoint answered.
      - `latencyMs` integer, required
      - `error` 'timeout' | 'dns' | 'connect' | 'blocked' | 'tls' | 'status' | 'secret' | 'unavailable'
      - `snippet` string: The start of a non-2xx answer, at most 200 characters.

## Other responses

- `401`: The credential is missing, expired or revoked.
- `403`: The credential or the person's permissions on the site do not permit this action.
- `404`: The site, or the record inside it, does not exist or the caller is not a member (a non-member cannot tell the two apart).
- `429`: A rate limit or a per-site limit was reached.

---

[API](https://skmtc.dev/hootlens/apis/hoot-lens-api.md) · [All operations](https://skmtc.dev/hootlens/apis/hoot-lens-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hootlens/apis/hoot-lens-api/revisions/f64f8dc7b84e?raw)
