API 文档

同时兼容 OpenAI Chat Completions 与 Anthropic Messages。把节点地址指向控制台显示的用户专属节点。

快速开始

把 SDK 的 base_url 换成 https://<node>.quark.ink/v1,其中 <node> 是控制台显示的用户专属节点。api_key 换成在控制台创建的 qk_****,一行改动即可接入已授权模型。

quickstart.py
from openai import OpenAI

client = OpenAI(
    base_url="https://<node>.quark.ink/v1",  # <node> 在控制台查看
    api_key="qk_****",
)

resp = client.chat.completions.create(
    model="glm-5.3",
    messages=[{"role": "user", "content": "你好,Quark"}],
)
print(resp.choices[0].message.content)

认证

OpenAI 请求在 Authorization 头携带 Bearer qk_****;Anthropic 请求可使用 x-api-key: qk_****,也兼容 Bearer。Key 在控制台自助创建,数量不限;完整密钥仅创建时展示一次,此后列表只显示前缀等元数据。

terminal
curl https://<node>.quark.ink/v1/models \
  -H "Authorization: Bearer qk_****"

每个 Key 只能调用管理员配置的模型;未授权模型返回 404,非法请求头返回 403。

账户余额

GET /v1/balance

使用 API Key 查询所属账户的已入账余额。同一账户的所有 Key 返回相同余额,只能查询本账户。

请求示例

在 Authorization 头中携带 Bearer API Key,无需请求体或查询参数。运行示例前,将环境变量 QUARK_API_KEY 设置为你在控制台创建的 Key。

terminal
curl https://api.quark.ink/v1/balance \
  -H "Authorization: Bearer $QUARK_API_KEY"

响应字段

response.json
{
  "currency": "USD",
  "balance": "123.450000"
}
字段类型说明
currencystring账户当前币种:USD 为美元,CNY 为人民币。
balancestring以当前币种表示的余额,固定六位小数的十进制字符串;可为零或负数,不含透支额度。

查询错误

状态码error.type含义
401authentication_errorKey 缺失、失效、过期、已撤销,或所属账户已禁用。
403account_not_boundKey 未绑定账户。
404billing_account_not_found账户尚未建立计费记录。
503balance_unavailable余额查询暂不可用,请稍后重试。

错误响应使用 OpenAI 错误格式。若账户配置了统一返回 429 的错误状态策略,认证成功后的查询错误返回 429,原有 error.type 保持不变。

Chat Completions

POST /v1/chat/completions

请求与响应字段与 OpenAI 协议一致,现有 SDK 与工具链零改造。

请求参数

request.json
{
  "model": "glm-5.3",
  "messages": [
    {"role": "system", "content": "回答保持简短。"},
    {"role": "user", "content": "你好,Quark"}
  ],
  "temperature": 0.7,
  "max_tokens": 1024
}
参数类型必填说明
modelstring是模型名,见下方模型列表
messagesarray是对话消息,role 支持 system/user/assistant;content 可为文本,或含 text/image_url/video_url 的对象数组
streamboolean否默认 false,开启后以 SSE 逐块返回
temperaturenumber否采样温度 0–2,默认 1
max_tokensinteger否生成上限,缺省由模型决定

kimi-k3 可通过 Chat Completions 发送 video_url 视频块,url 必须是 data:video/mp4;base64,... 这类内联数据。不支持公网 HTTP 或 HTTPS 地址。视频不超过 50 MiB,对应请求体上限 80 MiB;Anthropic Messages 不接受视频。

video.json
{
  "model": "kimi-k3",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "描述这段视频"},
        {"type": "video_url", "video_url": {"url": "data:video/mp4;base64,..."}}
      ]
    }
  ]
}

响应协议

请求成功返回标准 JSON 结构,包含模型生成内容与本次调用的 Token 消耗详情。

response.json
{
  "id": "202607231720598de33176b54f0a0527",
  "object": "chat.completion",
  "created": 1784827259,
  "model": "glm-5.3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "你好,这里是 Quark。",
        "reasoning_content": "用户希望得到简短问候。"
      },
      "finish_reason": "stop"
    }
  ],
  "request_id": "202607231720598de33176b54f0a0527",
  "usage": {
    "prompt_tokens": 18,
    "completion_tokens": 18,
    "total_tokens": 36,
    "prompt_tokens_details": {
      "cached_tokens": 0
    }
  }
}
字段类型说明
idstring本次请求与响应的唯一标识符
objectstring对象类型,固定为 chat.completion
createdinteger生成响应的 Unix 时间戳(秒)
modelstring实际处理本次请求的模型名称
choicesarray模型生成的候选回复列表
choices[].indexinteger当前候选回复在列表中的索引编号
choices[].messageobject包含模型生成内容的消息对象
choices[].message.rolestring消息角色,固定为 assistant
choices[].message.contentstring模型生成的回复正文文本
choices[].message.reasoning_contentstring模型的推理思考过程文本(仅限支持思考链的模型返回)
choices[].finish_reasonstring回复结束原因:stop(自然结束)、length(达到 Token 上限)
usageobject本次调用的 Token 消耗统计
usage.prompt_tokensinteger输入提示词消耗的 Token 数
usage.completion_tokensinteger输出补全消耗的 Token 数
usage.total_tokensinteger本次请求总计消耗的 Token 数
usage.prompt_tokens_details.cached_tokensinteger命中的上下文缓存 Token 数

