Skip to main content
OpenAPI

群组 API

创建和管理组织群组(用户组)及其成员。

群组 API 用于将成员组织起来,以便进行功能权限管理。一个成员可加入多个群组。群组成员关系不会改变成员的角色、席位、个人用量上限、计费组或 Credits 归属。
适用版本:Enterprise。组织需已开通群组能力。
调用前请先完成获取 API Key,并阅读 OpenAPI 约定与规范

前置条件

  • 请求头携带 Authorization: Bearer <api_key>
  • 带 JSON 请求体时,发送 Content-Type: application/json
  • organization_id 必须是 API Key 所属组织。
  • userIds 请求字段使用用户 ID,而不是组织成员 ID。可从成员 API返回的 userId 字段获取。

群组类型

请以 source 判断群组是否可写。source: "manual" 表示由 Qoder 手动管理,可通过这些 API 更新、删除和维护成员。其他来源在 OpenAPI 中均为只读,并返回 isManaged: true;例如 SCIM 群组返回 source: "scim"。只读群组应在来源系统中管理。

数据模型

Group

字段类型说明
idstring群组 ID
organizationIdstring组织 ID
displayNamestring群组名称
descriptionstring描述;为空时省略
sourcestring群组来源,例如 manualscim
externalIdstring来源系统中的群组 ID;为空时省略
syncTypestring同步类型,例如 scim;为空时省略
isManagedboolean成员关系是否由外部来源托管
creatorIdstring创建人用户 ID;不可用时省略
createdAtstring创建时间,ISO 8601 格式;不可用时省略
updatedAtstring最后更新时间,ISO 8601 格式;不可用时省略
memberCountinteger当前群组成员数

群组成员

字段类型说明
idstring组织成员 ID
userIdstring用户 ID;添加或移除群组成员时使用该值
namestring成员名称
emailstring成员邮箱;不可用时省略
statusstring组织成员状态,例如 ENABLEDDISABLED
joinedAtstring用户加入组织的时间;不可用时省略
usageLimitobject当前个人用量上限;不可用时省略
usageLimit.quotaKeystring配额标识
usageLimit.limitValuenumber上限值;-1 表示不限额
usageLimit.usedValuenumber当前统计期间已用量
usageLimit.resetCyclestring重置周期;不可用时省略
usageLimit.isActiveboolean该上限是否生效
usageLimit.lastResetAtstring上次重置时间;不可用时省略
usageLimit.nextResetAtstring下次重置时间;不可用时省略
群组成员对象不会返回成员角色或计费组。如需这些字段,请使用成员 API

API 参考

列出群组

GET /v1/organizations/{organization_id}/groups
查询参数类型必填说明
sourcestring精确匹配来源,例如 manualscim
externalIdstring精确匹配外部群组 ID
syncTypestring精确匹配同步类型
userIdstring仅返回包含该用户 UUID 的群组
keywordstring在群组名称或描述中进行不区分大小写的匹配
maxResultsinteger每页数量,默认 20,最大 100
nextTokenstring上一页响应返回的游标

成功响应(200 OK)

{
  "groups": [
    {
      "id": "1c8f3ee2-b970-4b61-93f9-f8be080ae945",
      "organizationId": "org_xxx",
      "displayName": "Platform Team",
      "description": "Platform maintainers",
      "source": "manual",
      "isManaged": false,
      "creatorId": "550e8400-e29b-41d4-a716-446655440000",
      "createdAt": "2026-08-01T08:00:00Z",
      "updatedAt": "2026-08-01T08:00:00Z",
      "memberCount": 2
    }
  ],
  "maxResults": 20,
  "nextToken": "cursor_from_response"
}
最后一页会省略 nextToken

创建群组

POST /v1/organizations/{organization_id}/groups 创建手动管理的群组。displayName 会去除首尾空格,且不能为空。群组名不得与已有的有效手动群组冲突。省略 userIds 或传空数组可创建无成员群组;重复用户 ID 会自动去重。如任一 ID 无效或不是当前组织成员,请求会失败且不会创建群组。

请求体

