Loading
close

消费者与API Key

time 更新时间:2026-10-08 16:41:12

消费者与 API Key

消费者是调用模型网关的逻辑主体。一个消费者可绑定一个套餐并持有多个 API Key;同一消费者下的 API Key 共享该消费者的套餐、路由授权和限流配额。

本页接口用于管理消费者和 API Key,调用平台网关调用时,使用x-keystone-token: 认证。签发的 API Key 用于调用模型网关,请求头格式为 Authorization: bearer <API_KEY>,不能替代本页管理接口所需的 Keystone Token。

创建消费者时同时签发首个 API Key。API Key 明文仅在签发响应中返回一次,后续查询只返回脱敏值 masked,请在收到响应后立即安全保存。

消费者可以暂不绑定套餐,但未绑定套餐时不能通过套餐获得任何模型网关路由访问权限。API Key 能否使用还取决于消费者状态、API Key 状态及有效期、套餐状态和套餐授权路由;禁用消费者会使其下所有 API Key 停止使用。

实时配额接口的 ids 为逗号分隔的 1 至 200 个消费者 ID,重复 ID 会被忽略,响应仅包含调用者可见的消费者。已绑定套餐但无法读取实时配额时仍返回 200,并以 available=false 表示配额信息暂不可用;未绑定套餐时 available=true,但不返回 requests 和 tokens 配额维度。

方法 路径(产品接口统一前缀 /api/v1) 功能
GET /consumers 查询 API 消费者
POST /consumers 创建消费者并签发首个 API Key
GET /consumers/quota 批量查询消费者实时配额
GET /consumers/{id} 获取消费者详情
PATCH /consumers/{id} 更新消费者
DELETE /consumers/{id} 删除消费者
POST /consumers/{id}/apikeys 签发新的 API Key
PATCH /consumers/{id}/apikeys/{keyId} 启用或禁用 API Key
DELETE /consumers/{id}/apikeys/{keyId} 删除 API Key

查询 API 消费者

功能介绍

查询 API 消费者。

访问要求:有效 Token 和消费者读权限。普通调用方只能查询当前项目中自己创建的消费者;具有消费者所有者管理权限时可查询项目内其他用户的消费者。全局读权限允许跨项目查询,但仍受所有者范围限制,除非同时具有消费者所有者管理权限。

URI

GET /api/v1/consumers

查询参数

参数 类型 必选 描述
page integer 否 页码,从 1 开始
page_size integer 否 每页数量;建议显式传入,例如 20;省略或传 0 时返回全部匹配项,响应中的 page_size 为 0

请求消息

无请求体。

响应消息

参数 参数类型 描述
items array 消费者列表,字段与消费者详情一致,但不包含 keys
total integer 匹配总数
page integer 页码,从 1 开始
page_size integer 每页数量

请求示例

GET https://{endpoint}/api/v1/consumers?page=1&page_size=20
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 200
Content-Type: application/json
{
  "items": [
    {
      "id": "con-a1b2c3d4e5f6",
      "name": "示例消费者",
      "description": "",
      "status": "active",
      "projectId": "projectId-example",
      "ownerUserId": "ownerUserId-example",
      "spec": {
        "planId": "plan-id",
        "planKey": "pk-a1b2c3d4e5f6",
        "planName": "标准套餐",
        "status": "active",
        "keyCount": 1
      },
      "createdAt": "2026-09-21T00:00:00Z",
      "updatedAt": "2026-09-21T00:00:00Z"
    }
  ],
  "total": 1,
  "page": 1,
  "page_size": 20
}

状态码与错误码

成功状态码:200。

HTTP error 说明
401 unauthorized authentication required
500 internal_error 查询消费者列表失败

此外,认证/授权中间件可返回 401 / 403;后端错误与错误封装见调用方式。

创建消费者并签发首个 API Key

功能介绍

创建消费者并签发首个 API Key。

访问要求:有效 Token 和当前项目的消费者写权限。绑定本项目套餐时需具有套餐使用权限;绑定其他项目共享的套餐时,还需具有共享套餐使用权限。

URI

POST /api/v1/consumers

请求消息

Content-Type: application/json。

参数 参数类型 是否必选 描述
name string 是 消费者名称
description string 否 描述
planId string 否 绑定的套餐 ID,可暂不绑定;未绑定时不具备套餐授权的路由访问能力。
labels map<string, string> 否 标签键值对

响应消息

