---
title: "Get Delivery"
method: GET
path: "/v1/deliveries/{channel}/{delivery_id}"
tags: ["notifications"]
---

# Get Delivery

`GET /v1/deliveries/{channel}/{delivery_id}`

## Request

- Base URL: `https://api.elaan.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.elaan.io/v1/deliveries/{channel}/{delivery_id}`
- Auth: none declared

One delivery with the message exactly as it went out — the frozen render,
not a re-render from the current template. The body is served only here, never
in the list, because it is unbounded text.

## Path parameters

- `channel` 'event' | 'email' | 'push' | 'inbox' | 'web_push', required: Which store to read. `EVENT` is the trigger intake itself — not a delivery channel, but the same question ("what did we send?") one level up, and the parent of the other three.
- `delivery_id` string, required

## Headers

- `authorization` string, nullable

## Response `200`

Successful Response

- DeliveryDetail: A single delivery with its frozen content. `body` is served only here, never in the list — it is unbounded text and 50 of them per page would be brutal. `body_retained` distinguishes "we still hold the rendered message" from "we no longer do". It was added ahead of need, so that offloading bodies (to S3 on the SaaS) or dropping them after a retention window (on-prem) would be an additive change rather than a breaking one. **Contact erasure is the first thing that actually makes it false**: erasing a contact blanks the rendered content of everything already sent to them, and a `body` of `null` has to be distinguishable from a message that was genuinely empty.
  - `item` DeliveryItem, required
    - `id` string, required
    - `channel` 'event' | 'email' | 'push' | 'inbox' | 'web_push', required: Which store to read. `EVENT` is the trigger intake itself — not a delivery channel, but the same question ("what did we send?") one level up, and the parent of the other three.
    - `status` string, required
    - `created_at` string, date-time, required
    - `notification_type_key` string, required
    - `notification_event_id` string, nullable
    - `contact_id` string, nullable
    - `recipient` string, nullable
    - `summary` string, nullable
    - `error` string, nullable
    - `attempts` integer, nullable
    - `next_attempt_at` string, date-time, nullable
    - `sent_at` string, date-time, nullable
    - `provider` string, nullable
    - `language` string, nullable
    - `redacted` boolean
  - `body` string, nullable
  - `body_retained` boolean
  - `data` object, nullable
  - `variables` object, nullable
  - `notes` string, nullable

## Other responses

- `404`: No delivery with this id for this tenant
- `422`: Validation Error

---

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