Files
OmniRoute/docs/i18n/zh-CN/docs/reference/API_REFERENCE.md
Diego Rodrigues de Sa e Souza b637350680 fix(docs): re-sync the 65 documentation mirror sets; section-level docs pipeline; drift gate blocking (#13940)
1,104 mirrors rewritten over five passes of run-translation on the 22-source core set: the 14 sources edited since their translation, the 322 mirrors that were still English copies, and the frontmatter the old extractor leaked into the newer locales' bodies. The pipeline now caches per-`## `-section hashes and retranslates only changed sections, never reuses a section that is still English, rebuilds English-copy / leaked mirrors even when the source is unchanged, merges the state on save (parallel runs), and the drift gate (scoped to the core set) is blocking. Final audit: 0 stale, 0 English copies, 0 leaked frontmatter across 1,430 core mirrors.

⚠️ base-red inherited: #12732
2026-09-17 02:55:31 -03:00

110 KiB
Raw Blame History

API Reference (中文 (简体))

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇹🇼 zh-TW


🌐 语言: 🇺🇸 English | 🇪🇹 አማርኛ | 🇸🇦 العربية | 🇦🇿 Azərbaycan dili | 🇧🇬 Български | 🇧🇩 বাংলা | 🇨🇿 Čeština | 🇩🇰 Dansk | 🇩🇪 Deutsch | 🇬🇷 Ελληνικά | 🇪🇸 Español | 🇪🇪 Eesti | 🇮🇷 فارسی | 🇫🇮 Suomi | 🇫🇷 Français | 🇮🇪 Gaeilge | 🇮🇳 ગુજરાતી | 🇳🇬 Hausa | 🇮🇱 עברית | 🇮🇳 हिन्दी | 🇭🇷 Hrvatski | 🇭🇺 Magyar | 🇦🇲 Հայերեն | 🇮🇩 Bahasa Indonesia | 🇳🇬 Igbo | 🇮🇹 Italiano | 🇯🇵 日本語 | 🇬🇪 ქართული | 🇰🇭 ខ្មែរ | 🇮🇳 ಕನ್ನಡ | 🇰🇷 한국어 | 🇱🇹 Lietuvių | 🇱🇻 Latviešu | 🇮🇳 മലയാളം | 🇮🇳 मराठी | 🇲🇾 Bahasa Melayu | 🇲🇹 Malti | 🇲🇲 မြန်မာ | 🇳🇵 नेपाली | 🇳🇱 Nederlands | 🇳🇴 Norsk | 🇮🇳 ଓଡ଼ିଆ | 🇮🇳 ਪੰਜਾਬੀ | 🇵🇭 Filipino | 🇵🇱 Polski | 🇵🇹 Português (Portugal) | 🇧🇷 Português (Brasil) | 🇷🇴 Română | 🇷🇺 Русский | 🇱🇰 සිංහල | 🇸🇰 Slovenčina | 🇸🇮 Slovenščina | 🇷🇸 Српски | 🇸🇪 Svenska | 🇰🇪 Kiswahili | 🇮🇳 தமிழ் | 🇮🇳 తెలుగు | 🇹🇭 ไทย | 🇹🇷 Türkçe | 🇺🇦 Українська | 🇵🇰 اردو | 🇺🇿 Oʻzbekcha | 🇻🇳 Tiếng Việt | 🇳🇬 Yorùbá | 🇨🇳 中文 (简体) | 🇹🇼 中文 (繁體)

OmniRoute API 的核心参考文档。本文涵盖公共 /v1 接口以及最常用的管理端点;机器可读的 docs/openapi.yamlsrc/app/api/ 下的路由树是完整的信息来源。


目录


聊天补全

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
}

自定义标头

标头 方向 说明
X-OmniRoute-No-Cache 请求 设置为 true 以绕过缓存
x-omniroute-no-memory 请求 设置为 true 以跳过此请求的记忆和技能注入(与无缓存行为一致;可避免每次调用产生的令牌/成本开销)
X-OmniRoute-Progress 请求 设置为 true 以启用进度事件
X-Session-Id 请求 用于外部会话亲和性的粘性会话键
x_session_id 请求 也接受下划线形式(直接 HTTP 请求)
X-OmniRoute-Session-Id 请求 调用方提供的会话/对话标签(也会传递给记忆)。如果存在,将原样持久化到 call_logs.session_tag,以便按会话归因成本(#8249——缺失时绝不会自动生成
Idempotency-Key 请求 去重键5 秒窗口)
X-Request-Id 请求 备用去重键
X-OmniRoute-Cache 响应 HITMISS(非流式)
X-OmniRoute-Idempotent 响应 如果已去重,则为 true
X-OmniRoute-Progress 响应 如果已启用进度跟踪,则为 enabled
X-OmniRoute-Session-Id 响应 OmniRoute 使用的有效会话 ID
X-OmniRoute-Request-Id 响应 请求关联 ID已知时
X-OmniRoute-Version 响应 OmniRoute 构建版本(始终存在)
X-OmniRoute-Cost-Saved 响应 缓存命中时避免的美元成本(仅限缓存命中)
X-OmniRoute-Decision 响应 路由跟踪信息:strategy=<name>; provider=<alias>; latency_ms=<n><name> 是组合策略;对于非组合请求则为 single)——完成响应中始终存在

Nginx 注意事项:如果依赖带下划线的标头(例如 x_session_id),请启用 underscores_in_headers on;

**成本遥测标头:**非流式成功响应还会携带 X-OmniRoute-* 成本遥测标头集——X-OmniRoute-Response-CostUSD固定 10 位小数;免费或未定价时为 0.0000000000)、X-OmniRoute-Tokens-In / X-OmniRoute-Tokens-OutX-OmniRoute-ModelX-OmniRoute-ProviderX-OmniRoute-Latency-MsX-OmniRoute-Cache-HitX-OmniRoute-Fallback-Attempts(仅当 > 0 时),以及 X-OmniRoute-Request-IdX-OmniRoute-Version。这些标头由聊天补全、/v1/responses/v1/messages 以及媒体端点返回——包括 /v1/embeddings/v1/images/generations/v1/audio/speech/v1/audio/transcriptions/v1/rerank/v1/videos/generations/v1/music/generations/v1/moderations(成本始终为 0)。如有可用定价,媒体成本会按模态计算(按图像、按秒、按字符、按搜索单元);否则为 0(故障开放)。

缓存命中成本语义:发生语义缓存命中时(X-OmniRoute-Cache-Hit: true),不会进行上游调用,因此 X-OmniRoute-Response-Cost0.0000000000(提供该命中结果的增量成本)。原始成本或本应产生的成本会在 X-OmniRoute-Cost-Saved 中单独报告。计费使用方应对 X-OmniRoute-Response-Cost 求和(缓存命中不产生成本);缓存分析则可聚合 X-OmniRoute-Cost-Saved

独占托管会话租约

独占托管会话租约是一种可选择启用、与客户端无关的路由契约:一个活动所有者持有一个符合条件的 OmniRoute 连接。它不租用模型、不要求 OAuth、不标识特定客户端也不要求特定提供者。

用于身份验证的 API 密钥必须具有 lease:exclusive 作用域,并包含一个明确的非空 allowedConnections 列表。在创建密钥和进行部分更新时,数据库变更边界会同时强制要求这两个字段。

POST /api/v1/session-leases
Authorization: Bearer <managed-api-key>
Content-Type: application/json
X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters>

{"action":"acquire","model":"glm/glm-4.6"}

成功的获取、续租和释放响应会公开时间戳、state 以及精确的正整数 generation,但绝不会公开所选连接或凭据。续租和释放操作通过 JSON 正文提供 generation

{ "action": "renew", "generation": 1 }
{ "action": "release", "generation": 1, "reason": "OWNER_EXIT" }

活动租约的所有者可以明确请求其当前绑定的隐私安全显示元数据:

{ "action": "status", "generation": 1 }
{
  "state": "ACTIVE",
  "generation": 1,
  "acquiredAt": "2026-08-28T12:00:00.000Z",
  "renewedAt": "2026-08-28T12:00:30.000Z",
  "expiresAt": "2026-08-28T12:02:30.000Z",
  "connection": {
    "displayName": "Primary Codex",
    "provider": "codex"
  }
}

此可选择启用的状态操作会在单个数据库事务中受到不透明所有者、已验证身份的托管 API 密钥和精确活动 generation 的共同隔离保护。displayName 仅为经过修剪的已配置连接名称;如果不存在安全的已配置名称,则为 null。OmniRoute 绝不会用电子邮件地址或生成的账户身份替代它。provider 值是非敏感的显示标签绝不会是生成的兼容提供者标识符。凭据、令牌、Cookie、原始连接或 API 密钥 ID、所有者哈希、隔离密钥以及内部路由数据均被排除。

使用错误密钥、错误所有者、过期 generation以及查询缺失、已过期、已释放或已失效的租约时均返回相同的 409 LEASE_FENCE_STALE 错误,且不包含连接元数据。收到容量等待响应的客户端没有可供检查的活动绑定。当路由切换活动租约时,同一 generation 仍然有效,并且状态操作会以原子方式返回新绑定,而绝不会返回旧绑定。现有客户端保持不变,因为获取、续租、释放和等待响应仍保留之前的结构。

