OmniRoute API 参考详解:从 Chat Completions 到管理端点的完整接口体系与请求处理链路
【免费下载链接】OmniRouteNever stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors项目地址: https://gitcode.com/GitHub_Trending/om/OmniRoute
本篇以 OmniRoute 仓库中的 API 参考文档为主线,完整梳理其全部对外接口:OpenAI/Anthropic/Gemini/Ollama 兼容端点、嵌入与图像生成、语义缓存、Dashboard 管理面(Provider、密钥、预算、隧道、备份)、遥测与请求处理流水线。读完你可以直接基于文档中的端点表、请求示例和响应结构对接 OmniRoute,并借助仓库源码验证每个关键机制(缓存键生成、幂等去重、会话亲和、鉴权策略)的真实实现。
一、端点总览
OmniRoute 的 API 面可以分成两大类:
/v1/*与/v1beta/*:面向 LLM 客户端的数据面(chat、embeddings、images、responses、messages 等),对应路由位于 src/app/api/v1/ 与 src/app/api/v1beta/ 下;/api/*:面向 Dashboard 与管理场景的控制面(Provider 管理、密钥、用量、设置、备份、隧道、遥测等),对应路由位于 src/app/api/ 下。
请求处理总流程(文档定义):
- 客户端向
/v1/*发送请求; - 路由处理器调用
handleChat、handleEmbedding、handleAudioTranscription或handleImageGeneration; - 解析模型(直接 provider/model 或别名/combo);
- 从本地数据库选择凭据,并按账户可用性过滤;
- chat 场景进入
handleChatCore——格式检测、翻译、缓存检查、幂等检查; - Provider executor 向上游发送请求;
- 响应翻译回客户端格式(chat),或原样返回(embeddings/images/audio);
- 记录用量与日志;
- 出错时按 combo 规则应用 fallback。
完整架构参考见 docs/architecture/ARCHITECTURE.md。
二、Chat Completions 与自定义请求头
基础调用示例(文档原文):
POST /v1/chat/completions Authorization: Bearer your-api-key Content-Type: application/json { "model": "cc/claude-opus-4-6", "messages": [ {"role": "user", "content": "Write a function to..."} ], "stream": true }自定义 Headers
| Header | 方向 | 说明 |
|---|---|---|
X-OmniRoute-No-Cache | Request | 设为true绕过缓存 |
X-OmniRoute-Progress | Request | 设为true开启进度事件 |
X-Session-Id | Request | 外部会话亲和的粘性会话键 |
x_session_id | Request | 下划线变体同样被接受(直接 HTTP) |
Idempotency-Key | Request | 去重键(5s 窗口) |
X-Request-Id | Request | 替代去重键 |
X-OmniRoute-Cache | Response | HIT或MISS(非流式) |
X-OmniRoute-Idempotent | Response | 被去重时返回true |
X-OmniRoute-Progress | Response | 进度追踪开启时返回enabled |
X-OmniRoute-Session-Id | Response | OmniRoute 实际使用的有效会话 ID |
Nginx 提示:如果依赖下划线头(如
x_session_id),需开启underscores_in_headers on;。
源码级验证
上述头部机制在 src/app/api/v1/chat/completions/route.ts 中有直接印证:
- 会话亲和:路由在入口处调用
resolveSessionId(request)与admitChatRequest(request, { sessionId, queueMs: CHAT_ADMISSION_QUEUE_MAX_MS })(来自@/shared/middleware/chatBodyAdmission)。这意味着X-Session-Id不仅决定粘性路由,还参与准入(admission)排队控制,队列超过上限的请求会直接被拒而不是拖垮进程。 - Content-Type 守卫:对非
application/json的 POST body 直接返回415(unsupported_media_type),与 OpenAI/Anthropic 边缘行为保持一致,防止text/plainbody 悄悄进入 provider 解析流程。 - 宽松的前置 schema:路由只断言"非 null 对象、
model若存在须为可空字符串、messages若存在须为数组"(zod.passthrough()),把真正的深度校验(temperature/top_p/max_tokens/n 等)下沉给handleChat,以避免在热路径上新增拒绝行为。 - 注入防护:路由持有一个单例
createInjectionGuard,提示注入检测在handleChat内与 pino logger 一并重评估,避免重复打日志。
三、Embeddings(嵌入)
POST /v1/embeddings Authorization: Bearer your-api-key Content-Type: application/json { "model": "nebius/Qwen/Qwen3-Embedding-8B", "input": "The food was delicious" }支持的 Provider:Nebius、OpenAI、Mistral、Together AI、Fireworks、NVIDIA、OpenRouter、GitHub Models。
列出全部嵌入模型:
GET /v1/embeddings源码印证(src/app/api/v1/embeddings/route.ts):
GET /v1/embeddings通过getSpecialtyModelsResponse过滤model.type === "embedding"的目录条目,即文档所说的"列出全部嵌入模型";POST先用v1EmbeddingsSchema做 body 校验,失败返回 400;- 鉴权遵循
REQUIRE_API_KEY特性开关:关闭时忽略非法 key 以保证匿名访问可用;开启时先校验 key 有效性(401),再调用enforceApiKeyPolicy强制模型访问限制与预算上限——这是 API key 策略在数据面上的落点。
四、Image Generation(图像生成)
POST /v1/images/generations Authorization: Bearer your-api-key Content-Type: application/json { "model": "openai/gpt-image-2", "prompt": "A beautiful sunset over mountains", "size": "1024x1024" }支持的 Provider:OpenAI(GPT Image 2)、xAI(Grok Image)、Together AI(FLUX)、Fireworks AI、Nebius(FLUX)、Hyperbolic、NanoBanana、OpenRouter、SD WebUI(本地)、ComfyUI(本地)。
列出全部图像模型:
GET /v1/images/generations五、List Models
GET /v1/models Authorization: Bearer your-api-key → 以 OpenAI 格式返回全部 chat、embedding、image 模型 + combos路由实现在 src/app/api/v1/models/,目录构建拆分为 catalog 分页、去重、OpenRouter 映射、付费过滤、视觉能力标注等模块,最终按 OpenAI/v1/models格式输出,因此标准 OpenAI 客户端可以零改造地列出 OmniRoute 中的全部可用模型(含 combo)。
六、兼容端点(Compatibility Endpoints)
| Method | Path | 格式 |
|---|---|---|
| POST | /v1/chat/completions | OpenAI |
| POST | /v1/messages | Anthropic |
| POST | /v1/responses | OpenAI Responses |
| POST | /v1/embeddings | OpenAI |
| POST | /v1/images/generations | OpenAI |
| GET | /v1/models | OpenAI |
| POST | /v1/messages/count_tokens | Anthropic |
| GET | /v1beta/models | Gemini |
| POST | /v1beta/models/{...path} | Gemini generateContent |
| POST | /v1/api/chat | Ollama |
指定 Provider 直连路由
POST /v1/providers/{provider}/chat/completions POST /v1/providers/{provider}/embeddings POST /v1/providers/{provider}/images/generations若模型名缺少 provider 前缀会自动补全;模型与 provider 不匹配时返回400。这组路由在 src/app/api/v1/providers/[provider]/ 下实现,为绕过路由表直接打到指定上游的客户端提供了稳定入口。
七、语义缓存(Semantic Cache)
# 获取缓存统计 GET /api/cache/stats # 清空全部缓存 DELETE /api/cache/stats响应示例:
{ "semanticCache": { "memorySize": 42, "memoryMaxSize": 500, "dbSize": 128, "hitRate": 0.65 }, "idempotency": { "activeKeys": 3, "windowMs": 5000 } }源码级实现(src/lib/semanticCache.ts)
文件头注释完整定义了缓存语义,可与文档互相印证:
- 两级结构:内存 LRU(快路径)+ SQLite(跨重启持久化);
- 缓存键:
SHA-256(model + 归一化 messages + temperature + top_p),且只对temperature=0的响应缓存; - 流式兼容:流式响应在组装完成后入缓存,命中时一律返回 JSON;
- 绕过方式:请求头
X-OmniRoute-No-Cache: true; - 持久指标:
cache_metrics表维护hits/misses/tokens_saved三个计数器,/api/cache/stats的hitRate即由此得出。
管理端点 src/app/api/cache/stats/route.ts 对 GET/DELETE 均先执行isAuthenticated鉴权(未认证返回 401),DELETE 成功后返回{ "success": true, "message": "Cache cleared" }。
八、Dashboard 与管理端点
认证
| 端点 | Method | 说明 |
|---|---|---|
/api/auth/login | POST | 登录 |
/api/auth/logout | POST | 登出 |
/api/settings/require-login | GET/PUT | 切换是否强制登录 |
Provider 管理
| 端点 | Method | 说明 |
|---|---|---|
/api/providers | GET/POST | 列出 / 创建 Provider |
/api/providers/[id] | GET/PUT/DELETE | 管理单个 Provider |
/api/providers/[id]/test | POST | 测试 Provider 连接 |
/api/providers/[id]/models | GET | 列出 Provider 的模型 |
/api/providers/validate | POST | 校验 Provider 配置 |
/api/provider-nodes* | Various | Provider 节点管理 |
/api/provider-models | GET/POST/PATCH/DELETE | 自定义模型(增、改、隐藏/显示、删) |
OAuth 流程
| 端点 | Method | 说明 |
|---|---|---|
/api/oauth/[provider]/[action] | Various | Provider 特定的 OAuth |
路由与配置
| 端点 | Method | 说明 |
|---|---|---|
/api/models/alias | GET/POST | 模型别名 |
/api/models/catalog | GET | 按 provider + type 列出全部模型 |
/api/combos* | Various | Combo 管理 |
/api/keys* | Various | API 密钥管理 |
/api/pricing | GET | 模型定价 |
用量与分析
| 端点 | Method | 说明 |
|---|---|---|
/api/usage/history | GET | 用量历史 |
/api/usage/logs | GET | 用量日志 |
/api/usage/request-logs | GET | 请求级日志 |
/api/usage/[connectionId] | GET | 按连接的用量 |
设置
| 端点 | Method | 说明 |
|---|---|---|
/api/settings | GET/PUT/PATCH | 通用设置 |
/api/settings/proxy | GET/PUT | 网络代理配置 |
/api/settings/proxy/test | POST | 测试代理连接 |
/api/settings/ip-filter | GET/PUT | IP 白名单/黑名单 |
/api/settings/thinking-budget | GET/PUT | 推理 token 预算 |
/api/settings/system-prompt | GET/PUT | 全局 system prompt |
监控
| 端点 | Method | 说明 |
|---|---|---|
/api/sessions | GET | 活跃会话追踪 |
/api/rate-limits | GET | 按账户的速率限制 |
/api/monitoring/health | GET | 健康检查 + Provider 摘要(catalogCount、configuredCount、activeCount、monitoredCount) |
/api/cache/stats | GET/DELETE | 缓存统计 / 清空 |
备份与导出/导入
| 端点 | Method | 说明 |
|---|---|---|
/api/db-backups | GET | 列出可用备份 |
/api/db-backups | PUT | 创建手动备份 |
/api/db-backups | POST | 从指定备份恢复 |
/api/db-backups/export | GET | 下载数据库为 .sqlite 文件 |
/api/db-backups/import | POST | 上传 .sqlite 文件替换数据库 |
/api/db-backups/exportAll | GET | 下载完整备份为 .tar.gz 压缩包 |
云同步
| 端点 | Method | 说明 |
|---|---|---|
/api/sync/cloud | Various | 云同步操作 |
/api/sync/initialize | POST | 初始化同步 |
/api/cloud/* | Various | 云管理 |
隧道
| 端点 | Method | 说明 |
|---|---|---|
/api/tunnels/cloudflared | GET | 读取 Cloudflare Quick Tunnel 的安装/运行状态(供 Dashboard 展示) |
/api/tunnels/cloudflared | POST | 启用或禁用 Cloudflare Quick Tunnel(action=enable/disable) |
CLI 工具
| 端点 | Method | 说明 |
|---|---|---|
/api/cli-tools/claude-settings | GET | Claude CLI 状态 |
/api/cli-tools/codex-settings | GET | Codex CLI 状态 |
/api/cli-tools/droid-settings | GET | Droid CLI 状态 |
/api/cli-tools/openclaw-settings | GET | OpenClaw CLI 状态 |
/api/cli-tools/runtime/[toolId] | GET | 通用 CLI 运行时 |
CLI 响应包含字段:installed、runnable、command、commandPath、runtimeMode、reason。
ACP Agents
| 端点 | Method | 说明 |
|---|---|---|
/api/acp/agents | GET | 列出全部已检测 agent(内置 + 自定义)及其状态 |
/api/acp/agents | POST | 添加自定义 agent 或刷新检测缓存 |
/api/acp/agents | DELETE | 通过idquery 参数移除自定义 agent |
GET 响应包含agents[](id、name、binary、version、installed、protocol、isCustom)与summary(total、installed、notFound、builtIn、custom)。
弹性与速率限制
| 端点 | Method | 说明 |
|---|---|---|
/api/resilience | GET/PATCH | 获取/更新请求队列、连接冷却、Provider 熔断器与等待设置 |
/api/resilience/reset | POST | 重置 Provider 熔断器 |
/api/rate-limits | GET | 按账户的速率限制状态 |
/api/rate-limit | GET | 全局速率限制配置 |
Evals
| 端点 | Method | 说明 |
|---|---|---|
/api/evals | GET/POST | 列出 eval 套件 / 运行评估 |
策略(Policies)
| 端点 | Method | 说明 |
|---|---|---|
/api/policies | GET/POST/DELETE | 管理路由策略 |
合规(Compliance)
| 端点 | Method | 说明 |
|---|---|---|
/api/compliance/audit-log | GET | 合规审计日志(最近 N 条) |
v1beta(Gemini 兼容)
| 端点 | Method | 说明 |
|---|---|---|
/v1beta/models | GET | 以 Gemini 格式列出模型 |
/v1beta/models/{...path} | POST | GeminigenerateContent端点 |
这些端点镜像 Gemini 的 API 格式,供期望原生 Gemini SDK 兼容性的客户端使用。
内部 / 系统 API
| 端点 | Method | 说明 |
|---|---|---|
/api/init | GET | 应用初始化检查(首次运行时使用) |
/api/tags | GET | Ollama 兼容的模型 tags(供 Ollama 客户端) |
/api/restart | POST | 触发服务器优雅重启 |
/api/shutdown | POST | 触发服务器优雅关闭 |
/api/system/env/repair | POST | 修复 OAuth Provider 环境变量 |
/api/system-info | GET | 生成系统诊断报告 |
注意:这些端点供系统内部或 Ollama 客户端兼容使用,终端用户通常不会直接调用。
OAuth 环境变量修复(v3.6.1+)
POST /api/system/env/repair Content-Type: application/json { "provider": "claude-code" }针对指定 Provider 修复缺失或损坏的 OAuth 环境变量,返回:
{ "success": true, "repaired": ["CLAUDE_CODE_OAUTH_CLIENT_ID", "CLAUDE_CODE_OAUTH_CLIENT_SECRET"], "backupPath": "/home/user/.omniroute/backups/env-repair-2026-04-11.bak" }九、音频转写(Audio Transcription)
POST /v1/audio/transcriptions Authorization: Bearer your-api-key Content-Type: multipart/form-data使用 Deepgram 或 AssemblyAI 转写音频文件。
请求:
curl -X POST http://localhost:20128/v1/audio/transcriptions \ -H "Authorization: Bearer your-api-key" \ -F "file=@recording.mp3" \ -F "model=deepgram/nova-3"响应:
{ "text": "Hello, this is the transcribed audio content.", "task": "transcribe", "language": "en", "duration": 12.5 }支持的 Provider:deepgram/nova-3、assemblyai/best。
支持的格式:mp3、wav、m4a、flac、ogg、webm。
路由实现在 src/app/api/v1/audio/transcriptions/route.ts,由handleAudioTranscription处理。
十、Ollama 兼容
面向使用 Ollama API 格式(如ollamaCLI、Open WebUI 等)的客户端:
# 对话端点(Ollama 格式) POST /v1/api/chat # 模型列表(Ollama 格式) GET /api/tags请求会在 Ollama 格式与内部格式之间自动转译,无需客户端做任何适配。
十一、遥测(Telemetry)
# 获取延迟遥测摘要(按 provider 的 p50/p95/p99) GET /api/telemetry/summary响应:
{ "providers": { "claudeCode": { "p50": 245, "p95": 890, "p99": 1200, "count": 150 }, "github": { "p50": 180, "p95": 620, "p99": 950, "count": 320 } } }该端点为路由决策与容量规划提供了按 Provider 分位的延迟基线。
十二、预算(Budget)
# 获取所有 API key 的预算状态 GET /api/usage/budget # 设置或更新预算 POST /api/usage/budget Content-Type: application/json { "keyId": "key-123", "limit": 50.00, "period": "monthly" }预算是 API key 策略的一部分:如第三节源码所示,/v1/*数据面每次请求都会经enforceApiKeyPolicy校验模型访问限制与预算上限,超限时直接拒绝,因此预算约束在网关层即时生效,而不是事后统计。
十三、鉴权模型(Authentication)
文档定义的鉴权规则:
- Dashboard 路由(
/dashboard/*)使用auth_tokencookie; - 登录使用已保存的密码哈希;回退到
INITIAL_PASSWORD; requireLogin可通过/api/settings/require-login切换;/v1/*路由在REQUIRE_API_KEY=true时要求 Bearer API key。
源码印证:
- src/app/api/v1/embeddings/route.ts 中
isRequireApiKeyEnabled()为假时匿名可用、为真时缺失/无效 key 均返回 401,且注释明确说明该行为在"所有客户端 API"间保持一致; - 管理面端点(如 src/app/api/cache/stats/route.ts)统一先过
isAuthenticated,未认证返回 401; - 缓存/统计类只读端点也受同一鉴权约束,避免敏感运营数据裸奔。
十四、总结
OmniRoute 的 API 参考覆盖了三条主线:
- 数据面:以 OpenAI 格式为核心(
/v1/chat/completions、/v1/embeddings、/v1/images/generations、/v1/models),叠加 Anthropic/v1/messages、OpenAI Responses、Gemini/v1beta、Ollama/v1/api/chat的格式兼容层,并通过/v1/providers/{provider}/*提供指定上游直连; - 增强机制:语义缓存(
X-OmniRoute-Cache: HIT/MISS+/api/cache/stats)、幂等去重(Idempotency-Key,5s 窗口)、会话亲和(X-Session-Id)、进度事件(X-OmniRoute-Progress); - 控制面:从 Provider/密钥/预算到备份、隧道、遥测、系统重启的完整管理端点集,全部纳入 Dashboard 鉴权体系。
结合仓库源码(src/app/api/v1/、src/lib/semanticCache.ts、src/app/api/cache/stats/route.ts)可以确认:文档中描述的头部语义、鉴权开关与缓存键规则均有对应的实现代码与持久化指标支撑,可作为对接与排障的可靠依据。
【免费下载链接】OmniRouteNever stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors项目地址: https://gitcode.com/GitHub_Trending/om/OmniRoute
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考