---
title: "GET /clipboard/entries/:id/delivery"
method: GET
path: "/clipboard/entries/{id}/delivery"
tags: ["clipboard"]
---

# GET /clipboard/entries/:id/delivery

`GET /clipboard/entries/{id}/delivery`

Returns the entry's origin + per-trusted-peer delivery status for the detail
panel (ADR-008 P3-1 / D15; formerly the GUI-only
`clipboard_entry_delivery_view` Tauri command). Entry-not-found is a normal
degraded-render case for the frontend, so it maps to a plain 404.

## Path parameters

- `id` string, required

## Response `200`

Entry delivery view

- EntryDeliveryViewEnvelope — Canonical success envelope: `{ "data": T, "ts": <unix millis i64> }`. `ts` is `chrono::Utc::now().timestamp_millis()`, set in the webserver handler via [`ApiEnvelope::now`] (the contract carries only the type + the clock helper, not a hard dependency on when the handler reads the clock). `rename_all = "camelCase"` is a no-op for the single-word fields here but is declared for forward-compat. IMPORTANT (utoipa v4): every concrete `ApiEnvelope<X>` that needs a named OpenAPI component is declared in the `#[aliases(...)]` block below. Add a new alias line whenever a new payload type needs enveloping. NEVER register the bare `ApiEnvelope` in `components(schemas(...))` — utoipa errors on a bare generic, and an un-aliased generic inlines an anonymous schema.
  - `data` EntryDeliveryViewDto, required — Mirror of the domain `EntryDeliveryView`: origin + every trusted peer's latest delivery status.
    - `deliveries` EntryDeliveryTargetDto[], required
      - `reasonDetail` string, nullable — Wire-level failure detail for UI tooltips; `null` on success / pending.
      - `status` union, required — Per-target status: `tag` + (on failure) a `reason` sub-discriminator.
        - object
          - `tag` 'pending', required
        - object
          - `tag` 'delivered', required
        - object
          - `tag` 'duplicate', required
        - object
          - `tag` 'unreachable', required
        - object
          - `tag` 'superseded', required
        - object
          - `reason` 'localPolicy' | 'peerRejected' | 'peerIncompatible' | 'io' | 'internal', required — Failure reason. i18n key convention: `delivery.failureReason.<variant>`. Note: "peer offline" is NOT in this enum — it is represented as `EntryDeliveryStatusDto::Unreachable` (a separate status, not a failure).
          - `tag` 'failed', required
      - `targetDeviceId` string, required
      - `targetDeviceName` string, nullable — Human-readable name from the member directory; `null` when unresolved.
      - `updatedAtMs` integer, nullable — `null` when `Pending` (never attempted). Epoch milliseconds.
    - `entryId` string, required
    - `source` union, required — Entry origin. `tag` drives the frontend discriminated union.
      - object
        - `tag` 'local', required
      - object — Pushed from a remote device. `deviceName` is resolved from the space member directory; `null` when unresolved (frontend falls back to a truncated `deviceId`).
        - `device_id` string, required
        - `device_name` string, nullable
        - `tag` 'remote', required
      - object
        - `tag` 'historical', required
  - `ts` integer, required — Server time when the response was built (unix epoch milliseconds).

## Other responses

- `404` — Entry not found
- `500` — Internal server error

---

[API](https://skmtc.net/uniclipboard/apis/uniclipboard-daemon-api.md) · [All operations](https://skmtc.net/uniclipboard/apis/uniclipboard-daemon-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/uniclipboard/uniclipboard-daemon-api/revisions/c1c97b0df585/schema)