此服务器契约不会更改原版 OpenAI Codex 的 /status。原版 Codex 当前会报告其模型提供者以及内置的身份验证/账户状态,但不会呈现任意自定义提供者账户元数据;后续的客户端集成必须调用此操作,并决定如何显示 connection.displayName

之后,每个托管推理请求都需要提供以下两个控制标头:

X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters>
X-OmniRoute-Lease-Generation: 1

在每次受支持的上游尝试之前都会立即对精确的所有者、generation、活动连接和已验证身份的 API 密钥进行隔离校验。即使另一个密钥允许使用同一连接,使用该密钥重放所有者和 generation 也会失败。原始所有者值不会被持久化、记录到日志、保留在请求快照中或转发到上游。

临时争用会返回带有 Retry-After 的 HTTP 429,以及:

{
  "state": "WAITING_FOR_CAPACITY",
  "error": { "type": "lease_error", "code": "LEASE_CAPACITY_UNAVAILABLE" },
  "reason": "NO_FREE_ELIGIBLE_CONNECTION",
  "retryAfter": 30
}

此响应仅表示常规符合条件的集合非空,并且每个空闲候选连接均由其他所有者的活动租约持有。不受支持的模型/提供者、策略不匹配、冷却期、配额、健康状态以及其他常规资格检查失败,仍会保留其现有的 OmniRoute 响应。

x-omniroute-compression

针对单个请求覆盖压缩计划。具有最高优先级——高于路由组合覆盖、活动配置文件、自动触发和面板默认值。取值如下:

效果
off 此请求不使用压缩。
default 使用由面板派生的默认配置文件(忽略活动配置文件)。
engine:<id> 启用时使用单个引擎,例如 engine:rtk
<combo> 命名组合,先按名称匹配(不区分大小写),然后按 id 匹配。

注意:

  • 未知值会被忽略(请求绝不会因此被拒绝);解析过程会回退到正常的运算符优先级。
  • 如果多个组合使用相同名称,请传入组合的 id 以获得确定性匹配。
  • 名称为 offdefault 的组合无法按名称选择(会优先解释这些关键字);请通过其 id 引用此类组合。
  • 压缩总开关是硬性门控:全局禁用压缩后,此标头无法启用压缩。

应用的计划会通过响应标头回显:

X-OmniRoute-Compression: <mode>; source=<source>

其中 <source>request-headerrouting-overrideactive-profileauto-triggerdefaultoff 之一。


嵌入

POST /v1/embeddings
Authorization: Bearer your-api-key
Content-Type: application/json

{
  "model": "nebius/Qwen/Qwen3-Embedding-8B",
  "input": "The food was delicious"
}

可用提供者Nebius、OpenAI、Mistral、Together AI、Fireworks、NVIDIA、OpenRouter、Jina AI。

目录 ID 的格式为 provider/model(示例:jina-ai/jina-embeddings-v5-omni-small)。注册表中出现的不带提供者前缀的 Jina 模型 ID例如 jina-embeddings-v5-text-smalljina-reranker-v3.5也可以解析。Jina 的嵌入/重排序/分类/分段功能会优先使用控制面板中的 jina-ai 凭据;仅当控制面板中不存在密钥时,才会回退使用 JINA_AI_API_KEYjina-reader 卡片仅用于 Reader / r.jina.aiPOST /v1/web/fetch),绝不会提供嵌入或重排序服务。

注册表中声明支持多模态的模型还可接受最多 32 个提供者无关的结构化项目。媒体项目类型包括 textimageaudiovideodocument。其媒体 source 可以是 {"type":"url","url":"https://..."},也可以是 {"type":"base64","data":"...","media_type":"..."}

Jina v5 Omnijina-ai/jina-embeddings-v5-omni-smalljina-ai/jina-embeddings-v5-omni-nano,以及系列别名 jina-ai/jina-embeddings-v5-omni → omni-small还接受 Jina 原生的 EmbeddingsV5Request 文档,并将其原样转发https://api.jina.ai/v1/embeddings

{
  "model": "jina-ai/jina-embeddings-v5-omni-small",
  "task": "retrieval.query",
  "normalized": true,
  "input": [
    { "text": "a red bicycle" },
    { "image": "https://example.com/bike.png" },
    {
      "content": [{ "text": "caption" }, { "image": "data:image/png;base64,..." }]
    }
  ]
}

原生 { image | audio | video | pdf } 值可以是公共 HTTPS URL、data: URI 或原始 base64。OmniRoute 不会将这些对象字符串化,也不会获取原生图像 URL——Jina 会自行获取公共媒体。额外的 Jina 字段(tasknormalizedtruncateembedding_type)会被转发。仅文本的 Jina SKU 仍会拒绝非文本文档。

安全和传输限制:

  • 远程媒体 URL 必须是公共 HTTPS。规范的 {type,source:url} 项目会在服务器端获取(包括重定向重新验证、超时、大小限制、公共 DNS 和连接固定并在调用提供者之前内联。Jina 原生 {image:"https://..."} 项目在经过相同的公共 HTTPS 检查后会按原样转发URL 由 Jina 获取。
  • 内联 base64 媒体解码后的大小限制为每个项目 8 MiB整个请求合计 16 MiB。

提供者转换(规范项目绝不会原样转发):

  • Jina 多模态模型:每个顶层项目都会转换为一个按模态键控的对象(text / image / audio / video / pdf),内联媒体使用数据 URI每个顶层项目对应一个向量。
  • Gemini Embedding 2 系列:一个顶层数组会转换为单个原生 models/{model}:embedContent 请求,其中包含 content.partstextinline_data)。
  • 没有显式模态元数据的未知/动态模型会拒绝结构化输入,并返回 HTTP 400。
{
  "model": "jina-ai/jina-embeddings-v5-omni-small",
  "input": [
    { "type": "text", "text": "A red bicycle" },
    {
      "type": "image",
      "source": { "type": "url", "url": "https://example.com/bicycle.png" }
    }
  ],
  "dimensions": 512,
  "encoding_format": "float"
}

不受支持的模型/模态组合会返回 HTTP 400而不是强制转换项目。对于旧版字符串/令牌请求,非输入扩展字段仍会按原样传递。

# 列出所有嵌入模型
GET /v1/embeddings

图像生成

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"
}

可用提供者OpenAI (GPT Image 2)、xAI (Grok Image)、Together AI (FLUX)、Fireworks AI、Nebius (FLUX)、Hyperbolic、NanoBanana、OpenRouter、SD WebUI本地、ComfyUI本地

# 列出所有图像模型
GET /v1/images/generations

文档 OCR

POST /v1/ocr
Authorization: Bearer your-api-key
Content-Type: application/json

{
  "model": "mistral/mistral-ocr-latest",
  "document": {
    "type": "document_url",
    "document_url": "https://example.com/invoice.pdf"
  }
}

