---
title: "List deliveries"
method: GET
path: "/webhook/{webhook}/delivery"
tags: ["webhook"]
---

# List deliveries

`GET /webhook/{webhook}/delivery`

## Request

- Base URL: `http://localhost:3030`
- URL: `http://localhost:3030/webhook/{webhook}/delivery`
- Auth: HTTP bearer

Lists a webhook's deliveries, newest first, or oldest first with `since`.

Retrieve a single delivery to see its attempts.

## Path parameters

- `webhook` string, required: The webhook's id, `whk_...`.

## Query parameters

- `state` string[]: Only deliveries in these states. One of `pending`, `delivered`, `failed` or `dead_lettered`. Repeat for several.
- `event_type` string[]: Only deliveries of these event types. Repeat for several.
- `since` integer, nullable: Only deliveries with a `seq` greater than this. Sorts oldest first.
- `cursor` string, nullable: A cursor for pagination: the `next_cursor` from the previous page.
- `size` integer, nullable: Number of results per page, between 1 and 200. Defaults to 20.

## Response `200`

A page of webhook deliveries.

- CollectionDelivery
  - `object` 'list', required: The object's type. Always `list`.
  - `data` Delivery[], required: The results on this page.
    - `object` 'webhook_delivery', required: The object's type. Always `webhook_delivery`.
    - `id` string, required: Unique identifier for the object. Also sent as the `webhook-id` header. A delivery can arrive more than once, so deduplicate on it.
    - `seq` integer, required: The delivery's position in the webhook's log. Use as `since`.
    - `event_type` 'permit.created' | 'case.created', required: The event type.
    - `synthetic` boolean, required: Whether this is a test delivery.
    - `subject` string, required: The id of the object the event is about.
    - `body` object, required: The JSON body, as signed.
    - `body_sha256` string, required: The SHA-256 hash of the body, in hex.
    - `state` 'pending' | 'delivered' | 'failed' | 'dead_lettered', required: One of `pending`, `delivered`, `failed` or `dead_lettered`. `failed` has retries remaining.
    - `attempt_count` integer, required: Attempts made so far.
    - `next_attempt_at` string, date-time, nullable, required: Time of the next attempt. Null unless `state` is `pending` or `failed`.
    - `delivered_at` string, date-time, nullable, required: Time at which the delivery succeeded. Null until it does.
    - `dead_lettered_at` string, date-time, nullable, required: Time at which retries stopped. Null unless `state` is `dead_lettered`.
    - `response_status` integer, nullable, required: The last attempt's HTTP status. Null when it got no response.
    - `response_body_head` string, nullable, required: The first kilobyte of the last attempt's response body. Null when it got no response.
    - `error` string, nullable, required: The last attempt's connection error. Null when it got a response.
    - `created_at` string, date-time, required: Time at which the object was created.
    - `attempt` DeliveryAttempt[], nullable, required: Every attempt, oldest first. Only on `GET /webhook/{webhook}/delivery/{delivery}`; null in a list.
      - `attempt` integer, required: The attempt's number, starting at 1.
      - `attempted_at` string, date-time, required: Time at which the attempt was made.
      - `duration_ms` integer, nullable: Time until the response, in milliseconds. Null when there was no response.
      - `timestamp` integer, required: The `webhook-timestamp` header sent.
      - `signature` string, required: The `webhook-signature` header sent.
      - `response_status` integer, nullable: The response's HTTP status. Null when there was no response.
      - `response_body_head` string, nullable: The first kilobyte of the response body. Null when there was no response.
      - `error` string, nullable: The connection error. Null when there was a response.
  - `has_more` boolean, required: Whether there are more results after this page.
  - `next_cursor` string, nullable, required: The cursor for the next page. Send it as `cursor`. Null on the last page.
  - `suppressed` integer, required: The number of matching results withheld because the plan does not include them.
  - `total` Total, required: The number of matching results.
    - `value` integer, required: The number of matching results.
    - `relation` 'eq' | 'gte', required: One of `eq` (exact) or `gte` (at least `value`). Counts above 10,000 are `gte`.

## Other responses

- `401`: `credential_missing`, `credential_invalid` or `credential_expired`. The request has no valid credential.
- `403`: `scope_missing`, `person_required`, `api_key_not_accepted` or `entitlement_missing`. The credential or plan does not allow this request. `detail` names the reason.
- `404`: `no_such_resource`. No object has that id.
- `422`: `parameter_invalid`, `id_malformed` or a cursor code. A parameter is missing or invalid. `errors` lists each one.
- `429`: `rate_limited`. Too many requests. Retry after the `Retry-After` interval. Nothing is charged.

---

[API](https://skmtc.dev/placestack/apis/placestack-api.md) · [All operations](https://skmtc.dev/placestack/apis/placestack-api/llms.txt) · [OpenAPI document](https://skmtc.dev/placestack/apis/placestack-api/revisions/0ccdf0882668?raw)