参数 参数类型 描述
consumer object 新创建的消费者对象,字段与消费者详情一致,但不包含 keys
apiKey object 同时签发的首个 API Key;明文 key 仅在本次响应中返回
apiKey.id string API Key 资源 ID,用于启用、禁用和删除 API Key
apiKey.keyId string API Key 标识,可用于用量记录关联;不能代替 apiKey.id 作为管理接口路径参数
apiKey.key string API Key 明文,仅本次签发响应返回
apiKey.masked string API Key 脱敏值
apiKey.expiresAt string(date-time) / null 到期时间,RFC3339;未设置有效期时省略

请求示例

POST https://{endpoint}/api/v1/consumers
x-keystone-token: <Keystone Token>
Content-Type: application/json
{
  "name": "示例消费者",
  "planId": "plan-id"
}

正常响应示例

HTTP/1.1 201
Content-Type: application/json
{
  "consumer": {
    "id": "con-a1b2c3d4e5f6",
    "name": "示例消费者",
    "description": "",
    "status": "active",
    "projectId": "projectId-example",
    "ownerUserId": "ownerUserId-example",
    "spec": {
      "planId": "plan-id",
      "planKey": "pk-a1b2c3d4e5f6",
      "planName": "标准套餐",
      "status": "active",
      "keyCount": 1
    },
    "createdAt": "2026-09-21T00:00:00Z",
    "updatedAt": "2026-09-21T00:00:00Z"
  },
  "apiKey": {
    "id": "ak-a1b2c3d4e5f6",
    "keyId": "key-a1b2c3d4e5f6",
    "key": "sk-beacon-EXAMPLE-NOT-A-REAL-KEY",
    "masked": "sk-beacon-…-KEY"
  }
}

状态码与错误码

成功状态码:201。

HTTP error 说明
401 unauthorized authentication required
400 invalid_request 请求体格式错误、名称无效或指定的套餐不存在
403 forbidden 缺少消费者写权限或共享套餐使用权限
409 conflict 消费者资源冲突,或绑定套餐期间套餐共享关系被撤销
500 internal_error 消费者或首个 API Key 创建失败

此外,认证/授权中间件可返回 401 / 403;后端错误与错误封装见调用方式。

批量查询消费者实时配额

功能介绍

批量查询消费者当前限流周期内的请求数和 Token 数配额。多个 API Key 属于同一消费者时,共享这里返回的用量和剩余额度。

访问要求:有效 Token 和消费者读权限,消费者可见范围与查询消费者接口一致。请求中不可见或不存在的消费者 ID 不会出现在响应中。

URI

GET /api/v1/consumers/quota

查询参数

参数 类型 必选 描述
ids string 是 逗号分隔的消费者 ID,去重后须包含 1 至 200 个非空 ID

请求消息

无请求体。

响应消息

参数 参数类型 描述
items array 消费者实时配额列表
items[].consumerId string 消费者 ID
items[].available boolean 是否成功获取配额信息;未绑定套餐时也为 true,但不包含 requests 和 tokens
items[].requests object / null 请求数配额;套餐未限制请求数、未绑定套餐或配额不可用时省略
items[].requests.limit int64 当前配置周期内的请求数上限
items[].requests.used int64 当前周期已使用请求数
items[].requests.remaining int64 当前周期剩余请求数,最小为 0
items[].requests.unit string 周期单位:minute、hour、day、month 或 year
items[].requests.period integer 周期倍数
items[].requests.resetAt string(date-time) / null 当前周期重置时间,RFC3339;尚未形成活跃周期时省略
items[].tokens object / null Token 数配额;字段含义与 requests 相同,套餐未限制 Token 数、未绑定套餐或配额不可用时省略

请求示例

GET https://{endpoint}/api/v1/consumers/quota?ids=consumer-id
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 200
Content-Type: application/json
{
  "items": [
    {
      "consumerId": "con-a1b2c3d4e5f6",
      "available": true,
      "requests": {
        "limit": 100,
        "used": 12,
        "remaining": 88,
        "unit": "minute",
        "period": 1,
        "resetAt": "2026-09-21T00:01:00Z"
      },
      "tokens": {
        "limit": 100000,
        "used": 18000,
        "remaining": 82000,
        "unit": "minute",
        "period": 1,
        "resetAt": "2026-09-21T00:01:00Z"
      }
    }
  ]
}

状态码与错误码

成功状态码:200。

