运行总览

LIVE等待同步

ROUTING CORE ONLINE

所有线路,一眼掌控。

实时聚合 OpenRouter 账号余额、请求质量和虚拟密钥用量。

可用账号HEALTH

正在获取状态

已知总余额BALANCE

已知额度 —

请求成功率QUALITY

尚无请求

今日用量SPEND

出口代理检查中

UPSTREAM HEALTH

上游账号

自动轮询余额;认证失败会摘除,限流与网络故障进入冷却后自动切换。

可用冷却禁用
账号运行状态剩余额度今日用量请求质量最近同步操作

ACCESS CONTROL

分发密钥

为不同调用方签发隔离凭证,并设置独立消费上限。

名称密钥前缀状态已跟踪支出消费上限请求数最近使用操作

OPENROUTER COMPATIBILITY

调用指南

完整兼容 OpenRouter Chat Completions。只替换 Base URL 和 API Key,模型、Provider 路由与高级参数保持 OpenRouter 原样。

BASE URLhttps://openrouter.s6o.org/v1
01

快速开始

先创建一个 orpk_* 分发密钥。不要把管理员 Token 或真实 OpenRouter Key 用于业务调用。

只需改两项base_url → 池地址;api_key → 管理页签发的 orpk_*
cURL · 非流式 Chat Completion
export ORBIT_API_KEY='orpk_替换为你的分发密钥'

curl https://openrouter.s6o.org/v1/chat/completions \
  -H "Authorization: Bearer $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-OpenRouter-Metadata: enabled" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [{"role":"user","content":"用一句话介绍你自己"}],
    "temperature": 0.7,
    "max_tokens": 300
  }'
POST/v1/chat/completions对话补全,支持 SSE
GET/v1/models可用模型和模型 ID
GET/v1/providersProvider 名称和 slug
GET/v1/models/{author}/{slug}/endpoints某模型全部端点
流式 SSE
curl -N https://openrouter.s6o.org/v1/chat/completions \
  -H "Authorization: Bearer $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [{"role":"user","content":"逐步解释快速排序"}],
    "stream": true,
    "stream_options": {"include_usage": true}
  }'
02

OpenAI SDK 配置

接口保持 OpenAI-compatible;OpenRouter 扩展字段通过请求体原样传递。

TypeScript / JavaScript
openai npm package
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://openrouter.s6o.org/v1",
  apiKey: process.env.ORBIT_API_KEY,
});

const result = await client.chat.completions.create({
  model: "openai/gpt-4o-mini",
  messages: [{ role: "user", content: "Hello" }],
});
console.log(result.choices[0].message.content);
Python
openai Python package
from openai import OpenAI
import os

client = OpenAI(
    base_url="https://openrouter.s6o.org/v1",
    api_key=os.environ["ORBIT_API_KEY"],
)

result = client.chat.completions.create(
    model="openai/gpt-4o-mini",
    messages=[{"role": "user", "content": "Hello"}],
    extra_body={
        "provider": {"sort": "throughput"}
    },
)
print(result.choices[0].message.content)
Go(标准库)
net/http
payload := strings.NewReader(`{
  "model":"openai/gpt-4o-mini",
  "messages":[{"role":"user","content":"Hello"}],
  "provider":{"sort":"latency"}
}`)
req, _ := http.NewRequest("POST",
  "https://openrouter.s6o.org/v1/chat/completions", payload)
