API 文档
同时兼容 OpenAI Chat Completions 与 Anthropic Messages。把节点地址指向控制台显示的用户专属节点。
快速开始
把 SDK 的 base_url 换成 https://<node>.quark.ink/v1,其中 <node> 是控制台显示的用户专属节点。api_key 换成在控制台创建的 qk_****,一行改动即可接入已授权模型。
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 在控制台自助创建,数量不限;完整密钥仅创建时展示一次,此后列表只显示前缀等元数据。
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。
curl https://api.quark.ink/v1/balance \
-H "Authorization: Bearer $QUARK_API_KEY"响应字段
{
"currency": "USD",
"balance": "123.450000"
}| 字段 | 类型 | 说明 |
|---|---|---|
| currency | string | 账户当前币种:USD 为美元,CNY 为人民币。 |
| balance | string | 以当前币种表示的余额,固定六位小数的十进制字符串;可为零或负数,不含透支额度。 |
查询错误
| 状态码 | error.type | 含义 |
|---|---|---|
| 401 | authentication_error | Key 缺失、失效、过期、已撤销,或所属账户已禁用。 |
| 403 | account_not_bound | Key 未绑定账户。 |
| 404 | billing_account_not_found | 账户尚未建立计费记录。 |
| 503 | balance_unavailable | 余额查询暂不可用,请稍后重试。 |
错误响应使用 OpenAI 错误格式。若账户配置了统一返回 429 的错误状态策略,认证成功后的查询错误返回 429,原有 error.type 保持不变。
Chat Completions
POST /v1/chat/completions
请求与响应字段与 OpenAI 协议一致,现有 SDK 与工具链零改造。
请求参数
{
"model": "glm-5.3",
"messages": [
{"role": "system", "content": "回答保持简短。"},
{"role": "user", "content": "你好,Quark"}
],
"temperature": 0.7,
"max_tokens": 1024
}| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 模型名,见下方模型列表 |
| messages | array | 是 | 对话消息,role 支持 system/user/assistant;content 可为文本,或含 text/image_url/video_url 的对象数组 |
| stream | boolean | 否 | 默认 false,开启后以 SSE 逐块返回 |
| temperature | number | 否 | 采样温度 0–2,默认 1 |
| max_tokens | integer | 否 | 生成上限,缺省由模型决定 |
kimi-k3 可通过 Chat Completions 发送 video_url 视频块,url 必须是 data:video/mp4;base64,... 这类内联数据。不支持公网 HTTP 或 HTTPS 地址。视频不超过 50 MiB,对应请求体上限 80 MiB;Anthropic Messages 不接受视频。
{
"model": "kimi-k3",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "描述这段视频"},
{"type": "video_url", "video_url": {"url": "data:video/mp4;base64,..."}}
]
}
]
}响应协议
请求成功返回标准 JSON 结构,包含模型生成内容与本次调用的 Token 消耗详情。
{
"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
}
}
}| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 本次请求与响应的唯一标识符 |
| object | string | 对象类型,固定为 chat.completion |
| created | integer | 生成响应的 Unix 时间戳(秒) |
| model | string | 实际处理本次请求的模型名称 |
| choices | array | 模型生成的候选回复列表 |
| choices[].index | integer | 当前候选回复在列表中的索引编号 |
| choices[].message | object | 包含模型生成内容的消息对象 |
| choices[].message.role | string | 消息角色,固定为 assistant |
| choices[].message.content | string | 模型生成的回复正文文本 |
| choices[].message.reasoning_content | string | 模型的推理思考过程文本(仅限支持思考链的模型返回) |
| choices[].finish_reason | string | 回复结束原因:stop(自然结束)、length(达到 Token 上限) |
| usage | object | 本次调用的 Token 消耗统计 |
| usage.prompt_tokens | integer | 输入提示词消耗的 Token 数 |
| usage.completion_tokens | integer | 输出补全消耗的 Token 数 |
| usage.total_tokens | integer | 本次请求总计消耗的 Token 数 |
| usage.prompt_tokens_details.cached_tokens | integer | 命中的上下文缓存 Token 数 |
Anthropic Messages
POST /v1/messages
Anthropic Messages 兼容接口使用 POST /v1/messages。请求体遵循 Anthropic 格式,使用顶层 system、max_tokens 与 messages 字段;可直接接入 Claude Code 或 Anthropic SDK。该协议不接受视频输入,视频请走 Chat Completions 的 video_url。
请求参数
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"}] }'
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 模型名,见下方模型列表 |
| messages | array | 是 | 对话消息列表,包含 role(user/assistant)与 content |
| max_tokens | integer | 是 | 最大生成 Token 上限(Anthropic 协议必填项) |
| system | string | 否 | 可选系统级提示词 |
| stream | boolean | 否 | 默认 false,开启后以 SSE 逐块返回事件流 |
| temperature | number | 否 | 采样温度 0–2,默认 1 |
响应协议
请求成功返回 Anthropic 标准消息结构,包含内容块列表与用量统计。
{
"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
}
}| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 消息唯一标识符(以 msg_ 为前缀) |
| type | string | 对象类型,固定为 message |
| role | string | 消息角色,固定为 assistant |
| model | string | 实际处理请求的模型名称 |
| content | array | 生成的内容块列表,包含 text 文本块或 thinking 思考块 |
| stop_reason | string | 停止生成原因:end_turn(自然完成)、max_tokens(达上限) |
| stop_sequence | string | null | 触发停止的自定义字符序列,无自定义时为 null |
| usage | object | Token 消耗统计 |
| usage.input_tokens | integer | 输入消耗的 Token 数 |
| usage.output_tokens | integer | 输出生成的 Token 数 |
流式
请求体加 "stream": true,响应转为 SSE,每块一个 chunk,最后以 data: [DONE] 收尾。
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 对象。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 当前流式响应的唯一标识符 |
| object | string | 对象类型,固定为 chat.completion.chunk |
| choices | array | 模型生成的候选回复列表 |
| choices[].index | integer | 当前候选回复在列表中的索引编号 |
| choices[].delta | object | 当前数据块携带的消息增量对象 |
| choices[].delta.role | string | 仅在首个数据块下发,固定为 assistant |
| choices[].delta.content | string | 当前数据块增量输出的文本内容片段 |
| choices[].delta.reasoning_content | string | 当前数据块增量输出的思考过程片段(推理模型) |
| choices[].finish_reason | string | 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-flash | Zhipu | 1M | ¥0.8 | ¥2.8 |
| glm-5.3 | Zhipu | 1M | ¥8 | ¥28 |
| glm-5.3-fast | Zhipu | 1M | ¥12 | ¥42 |
| glm-5.2 | Zhipu | 1M | ¥8 | ¥28 |
| glm-5.2-fast | Zhipu | 1M | ¥12 | ¥42 |
| glm-5.1 | Zhipu | 200K | ¥8 | ¥28 |
| glm-5 | Zhipu | 200K | ¥6 | ¥22 |
| deepseek-v4-pro | DeepSeek | 1M | ¥4.5 | ¥13.5 |
| deepseek-v4.1-flash | DeepSeek | 1M | ¥1 | ¥4 |
| deepseek-v4.1-flash-1017 | DeepSeek | 1M | ¥1 | ¥4 |
| deepseek-v4-flash | DeepSeek | 1M | ¥1.5 | ¥4.5 |
| kimi-k3.1-pro | Moonshot | 1M | ¥13 | ¥68 |
| kimi-k3.1-pro-highspeed | Moonshot | 1M | ¥26 | ¥136 |
| kimi-k3 | Moonshot | 1M | ¥20 | ¥100 |
| kimi-k3-fast | Moonshot | 1M | ¥30 | ¥150 |
| kimi-k2.7-code | Moonshot | 256K | ¥6.5 | ¥27 |
| kimi-k2.5 | Moonshot | 256K | ¥4 | ¥21 |
| kimi-k2.6 | Moonshot | 256K | ¥6.5 | ¥27 |