用 API 开发
Space Router API
Space Router 同时支持 OpenAI 与 Anthropic 两种协议格式,已有代码通常只需要改一处:base URL。本页面向的是把网关接进自己的应用,而不是接进某个现成工具。
把 key 放进环境变量
下面所有示例都从环境变量读取 key。不要把 key 粘进源代码——key 正是这样进到仓库里的,而且一旦进了 git 历史,删掉那一行之后它依然在。
export SPACE_ROUTER_API_KEY=sk-your-space-router-key
Windows PowerShell 下:
$env:SPACE_ROUTER_API_KEY = 'sk-your-space-router-key'
端点与 key 分组
key 所属的分组决定了它能调用哪些模型,而端点要与你使用的库匹配。
| 端点 | 格式 | 适用于 |
|---|---|---|
POST /v1/messages |
Anthropic Messages | Anthropic 官方 SDK,以及原生支持 Claude 的各类客户端。 |
POST /v1/chat/completions |
OpenAI Chat Completions | OpenAI 官方 SDK,以及庞大的 OpenAI 兼容生态。 |
POST /v1/responses |
OpenAI Responses | 按 Responses API 编写的较新 OpenAI SDK 代码。 |
| Key 分组 | 模型 slug |
|---|---|
| GPT(group 4) | gpt-6-astra、gpt-5.6-sol、gpt-5.6-terra、gpt-5.6-luna、gpt-5.5、gpt-5.4、gpt-5.4-mini |
| Claude(group 3) | claude-opus-5、claude-sonnet-5、claude-opus-4-8、claude-opus-4-7、claude-opus-4-6、claude-sonnet-4-6 |
| Claude Fable 5(group 5) | claude-fable-5 |
key 只在本分组内有效。用 Claude 分组的 key 去请求 gpt-5.5,或用它去请求 claude-fable-5,都会直接报错而不会自动降级——Fable 属于单独购买的分组。完整目录发布在 /models.json,可以在运行时拉取,不必把模型列表写死在代码里。
curl
写代码之前先发一次。如果 curl 能通而你的程序不能,问题就在程序里。
Anthropic Messages
curl https://space.stationine.com/v1/messages \
-H "x-api-key: $SPACE_ROUTER_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 64,
"messages": [{"role": "user", "content": "Reply with OK"}]
}'
OpenAI Chat Completions
curl https://space.stationine.com/v1/chat/completions \
-H "Authorization: Bearer $SPACE_ROUTER_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "gpt-5.6-sol",
"messages": [{"role": "user", "content": "Reply with OK"}]
}'
OpenAI Responses
curl https://space.stationine.com/v1/responses \
-H "Authorization: Bearer $SPACE_ROUTER_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "gpt-5.6-sol",
"input": "Reply with OK"
}'
任意一个加上 "stream": true 即可使用 SSE 流式返回。
让 SDK 指向网关
两家官方 SDK 都支持覆盖 base URL,其余代码不用动。
OpenAI SDK —— Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["SPACE_ROUTER_API_KEY"],
base_url="https://space.stationine.com/v1",
)
response = client.chat.completions.create(
model="gpt-5.6-sol",
messages=[{"role": "user", "content": "Reply with OK"}],
)
print(response.choices[0].message.content)
OpenAI SDK —— Node
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.SPACE_ROUTER_API_KEY,
baseURL: "https://space.stationine.com/v1",
});
const response = await client.chat.completions.create({
model: "gpt-5.6-sol",
messages: [{ role: "user", content: "Reply with OK" }],
});
console.log(response.choices[0].message.content);
Anthropic SDK —— Python
Anthropic SDK 会自己拼上 /v1/messages,所以它的 base URL 填网关根地址,不带 /v1 后缀。
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["SPACE_ROUTER_API_KEY"],
base_url="https://space.stationine.com",
)
message = client.messages.create(
model="claude-sonnet-5",
max_tokens=64,
messages=[{"role": "user", "content": "Reply with OK"}],
)
print(message.content[0].text)
常见报错
| 你看到的 | 含义 |
|---|---|
401 或 403 |
key 错误、已吊销或余额不足。确认环境变量在你实际运行的那个进程里确实生效了——已经打开的终端不会读到之后才 export 的变量。 |
404 |
/v1 多了或少了。OpenAI SDK 的 base URL 要止于 /v1,Anthropic SDK 要用不带后缀的根地址。 |
| 提示模型不存在 | slug 拼错,或该模型不属于你 key 的分组。拉取 /models.json 对照。 |
| curl 能通、程序不通 | 程序读到的不是同一个 key 或同一个 base URL。把它解析出来的 base URL 打印出来看看——但绝不要打印 key。 |
Space Router 是什么?
Space Router 是由 Station Nine 运营的 AI API 中转服务,Base URL 为 https://space.stationine.com。它在 POST /v1/messages 接收 Anthropic Messages 请求,在 POST /v1/chat/completions 接收 OpenAI Chat Completions 请求,在 POST /v1/responses 接收 OpenAI Responses 请求,提供 OpenAI GPT 与 Anthropic Claude 两大模型家族。服务与账户细节见 Space Router 总览。
还没有凭证?前往 Space Router 获取 API key。