req.Header.Set("Authorization", "Bearer "+os.Getenv("ORBIT_API_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
03

对齐 OpenRouter:两层路由

两种故障转移会叠加,但作用对象不同。

1业务请求orpk_*
2Orbit Pool选择健康的 OpenRouter 账号;网络、401/402、429、5xx 时换账号
3OpenRoutermodel/modelsprovider 选择模型和推理 Provider
4推理端点OpenAI / Anthropic / Together…
不要混淆管理页里的“上游账号”是付费账户池;请求体的 provider 是 OpenRouter 后面的推理服务商。池不会删除或改写 providermodels、工具调用、结构化输出等请求字段。
保持跨账号一致池可能为相邻请求选择不同 OpenRouter 账户。始终显式发送 model,并把隐私、Provider 白名单、参数兼容和价格限制放进本次请求的 provider;不要依赖某个账户后台的默认模型、BYOK 或隐私偏好。
04

Provider Routing 完整说明

provider 放在 Chat Completions 请求 JSON 的顶层。

字段类型 / 默认用途
orderstring[]按顺序优先尝试 Provider;未列出的仍可作为回退。
only / ignorestring[]白名单 / 黑名单,值必须是 Provider slug。
allow_fallbacksboolean / true是否允许 OpenRouter 尝试备用 Provider。
sortprice | throughput | latency按价格、吞吐或首 token 延迟排序;设置后关闭默认负载均衡。
require_parametersboolean / false只选完整支持本次参数的端点,避免静默忽略字段。
data_collectionallow | deny / allow是否允许可能存储数据的 Provider。
zdrboolean只使用 Zero Data Retention 端点。
enforce_distillable_textboolean只选择模型作者允许文本蒸馏的端点。
quantizationsstring[]限制量化类型,例如 fp8bf16
preferred_min_throughputnumber | percentile object偏好最低 tokens/s,不满足时仅降级排序,不是硬过滤。
preferred_max_latencynumber | percentile object偏好最大延迟秒数,支持 p50/p75/p90/p99。
max_priceobject硬性价格上限:prompt/completion 按 $/M tokens,另支持 request/image。
推荐默认

最高可用性

不传 provider。OpenRouter 在健康 Provider 中按价格倾向负载均衡,并保留回退。

"model": "openai/gpt-4o-mini"
性能优先

最高吞吐

也可给 model 加 :nitro 后缀。

"provider": {
  "sort": "throughput"
}
固定顺序

优先指定 Provider

先 Together,再 DeepInfra,失败后允许其他可用 Provider。

"provider": {
  "order": ["together", "deepinfra"],
  "allow_fallbacks": true
}
严格固定

只允许白名单

会降低可用性;没有满足条件的端点时返回 503。

"provider": {
  "only": ["azure"],
  "allow_fallbacks": false
}
隐私

ZDR + 不收集数据

同时保证请求参数均被端点支持。

"provider": {
  "zdr": true,
  "data_collection": "deny",
  "require_parameters": true
}
成本保护

价格上限

价格单位是每百万 token 的美元;超出上限不会执行。

"provider": {
  "sort": "price",
  "max_price": {
    "prompt": 1,
    "completion": 2
  }
}
模型回退 + Provider 全局性能排序
{
  "models": [
    "anthropic/claude-sonnet-4.5",
    "openai/gpt-5-mini",
    "google/gemini-2.5-flash"
  ],
  "messages": [{"role":"user","content":"分析这段代码"}],
  "provider": {
    "sort": {"by":"throughput","partition":"none"},
    "preferred_min_throughput": {"p90":50},
    "require_parameters": true,
    "allow_fallbacks": true
  }
}

partition: "model"(默认)会先穷尽第一个模型的端点;partition: "none" 会把多个模型的端点放在一起全局排序。

05

模型与 Provider 对齐

不要猜 slug;从 API 或 OpenRouter 模型详情页复制精确值,包括 /turbo 等变体。

查询 Provider slug
curl -s https://openrouter.s6o.org/v1/providers \
  -H "Authorization: Bearer $ORBIT_API_KEY" \
  | jq '.data[] | {name, slug}'
查询模型与该模型的 Provider 端点
# 找模型 ID
curl -s https://openrouter.s6o.org/v1/models \
  -H "Authorization: Bearer $ORBIT_API_KEY" \
  | jq -r '.data[] | [.id, .context_length] | @tsv'

# 查看单个模型实际可选的 Provider、定价和参数
curl -s https://openrouter.s6o.org/v1/models/openai/gpt-4o/endpoints \
  -H "Authorization: Bearer $ORBIT_API_KEY" | jq .
字段映射model 使用模型 ID(如 openai/gpt-4o);provider.only/order/ignore 使用 Provider slug(如 azure),两者不是同一个命名空间。
06

响应、Provider 与费用对账

池不重新包装 OpenRouter 响应,可直接按 OpenRouter/OpenAI schema 解析。

id生成记录 ID;用于追踪一次 OpenRouter generation。
model最终实际执行的模型;使用 models 回退时以它为准。
usage.prompt_tokens输入 token,使用模型原生 tokenizer。
usage.completion_tokens输出 token;推理 token 可在 details 中出现。
usage.costOpenRouter 返回的本次实际成本;池据此累计虚拟密钥支出。
openrouter_metadata请求头设置 X-OpenRouter-Metadata: enabled 后返回路由元数据,用于确认实际 Provider。
推荐审计方式记录请求的虚拟密钥前缀、响应 idmodelusageopenrouter_metadata。不要用管理页上游账号名推断实际推理 Provider。
应用归属 Header池会统一注入配置好的 HTTP-RefererX-Title,用于 OpenRouter 应用归属;调用方无需自行设置。X-OpenRouter-Metadata: enabled 会继续原样透传。
07

错误、重试与边界

调用方仍应处理最终返回的 OpenRouter 标准错误。

400请求或 Provider 条件无效
401orpk_* 无效或已禁用
402池内账号额度不足
403策略、权限或内容审核拒绝
429限流,遵循 Retry-After
502/503上游异常或没有满足路由条件的端点
  • 池会在响应开始前对网络错误、408、429、5xx 和密钥级错误自动换账号;SSE 已输出后不会重放,避免重复 token。
  • /api/v1/key、credits、API Key 管理等账户接口被禁止透传,只能通过本管理页查看池级余额与密钥。
  • 强制 only、ZDR、量化或价格上限可能把候选端点缩减为零,此时放宽条件或加入备用模型。