Skip to main content

启动用户同步接口

为已完成配置并处于启用状态的数据源提交一次手动同步任务。响应表示任务已受理,可使用 run.id 查询进度和统计结果;SCIM 通过外部推送同步,不支持此手动任务。

  • Scope:admin.v1.directory-sync-runs.execute
  • 权限项:执行用户同步(directory-sync-runs)
  • 权限类型:执行
  • 接口:POST/api/openapi/v1/directory-sync/runs
同来源已有未完成任务时,本接口返回该任务,包括本地处理完成、正在等待账号与席位初始化的任务。新的 Idempotency-Key 此时也不会另建任务。请使用响应中的 run.id 查询状态;原任务结束后,使用新键才会开始新一轮读取,旧键仍返回原任务。 执行默认最长六小时,从首次开始处理计算;本地提交后,账号和席位初始化默认最多等待 24 小时。等待超时返回部分成功,未完成的账号仍由后台继续修复。重复调用不刷新这些期限。SCIM 来源通过入站请求同步,不能通过本接口启动。

认证与请求头

使用应用 API Key 调用。当前接口只校验上方独立 Scope;读取、管理与执行权限互不隐含。
名称位置类型必填说明示例
Authorizationheaderstring是应用 API Key,使用 Bearer 方式传递。Bearer qwk_***
X-Request-Idheaderstring否可选的调用追踪标识;未传入时由服务端生成。req-20260831-001

请求参数

名称位置类型必填说明示例
Idempotency-Keyheaderstring必填幂等键,用于避免重复提交"<string>"
source_idbodystring · uuid必填数据源 ID"<uuid>"

请求示例

curl --request POST \
  --url 'https://example.invalid/api/openapi/v1/directory-sync/runs' \
  --header 'Authorization: Bearer <API_KEY>' \
  --header 'Idempotency-Key: <UNIQUE_REQUEST_ID>' \
  --header 'Content-Type: application/json' \
  --data '{
  "source_id": "<uuid>"
}'

响应

202 Accepted

名称类型必填说明示例
runOpenapifacadeDirectorySyncRun是同步记录-

run 字段

以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
字段类型必填说明
created_atstring · date-time是创建时间
error_codestring否错误码
error_summarystring否错误摘要
finished_atstring · date-time否结束时间
idstring · uuid是同步记录 ID
requested_by_emailstring否发起人邮箱
requested_by_namestring否发起人
resource_typestring是资源类型
resultstring否操作结果;可选值:success, partial_success, failure
source_idstring · uuid是数据源 ID
source_namestring是来源名称
source_typestring是数据源类型
started_atstring · date-time否开始时间
statsobject是同步统计
statusstring是状态;可选值:pending, running, succeeded, failed, cancelled
trigger_typestring是触发方式;可选值:manual, scheduled, scim

run.stats 字段

以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
字段类型必填说明
departmentsobject是部门统计
failedinteger · int64否失败数量
processedinteger · int64否已处理数量
relationshipsobject是成员关系统计
seatsobject是席位统计
succeededinteger · int64否成功数量
usersobject是用户统计

run.stats.departments 字段

以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
字段类型必填说明
createdinteger · int64是部门新增数量
deactivatedinteger · int64否部门停用数量
deletedinteger · int64是部门删除数量
updatedinteger · int64是部门更新数量

run.stats.relationships 字段

以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
字段类型必填说明
addedinteger · int64是成员关系新增数量
removedinteger · int64是成员关系移除数量
returned_to_rootinteger · int64是成员关系移回根部门数量

run.stats.seats 字段

以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
字段类型必填说明
grantedinteger · int64是席位授权数量
reclaimedinteger · int64是席位回收数量

run.stats.users 字段

以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
字段类型必填说明
createdinteger · int64是用户新增数量
deactivatedinteger · int64否用户停用数量
deletedinteger · int64是用户删除数量
updatedinteger · int64是用户更新数量
{
  "run": {
    "created_at": "2026-08-27T10:00:00Z",
    "error_code": "<string>",
    "error_summary": "<string>",
    "finished_at": "2026-08-27T10:00:00Z",
    "id": "<uuid>",
    "requested_by_email": "<string>",
    "requested_by_name": "<string>",
    "resource_type": "<string>",
    "result": "success",
    "source_id": "<uuid>",
    "source_name": "<string>",
    "source_type": "<string>",
    "started_at": "2026-08-27T10:00:00Z",
    "stats": {
      "departments": {
        "created": 0,
        "deactivated": 0,
        "deleted": 0,
        "updated": 0
      },
      "failed": 0,
      "processed": 0,
      "relationships": {
        "added": 0,
        "removed": 0,
        "returned_to_root": 0
      },
      "seats": {
        "granted": 0,
        "reclaimed": 0
      },
      "succeeded": 0,
      "users": {
        "created": 0,
        "deactivated": 0,
        "deleted": 0,
        "updated": 0
      }
    },
    "status": "pending",
    "trigger_type": "manual"
  }
}

default Flat business error

名称类型必填说明示例
codestring否Stable business error code"<string>"
detailstring是Human-readable error description"<string>"
detailsOpenapiErrorDetails否错误详情-
errorstring是Stable HTTP error type"<string>"

details 字段

以下必填性针对对象存在时的子字段;父对象可否省略或为 null,以上层字段表为准。
字段类型必填说明
fieldstring否校验失败的请求字段
reasonstring否校验失败的原因代码
suggestionstring否建议使用的规范化值
{
  "code": "<string>",
  "detail": "<string>",
  "details": {
    "field": "<string>",
    "reason": "<string>",
    "suggestion": "<string>"
  },
  "error": "<string>"
}