---
title: "GET /member/device-trust"
method: GET
path: "/member/device-trust"
tags: ["member"]
---

# GET /member/device-trust

`GET /member/device-trust`

## Response `200`

- DeviceTrustEnvelope — 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` DeviceTrustSnapshotDto, required
    - `allowedActions` DeviceTrustActionDto[], required
    - `blockedReason` 'no_current_change' | 'change_no_longer_current' | 'local_device_confirmation_required' | 'local_device_removed' | 'recovery_not_available_in_this_version' | 'peer_upgrade_required' | 'device_facts_unverifiable' | 'engine_unavailable'
    - `currentChange` DeviceTrustChangeDto
      - `allowedChoices` DeviceTrustChoiceDto[], required
      - `applyImpact` DeviceTrustImpactDto, required
        - `localDeviceOutcome` 'active' | 'removed' | 'unavailable' | 'unknown', required
        - `pausedDeviceIds` string[], required
        - `requiresRejoinDeviceIds` string[], required
        - `usableDeviceIds` string[], required
      - `blockedReason` 'no_current_change' | 'change_no_longer_current' | 'local_device_confirmation_required' | 'local_device_removed' | 'recovery_not_available_in_this_version' | 'peer_upgrade_required' | 'device_facts_unverifiable' | 'engine_unavailable'
      - `changeId` string, required
      - `includesLocalDevice` boolean, required
      - `keepCurrentImpact` DeviceTrustImpactDto, required
        - `localDeviceOutcome` 'active' | 'removed' | 'unavailable' | 'unknown', required
        - `pausedDeviceIds` string[], required
        - `requiresRejoinDeviceIds` string[], required
        - `usableDeviceIds` string[], required
      - `proposedByDeviceId` string, required
      - `targetDeviceIds` string[], required
    - `currentJoin` union — Stable outcome of a durable space admission.
      - object
        - `joinId` string, required
        - `joinedSpace` JoinedSpaceResponse, required
          - `migratedRecords` integer, nullable
          - `preservedUnreadableRecords` integer, nullable
          - `selfDeviceId` string, required
          - `selfIdentityFingerprint` string, required
          - `spaceId` string, required
          - `sponsorDeviceId` string, required
          - `sponsorIdentityFingerprint` string, required
        - `status` 'active', required
      - object
        - `cancelRequested` boolean, required
        - `joinId` string, required
        - `sponsorDeviceId` string, nullable
        - `sponsorIdentityFingerprint` string, nullable
        - `status` 'pending', required
        - `targetSpaceId` string, nullable
      - object
        - `joinId` string, required
        - `reason` 'invitation_unavailable' | 'authentication_rejected' | 'identity_conflict' | 'base_history_changed' | 'joiner_history_ahead' | 'history_conflict' | 'peer_upgrade_required' | 'cancelled' | 'removed_before_activation', required
        - `status` 'rejected', required
    - `devices` DeviceTrustRelationshipDto[], required
      - `availableActions` DeviceTrustActionDto[], required
      - `blockedReason` 'no_current_change' | 'change_no_longer_current' | 'local_device_confirmation_required' | 'local_device_removed' | 'recovery_not_available_in_this_version' | 'peer_upgrade_required' | 'device_facts_unverifiable' | 'engine_unavailable'
      - `compatibility` 'compatible' | 'upgrade_required' | 'unknown', required
      - `deviceId` string, required
      - `displayName` string, required
      - `groupRelationship` 'consistent' | 'pending_local_decision' | 'diverged' | 'unverifiable' | 'unknown', required
      - `isLocal` boolean, required
      - `membership` 'active' | 'removed' | 'unavailable' | 'unknown', required
      - `reachability` 'online' | 'offline' | 'unknown', required
      - `syncRelationship` 'usable' | 'waiting_for_local_decision' | 'paused_group_diverged' | 'paused_upgrade_required' | 'paused_unverifiable' | 'removed_local_device' | 'removed_peer_device' | 'unknown', required
    - `localDeviceId` string, required
    - `localMembership` 'active' | 'removed' | 'unavailable' | 'unknown', required
    - `pendingInboundMember` PendingInboundMemberDto
      - `deviceId` string, required
      - `displayName` string, required
    - `recovery` string, required
    - `revision` integer, required
    - `updatedAtMs` integer, required
  - `ts` integer, required — Server time when the response was built (unix epoch milliseconds).

---

[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/6f6069f7e923/schema)