HTTP error 说明
400 invalid_request ids must contain 1 to 200 consumer ids
401 unauthorized authentication required
500 internal_error 查询消费者或实时配额失败

此外,认证/授权中间件可返回 401 / 403;后端错误与错误封装见调用方式。

获取消费者详情

功能介绍

获取消费者详情及其 API Key 脱敏列表。响应不包含任何 API Key 明文。

访问要求:有效 Token 和消费者读权限。普通调用方只能获取当前项目中自己创建的消费者;具有消费者所有者管理权限时可读取项目内其他用户的消费者。全局读权限允许跨项目读取,但仍受所有者范围限制,除非同时具有消费者所有者管理权限。

URI

GET /api/v1/consumers/{id}
参数 类型 必选 描述
id string 是 消费者 ID

请求消息

无请求体。

响应消息

参数 参数类型 描述
id string 资源唯一标识
name string 显示名称
description string 描述
status string 消费者状态:active 表示启用,disabled 表示禁用
projectId string 所属项目 ID
projectName string 项目名称;空值时可能省略
domainId string 所属部门 ID;空值时可能省略
domainName string 部门名称;空值时可能省略
ownerUserId string 创建者用户 ID
ownerName string 创建者名称;空值时可能省略
spec object 消费者配置快照
spec.planId string 绑定的套餐 ID;未绑定套餐时为空字符串
spec.planKey string 套餐内部标识;未绑定套餐时可能省略
spec.planName string 套餐名称快照;未绑定套餐时可能省略
spec.status string 消费者状态:active 或 disabled
spec.keyCount integer 状态为 active 的 API Key 数量,不包含已禁用的 Key;到期但状态仍为 active 的 Key 仍可能计入
spec.ownerEmail string 创建者登录邮箱;空值时可能省略
keys array API Key 脱敏列表;没有 API Key 时可能省略
keys[].id string API Key 资源 ID,用于启用、禁用和删除 API Key
keys[].keyId string API Key 标识,可用于用量记录关联;不能代替 id 作为管理接口路径参数
keys[].masked string API Key 脱敏值,不可用于网关认证
keys[].status string API Key 状态:active 或 disabled
keys[].notBefore string(date-time) / null 生效时间,RFC3339;未设置时省略
keys[].expiresAt string(date-time) / null 到期时间,RFC3339;未设置时省略
keys[].createdAt string(date-time) 创建时间,RFC3339
labels map<string, string> 标签键值对;空值时可能省略
createdAt string(date-time) 创建时间,RFC3339
updatedAt string(date-time) 更新时间,RFC3339

请求示例

GET https://{endpoint}/api/v1/consumers/resource-id
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 200
Content-Type: application/json
{
  "id": "con-a1b2c3d4e5f6",
  "name": "示例消费者",
  "description": "",
  "status": "active",
  "projectId": "projectId-example",
  "ownerUserId": "ownerUserId-example",
  "spec": {
    "planId": "plan-id",
    "planKey": "pk-a1b2c3d4e5f6",
    "planName": "标准套餐",
    "status": "active",
    "keyCount": 1
  },
  "keys": [
    {
      "id": "ak-a1b2c3d4e5f6",
      "keyId": "key-a1b2c3d4e5f6",
      "masked": "sk-beacon-…-KEY",
      "status": "active",
      "createdAt": "2026-09-21T00:00:00Z"
    }
  ],
  "createdAt": "2026-09-21T00:00:00Z",
  "updatedAt": "2026-09-21T00:00:00Z"
}

状态码与错误码

成功状态码:200。

HTTP error 说明
401 unauthorized authentication required
404 not_found 消费者不存在或调用方不可见
500 internal_error 查询消费者失败

此外,认证/授权中间件可返回 401 / 403;后端错误与错误封装见调用方式。

更新消费者

功能介绍

更新消费者名称、绑定套餐或启用状态。变更套餐或消费者状态后,同一消费者下所有 API Key 的网关授权会按新配置重新生效。重新启用消费者不会同时启用此前被单独禁用的 API Key。

访问要求:有效 Token 和当前项目的消费者写权限。普通调用方只能修改自己创建的消费者;具有消费者所有者管理权限的调用方可修改项目内其他用户的消费者。绑定其他项目共享的套餐时,还需具有共享套餐使用权限;不能修改其他项目的消费者。

URI

PATCH /api/v1/consumers/{id}
参数 类型 必选 描述
id string 是 消费者 ID

请求消息

Content-Type: application/json。