model 通过 provider/model 前缀选择 OCR 提供者;不带前缀的模型 ID例如 mistral-ocr-latest)会解析到其已注册的提供者,而省略 model 时则默认使用 Mistral (mistral-ocr-latest)。已注册的提供者(open-sse/config/ocrRegistry.ts

提供者 ID 模型 ID model 说明
mistral mistral-ocr-latest mistral/mistral-ocr-latest(或不带前缀的 mistral-ocr-latest 同步——响应直接从单次上游调用返回。
azure-document-intelligence prebuilt-read azure-document-intelligence/prebuilt-read 异步上游(analyze + 轮询)——见下文。
vertex-deepseek-ocr deepseek-ocr-maas vertex-deepseek-ocr/deepseek-ocr-maas 同步,通过 Vertex AI 的 openapi/chat/completions 合作伙伴端点——有关身份验证/URL请参见下文。

所有三个提供者都以相同的 Mistral 格式响应:

{
  "pages": [{ "index": 0, "markdown": "# Extracted text..." }],
  "model": "mistral-ocr-latest",
  "usage_info": { "pages_processed": 1 }
}

Azure Document Intelligence 轮询流程

Azure Document Intelligence 的 analyze API 是异步的:初始请求会返回 Operation-Location 标头而不是响应正文,必须通过轮询来获取结果。处理程序 open-sse/handlers/ocr.ts)每秒轮询一次该 URL最多尝试 30 次;如果轮询响应不是 ok 或状态为 "failed",则会快速失败(不会继续轮询);如果在耗尽尝试次数后操作 仍在运行,则返回 504。最终的 Azure 响应在返回给调用方之前,会被规范化为与 Mistral 相同的 pages/markdown 格式,因此客户端代码无需对该提供者进行特殊处理。

Vertex AI DeepSeek OCR 身份验证和端点解析

vertex-deepseek-ocr 复用 OmniRoute 已为聊天/图像流量提供支持的相同 Vertex AI 身份验证机制(open-sse/executors/vertex.ts):连接的 API 密钥可以是 Service Account JSON 凭据(通过 JWT bearer 流程交换为短期 OAuth 访问令牌),也可以是直接使用的、 已签发的 OAuth 访问令牌。上游端点 URL 是 Vertex 的通用 openapi/chat/completions 合作伙伴端点,根据连接的项目和区域构建——显式设置的 providerSpecificData.project/providerSpecificData.region 始终优先;否则,项目将从 Service Account JSON 的 project_id 派生,区域则默认为 us-central1。这两项解析均在 open-sse/handlers/ocr.ts 中进行(resolveVertexOcrAccessTokenresolveVertexOcrBaseUrl),并由 src/app/api/v1/ocr/route.ts 在分派给 handleOcr 之前使用。


列出模型

GET /v1/models
Authorization: Bearer your-api-key

→ 以 OpenAI 格式返回所有聊天、嵌入和图像模型及组合

模型 id 前缀(?prefix=

大多数模型都使用提供者前缀发布。具体使用哪个前缀由 MODELS_CATALOG_PREFIX_MODE 功能标志控制,并且可以通过查询参数按请求覆盖——这对于希望获得简洁列表,同时又不更改面向其他所有用户的服务器全局设置的客户端很有用:

GET /v1/models?prefix=alias        # 每个模型一个 id——短别名前缀
GET /v1/models?prefix=dual         # 两种形式(服务器默认值)
GET /v1/models?prefix=canonical    # 仅完整的提供者 id 前缀
模式 输出 说明
dual cc/claude-sonnet-4-6 claude/claude-sonnet-4-6 默认值。 两个 id 都路由到同一个模型;保留这两种形式,以便硬编码了其中任一形式的客户端配置继续正常工作。目录大小大约会翻倍。
alias cc/claude-sonnet-4-6 每个模型一个条目。没有独立别名的提供者仍会输出其条目,因此不会遗漏任何内容。
canonical claude/claude-sonnet-4-6 每个模型都使用完整的提供者 id 前缀输出一个条目。没有独立别名的提供者(例如 antigravity/…agy/…)也会在此处输出其唯一的 id因此不会遗漏任何内容。

即使不使用查询参数,也可以识别处于 dual 模式的镜像:它带有一个指向主 id 的 parent 字段。

渲染模型选择器的客户端应请求 ?prefix=alias—— OmniCopilot VS Code 扩展就是这样做的。

无思考模型变体

对于支持思考的 Claude 模型,/v1/models 还会发布一个 无思考变体,其 id 以 claude-3-omniroute-no-thinking/ 为前缀:

claude-3-omniroute-no-thinking/<provider>/<model>

选择此 id例如在始终附加 thinking 块的 Claude Code 配置中)后,会解析回真实的 <provider>/<model>,同时抑制推理——在 /v1/messages 路径上设置 thinking:{type:"disabled"},或者在 /v1/chat/completions 路径上移除 reasoning/reasoning_effort 字段。只有支持思考接受 disabled 的 Claude 系列模型才会列出该变体(因此,例如拒绝 disabled 的仅自适应模型会被排除)。运维人员可以通过 ModelSpec.noThinkingAlias 为每个模型强制启用或禁用该变体。


提供者插件清单

GET /api/v1/provider-plugin-manifest

返回 Bifrost、CLIProxyAPI 和未来的 sidecar 路由器所使用的 JSON 安全提供者插件清单。该响应从 TypeScript 提供者注册表生成,并有意排除了 OAuth 客户端密钥、运行时环境解析、执行器函数、请求标头和账户数据。

当 sidecar 在进程外运行且无法直接导入 open-sse/config/providerPluginManifestRegistry.ts 时,请使用此端点。


兼容性端点

方法 路径 格式
POST /v1/chat/completions OpenAI
POST /v1/messages Anthropic
POST /v1/responses OpenAI Responses
POST /v1/embeddings OpenAI
POST /v1/images/generations OpenAI Images
POST /v1/images/edits OpenAI Images编辑/局部重绘)
POST /v1/videos/generations OpenAI 风格的视频生成
POST /v1/music/generations OpenAI 风格的音乐生成
POST /v1/audio/transcriptions OpenAI AudioSTT
POST /v1/audio/speech OpenAI TTS返回音频正文
POST /v1/rerank Cohere/Voyage 风格的重排序
POST /v1/classify Jina 分类(api.jina.ai
POST /v1/segment Jina 分段器(segment.jina.ai
POST /v1/moderations OpenAI Moderations
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
GET /api/v1/vscode/{token}/ OpenAI 目录别名
GET /api/v1/vscode/{token}/models OpenAI 模型别名
POST /api/v1/vscode/{token}/chat/completions OpenAI 令牌化别名
POST /api/v1/vscode/{token}/responses OpenAI Responses 令牌化别名
POST /api/v1/vscode/{token}/api/chat Ollama 令牌化别名
GET /api/v1/vscode/{token}/api/tags Ollama 标签令牌化别名

所有 POST 路由都遵循相同的格式:Bearer your-api-key + 经过 Zod 验证的 JSON 正文(v1RerankSchemav1ModerationSchemav1AudioSpeechSchema 等,参见 src/shared/validation/schemas.ts)。架构验证失败时返回 4xx。

对于无法附加 Authorization: Bearer ... 的客户端OmniRoute 也支持通过 URL 传递 API 密钥,可使用查询字符串兼容形式(?token=...?apiKey=...?api_key=...?key=...),或使用下文所述的专用 /api/v1/vscode/{token}/... 端点。

# 重排序
POST /v1/rerank      { "model": "jina-ai/jina-reranker-v3.5", "query": "...", "documents": ["..."] }

# Jina 分类Foundation API 凭据)
POST /v1/classify    { "model": "jina-embeddings-v5-text-small", "input": ["..."], "labels": ["a", "b"] }

# Jina 分段器
POST /v1/segment     { "content": "...", "return_chunks": true }

# Jina 搜索s.jina.ai提供者别名jina-search、jina-ai、jina
POST /v1/search      { "query": "...", "provider": "jina-search" }

# 内容审核
POST /v1/moderations { "model": "omni-moderation-latest", "input": "..." }

# TTS — 返回 audio/mpeg或所请求的格式正文
POST /v1/audio/speech { "model": "openai/tts-1", "input": "Hello", "voice": "alloy" }

# 图像编辑multipart
POST /v1/images/edits  -F image=@input.png -F prompt="..." -F mask=@mask.png

# 视频/音乐生成(带提供者前缀的模型 ID
POST /v1/videos/generations { "model": "runway/gen-3", "prompt": "..." }
POST /v1/music/generations  { "model": "suno/v3.5",   "prompt": "..." }

专用提供者路由

POST /v1/providers/{provider}/chat/completions
POST /v1/providers/{provider}/embeddings
POST /v1/providers/{provider}/images/generations

如果缺少提供者前缀,系统会自动添加。模型不匹配时返回 400


Files API

兼容 OpenAI 的文件端点,用于批量输入/输出及按文件用途上传。

方法 路径 描述
POST /v1/files 上传文件multipartfilepurposeexpires_after[anchor]expires_after[seconds])— 最大 512 MiB
GET /v1/files 列出经身份验证的 API 密钥所拥有的文件
GET /v1/files/[id] 获取文件的元数据
DELETE /v1/files/[id] 删除文件
GET /v1/files/[id]/content 以流式方式返回原始文件内容

身份验证: Bearer API 密钥——文件通过 getApiKeyRequestScope 按 API 密钥隔离。一个密钥 只能查看、下载和删除自己的文件;不使用密钥的仪表板会话可以读取整个 实例;没有所有者的文件(匿名上传或通过仪表板会话上传)对所有 非会话调用方均拒绝访问。GET /v1/files 会对匿名调用方以及提供了 但无法解析的密钥返回 401,即使 REQUIRE_API_KEY=false 也是如此,而不会列出所有租户的 文件GHSA-m3hp-hq9g-fpmv、GHSA-2jm2-mpx8-6523


Batches API

兼容 OpenAI 的批处理。

方法 路径 描述
POST /v1/batches 创建批处理——请求正文由 v1BatchCreateSchema 验证(input_file_idendpointcompletion_window
GET /v1/batches 列出批处理
GET /v1/batches/[id] 获取批处理状态及 request_counts
DELETE /v1/batches/[id] 删除已完成/失败的批处理
POST /v1/batches/[id]/cancel 取消正在进行的批处理

身份验证: Bearer API 密钥。批处理按 API 密钥隔离,遵循与 文件相同的三方规则:仅限自身密钥、仪表板会话可访问整个实例、无所有者的记录对所有 非会话调用方均拒绝访问(包括获取、删除、取消,以及创建时的 input_file_id 检查)。 GET /v1/batches 会对匿名调用方返回 401,即使 REQUIRE_API_KEY=false 也是如此。


搜索 API

Web/搜索提供者抽象层Tavily、Brave、Exa、Serper 等)。

方法 路径 描述
GET /v1/search 列出已配置的搜索提供者及其功能
POST /v1/search 执行搜索查询——请求体由 v1SearchSchema 验证,支持缓存/合并
GET /v1/search/analytics 各提供者的命中率/延迟/缓存统计信息

身份验证: Bearer API 密钥(extractApiKey + isValidApiKey)。通过 enforceApiKeyPolicy 强制执行搜索策略。


网页抓取 API

通过已配置的网页抓取提供者Firecrawl、Jina Reader、Tavily Extract、TinyFish Fetch、Nimble Extract从 URL 提取内容。

方法 路径 描述
POST /v1/web/fetch 获取/抓取 URL——请求体由 v1WebFetchSchema 验证

身份验证: Bearer API 密钥(extractApiKey + isValidApiKey)。通过 enforceApiKeyPolicy 强制执行策略。

配额感知回退(#8297 未明确指定 provider 时,将按固定 优先级顺序遍历提供者池 firecrawljina-readertavily-searchtinyfishnimble-search (优先填满)——已配置但受速率限制的提供者将被跳过,而不会直接终止请求; 在请求期间,如果上游发生可重试/配额相关故障 HTTP 429 始终适用;对于 Firecrawl/Tavily/TinyFish 免费层的配额类错误,则适用于 402/403—— 不适用于 Jina Reader也绝不适用于普通的 400 错误请求),系统将继续尝试 下一个尚未尝试且已配置凭据的提供者。当池中的所有提供者均已耗尽时, 端点将返回单个 429(带有 Retry-After 标头),而不是之前的通用 400。如果明确请求了某个 provider不会进行静默回退——受速率限制或发生故障的指定提供者会直接返回其自身错误 (受速率限制时为 429,否则为上游状态码)。


WebSocket 流式传输

GET /v1/ws?handshake=1

验证 WebSocket 升级握手,并返回线路协议示例消息(requestcancel)。实际的 WS 帧由 Next.js 路由表之外的捆绑 WS 服务器处理。

身份验证: 握手期间使用 Bearer API 密钥。

通过 WebSocket 使用 Responses API仅限 codex

# 与 HTTP API 使用相同的主机和端口(默认 20128升级连接
wscat -c "ws://localhost:20128/v1/responses?api_key=<OMNIROUTE_API_KEY>"
# (或者:-H "Authorization: Bearer <OMNIROUTE_API_KEY>"

# 第一帧必须是 response.create
{ "type": "response.create", "model": "gpt-5.5", "input": [ { "role": "user", "content": "hi" } ] }

Responses-API-over-WebSocket 代理仅连接到 codexChatGPT 后端)。它在与 API/仪表板相同的端口上侦听路径 /v1/responses/responses/api/v1/responses。收到第一个 response.create 帧时, 它会通过内部 codex-responses-ws 桥接器进行身份验证和准备,选择一个 codex OAuth 连接,并通过 wreq-js 传输层将流量隧道转发至 wss://chatgpt.com/backend-api/codex/responses非 codex 模型会被拒绝codex_ws_provider_required)。 如需使用配额共享路由,请使用 model: "qtSd/<group>/codex/<model>"。实现在 app/server-ws.mjs + scripts/dev/responses-ws-proxy.mjs + src/app/api/internal/codex-responses-ws/route.ts 中。

身份验证: 握手期间使用 Bearer API 密钥。捆绑的 HTTP 服务器(server-ws.mjs 必须是当前活动的入口点(当 app/server-ws.mjs 存在时,默认如此)。

模型 ID使用不带 codex/ 前缀的 ChatGPT 原始 ID

supports_websockets = trueOpenAI Codex CLI 会在客户端验证模型名称,并且 拒绝带提供者前缀的 ID,例如 codex/gpt-5.5The 'codex/gpt-5.5' model is not supported when using Codex with a ChatGPT account)。请发送原始 ID例如 gpt-5.5。OmniRoute 的桥接器 仅支持 codex因此在隧道转发至上游之前它会将原始 ID 重新解析为 codex 模型 resolveCodexWsModelInfo)——即使原始的 gpt-5.5 在通过 HTTP 请求时原本会被路由到其他提供者。

