修改指定用户的姓名、联系方式、工号、账号或部门归属。只更新传入的字段,至少提供一项;部门列表整体替换,空列表归入根部门。此接口的请求字段不包含账号状态和席位状态。
- Scope:
admin.v1.user-directory.manage - 权限项:用户与部门管理(
user-directory) - 权限类型:管理
- 接口:PATCH
/api/openapi/v1/users/{userId}
邮箱可信域名规则
非空邮箱必须精确匹配组织当前已验证且未删除的可信域名;没有可信域名时返回
422 directory_user_email_domain_not_verified。不支持通配符或父域名继承。
本接口按合并后的完整资料校验:省略 email 会保留原值,即使仅修改姓名或部门,只要结果仍有非空邮箱,
也必须满足域名规则。可以显式提交 "email": "" 清空,但仍须保留账号、手机号或工号至少一种有效身份。
此项收紧零域名下原有写入规则。调用方应在升级前配置并验证域名,或按上述方式移除邮箱输入。
独立启用账号、授予席位及已有登录会话不因本次变更而新增限制。
第三方 ID 补绑
可选传入第三方 ID,仅允许给未绑定用户补绑,或重复提交相同 ID。非空值去首尾空白后最多 255 个字符,区分大小写。省略或 null 保留写入时的最新绑定;空字符串或纯空白返回 422。替换已有绑定返回 409 / directory_user_third_party_id_rebind_forbidden;被同组织其他用户占用返回 409 / directory_user_third_party_id_conflict。仅传此字段即可补绑,其他资料保持原值;仍执行已有完整资料校验、用户范围与受管对象限制。
认证与请求头
使用应用 API Key 调用。当前接口只校验上方独立 Scope;读取、管理与执行权限互不隐含。
| 名称 | 位置 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|---|
Authorization | header | string | 是 | 应用 API Key,使用 Bearer 方式传递。 | Bearer qwk_*** |
X-Request-Id | header | string | 否 | 可选的调用追踪标识;未传入时由服务端生成。 | req-20260831-001 |
请求参数
| 名称 | 位置 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|---|
userId | path | string · uuid | 必填 | 用户 ID | "<uuid>" |
Idempotency-Key | header | string | 否 | 幂等键,用于避免重复提交 | "<string>" |
third_party_user_id | body | string | null | 否 | 仅补绑或同值重试;省略/null 保留,禁止改绑与清空。 | "crc-user-001" |
account | body | string | 否 | 账号 | "<string>" |
department_ids | body | array | null | 否 | 当前组织内的部门,最多 200 项且不可重复 | ["<string>"] |
email | body | string | 否 | 邮箱 | "<string>" |
job_number | body | string | 否 | 工号 | "<string>" |
name | body | string | 否 | 姓名 | "<string>" |
phone | body | string | 否 | 手机号 | "<string>" |
请求示例
响应
200 OK
| 名称 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
account | string | 否 | 账号 | "<string>" |
department_ids | array | null | 是 | 所属部门(部门 ID 列表) | ["<string>"] |
email | string | 否 | 邮箱 | "<string>" |
job_number | string | 否 | 工号 | "<string>" |
name | string | 是 | 姓名 | "<string>" |
phone | string | 否 | 手机号 | "<string>" |
qid | string · uuid | 是 | QID | "<uuid>" |
seat_status | string | 是 | 席位授权 | "assigned" |
source | string | 是 | 来源 | "manual" |
status | string | 是 | 用户状态 | "pending" |
updated_at | string · date-time | 是 | 更新时间 | "2026-08-27T10:00:00Z" |
third_party_user_id | string | 是 | 第三方用户 ID;未设置时为空字符串。 | "external-001" |
departments | array | 是 | 部门详情;无部门时为空数组。 | - |
credential | object | 是 | 密码生命周期信息,不包含密码或哈希。 | - |
created_at | string · date-time | 是 | 用户创建时间。 | "2026-09-19T01:00:00Z" |
last_active_at | string · date-time | 否 | IAM 最近活跃时间;无记录时省略,不等同于最近业务使用时间。 | "2026-09-23T01:00:00Z" |
credential 字段
以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
credential_version | integer · int64 | 是 | 凭证版本。 |
first_login_completed_at | string · date-time | 否 | 首次登录完成时间;未完成时省略。 |
must_change_password | boolean | 是 | 是否需要修改密码。 |
password_state | string | 是 | 密码状态:unset 未设置、initial 初始密码、active 已生效;可选值:unset, initial, active |
password_updated_at | string · date-time | 否 | 密码更新时间;无记录时省略。 |
departments[] 字段
以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
external_id | string | 否 | 部门外部 ID;未设置时省略。 |
id | string · uuid | 是 | 部门 ID。 |
is_primary | boolean | 是 | 是否为主部门。 |
name | string | 是 | 部门名称。 |
path | string | 是 | 部门路径。 |
default Flat business error
| 名称 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
code | string | 否 | Stable business error code | "<string>" |
detail | string | 是 | Human-readable error description | "<string>" |
details | OpenapiErrorDetails | 否 | 错误详情 | - |
error | string | 是 | Stable HTTP error type | "<string>" |
details 字段
以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
committed | boolean | 否 | 本地写入是否已提交;不表示下游同步成功 |
field | string | 否 | 校验失败的请求字段 |
reason | string | 否 | 校验失败的原因代码 |
recovery | object | 否 | 同步恢复状态与重试信息 |
results | array<object> | null | 否 | 各用户的处理结果 |
suggestion | string | 否 | 建议使用的规范化值 |
details.recovery 字段
以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
automatic_retry | boolean | 是 | 是否自动重试 |
next_retry_at | string · date-time | 否 | 下次重试时间 |
requires_action | boolean | 是 | 是否需要人工处理 |
state | string | 是 | 同步恢复状态;可选值:succeeded, processing, retrying, action_required, unconfirmed |
details.results[] 字段
以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
code | string | 否 | Stable business error code |
recovery | object | 是 | 同步恢复状态与重试信息 |
user_id | string | 是 | 用户 ID |
details.results[].recovery 字段
以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
automatic_retry | boolean | 是 | 是否自动重试 |
next_retry_at | string · date-time | 否 | 下次重试时间 |
requires_action | boolean | 是 | 是否需要人工处理 |
state | string | 是 | 同步恢复状态;可选值:succeeded, processing, retrying, action_required, unconfirmed |
提交与同步结果
本地业务提交后最多等待 10 秒,同步确认成功立即返回本接口原成功响应,不固定等待满 10 秒。
同步仍在处理时保留 HTTP 503 / iam_openapi_execution_unavailable,增加已提交状态和恢复结果。
committed=true 表示本地写入已执行,不表示同步已完成;不要据此重新创建一笔写操作。
已有幂等键的操作应复用原键及原请求;先通过现有查询接口核对业务状态。
提交前校验失败仍返回原错误;确定业务拒绝保留相应状态和错误码,已提交的拒绝结果同样携带提交信息。
传输中断且没有收到提交证据时,不能推断已回滚。
错误示例(已提交、同步处理中):
recovery.state 为 succeeded、processing、retrying、action_required 或 unconfirmed。
automatic_retry 与 requires_action 描述实际恢复安排;next_retry_at 仅在已安排自动重试时提供。
results[].code 可选,用于解释需处理原因;结果待确认不等于操作未执行。