参数 参数类型 是否必选 描述
name string 否 消费者名称;提供时不能为空
planId string 否 绑定的套餐 ID;传空字符串解除套餐绑定,省略表示不修改;不要传 null,当前实现会将 null 视为未提供
status string 否 消费者状态:active 表示启用,disabled 表示禁用

响应消息

参数 参数类型 描述
id string 资源唯一标识
name string 显示名称
description string 描述
status string 消费者状态:active 或 disabled
projectId string 所属项目 ID
projectName string 项目名称;空值时可能省略
domainId string 所属部门 ID;空值时可能省略
domainName string 部门名称;空值时可能省略
ownerUserId string 创建者用户 ID
ownerName string 创建者名称;空值时可能省略
spec object 消费者配置快照,字段含义见获取消费者详情
labels map<string, string> 标签键值对;空值时可能省略
createdAt string(date-time) 创建时间,RFC3339
updatedAt string(date-time) 更新时间,RFC3339

请求示例

PATCH https://{endpoint}/api/v1/consumers/resource-id
x-keystone-token: <Keystone Token>
Content-Type: application/json
{
  "name": "更新后的名称"
}

正常响应示例

HTTP/1.1 200
Content-Type: application/json
{
  "id": "con-a1b2c3d4e5f6",
  "name": "更新后的名称",
  "description": "",
  "status": "active",
  "projectId": "projectId-example",
  "ownerUserId": "ownerUserId-example",
  "spec": {
    "planId": "plan-id",
    "planKey": "pk-a1b2c3d4e5f6",
    "planName": "标准套餐",
    "status": "active",
    "keyCount": 1
  },
  "createdAt": "2026-09-21T00:00:00Z",
  "updatedAt": "2026-09-21T00:00:00Z"
}

状态码与错误码

成功状态码:200。

HTTP error 说明
401 unauthorized authentication required
400 invalid_request 请求体格式错误、名称为空或指定的套餐不存在
403 forbidden 缺少消费者写权限、尝试修改其他项目资源或缺少共享套餐使用权限
404 not_found 消费者不存在或调用方无权访问
409 conflict 消费者资源冲突,或绑定套餐期间套餐共享关系被撤销
500 internal_error 更新消费者失败

此外,认证/授权中间件可返回 401 / 403;后端错误与错误封装见调用方式。

删除消费者

功能介绍

删除消费者及其全部 API Key。删除后,这些 API Key 不能再用于调用模型网关,且无法通过查询接口恢复。

访问要求:有效 Token 和当前项目的消费者写权限。普通调用方只能删除自己创建的消费者;具有消费者所有者管理权限的调用方可删除项目内其他用户的消费者;不能删除其他项目的消费者。

URI

DELETE /api/v1/consumers/{id}
参数 类型 必选 描述
id string 是 消费者 ID

请求消息

无请求体。

响应消息

成功返回 204 No Content,无响应体。

请求示例

DELETE https://{endpoint}/api/v1/consumers/resource-id
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 204 No Content

状态码与错误码

成功状态码:204。

HTTP error 说明
401 unauthorized authentication required
403 forbidden 缺少消费者写权限或尝试删除其他项目的消费者
404 not_found 消费者不存在或调用方无权访问
500 internal_error 删除消费者或其 API Key 失败

此外,认证/授权中间件可返回 401 / 403;后端错误与错误封装见调用方式。

签发新的 API Key

功能介绍

为指定消费者签发新的 API Key。该操作只新增 Key,不会自动禁用或删除已有 Key;用于密钥轮换时,应在新 Key 验证可用后再禁用或删除旧 Key。

访问要求:有效 Token 和当前项目的消费者写权限。普通调用方只能为自己创建的消费者签发 Key;具有消费者所有者管理权限的调用方可管理项目内其他用户的消费者;不能为其他项目的消费者签发 Key。

URI

POST /api/v1/consumers/{id}/apikeys
参数 类型 必选 描述
id string 是 消费者 ID

请求消息

请求体可选。提供请求体时,Content-Type 为 application/json。

参数 参数类型 是否必选 描述
expiresInHours integer 否 密钥有效小时数;大于 0 时设置到期时间,省略、传 0 或负数时不设置到期时间

响应消息

参数 参数类型 描述
id string API Key 资源 ID,用于启用、禁用和删除 API Key
keyId string API Key 标识,可用于用量记录关联;不能代替 id 作为管理接口路径参数
key string API Key 明文,仅本次签发响应返回
masked string API Key 脱敏值
expiresAt string(date-time) / null 到期时间;空值时可能省略