配置 OpenAI Codex CLI

通过向 ~/.codex/config.toml 添加支持 WebSocket 的自定义提供者, 将 Codex CLI 指向 OmniRoute使用单独的 CODEX_HOME,以免修改 现有配置):

model = "gpt-5.5"                 # 原始 ID——不是 "codex/gpt-5.5"
model_provider = "omniroute"

[model_providers.omniroute]
name = "OmniRoute (WS)"
base_url = "http://localhost:20128/v1"   # 不要添加尾部斜杠WS URL 会自动派生(生产环境中使用 https/wss
wire_api = "responses"                    # 自 2026 年 2 月起唯一支持的值
supports_websockets = true                # 启用 Responses-over-WS 传输
env_key = "OMNIROUTE_API_KEY"             # 保存 OmniRoute API 密钥Bearer
export OMNIROUTE_API_KEY=sk-...           # OmniRoute API 密钥(若 REQUIRE_API_KEY=false则任意密钥均可
codex exec "Responda apenas: PONG"

CLI 会将 base_url + /responses 升级为 WebSocketOmniRoute 随后会将其 隧道转发至选定的 codex OAuth 连接。已针对本地服务器完成端到端验证: ChatGPT 返回 codex.rate_limits + response.created,并以流式方式传输 补全结果。


配额与问题报告

方法 路径 描述
GET /v1/quotas/check 在签发已注册密钥之前,预先验证 provider + accountId 的配额
POST /v1/issues/report 向 GitHub 报告配额/密钥签发失败(需要 GITHUB_ISSUES_REPO + 令牌)

身份验证: Bearer API 密钥(isAuthenticated)。


自助用量查询(/api/usage/om-usage

任何 API 密钥都可以读取自身的用量和配额无需管理身份验证。这是客户端CLI、OmniCopilot 面板)用来向密钥持有者显示其支出的端点。

# 文本形式(历史约定——用于终端的纯文本)
curl -H "Authorization: Bearer <your-api-key>" \
  http://localhost:20128/api/usage/om-usage

# 结构化形式——供 UI 使用
curl -H "Authorization: Bearer <your-api-key>" \
  "http://localhost:20128/api/usage/om-usage?format=json"

密钥必须启用 allowUsageCommand(默认关闭——控制面板的 API 密钥管理器可为每个密钥单独切换此设置)。如果未启用,该端点会返回 403

?format=json 返回可辨识的结构,确保调用方不会从拒绝响应中读取数据字段。成功时:

{
  "allowed": true,
  // 仅当密钥启用了按密钥计算的用量限制(每日/每周 USD时才存在
  "personal": {
    "dailySpentUsd": 1.25,
    "dailyLimitUsd": 5,
    "dailyResetAtIso": "…",
    "weeklySpentUsd": 8,
    "weeklyLimitUsd": 20,
    "weeklyResetAtIso": "…" /*  */,
  },
  // 所选提供者的配额快照;如果尚未缓存任何内容,则为 null
  "provider": {
    "connectionId": "…",
    "provider": "claude",
    "plan": "…",
    "quotas": {/*  */},
  },
  // 每个连接的快照,以便 UI 并排呈现多个提供者:
  "providers": [
    { "connectionId": "…", "provider": "claude" /*  */ },
    { "provider": "codex" /*  */ },
  ],
}

拒绝时(401 表示密钥无效,403 表示不允许),同一路由返回 { "allowed": false, "error": { "message": "…" } }——存在但为空的 personal/provider(密钥已获允许,但尚未获取任何信息)与拒绝是两种不同的状态,只有 JSON 形式能够区分它们。

身份验证: 调用方自己的 Bearer API 密钥,使用 isValidApiKey 进行验证——这_不是_管理接口/api/keys/…),后者仍受 requireManagementAuth 保护。


语义缓存

# 获取缓存统计信息
GET /api/cache/stats

# 清除所有缓存
DELETE /api/cache/stats

响应示例:

{
  "semanticCache": {
    "memorySize": 42,
    "memoryMaxSize": 500,
    "dbSize": 128,
    "hitRate": 0.65
  },
  "idempotency": {
    "activeKeys": 3,
    "windowMs": 5000
  }
}

延迟影响

语义缓存命中时,响应将直接从缓存提供,不会发起上游调用,因此报告的 X-OmniRoute-Response-Latency 接近于零无论原始上游延迟是多少。对延迟敏感的客户端基准测试、p50/p99 监控)应检查 X-OmniRoute-Cache-Latency 响应标头:

含义
synthetic 响应由缓存提供;延迟并非真实的上游耗时
(不存在) 响应来自真实的上游调用

按密钥绕过缓存

API 密钥可以通过 cacheDefaultMode 选择不读取语义缓存:

行为
legacy 正常的缓存行为(默认)
bypass 完全跳过缓存查找;始终调用上游

在创建密钥(POST /api/keys)或更新密钥(PATCH /api/keys/[id])时设置:

{ "cacheDefaultMode": "bypass" }

按请求绕过缓存

无论密钥设置如何,任何请求都可以绕过缓存:

X-OmniRoute-No-Cache: true

仪表盘与管理

