---
title: "Delivery log"
method: GET
path: "/webhooks/{id}/deliveries"
tags: ["Webhooks"]
---

# Delivery log

`GET /webhooks/{id}/deliveries`

## Request

- Base URL: `https://optionsbell.com/api/v1`
- URL: `https://optionsbell.com/api/v1/webhooks/{id}/deliveries`
- Auth: API key in header `X-API-Key`

Recent deliveries of one webhook, newest first - both real
`unusual_activity` events and `test` events. Each row records the
outcome of the whole delivery (all attempts), the last HTTP status,
total duration, the error text if any (max 300 characters) and the
number of contracts in the payload. Use it to debug an endpoint or
to see why a webhook was paused.

## Query parameters

- `limit` integer

## Response `200`

Delivery rows

- object
  - `webhook_id` string, required
  - `count` integer, required: Rows in this response.
  - `data` WebhookDelivery[], required
    - `id` string, required: Delivery id, identical to the `X-OptionsBell-Delivery` header and `delivery_id` in the payload.
    - `event` 'unusual_activity' | 'test', required
    - `status` 'delivered' | 'failed', required
    - `attempts` integer, required
    - `http_status` integer, nullable, required: Status of the last attempt; null when no HTTP response was received (timeout, DNS or connection error).
    - `duration_ms` integer, nullable, required: Wall-clock time of the whole delivery including retry delays.
    - `error` string, nullable, required: `HTTP <status>`, `timeout after 5000 ms`, or the network error; null on success. Max 300 characters.
    - `contracts` integer, required: Number of contracts in the payload (the payload itself is not stored).
    - `created_at` string, date-time, required

## Other responses

- `400`: `INVALID_PARAM`: `limit` is not a number.
- `401`: Missing or invalid API key: `MISSING_API_KEY`, `INVALID_API_KEY_FORMAT`, `INVALID_API_KEY`. No rate-limit headers.
- `403`: Key is valid but has no usable subscription: `NO_ACTIVE_SUBSCRIPTION` (no Personal plan on the key) or `SUBSCRIPTION_INACTIVE` (past due, paused, expired, or canceled past its period end). No rate-limit headers.
- `404`: `NOT_FOUND`: no webhook with this id on your subscription (app-created alerts are not reachable through this API).
- `429`: Rate limit exceeded: `RATE_LIMIT_MINUTE` (60/min) or `RATE_LIMIT_DAY` (4,000/day). Carries both rate-limit header sets and `Retry-After` (seconds until the exhausted window opens again). Rejected requests count against the minute window, so back off instead of retrying immediately.
- `500`: Unexpected server error: `INTERNAL_ERROR`. The body and the X-Request-Id header carry the request id.
- `503`: Authentication backend unreachable: `AUTH_UNAVAILABLE`. Retry later. No rate-limit headers.

---

[API](https://skmtc.dev/optionsbell/apis/optionsbell-options-flow-api.md) · [All operations](https://skmtc.dev/optionsbell/apis/optionsbell-options-flow-api/llms.txt) · [OpenAPI document](https://skmtc.dev/optionsbell/apis/optionsbell-options-flow-api/revisions/42db9bcaa61f?raw)
