---
title: "POST /clipboard/entries/{id}/receive/retry"
method: POST
path: "/clipboard/entries/{id}/receive/retry"
tags: ["clipboard"]
---

# POST /clipboard/entries/{id}/receive/retry

`POST /clipboard/entries/{id}/receive/retry`

## Request

- The document declares no server URL.
- Auth: one of:
  - API key in query parameter `auth`
  - API key in header `Authorization`

## Path parameters

- `id` string, required

## Request body

- RetryEntryReceiveRequest: Request body for `POST /clipboard/entries/{id}/receive/retry`.
  - `expectedAttemptId` string, required: The attempt the caller is looking at; a newer attempt answers `superseded`.
  - `itemIds` string[], required: Item ids taken from the latest receive query. Must not be empty.

## Response `200`

Selective receive retry outcome; `accepted` only admits a new attempt

- RetryEntryReceiveEnvelope: 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` RetryEntryReceiveResponse, required: Response body for `POST /clipboard/entries/{id}/receive/retry`.
    - `attemptId` string, nullable: The new attempt, present only for `"accepted"`.
    - `outcome` string, required: `"accepted"` | `"already_receiving"` | `"superseded"` | `"cancellation_incomplete"` | `"unavailable"`. `"accepted"` only means a new attempt was admitted; items are saved when a later query says so.
    - `reason` string, nullable: `"source_unavailable"` | `"access_denied"`, present only for `"unavailable"`.
  - `ts` integer, required: Server time when the response was built (unix epoch milliseconds).

## Other responses

- `400`: Invalid request, such as an empty item selection
- `500`: Internal server error

## Changes

- **2026-10-24** `c3a9ae9d2205`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/uniclipboard/apis/uniclipboard-daemon-api/changes/clipboard/entries/:id/receive/retry/post.md)

---

[API](https://skmtc.dev/uniclipboard/apis/uniclipboard-daemon-api.md) - [All operations](https://skmtc.dev/uniclipboard/apis/uniclipboard-daemon-api/llms.txt) - [OpenAPI document](https://skmtc.dev/uniclipboard/apis/uniclipboard-daemon-api/revisions/48a01cf04e4c?raw)