管理路由(除公共身份验证/登录之外的 /api/*不能使用普通推理 API 密钥进行授权。有关凭据类型、权限范围和 curl 示例,请参阅: 管理身份验证

身份验证

端点 方法 描述
/api/auth/login POST 登录
/api/auth/logout POST 退出登录
/api/settings/require-login GET/PUT 切换是否要求登录

提供者管理

端点 方法 描述
/api/providers GET/POST 列出/创建提供者
/api/providers/[id] GET/PUT/DELETE 管理提供者
/api/providers/[id]/test POST 测试提供者连接
/api/providers/[id]/models GET 列出提供者模型
/api/providers/validate POST 验证提供者配置
/api/providers/bulk POST 为一个提供者批量添加 API 密钥
/api/providers/import POST 从解析后的 CSV/JSON 文件导入异构提供者列表(#6836返回每行的部分失败结果
/api/provider-nodes* 多种 提供者节点管理
/api/provider-models GET/POST/PATCH/DELETE 自定义模型(添加、更新、隐藏/显示、删除)

OAuth 流程

端点 方法 描述
/api/oauth/[provider]/[action] 多种 特定于提供者的 OAuth

路由与配置

端点 方法 描述
/api/models/alias GET/POST 模型别名
/api/models/catalog GET 按提供者和类型列出的所有模型
/api/combos* 多种 组合管理
/api/keys* 多种 API 密钥管理
/api/pricing GET 模型定价

使用情况与分析

Endpoint 方法 描述
/api/usage/history GET 使用历史
/api/usage/logs GET 使用日志
/api/usage/request-logs GET 请求级日志
/api/usage/[connectionId] GET 每个连接的使用情况
/api/usage/token-limits GET/POST/DELETE 每个 API 密钥的令牌限额预算
/api/usage/model-latency-stats GET 按提供者/模型滚动统计的延迟汇总(平均值/p50/p95/p99、成功率筛选条件windowHours/minSamples/maxRows/provider/model (#6873)
/api/usage/cache-health GET 基于 call_logs 的提示词缓存健康状况摘要——写入/读取比率、写入大小的 p50/p90/p99 分布、大量写入集中度、按模型拆分,以及 healthy/degraded/thrash/no-data 判定;查询参数 range1h|24h|7d|30d,默认值为 24h)和可选的 model (#8827)

设置

Endpoint 方法 描述
/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 思考/推理请求重写模式(透传 / 自动移除 / 自定义 / 自适应)。与压缩无关。请参阅 THINKING_BUDGET.md
/api/settings/system-prompt GET/PUT 全局系统提示词
/api/settings/compression GET/PUT 全局压缩配置
/api/settings/purge-request-history POST 清除请求日志行和本地调用日志构件

上下文与压缩

端点 方法 描述
/api/compression/preview POST 预览关闭/轻量/标准/激进/超强/RTK/堆叠压缩
/api/compression/language-packs GET 列出可用的 Caveman 语言包
/api/compression/rules GET 列出 Caveman 规则元数据
/api/context/caveman/config GET/PUT Caveman 专用设置的别名
/api/context/rtk/config GET/PUT RTK 专用设置,包括自定义过滤器和原始输出保留
/api/context/rtk/filters GET RTK 过滤器目录和自定义过滤器诊断
/api/context/rtk/test POST 针对文本负载运行 RTK 预览/测试
/api/context/rtk/raw-output/[id] GET 按指针 ID 读取保留的已脱敏原始输出
/api/context/combos GET/POST 列出/创建压缩组合
/api/context/combos/[id] GET/PUT/DELETE 压缩组合详情/更新/删除
/api/context/combos/[id]/assignments GET/PUT 将压缩组合分配给路由组合
/api/context/analytics GET 压缩分析的别名

监控

端点 方法 描述
/api/sessions GET 活跃会话跟踪
/api/rate-limits GET 每账户速率限制
/api/monitoring/health GET 健康检查及提供者摘要(catalogCountconfiguredCountactiveCountmonitoredCount)。管理视图包含 credentialHealth:探测缓存标量、failed>0 时的 failedConnections,以及 staleDbNonOkCountSQLite 粘滞性 test_status,而非仪表值)。请参阅 MONITORING_GUIDE.md
/api/cache/stats GET/DELETE 缓存统计信息/清除缓存
/api/modality-bridge/stats GET 内存中的 attempts、成功次数/bridged、失败次数、缓存命中次数、totalLatencyMslatencySamples、以样本数为分母的 averageLatencyMs,以及最后使用时间(重启时重置;需要管理身份验证)
/api/modality-bridge/video/runtime GET 在管理身份验证/探测之前执行严格的受信任环回检查;返回经过净化处理的 FFmpeg/ffprobe 可用性及版本信息(不存储)
/api/modality-bridge/video/extract POST 内部已认证的受信任环回字节代理;输入上限为 50 MiB、队列有界/输出上限为 32 MiB容量不足时返回 503,连接断开时返回 499,超出截止时间时返回 504;并非公共上传 API

备份与导出/导入

端点 方法 描述
/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 归档文件

云同步

端点 方法 描述
/api/sync/cloud 多种 云同步操作
/api/sync/initialize POST 初始化同步
/api/cloud/* 多种 云端管理

隧道

端点 方法 描述
/api/tunnels/cloudflared GET 读取仪表板所需的 Cloudflare Quick Tunnel 安装/运行时状态
/api/tunnels/cloudflared POST 启用或禁用 Cloudflare Quick Tunnelaction=enable/disable
/api/tunnels/ngrok GET 读取仪表板所需的 ngrok Tunnel 运行时状态
/api/tunnels/ngrok POST 启用或禁用 ngrok Tunnelaction=enable/disable

CLI 工具

端点 方法 描述
/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 响应包括:installedrunnablecommandcommandPathruntimeModereason

ACP 代理

端点 方法 描述
/api/acp/agents GET 列出所有检测到的代理(内置 + 自定义)及其状态
/api/acp/agents POST 添加自定义代理或刷新检测缓存
/api/acp/agents DELETE 通过 id 查询参数移除自定义代理

GET 响应包括 agents[]id、name、binary、version、installed、protocol、isCustomsummarytotal、installed、notFound、builtIn、custom

弹性与速率限制

端点 方法 描述
/api/resilience GET/PATCH 获取/更新请求队列、连接冷却、提供者断路器和等待设置
/api/resilience/reset POST 重置提供者断路器
/api/resilience/model-cooldowns GET 列出每个(提供者、连接、模型)当前生效的锁定,并按剩余时间排序
/api/resilience/model-cooldowns DELETE 清除模型锁定——请求体为 {provider, model},或使用 {all: true} 清除全部锁定
/api/rate-limits GET 每个账户的速率限制状态
/api/rate-limit GET 全局速率限制配置

所有四个 /api/resilience/* 路由都需要管理身份验证requireManagementAuth)。有关提供者断路器、连接冷却与模型锁定的完整说明,请参阅弹性(扩展)

评估

端点 方法 描述
/api/evals GET/POST 列出评估套件/运行评估

策略

端点 方法 描述
/api/policies GET/POST/DELETE 管理路由策略

合规性

端点 方法 描述
/api/compliance/audit-log GET 合规审计日志(最近 N 条)

v1beta兼容 Gemini

端点 方法 描述
/v1beta/models GET 以 Gemini 格式列出模型
/v1beta/models/{...path} POST Gemini generateContent 端点

这些端点复刻了 Gemini 的 API 格式,以供需要原生 Gemini SDK 兼容性的客户端使用。

内部/系统 API

端点 方法 描述
/api/init GET 应用程序初始化检查(首次运行时使用)
/api/tags GET 与 Ollama 兼容的模型标签(供 Ollama 客户端使用)
/api/restart POST 触发服务器正常重启
/api/shutdown POST 触发服务器正常关闭
/api/system/env/repair POST 修复 OAuth 提供者的环境变量

注意: 这些端点由系统内部使用,或用于兼容 Ollama 客户端。最终用户通常不会调用它们。

OAuth 环境修复 (v3.6.1+)

POST /api/system/env/repair
Content-Type: application/json

{
  "provider": "claude-code"
}

修复特定提供者缺失或损坏的 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"
}

音频转录

POST /v1/audio/transcriptions
Authorization: Bearer your-api-key
Content-Type: multipart/form-data

使用任意已配置的 STT 提供者转录音频文件。第一个路径段用于选择原生提供者(openai/…deepgram/…)。重新导出其他供应商模型的网关使用限定 IDopenrouter/deepgram/nova-3)。

请求:

curl -X POST http://localhost:20128/v1/audio/transcriptions \
  -H "Authorization: Bearer your-api-key" \
  -F "file=@recording.mp3" \
  -F "model=openai/whisper-1"

响应:

{
  "text": "Hello, this is the transcribed audio content.",
  "task": "transcribe",
  "language": "en",
  "duration": 12.5
}

模型 ID 示例: openai/whisper-1(需要 OpenAI 密钥)、 openrouter/deepgram/nova-3(需要 OpenRouter 密钥)、 deepgram/nova-3(需要原生 Deepgram 密钥)。仅使用 deepgram/nova-3 的请求不会使用 OpenRouter。

支持的格式: mp3wavm4aflacoggwebm


Ollama 兼容性

对于使用 Ollama API 格式的客户端:

# 聊天端点Ollama 格式)
POST /v1/api/chat

# 模型列表Ollama 格式)
GET /api/tags

请求会在 Ollama 格式与内部格式之间自动转换。

包含令牌的 VS Code / 无请求头别名

当集成无法注入 Authorization 请求头,并且需要将 API 密钥嵌入基础 URL 时,请使用这些别名。

# OpenAI 风格的目录别名
GET /api/v1/vscode/{token}/
GET /api/v1/vscode/{token}/models

# OpenAI 风格的聊天别名
POST /api/v1/vscode/{token}/chat/completions
POST /api/v1/vscode/{token}/responses

# Ollama 风格的别名
POST /api/v1/vscode/{token}/api/chat
GET /api/v1/vscode/{token}/api/tags

示例:

curl https://your-host.example/api/v1/vscode/YOUR_API_KEY/models
curl -X POST https://your-host.example/api/v1/vscode/YOUR_API_KEY/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"auto","messages":[{"role":"user","content":"hello"}]}'

注意:

  • 包含令牌的别名复用与 /v1/*/api/tags 相同的处理程序;响应结构保持不变。
  • 只要客户端支持自定义请求头,就应优先使用 Authorization: Bearer ...
  • 基于 URL 的令牌可能会出现在反向代理日志、浏览器历史记录以及 OmniRoute 外部的遥测数据中。应将其视为一种兼容性选项,而不是默认身份验证方式。

遥测

# 获取延迟遥测摘要(每个提供者的 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 }
  }
}

