V1 API 通用约定

V1 开放 API 的鉴权、计费、公共对象与错误响应格式

本文说明 V1 开放 API(/v1/*)的鉴权、计费、公共对象与错误响应格式。

适用范围:对外开放的 /v1 Relay 接口,共 12 条


通用约定

Base URL

https://www.yunsell.com

接口直接挂载在域名根路径,例如 POST https://www.yunsell.com/v1/chat/completions

鉴权

全部 /v1 公开接口统一使用 Bearer Token:

Authorization: Bearer sk-xxxxxxxxxxxxxxxx
规则说明
令牌校验校验 API Key 有效性、用户状态、余额/配额
IP 白名单若令牌配置了 IP 白名单,则校验请求来源
指定渠道管理员可在 Key 后追加 -{channelId}(如 sk-xxx-6);普通用户禁止
鉴权失败返回 HTTP 401 / 403

例外GET /v1/videos/{task_id}/content 同时支持 管理台 SessionBearer Token

Content-Type

场景Content-Type
JSON 请求application/json
图像编辑 / 带文件的视频创建multipart/form-data
TTS 响应audio/mpegaudio/wav 等(取决于 response_format
Chat / Responses 流式text/event-stream(SSE)

计费

  • 网关根据请求体中的 model(或路径参数)自动选择上游渠道
  • 支持按 Token、按次、按秒等计费策略
  • 不同 API Key 可见模型列表可能不同

公共响应对象

usage(Token 计费)

文本类接口(Chat / Completions / Responses)响应中常见:

字段类型说明
prompt_tokensinteger输入 Token 数(Completions / Chat)
completion_tokensinteger输出 Token 数(Completions / Chat)
total_tokensinteger总 Token 数
input_tokensinteger输入 Token 数(Responses)
output_tokensinteger输出 Token 数(Responses)
prompt_cache_hit_tokensinteger命中缓存的输入 Token(部分模型)
prompt_tokens_detailsobject输入 Token 明细
prompt_tokens_details.cached_tokensinteger缓存 Token 数
prompt_tokens_details.text_tokensinteger文本 Token 数
prompt_tokens_details.audio_tokensinteger音频 Token 数
prompt_tokens_details.image_tokensinteger图像 Token 数
completion_tokens_detailsobject输出 Token 明细
completion_tokens_details.reasoning_tokensinteger推理 Token 数
completion_tokens_details.text_tokensinteger文本 Token 数

usage(按次计费,图像)

字段类型说明
quota_typeinteger计费类型标识
quotainteger本次消耗额度
request_countinteger请求次数,通常为 1
prompt_tokensinteger输入 Token(图像接口通常为 0)
completion_tokensinteger输出 Token(图像接口通常为 0)
total_tokensinteger总 Token(图像接口通常为 0)

错误响应

标准错误(文本 / 图像 / 音频 / 视频 content)

HTTP 状态码:400401403404429500 等。

{
  "error": {
    "message": "Invalid request",
    "type": "invalid_request_error",
    "code": "invalid_request",
    "param": "model"
  }
}
字段类型说明
error.messagestring人类可读的错误描述
error.typestring错误类型,如 invalid_request_errorinsufficient_quota
error.codestring错误码,如 invalid_requestmodel_not_found
error.paramstring引发错误的请求字段名(若有)
error.metadataobject扩展元数据(部分上游返回)

任务类错误(视频任务创建 / 查询失败)

HTTP 状态码:400429 等。

{
  "code": "invalid_request",
  "message": "model is required"
}
字段类型说明
codestring错误码,常见 invalid_request
messagestring错误描述

HTTP 429message 为:当前分组上游负载已饱和,请稍后再试

网关扩展错误(模型列表、音色列表等)

HTTP 状态码:200(业务失败)或 400

{
  "success": false,
  "message": "get user group failed"
}
字段类型说明
successboolean是否成功,false 表示失败
messagestring错误描述

令牌余额与消费记录

除 Relay 接口外,V1 还提供两条查询接口,鉴权方式与其它 /v1 接口一致:Authorization: Bearer sk-xxxxxxxx。仅可查询当前 Bearer 令牌自身的数据。

方法路径说明
GET/v1/token/balance查询令牌余额(⚡)
GET/v1/token/consume查询当前 API Key 消费记录(分页)

鉴权方式:统一使用 Bearer Token,令牌信息由鉴权中间件解析,无需再传 key 参数。


GET /v1/token/balance

查询当前 Bearer 令牌的余额,返回以 ⚡ 为单位的剩余额度与已用额度。

鉴权Authorization: Bearer sk-xxxxxxxx

请求参数

无 query 参数。

请求示例(curl)

curl https://www.yunsell.com/v1/token/balance \
  -H "Authorization: Bearer sk-xxxxx"

响应体

HTTP 200

{
  "success": true,
  "message": "",
  "data": {
    "id": 1,
    "name": "API Token",
    "remain_quota_usd": 0.2,
    "used_quota_usd": 0.1,
    "unlimited_quota": false
  }
}

响应字段

字段类型说明
successboolean是否成功
messagestring提示信息
data.idinteger令牌 ID
data.namestring令牌名称
data.remain_quota_usdnumber剩余额度(⚡)。无限额度令牌固定返回 0
data.used_quota_usdnumber已用额度(⚡)
data.unlimited_quotaboolean是否无限额度

GET /v1/token/consume

分页查询当前 Bearer API Key 的消费记录(仅 type = 2 消费)。按 token_id 过滤,不返回所属用户的充值 / 收入等钱包类记录,也不汇总该用户下其它 Key 的消费。

鉴权Authorization: Bearer sk-xxxxxxxx

请求参数

参数类型必填说明
pageinteger页码,默认 1
page_sizeinteger每页条数,默认 10,最大 100
time_rangestring时间范围快捷筛选,仅允许 alltodayyesterdayweekmonth。优先级高于 start_timestamp / end_timestamp
start_timestampinteger开始时间戳(time_range 为空时生效)
end_timestampinteger结束时间戳(time_range 为空时生效)
model_namestring模型名称筛选
request_idstring请求 ID 筛选
upstream_request_idstring上游请求 ID 筛选

请求示例(curl)

curl "https://www.yunsell.com/v1/token/consume?page=1&page_size=10&time_range=today" \
  -H "Authorization: Bearer sk-xxxxx"

响应体

HTTP 200

{
  "success": true,
  "message": "",
  "code": 0,
  "data": {
    "page": 1,
    "page_size": 10,
    "total": 100,
    "items": [
      {
        "id": 1,
        "created_at": 1700000000,
        "type": 2,
        "type_name": "消费",
        "content": "模型推理",
        "token_name": "default",
        "model_name": "gpt-3.5-turbo",
        "app_name": "",
        "usage_name": "gpt-3.5-turbo",
        "quota_usd": 0.002,
        "quota_type": 2
      }
    ]
  }
}

响应字段

字段类型说明
successboolean是否成功
messagestring提示信息
codeinteger状态码,0 表示成功,-1 表示业务失败
data.pageinteger当前页码
data.page_sizeinteger每页条数
data.totalinteger总记录数
data.itemsarray消费记录列表
data.items[].idinteger日志 ID
data.items[].created_atinteger创建时间戳
data.items[].typeinteger日志类型,固定为 2(消费)
data.items[].type_namestring日志类型名称,固定为 消费
data.items[].contentstring日志内容
data.items[].token_namestring令牌名称
data.items[].model_namestring模型名称
data.items[].app_namestring应用名称(若来自 Apps 应用)
data.items[].usage_namestring使用模型名称,或 Apps 应用名称
data.items[].quota_usdnumber消费配额(⚡)
data.items[].quota_typeinteger额度变动类型(0 无变动、1 增加、2 减少)

相关文档