自带 Key(BYOK)已上线,每月 1,000,000 次免费 BYOK 请求,不需要充值了解详情

开发文档

Chat Completions

POST/v1/chat/completions

目录里的所有文本模型都能用 OpenAI 兼容的 Chat Completions 调用。官方 OpenAI SDK 把 base URL 设为 https://api.boostrail.com/v1 即可使用。

示例

curl https://api.boostrail.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash",
    "messages": [{"role": "user", "content": "你好"}]
  }'
from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.boostrail.com/v1")
stream = client.chat.completions.create(
    model="deepseek-v4.1-flash",
    messages=[{"role": "user", "content": "写一首关于火车的俳句。"}],
    max_tokens=200,
    stream=True,
)
for chunk in stream:
    if chunk.choices:
        print(chunk.choices[0].delta.content or "", end="")
    if chunk.usage:
        print("\n", chunk.usage)
import OpenAI from "openai";

const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://api.boostrail.com/v1" });
const completion = await client.chat.completions.create({
  model: "deepseek-v4.1-flash",
  messages: [{ role: "user", content: "你好" }],
});
console.log(completion.choices[0].message.content);

请求体

字段类型说明
modelstring,必填模型页 上的模型 ID。
messagesarray,必填角色有 system、user、assistant 和 tool。content 可以是字符串、分段数组(text、image_url),在只带 tool_calls 的 assistant 轮次里也可以是 null。图片分段需要模型支持图片输入。
max_tokens, max_completion_tokensinteger输出 token 的上限;没有 max_tokens 时使用 max_completion_tokens。它同时决定冻结多少余额,见 余额与 max_tokens。
streamboolean服务器推送事件(SSE),见 流式输出。
stream_optionsobject可以传。不管这里怎么设,用量都会在最后一个分块里返回。
temperature, top_p, stop, frequency_penalty, presence_penalty, seed原样传给模型。
tools, tool_choice, parallel_tool_calls原样传给模型。messages 里可以带工具调用的历史。
response_formatobject原样传给模型:JSON 模式或 json_schema,需要模型本身支持。
reasoning_effort, thinking, reasoning, enable_thinking四种写法都可以开关思考或设定思考预算,按你的客户端习惯任选一种,系统会按承接这个模型的线路自动换成它认可的写法。
logprobs, top_logprobs原样传给模型。
userstring用作路由的会话 ID(见 会话保持),不传给模型。
ninteger只支持 1,其他值返回 400 invalid_request。

上表以外的字段

  • audio、web_search_options,以及 ["text"] 以外的 modalities,返回 400 unsupported_parameter,param 会指出是哪个字段。
  • 其他字段不会传给模型。请求照常执行,响应头 x-boostrail-degraded 会列出被丢掉的字段。

流式输出

设置 stream: true 后,响应是一串 OpenAI 分块格式的 data: 行,以 data: [DONE] 结束。[DONE] 之前的最后一个分块带 usage。

如果承接请求的线路 45 秒内没有返回任何内容,请求会在任何数据发给你之前换到另一条线路。一旦已经开始返回数据,请求就不再换线。详见 报错与换线。

响应

标准的 chat.completion 对象。usage 包含 prompt_tokens、completion_tokens 和 total_tokens;提示词有一部分读自缓存时,还会带 prompt_tokens_details.cached_tokens。缓存 token 按该模型的缓存读取价格计费。

请求开始前的检查

  • 模型 ID 不存在:400 model_not_found。
  • 输入过长:估算超出模型输入上限的请求,在冻结任何余额之前就返回 400 context_length_exceeded。报错信息会写明上限和估算值,遇到这个报错会自动压缩历史的客户端可以照常工作。
  • 非流式请求的时限是 180 秒,超时返回 504 provider_timeout。生成内容较长时请改用流式。

余额与 max_tokens

每个请求先按「输入 + 最大输出」冻结余额,结束后按实际用量结算,多冻结的部分退回。

  • 设置了 max_tokens:余额不够覆盖「输入 + max_tokens」时,返回 402 insufficient_balance。
  • 没设置 max_tokens:余额不足时,输出上限会降到余额能覆盖的长度,请求照常执行。连很短的回复都覆盖不了时,返回 402 insufficient_balance。
  • 已经为这个模型添加了自己的厂商 Key(BYOK):余额不够时,请求只用你自己的 Key 执行,不再回落到平台线路,而不是返回 402。如果你的 Key 也失败,报错信息会说明只尝试了你的 Key。
  • 失败的请求不计费,冻结的余额全部退回。

更新日期:2026-10-05