预算

# 获取所有 API 密钥的预算状态
GET /api/usage/budget

# 设置或更新预算
POST /api/usage/budget
Content-Type: application/json

{
  "apiKeyId": "key-123",
  "dailyLimitUsd": 5.00,
  "weeklyLimitUsd": 30.00,
  "monthlyLimitUsd": 100.00,
  "warningThreshold": 0.8,
  "resetInterval": "monthly"
}

架构说明setBudgetSchemaapiKeyId 为必填项;dailyLimitUsdweeklyLimitUsdmonthlyLimitUsd 中至少有一项必须大于零。可选字段:warningThreshold01resetIntervaldaily | weekly | monthly)、resetTimeHH:MM)。旧版 {keyId, limit, period} 结构会返回 400 Bad Request

Token 限制

每个 API 密钥的 token 预算(不同于上面的美元预算)。在请求路径中直接执行:当密钥在当前窗口内的使用量达到限制时,请求将被拒绝并返回 429 Too Many Requests。限制可限定于特定 modelprovider,也可在整个密钥范围内以 global 方式应用;当一个请求匹配多个限制时,以最严格的限制为准。

# 列出密钥的 token 限制(包括当前窗口的实时使用量)
GET /api/usage/token-limits?apiKeyId=key-123

# 创建或更新 token 限制
POST /api/usage/token-limits
Content-Type: application/json

{
  "apiKeyId": "key-123",
  "scopeType": "model",
  "scopeValue": "openai/gpt-4o",
  "tokenLimit": 1000000,
  "resetInterval": "monthly",
  "enabled": true
}

# 按 id 删除 token 限制
DELETE /api/usage/token-limits?id=tl-abc

Schema 说明setTokenLimitSchemaapiKeyIdscopeTypemodel | provider | global)为必填项。除非 scopeTypeglobal,否则必须提供 scopeValue(例如,model 作用域使用模型 idprovider 作用域使用提供者 idtokenLimit 必须为正整数(可从字符串强制转换)。可选项:id(创建时省略,更新时提供)、resetIntervaldaily | weekly | monthly,默认为 monthly)、resetTimeHH:MM)、enabled(默认为 true)。GET 响应会为每项限制补充 tokensUsedremainingwindowStartperiodStartAtnextResetAt。这是一个管理类端点(由 authz 流水线集中实施身份验证)。

