---
title: "POST /clipboard/entries/:id/outbound/:device_id/reconcile"
method: POST
path: "/clipboard/entries/{id}/outbound/{device_id}/reconcile"
tags: ["clipboard"]
---

# POST /clipboard/entries/:id/outbound/:device_id/reconcile

`POST /clipboard/entries/{id}/outbound/{device_id}/reconcile`

## Request

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

Reconciles with the existing outbound task without starting a new transfer.
`expectedAttemptId` fences the call to the attempt the caller is looking at.

## Path parameters

- `id` string, required
- `device_id` string, required

## Request body

- ReconcileOutboundProgressRequest: Request body for `POST /clipboard/entries/{id}/outbound/{deviceId}/reconcile`.
  - `expectedAttemptId` string, nullable: The attempt the caller is looking at. A newer attempt answers `superseded`.

## Response `200`

Reconciliation outcome

- ReconcileOutboundProgressEnvelope: 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` ReconcileOutboundProgressResponse, required: Response body for `POST /clipboard/entries/{id}/outbound/{deviceId}/reconcile`.
    - `state` string, required: `running` | `settled` | `superseded` | `not_retained` | `unsupported` | `unreachable` | `busy`.
  - `ts` integer, required: Server time when the response was built (unix epoch milliseconds).

## Other responses

- `400`: Malformed request
- `500`: Internal server error
- `503`: Outbound progress is unavailable

## Changes

- **2026-10-28** `48a01cf04e4c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/uniclipboard/apis/uniclipboard-daemon-api/changes/clipboard/entries/:id/outbound/:device_id/reconcile/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)
