---
title: "PATCH /member/:device_id/sync-preferences"
method: PATCH
path: "/member/{device_id}/sync-preferences"
tags: ["member"]
---

# PATCH /member/:device_id/sync-preferences

`PATCH /member/{device_id}/sync-preferences`

部分更新成员的同步偏好；未提供的字段保留当前值。

内部 `get → merge → save`，保持与 `UpdateMemberSettingsUseCase` 的全量覆盖语义对齐。

## Path parameters

- `device_id` string, required

## Request body

- MemberSyncPreferencesPatchDto — Partial sync preferences for PATCH /member/:device_id/sync-preferences. 服务器侧 `get → merge → save` 后持久化；未提供的字段保留当前值。 重置到默认值的调用方应显式传入所有字段的默认值。
  - `receiveContentTypes` ContentTypesPatchDto
    - `codeSnippet` boolean, nullable
    - `file` boolean, nullable
    - `image` boolean, nullable
    - `link` boolean, nullable
    - `richText` boolean, nullable
    - `text` boolean, nullable
  - `receiveEnabled` boolean, nullable
  - `sendContentTypes` ContentTypesPatchDto
    - `codeSnippet` boolean, nullable
    - `file` boolean, nullable
    - `image` boolean, nullable
    - `link` boolean, nullable
    - `richText` boolean, nullable
    - `text` boolean, nullable
  - `sendEnabled` boolean, nullable

## Response `200`

- MemberSyncResultEnvelope — 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` MemberSyncResultDto, required — Folded payload for `PATCH /member/:device_id/sync-preferences` (ADR-008 §0.1). The current handler returns `success` as a top-level sibling of the `{data,ts}` envelope. This DTO folds it INTO the payload so the endpoint can return `ApiEnvelope<MemberSyncResultDto>` with no bespoke wrapper. P1 only defines the type; the handler is rewired in P2.
    - `success` boolean, required
  - `ts` integer, required — Server time when the response was built (unix epoch milliseconds).

## Other responses

- `400` — Invalid request
- `404` — Member 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/versions/10dd20bcf330/schema)
