---
title: "GET /member/shared-device-refresh/{request_id}"
method: GET
path: "/member/shared-device-refresh/{request_id}"
tags: ["member"]
---

# GET /member/shared-device-refresh/{request_id}

`GET /member/shared-device-refresh/{request_id}`

Returns the complete current snapshot for one refresh round. Unknown or
expired requests return a stable `shared_device_refresh_not_found` error.

## Path parameters

- `request_id` string, required

## Response `200`

- SharedDeviceRefreshEnvelope — 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` SharedDeviceRefreshDto, required — Complete Engine-owned result for one shared-device refresh request. Counts are mirrored verbatim from the Engine. The daemon and frontend must not derive or correct device states from counts.
    - `alreadyPresentCount` integer, required
    - `connectedCount` integer, required
    - `connectingCount` integer, required
    - `devices` SharedDeviceRefreshDeviceDto[], required
      - `deviceId` string, required
      - `displayName` string, required
      - `state` 'discovered' | 'connecting' | 'connected' | 'already_present' | 'waiting_for_peer' | 'waiting_for_update' | 'version_incompatible' | 'rejected', required — Stable per-device state produced by the Engine.
    - `discoveredCount` integer, required
    - `phase` 'started' | 'discovering' | 'connecting' | 'round_completed', required — Current phase of an Engine-owned shared-device refresh round.
    - `rejectedCount` integer, required
    - `requestId` string, required
    - `totalCount` integer, required
    - `unavailableSourceCount` integer, required
    - `versionIncompatibleCount` integer, required
    - `waitingForPeerCount` integer, required
    - `waitingForUpdateCount` integer, required
  - `ts` integer, required — Server time when the response was built (unix epoch milliseconds).

## Other responses

- `404` — Request not found
- `500` — Internal server error
- `503` — Runtime unavailable

---

[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/versions/a5d29889448a/schema)