请求处理

  1. 客户端向 /v1/* 发送请求
  2. 路由处理程序调用 handleChathandleEmbeddinghandleAudioTranscriptionhandleImageGeneration
  3. 解析模型(直接指定提供者/模型,或使用别名/组合)
  4. 从本地数据库中选择凭据,并根据账户可用性进行筛选
  5. 对于聊天:handleChatCore 检查语义/签名缓存,并解析组合压缩设置
  6. 启用后,在转换为提供者格式之前运行主动压缩(lite、Caveman、RTK 或堆叠模式)
  7. 提供者执行器发送上游请求
  8. 将响应转换回客户端格式(聊天),或按原样返回(嵌入/图像/音频)
  9. 记录使用量、压缩分析数据和请求日志
  10. 发生错误时,根据组合规则应用回退机制

完整架构参考:ARCHITECTURE.md


组合管理

更高级别的路由组合(已在 /api/combos* 下进行概述)也可以从模型 id 模式进行 1:1 映射,从而将 OpenAI 风格的模型 id 透明地重定向到组合。

方法 路径 说明
GET /api/model-combo-mappings 列出所有模型→组合映射
POST /api/model-combo-mappings 创建映射 — 请求体:{pattern, comboId, priority?, enabled?, description?}
GET /api/model-combo-mappings/[id] 获取单个映射
PUT /api/model-combo-mappings/[id] 更新现有映射的字段
DELETE /api/model-combo-mappings/[id] 删除映射

身份验证: 管理会话/API 密钥(requireManagementAuth)。


Webhook

用于订阅 OmniRoute 事件(请求完成、配额耗尽、密钥轮换等)的出站 Webhook。

方法 路径 描述
GET /api/webhooks 列出 Webhook密钥将被掩码为 <prefix>...
POST /api/webhooks 创建 Webhook — 请求体:{url, events?: ["*"], secret?, description?}
GET /api/webhooks/[id] 获取 Webhook
PUT /api/webhooks/[id] 更新 url/events/secret/description
DELETE /api/webhooks/[id] 删除 Webhook
POST /api/webhooks/[id]/test 向 Webhook URL 发送测试负载并返回投递状态

身份验证: 管理会话/API 密钥(requireManagementAuth)。


已注册的密钥(自动管理)

供自动密钥管理子系统使用,用于通过后端提供者/账户签发和轮换 API 密钥,并实施每日/每小时配额。

方法 路径 描述
GET /api/v1/registered-keys 列出已注册的密钥(仅显示掩码后的前缀)
POST /api/v1/registered-keys 签发新的已注册密钥 — 请求体:{name, provider?, accountId?, idempotencyKey?, expiresAt?, dailyBudget?, hourlyBudget?}。原始密钥仅返回一次。配额拒绝时返回 429
GET /api/v1/registered-keys/[id] 获取已注册密钥的元数据(不包含原始密钥内容)
DELETE /api/v1/registered-keys/[id] 撤销已注册的密钥
POST /api/v1/registered-keys/[id]/revoke 显式撤销端点(效果与 DELETE 相同)

身份验证: Bearer API 密钥(isAuthenticated)。另请参阅 /v1/quotas/check/v1/issues/report


代理任务协议

代表 OmniRoute 用户远程执行的云端代理任务Claude Code、Codex Cloud、OpenHands 等)。

方法 路径 说明
GET /api/v1/agents/tasks 列出任务 — 可选参数 ?provider=?status=?limit=1500默认值为 50
POST /api/v1/agents/tasks 创建任务 — 请求体由 CreateCloudAgentTaskSchema 验证(providerIdpromptsourceoptions?)。返回 201 及任务封装对象
DELETE /api/v1/agents/tasks?id=... 删除任务
GET /api/v1/agents/tasks/[id] 读取任务 — 设置 external_id 后,将同步从上游云端代理刷新状态
POST /api/v1/agents/tasks/[id] 可区分的操作:{action: "approve"}{action: "message", message}{action: "cancel"}
DELETE /api/v1/agents/tasks/[id] 按 id 删除特定任务

身份验证: 每种方法都需要管理身份验证(requireCloudAgentManagementAuth)。在 v3.8.0 之前,这些方法无需身份验证 — 有关这项破坏性变更,请参阅提交 588a0333

# 创建 Claude Code 云端任务
curl -X POST http://localhost:20128/api/v1/agents/tasks \
  -H "Authorization: Bearer your-management-key" \
  -H "Content-Type: application/json" \
  -d '{"providerId":"claude-code-cloud","prompt":"Fix the failing test","source":{"repo":"...","branch":"..."}}'

管理代理服务器

可分配给提供者、账户或全局使用的出站 HTTP(S)/SOCKS 代理服务器。

方法 路径 说明
GET /api/v1/management/proxies 列出代理服务器(使用 ?id= 返回一个;使用 ?id=&where_used=1 返回分配关系图)
POST /api/v1/management/proxies 创建代理服务器 — 请求体由 createProxyRegistrySchema 验证
PATCH /api/v1/management/proxies 更新代理服务器 — 请求体由 updateProxyRegistrySchema 验证(需要 id
DELETE /api/v1/management/proxies?id=...&force=1 删除代理服务器(使用 force=1 解除分配)
GET /api/v1/management/proxies/assignments 列出分配 — 可按 proxy_idscopescope_id 筛选;传入 resolve_connection_id=<id> 可解析某个连接的活动代理服务器
PUT /api/v1/management/proxies/assignments 分配 — 请求体由 proxyAssignmentSchema 验证({scope, scopeId?, proxyId?})。清除调度器缓存
PUT /api/v1/management/proxies/bulk-assign 批量分配 — 请求体由 bulkProxyAssignmentSchema 验证({scope, scopeIds[], proxyId?}
GET /api/v1/management/proxies/health?hours=24 汇总一个时间窗口内的代理服务器健康状况(成功/失败次数、延迟)

身份验证: 每个路由都需要管理会话/API 密钥(requireManagementAuth)。

任务描述中的 POST /api/v1/management/proxies/[id]/assignmentsPOST /api/v1/management/proxies/[id]/health 由上面所示的扁平 /assignments/health 路由提供服务 — 代码库中不存在按 id 划分的子路由。


弹性机制(扩展)

OmniRoute 提供三种相互独立的临时故障处理机制;以下管理端点可供运维人员读取和覆盖这些机制:

作用域 状态存储 读取 重置 / 清除
提供者断路器 domain_circuit_breakers + 内存 /api/monitoring/health POST /api/resilience/reset
连接冷却 提供者连接上的 rateLimitedUntil /api/rate-limits, /api/providers/[id] (延迟重新启用;可通过提供者 PUT 清除)
模型锁定 内存中的模型可用性注册表 GET /api/resilience/model-cooldowns DELETE /api/resilience/model-cooldowns

PATCH /api/resilience 接受 providerBreaker.oauthproviderBreaker.apikey 下的提供者断路器覆盖配置。每个配置均支持 degradationThresholdfailureThresholdresetTimeoutMs;相同字段也可在控制面板 → 设置 → 弹性机制中配置。

# 清除单个模型锁定
curl -X DELETE http://localhost:20128/api/resilience/model-cooldowns \
  -H "Cookie: auth_token=..." \
  -H "Content-Type: application/json" \
  -d '{"provider":"openai","model":"gpt-4o-mini"}'

# 清除所有锁定
curl -X DELETE http://localhost:20128/api/resilience/model-cooldowns \
  -H "Cookie: auth_token=..." \
  -d '{"all":true}'

完整的概念参考和断路器默认值:请参阅 CLAUDE.md →“弹性机制运行时状态”。


技能

用于通过自定义可执行处理程序扩展 OmniRoute 的技能框架,以及市场集成。

方法 路径 描述
GET /api/skills 列出已安装的技能 — 可按 ?q=?mode=on|off|auto?source=skillsmp|skillssh|local 筛选,并支持分页
GET /api/skills/[id] 获取单个技能
PUT /api/skills/[id] 更新技能名称、描述、模式、schema、处理程序、标签
DELETE /api/skills/[id] 卸载技能
POST /api/skills/install 从原始清单安装技能 — 请求体:{name, version, description, schema:{input, output}, handlerCode, apiKeyId?}
GET /api/skills/executions 列出最近的技能执行记录(包含输入/输出/持续时间的审计追踪)
GET /api/skills/marketplace?q=... 从 SkillsMP 市场获取搜索结果/热门列表(需要 skillsmpApiKey 设置)
POST /api/skills/marketplace/install 按 id 从 SkillsMP 安装技能
GET /api/skills/skillssh?q=&limit= 搜索 skills.sh 注册表
POST /api/skills/skillssh/install 按 id 从 skills.sh 安装技能

身份验证: 管理会话/API 密钥。市场搜索路由接受管理身份验证或 Bearer API 密钥(isAuthenticated)。


记忆

持久化的对话/事实记忆存储,作用域限定为每个 API 密钥/会话。

方法 路径 描述
GET /api/memory 列出记忆 — 支持 ?apiKeyId=?type=?sessionId=?q=,并使用 offset/limitpage/limit 分页
POST /api/memory 创建记忆 — 请求体由 Zod 验证:{content, key, type?, sessionId?, apiKeyId?, metadata?, expiresAt?}
GET /api/memory/[id] 获取单条记忆
DELETE /api/memory/[id] 删除记忆
GET /api/memory/health 记忆子系统健康状态(数据库连接、嵌入后端、向量索引状态)

**身份验证:**管理会话/API 密钥(requireManagementAuth)。type 枚举:FACTUALEPISODICSEMANTICPROCEDURAL(请参阅 src/lib/memory/types.ts 中的 MemoryType)。


MCP 服务器

OmniRoute 内置了一个模型上下文协议服务器,支持 3 种传输方式stdio、SSE、streamable-http和限定作用域的工具。以下仪表板端点用于读取状态/审计数据,并代理 HTTP 传输。

方法 路径 描述
GET /api/mcp/status 心跳、传输方式、在线状态、最近调用、热门工具、24 小时成功率
GET /api/mcp/tools MCP 工具列表,包含 namedescriptionscopesphaseauditLevelsourceEndpoints
GET /api/mcp/sse 为 SSE 传输打开 SSE 流(如果 MCP 已禁用或传输方式不匹配,则返回 503
POST /api/mcp/sse 通过 SSE 传输发送 JSON-RPC 帧
GET /api/mcp/stream 打开 Streamable HTTP 传输的 SSE 端(服务器发起的消息)
POST /api/mcp/stream 通过 Streamable HTTP 传输发送 JSON-RPC 帧
DELETE /api/mcp/stream 结束 Streamable HTTP 会话
GET /api/mcp/audit 查询审计日志 — ?limit=?offset=?tool=、`?success=true false?apiKeyId=`
GET /api/mcp/audit/stats 汇总审计统计信息(总数、成功率、平均持续时间、热门工具)

身份验证:sse/stream 传输遵循 MCP 专用身份验证机制(具有 mcp 作用域的 Bearer API 密钥);status/tools/audit* 路由可从仪表板读取(除了能够访问仪表板主机外,无需额外身份验证)。

两种 HTTP 传输均受 settings.mcpEnabledsettings.mcpTransport 控制 — 传输方式不匹配时返回 400MCP 禁用时返回 503


A2A 服务器

OmniRoute 提供一个 A2A代理到代理JSON-RPC 2.0 端点,以及一个用于检查和仪表板的 REST 封装。

JSON-RPC

POST /a2a
Authorization: Bearer your-api-key   # 可选,除非设置了 OMNIROUTE_API_KEY
Content-Type: application/json

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "message/send",
  "params": {
    "skill": "smart-routing",
    "messages": [{"role": "user", "content": "Route this coding task"}]
  }
}

支持的方法(均受 settings.a2aEnabled 控制):

方法 描述
message/send 同步执行技能;返回 {task, artifacts, metadata}
message/stream 通过 SSE 流式执行同一组技能
tasks/get 通过 taskId 获取任务
tasks/cancel 通过 taskId 取消任务

内置技能:smart-routingquota-managementprovider-discoverycost-analysishealth-report

代理卡片

GET /.well-known/agent.json

返回公开的 A2A 代理卡片(名称、描述、能力、技能目录、身份验证方案)— 公开缓存 1 小时。无需身份验证。

REST 辅助接口

方法 路径 描述
GET /api/a2a/status A2A 启用状态 + 任务统计信息 + 已缓存的代理卡片摘要
GET /api/a2a/tasks 列出任务 — ?state=submitted|working|completed|failed|cancelled?skill=?limit=≤200?offset=
POST /api/a2a/tasks (未实现为 REST 辅助接口 — 请通过 JSON-RPC message/send 创建)
GET /api/a2a/tasks/[id] 获取单个任务
POST /api/a2a/tasks/[id]/cancel 取消任务

**身份验证:**REST 辅助接口无需管理身份验证即可运行(仪表板可读取);如果已配置 Bearer OMNIROUTE_API_KEYJSON-RPC /a2a 路由将使用它进行身份验证。


云、评估与测评

方法 路径 描述
POST /api/cloud/auth 验证 Bearer 密钥,并为云同步客户端返回经过掩码处理的提供者连接和模型别名
POST /api/cloud/credentials/update 更新云同步提供者的加密凭据
POST /api/cloud/model/resolve 使用本地路由表将逻辑模型 ID 解析为具体的提供者/模型
GET /api/cloud/models/alias 列出向云同步公开的模型别名
GET /api/assess 读取最新的测评分类结果(按提供者/模型)
POST /api/assess 运行测评 — 请求体:`{scope: {type:"all"} {type:"provider", providerId} {type:"model", modelId}, trigger?}`
GET /api/evals 列出内置评估套件和最近的运行记录
POST /api/evals 触发评估运行
POST /api/evals/suites 创建自定义评估套件 — 请求体由 evalSuiteSaveSchema 验证
GET /api/evals/suites/[id] 获取自定义评估套件

身份验证:/api/cloud/auth 直接验证 Bearer 密钥;其他 /api/cloud/*/api/evals/*/api/assess 路由需要管理会话/API 密钥。/api/assess POST 使用 validateBody 和可辨识联合范围架构。


ACPAgent Client Protocol管理

作为子进程运行。这些端点用于管理 ACP 智能体检测和自定义智能体注册。

方法 路径 描述
GET /api/acp/agents 列出所有已知的 CLI 智能体(内置 + 自定义),包括安装状态、版本和二进制文件
POST /api/acp/agents 注册自定义 ACP 智能体或刷新缓存——请求体:{id, name, binary, versionCommand, providerAlias, spawnArgs, protocol}{action: "refresh"}
DELETE /api/acp/agents 移除自定义 ACP 智能体——查询参数:?id=<agentId>

响应示例GET /api/acp/agents

{
  "agents": [
    {
      "id": "claude",
      "name": "Claude Code CLI",
      "binary": "claude",
      "version": "1.0.45",
      "installed": true,
      "protocol": "stdio",
      "providerAlias": "claude",
      "isCustom": false
    },
    {
      "id": "my-custom-cli",
      "name": "My Custom CLI",
      "installed": false,
      "protocol": "stdio",
      "providerAlias": "my-provider",
      "isCustom": true
    }
  ],
  "cacheTtlMs": 60000,
  "cacheAge": 1234
}

身份验证: 需要管理会话(仪表板 auth_token Cookie或具有管理作用域的 API 密钥。

完整详情请参阅 ACP 框架


分析与可观测性

用于监控路由、压缩和提供者多样性的实时分析端点。这些端点为 /dashboard/analytics/* 页面提供支持。

自动路由分析

方法 路径 描述
GET /api/analytics/auto-routing 汇总自动路由统计信息:调用总数、策略分布、层级分布、热门提供者
GET /api/analytics/auto-routing?days=7 指定时间窗口的统计信息(默认 24 小时)

响应示例

{
  "window": "24h",
  "totalCalls": 1234,
  "strategyBreakdown": {
    "rules": 800,
    "cost": 200,
    "latency": 150,
    "sla-aware": 50,
    "lkgp": 34
  },
  "tierBreakdown": {
    "ultra": 100,
    "pro": 500,
    "standard": 400,
    "free": 234
  },
  "topProviders": [
    { "provider": "openai", "calls": 500, "avgLatencyMs": 850 },
    { "provider": "anthropic", "calls": 300, "avgLatencyMs": 1200 }
  ]
}

压缩分析

方法 路径 描述
GET /api/analytics/compression 汇总压缩统计信息:节省的令牌数、节省百分比、模式分布、引擎使用情况

响应示例

{
  "window": "24h",
  "totalOriginalTokens": 5000000,
  "totalCompressedTokens": 3500000,
  "totalSavings": 1500000,
  "savingsPct": 30.0,
  "modeBreakdown": {
    "lite": 400,
    "standard": 600,
    "aggressive": 100,
    "ultra": 50,
    "rtk": 84
  },
  "engineBreakdown": {
    "caveman": 800,
    "rtk": 434
  }
}

提供者多样性跟踪

方法 路径 描述
GET /api/analytics/diversity 基于香农熵的多样性跟踪:通过衡量提供者分布情况来避免单点故障

响应示例

{
  "window": "24h",
  "shannonEntropy": 2.45,
  "maxEntropy": 3.17,
  "diversityRatio": 0.77,
  "providerUsage": {
    "openai": 0.4,
    "anthropic": 0.25,
    "google": 0.2,
    "kiro": 0.15
  },
  "warnings": ["OpenAI accounts for 40% of traffic — consider diversifying"]
}

身份验证: 需要管理会话或具有管理作用域的 API 密钥。


管理员操作

仅限管理员使用的运维管理端点。

方法 路径 描述
GET /api/admin/concurrency 读取当前并发限制(全局及各提供者)
POST /api/admin/concurrency 更新并发限制 — 请求体:{global?: number, perProvider?: Record<string, number>}

身份验证: 需要具有管理员权限范围的管理会话。


CLI 工具管理

管理与 OmniRoute 集成的 CLI 工具antigravity、chipotle、commandCode、 devin-cli 等)。完整列表请参阅提供者参考

方法 路径 描述
GET /api/cli-tools/all-statuses 所有 CLI 工具的状态(是否已安装、版本、最后发现时间)
GET /api/cli-tools/status 单个 CLI 工具的详细状态(?tool= 查询参数)
POST /api/cli-tools/apply 写入工具生成的配置(dryRun 用于预览;在容器化环境中返回 422 + containerEphemeralTargetmigration 用于注明旧版 Codex YAML
GET /api/cli-tools/backups 列出 CLI 工具配置备份
POST /api/cli-tools/backups 创建所有 CLI 工具配置的备份
POST /api/cli-tools/backups 恢复:通过同一端点,并在请求体中传入 {tool, backupId} 来恢复相应备份
GET /api/cli-tools/antigravity-mitm Antigravity MITM 代理状态“antigravity-mitm” CLI 工具)
POST /api/cli-tools/antigravity-mitm/alias 配置 antigravity-mitm 别名

身份验证: 需要管理会话。


Agent 技能

管理 AI Agent 技能(类似于 OpenAI 的自定义 GPT但面向 Agent

方法 路径 描述
GET /api/agent-skills 列出所有 Agent 技能(内置及自定义)
GET /api/agent-skills/[id] 获取特定 Agent 技能
POST /api/agent-skills 创建自定义 Agent 技能 — 请求体:{name, description, prompt, model?, temperature?}
PUT /api/agent-skills/[id] 更新自定义 Agent 技能
DELETE /api/agent-skills/[id] 删除自定义 Agent 技能
GET /api/agent-skills/[id]/raw 获取原始提示词及元数据(不执行)
POST /api/agent-skills/generate 根据自然语言描述使用 AI 生成新技能

身份验证: 需要管理会话或具有管理权限范围的 API 密钥。


缓存管理

管理语义缓存和推理缓存。

方法 路径 描述
GET /api/cache 缓存概览:条目总数、命中率、磁盘占用空间
GET /api/cache/entries 列出缓存条目(支持分页)
DELETE /api/cache/entries 删除缓存条目(按查询参数筛选)
GET /api/cache/stats 详细的缓存统计信息(按提供者、按模型)
GET /api/cache/reasoning 推理缓存状态(用于推理重放)
DELETE /api/cache/reasoning 清除推理缓存 — 查询参数:?toolCallId=<id>(单个)、?provider=<p>,或不带参数(全部)

身份验证: 需要管理会话。


记忆系统

管理持久化记忆FTS5 + 向量嵌入)。

方法 路径 描述
GET /api/memory 列出记忆条目(按作用域、类型、搜索查询筛选)
POST /api/memory 创建新的记忆条目 — 请求体:{scope, type, content, metadata?}
GET /api/memory/[id] 获取特定的记忆条目
PUT /api/memory/[id] 更新记忆条目
DELETE /api/memory/[id] 删除记忆条目
GET /api/memory?q= 搜索记忆FTS5 + 向量)— 同一响应中包含统计信息

身份验证: 需要管理会话或管理作用域的 API 密钥。


Webhook

管理事件的 Webhook 订阅。

方法 路径 描述
GET /api/webhooks 列出所有 Webhook 订阅
POST /api/webhooks 创建 Webhook 订阅 — 请求体:{url, events[], secret?, active?}
GET /api/webhooks/[id] 获取特定的 Webhook 订阅
PUT /api/webhooks/[id] 更新 Webhook 订阅
DELETE /api/webhooks/[id] 删除 Webhook 订阅
GET /api/webhooks/[id]/deliveries 列出 Webhook 的投递历史记录(成功/失败日志)
POST /api/webhooks/[id]/test 向 Webhook 发送测试事件

身份验证: 需要管理会话。

有关完整的事件类型,请参阅 Webhook 框架


Skills 框架

管理 Skills智能体扩展框架

方法 路径 描述
GET /api/skills 列出所有已安装的 Skills内置 + 自定义)
POST /api/skills/install 从本地路径或 URL 安装 Skill
DELETE /api/skills/[id] 卸载 Skill
PUT /api/skills/[id] 启用或禁用 Skill — 请求体:{enabled?: boolean, mode?: "on" | "off" | "auto"}
POST /api/skills/executions 执行 Skill — 请求体:{skillName, apiKeyId, input?, sessionId?}
GET /api/skills/executions 列出所有 Skills 的执行历史记录(使用 ?apiKeyId= 进行筛选)

身份验证: 需要管理会话或具有管理作用域的 API 密钥。

完整详情请参阅 Skills 框架


插件

管理 OmniRoute 插件(第三方扩展)。

方法 路径 描述
GET /api/plugins 列出已安装的插件
POST /api/plugins/marketplace/install 从插件市场安装插件
DELETE /api/plugins/[name] 卸载插件
POST /api/plugins/[name]/activate 激活插件
POST /api/plugins/[name]/deactivate 停用插件
GET /api/plugins/[name]/config 获取插件配置
PUT /api/plugins/[name]/config 更新插件配置

身份验证: 需要管理会话。

完整详情请参阅 插件框架


影子路由

提供者的影子 / A-B 对比并非独立的 REST 接口 — 它通过组合路由进行配置(请参阅 自动组合)。每个组合的对比指标由 GET /api/combos/metrics 提供。


防护机制

检查运行时防护机制PII 检测、提示词注入检测、视觉桥接)。防护机制会针对每个请求运行;可通过 x-omniroute-disabled-guardrails 请求标头针对单次调用选择退出 — 不提供持久化的启用/禁用接口。

方法 路径 描述
GET /api/guardrails 列出已注册的防护机制及其状态(名称 / 是否启用 / 优先级)
POST /api/guardrails/test 使用示例输入试运行调用前管道 — 请求体:{input, disabledGuardrails?}

身份验证: 需要管理会话。

完整详情请参阅 安全性 > 防护机制



身份验证

有关四类凭据(仪表板会话、本地 CLI 令牌、oma_live_… 访问令牌、管理范围 API 密钥)及其与推理密钥的区别,请参阅管理身份验证

  • 仪表板路由(/dashboard/*)使用 auth_token Cookie
  • 登录使用已保存的密码哈希;若无则回退使用 INITIAL_PASSWORD
  • requireLogin 可通过 /api/settings/require-login 切换
  • REQUIRE_API_KEY=true 时,/v1/* 路由可要求提供 Bearer API 密钥
  • 本参考文档中的“管理令牌”/“管理范围 API 密钥”是指该指南中所述的某一类凭据,而不是未定义的其他密钥类型

破坏性变更v3.8.0/api/v1/agents/tasks/* 和冷却时间管理端点现在需要管理身份验证(仪表板 auth_token Cookie 或管理范围 API 密钥)。此前未进行身份验证就调用这些路由的客户端将收到 401 Unauthorized。请参阅提交 588a0333fix(auth): require management auth for agent and cooldown APIs)。