{
  "displayName": "Platform Team",
  "description": "Platform maintainers",
  "userIds": [
    "550e8400-e29b-41d4-a716-446655440000",
    "550e8400-e29b-41d4-a716-446655440001"
  ]
}
字段类型必填说明
displayNamestring群组名称
descriptionstring群组描述
userIdsstring 数组创建群组时同时加入的用户 UUID
成功时返回创建后的 Group,状态码为 201 Created

获取群组

GET /v1/organizations/{organization_id}/groups/{group_id} 成功时返回对应的 Group,状态码为 200 OK

更新群组

PUT /v1/organizations/{organization_id}/groups/{group_id} 仅手动管理的群组可更新。未传字段保持不变;传入空的 description 可清空描述。

请求体

{
  "displayName": "Platform Engineering",
  "description": ""
}
字段类型必填说明
displayNamestring新群组名称;去除首尾空格后不能为空
descriptionstring新描述;空字符串表示清空
成功时返回更新后的 Group,状态码为 200 OK

删除群组

DELETE /v1/organizations/{organization_id}/groups/{group_id} 仅手动管理的群组可删除。删除群组会删除其成员关系以及绑定到该群组的访问策略,但不会删除组织成员,也不会改变成员的计费组、个人用量上限或历史用量。 成功时返回 200 OK
{}

列出群组成员

GET /v1/organizations/{organization_id}/groups/{group_id}/members
查询参数类型必填说明
keywordstring在成员名称或邮箱中进行不区分大小写的匹配
maxResultsinteger每页数量,默认 20,最大 100
nextTokenstring上一页响应返回的游标

成功响应(200 OK)

{
  "members": [
    {
      "id": "member_abc123",
      "userId": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Alice",
      "email": "alice@example.com",
      "status": "ENABLED",
      "joinedAt": "2026-06-01T08:00:00Z",
      "usageLimit": {
        "quotaKey": "big_model_credits",
        "limitValue": 5000,
        "usedValue": 1250,
        "resetCycle": "monthly",
        "isActive": true
      }
    }
  ],
  "maxResults": 20,
  "nextToken": "cursor_from_response"
}
最后一页会省略 nextToken

添加群组成员

POST /v1/organizations/{organization_id}/groups/{group_id}/members 向手动管理的群组添加一个或多个组织用户。已有成员关系不会重复创建。

请求体

{
  "userIds": [
    "550e8400-e29b-41d4-a716-446655440000",
    "550e8400-e29b-41d4-a716-446655440001"
  ]
}
userIds 必填,且至少包含一个非空用户 ID。重复或已加入的用户 ID 不会产生重复成员关系。系统会在变更成员关系前校验整批 ID;如任一 ID 格式错误或不是当前组织成员,请求返回 400 BadRequest,且不会添加任何成员关系。 200 OK 响应最多包含当前群组的前 20 名成员,且不包含分页字段;如需完整列表,请调用列出群组成员
{
  "members": [
    {
      "id": "member_abc123",
      "userId": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Alice",
      "email": "alice@example.com",
      "status": "ENABLED",
      "joinedAt": "2026-06-01T08:00:00Z"
    }
  ]
}

移除群组成员

DELETE /v1/organizations/{organization_id}/groups/{group_id}/members 从手动管理的群组中删除一个或多个成员关系,不会将用户从组织中删除。

请求体

{
  "userIds": [
    "550e8400-e29b-41d4-a716-446655440001"
  ]
}
userIds 必填,且至少包含一个非空用户 ID。该接口在 DELETE 请求中携带 JSON 请求体,请确保 HTTP 客户端和代理不会丢弃请求体。如任一 ID 格式错误,请求返回 400 BadRequest,且不会移除任何成员关系。格式有效但不是组织成员或不在该群组中的用户 ID 不会产生影响;同一请求中其他匹配的成员关系仍会被移除。成功时返回 200 OK
{}

错误

错误响应使用 OpenAPI 约定与规范中定义的通用结构。
HTTP 状态码错误码常见原因
400BadRequest请求格式错误、ID 或游标无效、必填字段为空
400OrganizationGroupSCIMReadOnly尝试修改同步或外部托管群组
401UnauthorizedAPI Key 缺失或无效
403ForbiddenAPI Key 不属于目标组织
403OrganizationPlanCapabilityForbidden组织未开通群组能力
404NotFound群组或成员不存在
409AlreadyExists已存在同名的有效手动群组