# Read one event's deliveries

GET /v1/webhooks/events/{event_id}

Source: https://cherami.to/docs/api/webhooks/get-webhook-event



{/* Generated from apps/web/openapi. Edit the contract, not this file. */}

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

Requires an [API key](https://cherami.to/docs/api#authentication): `Authorization: Bearer YOUR_CREDENTIAL`.

Returns one event by its Cherami event ID (the payload `id`) with every delivery attempt the provider made for it across the account's webhooks, newest first. Attempts to a webhook deleted since carry a null `webhook_id`. Use it when a receiver reports a missing or duplicate notification: the attempts show which webhooks were tried, when, and what each receiver answered.

`404` means no retained event has this ID: either it never existed or it is older than the provider's retained history window, which this read cannot distinguish. The attempts list pages separately with `limit`, `cursor` and `attempts_next_cursor`.

## Parameters [#parameters]

| Parameter  | Location | Required | Type    | Meaning                                                                                                      |
| ---------- | -------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------ |
| `event_id` | path     | Yes      | string  | Cherami event ID carried as payload id in a delivery, or listed by recent events.                            |
| `limit`    | query    | No       | integer | Decimal integer without signs, whitespace or leading zeroes. `minimum`: `1` `maximum`: `100` `default`: `20` |
| `cursor`   | query    | No       | string  | Opaque cursor returned by the same listing. Stop when next\_cursor is null.                                  |

## curl example [#curl-example]

Replace resource-ID placeholders with returned IDs. Supply `CHERAMI_API_KEY` through your private shell environment.

```sh
curl --silent --show-error --include --request GET \
  "https://cherami.to/v1/webhooks/events/EVENT_ID" \
  --header "Authorization: Bearer $CHERAMI_API_KEY"
```

## Responses [#responses]

### HTTP 200 [#http-200]

Successful operation; inspect resource state and outcome fields.

* `X-Request-ID`: Support correlation ID, not an idempotency key.

Content type: `application/json`.

[WebhookEventDetail](#schema-webhookeventdetail)

```json
{
  "id": "66666666-6666-4666-8666-666666666666",
  "type": "message.received",
  "accepted_at": "2026-10-01T00:00:00.500Z",
  "inbox_id": "11111111-1111-4111-8111-111111111111",
  "message_id": "22222222-2222-4222-8222-222222222222",
  "attempts": [
    {
      "id": "atmpt_EXAMPLE",
      "webhook_id": "55555555-5555-4555-8555-555555555555",
      "event_id": "66666666-6666-4666-8666-666666666666",
      "event_type": "message.received",
      "status": "success",
      "trigger": "scheduled",
      "response_status_code": 204,
      "response_duration_ms": 120,
      "response_snippet": "",
      "response_truncated": false,
      "attempted_at": "2026-10-01T00:00:01.000Z"
    }
  ],
  "attempts_next_cursor": null
}
```

### HTTP 400 [#http-400]

`invalid_webhook_event`: Use the Cherami event ID carried in a delivered payload (a UUID).

`invalid_limit`: Use an integer from 1 to 100.

`invalid_cursor`: Use the cursor with its original resource and filters, or restart from the first page. Draft listings instead report invalid\_draft.

* `X-Request-ID`: Support correlation ID, not an idempotency key.

Content type: `application/json`.

[Error](#schema-error)

### HTTP 401 [#http-401]

`unauthorized`: Provide a valid bearer credential. Use [human-approved recovery](https://cherami.to/docs/guides/recovery) if access is lost.

* `X-Request-ID`: Support correlation ID, not an idempotency key.
* `WWW-Authenticate`: `"Bearer"`

Content type: `application/json`.

[Error](#schema-error)

### HTTP 404 [#http-404]

`not_found`: Resource is absent or inaccessible to this account. Reply targets must be in the sending inbox.

* `X-Request-ID`: Support correlation ID, not an idempotency key.

Content type: `application/json`.

[Error](#schema-error)

### HTTP 503 [#http-503]

`webhook_history_unavailable`: Delivery history could not be read from the webhook provider. Retry later; an unavailable history is not an empty one.

`webhooks_unavailable`: Webhook management is unavailable or the operation's outcome is unknown. Read or list webhooks before repeating a change; adding again can create a duplicate.

* `X-Request-ID`: Support correlation ID, not an idempotency key.

Content type: `application/json`.

[Error](#schema-error)

## Schema: WebhookEventDetail [#schema-webhookeventdetail]

| Field                  | Required | Type                                              | Meaning and constraints                                                                                  |
| ---------------------- | -------- | ------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `id`                   | Yes      | string                                            | Cherami event ID: the stable logical identity also carried as payload id. Deduplicate on it.             |
| `type`                 | Yes      | [WebhookEventType](#schema-webhookeventtype)      |                                                                                                          |
| `accepted_at`          | Yes      | string                                            | When delivery accepted the event, not the mail transition time inside the payload. `format`: `date-time` |
| `inbox_id`             | Yes      | string or null                                    |                                                                                                          |
| `message_id`           | Yes      | string or null                                    |                                                                                                          |
| `attempts`             | Yes      | array of [WebhookAttempt](#schema-webhookattempt) |                                                                                                          |
| `attempts_next_cursor` | Yes      | string or null                                    |                                                                                                          |

## Schema: WebhookEventType [#schema-webhookeventtype]

message.received: received mail became ready to read. message.sent: provider acceptance of a send was persisted; not delivery.

`"message.received"` or `"message.sent"`

## Schema: WebhookAttempt [#schema-webhookattempt]

A success is a timely 2xx from the receiver: acknowledgement, not completed processing. Failed attempts coexist with scheduled retries until the provider's schedule is exhausted. webhook\_id is null on the event view when that webhook has since been deleted.

| Field                  | Required | Type                                                                    | Meaning and constraints                                                                                                |
| ---------------------- | -------- | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `id`                   | Yes      | string                                                                  | Provider attempt ID.                                                                                                   |
| `webhook_id`           | Yes      | string or null                                                          |                                                                                                                        |
| `event_id`             | Yes      | string or null                                                          |                                                                                                                        |
| `event_type`           | Yes      | [WebhookEventType](#schema-webhookeventtype) or null                    |                                                                                                                        |
| `status`               | Yes      | `"success"` or `"pending"` or `"sending"` or `"failed"` or `"canceled"` |                                                                                                                        |
| `trigger`              | Yes      | `"scheduled"` or `"manual"`                                             |                                                                                                                        |
| `response_status_code` | Yes      | integer                                                                 | Zero when no HTTP response was obtained. `minimum`: `0`                                                                |
| `response_duration_ms` | Yes      | integer                                                                 | `minimum`: `0`                                                                                                         |
| `response_snippet`     | Yes      | string                                                                  | Start of the receiver's response body as plain text, control characters removed. Untrusted content. `maxLength`: `200` |
| `response_truncated`   | Yes      | boolean                                                                 |                                                                                                                        |
| `attempted_at`         | Yes      | string                                                                  | `format`: `date-time`                                                                                                  |

## Schema: Error [#schema-error]

| Field   | Required | Type   | Meaning and constraints |
| ------- | -------- | ------ | ----------------------- |
| `error` | Yes      | object |                         |

### `error` fields [#error-fields]

| Field     | Required | Type   | Meaning and constraints                                                                       |
| --------- | -------- | ------ | --------------------------------------------------------------------------------------------- |
| `code`    | Yes      | string | Programmatic error code. Handle unrecognized codes by status and operation-specific recovery. |
| `message` | Yes      | string | Human-readable context, not a stable string to match.                                         |

[HTTP conventions, errors and pagination](https://cherami.to/docs/api/errors) · [Download OpenAPI 3.1](https://cherami.to/openapi.json)