Anthropic Messages

POST /v1/messages

Anthropic Messages 兼容接口使用 POST /v1/messages。请求体遵循 Anthropic 格式,使用顶层 system、max_tokens 与 messages 字段;可直接接入 Claude Code 或 Anthropic SDK。该协议不接受视频输入,视频请走 Chat Completions 的 video_url。

请求参数

messages.sh
curl https://<node>.quark.ink/v1/messages \
  -H "x-api-key: qk_****" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm-5.3",
    "max_tokens": 1024,
    "system": "回答保持简短。",
    "messages": [{"role": "user", "content": "你好,Quark"}]
  }'
参数类型必填说明
modelstring是模型名,见下方模型列表
messagesarray是对话消息列表,包含 role(user/assistant)与 content
max_tokensinteger是最大生成 Token 上限(Anthropic 协议必填项)
systemstring否可选系统级提示词
streamboolean否默认 false,开启后以 SSE 逐块返回事件流
temperaturenumber否采样温度 0–2,默认 1

响应协议

请求成功返回 Anthropic 标准消息结构,包含内容块列表与用量统计。

response.json
{
  "id": "msg_01X9z5kQ8wRtY23pLk4aB17C",
  "type": "message",
  "role": "assistant",
  "model": "glm-5.3",
  "content": [
    {
      "type": "text",
      "text": "你好,这里是 Quark。"
    }
  ],
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 18,
    "output_tokens": 18
  }
}
字段类型说明
idstring消息唯一标识符(以 msg_ 为前缀)
typestring对象类型,固定为 message
rolestring消息角色,固定为 assistant
modelstring实际处理请求的模型名称
contentarray生成的内容块列表,包含 text 文本块或 thinking 思考块
stop_reasonstring停止生成原因:end_turn(自然完成)、max_tokens(达上限)
stop_sequencestring | null触发停止的自定义字符序列,无自定义时为 null
usageobjectToken 消耗统计
usage.input_tokensinteger输入消耗的 Token 数
usage.output_tokensinteger输出生成的 Token 数

流式

请求体加 "stream": true,响应转为 SSE,每块一个 chunk,最后以 data: [DONE] 收尾。

event-stream
data: {"id":"chatcmpl-9f2a1c","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":""}}]}

data: {"id":"chatcmpl-9f2a1c","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"你好"}}]}

data: {"id":"chatcmpl-9f2a1c","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":",这里是 Quark。"}}]}

data: {"id":"chatcmpl-9f2a1c","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: [DONE]

流式响应协议

流式连接建立后持续下发 SSE 数据块,每行以 data: 开头,数据体为 chunk JSON 对象。

字段类型说明
idstring当前流式响应的唯一标识符
objectstring对象类型,固定为 chat.completion.chunk
choicesarray模型生成的候选回复列表
choices[].indexinteger当前候选回复在列表中的索引编号
choices[].deltaobject当前数据块携带的消息增量对象
choices[].delta.rolestring仅在首个数据块下发,固定为 assistant
choices[].delta.contentstring当前数据块增量输出的文本内容片段
choices[].delta.reasoning_contentstring当前数据块增量输出的思考过程片段(推理模型)
choices[].finish_reasonstring | null仅在最后一个数据块返回结束原因(如 stop),其余块为 null

错误码

OpenAI 请求返回 OpenAI 错误格式;Anthropic 请求返回 Anthropic 错误格式,均包含可用于定位问题的错误类型与说明。

状态码含义处理建议
401无效 Key检查 Key 拼写与撤销状态,必要时在控制台重新创建
403请求被拒绝移除非法请求头,或联系管理员调整该 Key 的权限
404模型未授权检查模型名,或联系管理员为该 Key 配置模型
429触发限流按 Retry-After 退避重试,或升级套餐
500请求处理异常稍后重试,系统会自动处理请求
503服务暂不可用服务繁忙,稍候再试或临时切换模型

模型列表

单位人民币/百万 tokens,牌价变动同步生效。

模型厂商上下文输入 · ¥/1M输出 · ¥/1M
glm-5.3-flashZhipu1M¥0.8¥2.8
glm-5.3Zhipu1M¥8¥28
glm-5.3-fastZhipu1M¥12¥42
glm-5.2Zhipu1M¥8¥28
glm-5.2-fastZhipu1M¥12¥42
glm-5.1Zhipu200K¥8¥28
glm-5Zhipu200K¥6¥22
deepseek-v4-proDeepSeek1M¥4.5¥13.5
deepseek-v4.1-flashDeepSeek1M¥1¥4
deepseek-v4.1-flash-1017DeepSeek1M¥1¥4
deepseek-v4-flashDeepSeek1M¥1.5¥4.5
kimi-k3.1-proMoonshot1M¥13¥68
kimi-k3.1-pro-highspeedMoonshot1M¥26¥136
kimi-k3Moonshot1M¥20¥100
kimi-k3-fastMoonshot1M¥30¥150
kimi-k2.7-codeMoonshot256K¥6.5¥27
kimi-k2.5Moonshot256K¥4¥21
kimi-k2.6Moonshot256K¥6.5¥27