请求示例

POST https://{endpoint}/api/v1/consumers/resource-id/apikeys
x-keystone-token: <Keystone Token>
Content-Type: application/json
{
  "expiresInHours": 24
}

正常响应示例

HTTP/1.1 201
Content-Type: application/json
{
  "id": "ak-a1b2c3d4e5f6",
  "keyId": "key-a1b2c3d4e5f6",
  "key": "sk-beacon-EXAMPLE-NOT-A-REAL-KEY",
  "masked": "sk-beacon-…-KEY",
  "expiresAt": "2026-09-22T00:00:00Z"
}

状态码与错误码

成功状态码:201。

HTTP error 说明
401 unauthorized authentication required
403 forbidden 缺少消费者写权限或尝试操作其他项目的消费者
404 not_found 消费者不存在或调用方无权访问
500 internal_error API Key 签发失败

此外,认证/授权中间件可返回 401 / 403;后端错误与错误封装见调用方式。

启用或禁用 API Key

功能介绍

启用或禁用指定 API Key。禁用后,该 Key 不能再调用模型网关;重新启用不会更换明文,也不会绕过消费者、套餐和有效期状态检查。

访问要求:有效 Token 和当前项目的消费者写权限。普通调用方只能管理自己创建的消费者下的 Key;具有消费者所有者管理权限的调用方可管理项目内其他用户的消费者;不能操作其他项目的消费者或不属于该消费者的 Key。

URI

PATCH /api/v1/consumers/{id}/apikeys/{keyId}
参数 类型 必选 描述
id string 是 消费者 ID
keyId string 是 API Key 资源 ID,对应消费者详情中 keys[].id,而不是 keys[].keyId

请求消息

Content-Type: application/json。

参数 参数类型 是否必选 描述
status string 是 API Key 状态:active 表示启用,disabled 表示禁用

响应消息

参数 参数类型 描述
id string API Key 资源 ID
status string API Key 状态:active 或 disabled

请求示例

PATCH https://{endpoint}/api/v1/consumers/con-a1b2c3d4e5f6/apikeys/ak-a1b2c3d4e5f6
x-keystone-token: <Keystone Token>
Content-Type: application/json
{
  "status": "disabled"
}

正常响应示例

HTTP/1.1 200
Content-Type: application/json
{
  "id": "ak-a1b2c3d4e5f6",
  "status": "disabled"
}

状态码与错误码

成功状态码:200。

HTTP error 说明
401 unauthorized authentication required
400 invalid_request 请求体格式错误
403 forbidden 缺少消费者写权限或尝试操作其他项目的消费者
404 not_found 消费者不存在、调用方无权访问,或 Key 不属于该消费者
500 internal_error 更新 API Key 状态失败

此外,认证/授权中间件可返回 401 / 403;后端错误与错误封装见调用方式。

删除 API Key

功能介绍

永久删除指定 API Key。删除后,该 Key 不能再用于调用模型网关,也不能重新启用;需要恢复访问时只能重新签发 Key。

访问要求:有效 Token 和当前项目的消费者写权限。普通调用方只能管理自己创建的消费者下的 Key;具有消费者所有者管理权限的调用方可管理项目内其他用户的消费者;不能操作其他项目的消费者或不属于该消费者的 Key。

URI

DELETE /api/v1/consumers/{id}/apikeys/{keyId}
参数 类型 必选 描述
id string 是 消费者 ID
keyId string 是 API Key 资源 ID,对应消费者详情中 keys[].id,而不是 keys[].keyId

请求消息

无请求体。

响应消息

成功返回 204 No Content,无响应体。

请求示例

DELETE https://{endpoint}/api/v1/consumers/con-a1b2c3d4e5f6/apikeys/ak-a1b2c3d4e5f6
x-keystone-token: <Keystone Token>

正常响应示例

HTTP/1.1 204 No Content

状态码与错误码

成功状态码:204。

HTTP error 说明
401 unauthorized authentication required
403 forbidden 缺少消费者写权限或尝试操作其他项目的消费者
404 not_found 消费者不存在、调用方无权访问,或 Key 不属于该消费者
500 internal_error 删除 API Key 失败

此外,认证/授权中间件可返回 401 / 403;后端错误与错误封装见调用方式。

此篇文章对你是否有帮助?
没帮助
locked-file

您暂无权限访问该产品