Kimi+ 会员限时特惠
Kimi K3 · 15 天免费体验
2.8T 前沿模型 · 100 万 token 上下文 · 深度研究
免费 ¥199 / 15 天
  • Kimi K3 无限畅聊:2.8T 参数前沿模型
  • 100 万 token 上下文,超长文档轻松解析
  • Deep Research 深度研究,多格式专业报告
  • Agent Swarm 智能体集群,并行处理任务
  • AI Slides · Sheets · Docs 咨询级办公产出
立即开启 15 天免费体验
Skip to content

服务 API

kimi web 启动的本地服务暴露两组程序化接口:REST API(/api/v1,另有 /api/v2/sessions/api/v2/mcp)和 WebSocket 事件流(/api/v1/ws)。本页是这两组接口的协议参考。如何启动服务及其命令行选项见 kimi 命令 参考;端到端的上手流程见下文「用 API 驱动一个会话」。

本页是一份经过整理、面向人阅读的参考:下文逐一记录每个端点的参数、请求体与响应结构。每个端点精确的机器可读 schema 以服务的在线规范文档为准:GET /openapi.json(OpenAPI)与 GET /asyncapi.json(AsyncAPI),两者都由服务运行时实际执行的校验 schema 生成。两者都需要鉴权;当本页与在线规范不一致时,以在线规范为准。

注意

本页描述的 REST 与 WebSocket API 为实验性特性:不保证接口稳定性,端点、字段与事件类型可能随任何版本更改。集成时请以你所用版本服务的 /openapi.json/asyncapi.json 文档为准。

基础约定

地址

默认地址为 http://127.0.0.1:58627。端口被占用时,服务会用下一个端口重试(至多 100 次);可用 --port / --host 修改绑定。同一 home 目录下可并存多个实例,运行中的实例登记在 ~/.kimi-code/server/instances/

鉴权

除以下例外,所有 /api/* 路径(含 /openapi.json/asyncapi.json)都要求 bearer token:

  • OPTIONS 预检请求
  • GET /api/v1/healthz(探活)
  • 静态 web 资源(非 /api/ 路径)

携带方式:REST 用 Authorization: Bearer <token> 请求头;WebSocket 升级请求接受同一请求头,或子协议 kimi-code.bearer.<token>。token 的生成与轮换见 在网页中使用:开始使用

鉴权失败返回 HTTP 401,信封 code40101。在非 loopback 绑定上,同一来源 60 秒内鉴权失败 10 次会被封禁 60 秒,期间每个请求都返回 HTTP 429(code42901)。

响应信封

所有 JSON 响应统一包在信封里:

json
{
  "code": 0,
  "msg": "success",
  "data": {},
  "request_id": "01JZX4A6E7M8V0R3Q0N2K2M5Q9"
}
  • code:业务结果,0 表示成功;错误码分段见下文。
  • data:成功时的业务数��。注意部分「错误」信封也携带非空 data——例如重复解决审批返回 40902data.resolvedfalse——客户端应先判 code 再看 data
  • request_id:本次请求的 ULID;客户端可用 X-Request-Id 请求头指定,非法值会被服务端重新生成。

HTTP 状态码几乎总是 200,业务结果以 code 为准。例外情况:

场景HTTP 状态
鉴权失败 / 触发限流401 / 429
创建供应商、导入供应商目录成功201
删除供应商成功204
二进制与流式端点支持时返回 206(Range 分段)/ 304(ETag 未变),各端点能力不同,详见「二进制与流式端点
GET /api/v1/files/{file_id} 下载错误真实 404 / 500(响应体仍为信封)

其中 201 的响应体仍是标准信封(code0),只是状态行遵循 REST 的资源创建惯例;204 按定义没有响应体,删除成功以状态码本身为准。

错误码

错误码按段位分组:

段位含义示例
0成功
400xx请求参数错误40001 校验失败(details 逐字段说明)、40003 供应商由 OAuth 托管
401xx鉴权与就绪状态40101 未授权、40110 未配置供应商、40113 模型未解析
404xx资源不存在40401 会话、40408 MCP 服务、40409 文件路径
409xx状态冲突40901 会话忙、40902 审批已解决、40922 分页条件与 page_token 不符
410xx资源已过期41001 审批超时、41002 提问超时、41003 临时文件过期
413xx体积或边界超限41302 读取文件超 10 MB、41304 路径越出会话目录
429xx限流42901 鉴权失败封禁、42902 文件监听数超限
500xx服务端内部错误50001 未捕获异常、50003 持久化失败
6xxxx / 7xxxx / 8xxxx工具运行时 / LLM 供应商 / MCP 透传错误,msg 保留上游原文

分页

列表端点有两种分页风格:

  • 游标式before_id / after_id(互斥)加 page_size(1–100),响应为 { items, has_more }。用于会话列表、消息列表、转录等。
  • page_token:不透明令牌(绑定了查询条件的指纹),用于 POST /api/v1/searchGET /api/v2/sessions。翻页途中改变任何查询条件会使令牌失效:v2 返回 40922,search 返回 40001GET /api/v2/sessions 另提供无状态的 page 页码模式作为替代。

用 API 驱动一个会话

下面用 curl 走一遍最小流程:确认服务状态 → 创建会话 → 订阅事件 → 提交提示词 → 回读历史。示例假设服务跑在默认地址,token 已存入 shell 变量 TOKEN

  1. 确认服务状态:
sh
curl -s -H "Authorization: Bearer $TOKEN" http://127.0.0.1:58627/api/v1/meta

所有 JSON 响应都包在统一信封里——{ "code": 0, "msg": "success", "data": ..., "request_id": "..." },业务结果以 code 为准(0 表示成功),HTTP 状态码只表达传输层结果。

  1. 创建会话,metadata.cwd 指定工作目录:
sh
curl -s -X POST http://127.0.0.1:58627/api/v1/sessions \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"metadata": {"cwd": "/path/to/project"}}'

返回的 data.id(形如 session_...)就是后续所有请求要用的会话 id。

  1. 连接 WebSocket 并订阅会话事件。任何 WebSocket 客户端都可以;下面是一个零依赖的 Node.js 脚本(Node.js 22+ 内置 WebSocket 客户端):
js
// subscribe.mjs —— 用法:TOKEN=... node subscribe.mjs session_...
const ws = new WebSocket('ws://127.0.0.1:58627/api/v1/ws', [
  `kimi-code.bearer.${process.env.TOKEN}`,
]);
ws.onmessage = (e) => console.log(e.data);
ws.onopen = () =>
  ws.send(
    JSON.stringify({
      type: 'subscribe',
      id: '1',
      payload: { session_ids: [process.argv[2]] },
    }),
  );
  1. 提交提示词:
sh
curl -s -X POST http://127.0.0.1:58627/api/v1/sessions/<session_id>/prompts \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"content": [{"type": "text", "text": "用一句话介绍这个仓库"}]}'

订阅端会依次看到 turn.started(轮次开始)→ assistant.delta(流式文本增量)→ 发生工具调用时的 tool.call.started / tool.resultturn.ended(轮次结束)。

  1. 随时可以用 REST 回读历史消息:
sh
curl -s -H "Authorization: Bearer $TOKEN" \
  "http://127.0.0.1:58627/api/v1/sessions/<session_id>/messages?page_size=20"

REST 端点

下文按资源分组列出端点。路径里的 :{action} 后缀是动作约定——对单个资源 POST 到 路径:动作 执行非 CRUD 操作(如会话的 :fork:archive)。

服务与元信息

方法与路径说明
GET /api/v1/healthz探活,免鉴权
GET /api/v1/meta服务版本、能力集、server_id、实验开关
POST /api/v1/shutdown优雅退出(先回 200 再关闭);仅 loopback 绑定时挂载

GET /api/v1/healthz

供脚本与进程管理器使用的探活端点。它是唯一豁免 bearer token 的 /api 端点(见 鉴权),应答时不触碰配置与引擎。

成功时 data{ "ok": true }

GET /api/v1/meta

返回本实例的身份信息与能力集。大多数字段在启动时即固定;experimental_flagsfeatures 按请求实时解析,因此开关翻转或某个 feature 失败会体现在下一次响应中。

成功时 data 携带:

字段类型说明
server_versionstring服务版本
capabilitiesobject能力集——websocketfile_uploadfs_querymcptasksterminal,均恒为 true
server_idstring本服务实例的唯一 id
started_atstring启动时间,ISO 8601 格式
open_in_appsarray可作为 open-in 目标的宿主应用(finder / cursor / vscode / iterm / terminal);目前恒为空
dangerous_bypass_authboolean服务是否以 --dangerous-bypass-auth 启动(客户端可跳过 token 提示)
backendstring引擎后端,v1v2;本服务恒为 v2
web_titlestring来自 --web-title 的自定义浏览器标签页标题;未设置时省略
experimental_flagsobject实验开关 id → 是否启用,按请求时解析
featuresarray引擎 feature,形如 { name, state, meta }statePending / Activating / Active / Unloading / Failed

POST /api/v1/shutdown

请求服务优雅退出。响应先发出,随后立即执行关闭,因此调用方可以信任收到的响应。该路由仅在 loopback 绑定时挂载——非 loopback 绑定时它根本不会被注册(请求得到 404),除非服务以 --allow-remote-shutdown 启动。

成功时 data{ "ok": true }

登录与用量

这组端点驱动托管 Kimi OAuth 登录的生命周期,并暴露账号级信息。托管供应商名为 managed:kimi-code;下面每个端点上可选的 provider 参数都默认取它。

方法与路径说明
GET /api/v1/auth鉴权状态快照
POST /api/v1/oauth/login发起 OAuth device-code 登录流程
GET /api/v1/oauth/login轮询登录流程状态
DELETE /api/v1/oauth/login取消进行中的登录流程
POST /api/v1/oauth/logout登出托管供应商
GET /api/v1/oauth/usage套餐额度与加油包
GET /api/v1/oauth/userinfo账号资料
GET /api/v1/oauth/region解析客户端所属区域(mainland-cn / global

GET /api/v1/auth

鉴权状态快照:默认模型能否解析到可用的供应商配置,以及托管供应商的登录状态。当全局 default_model 别名存在于模型表中且能解析到已配置的供应商时,models_readytrue——包括自带 base_url 的平铺(providerless)模型,以及通过 KIMI_MODEL_* 环境变量注入的模型。它不做凭据校验,因此此后的对话请求仍可能以 40111 / 40112 失败。

成功时 data 携带 models_ready(布尔值)、providers_count(已配置供应商数量)与 managed_providernull,或 { name, status },其中 statusauthenticated / expired / revoked / unauthenticated 之一)。全局默认模型别名本身改从 GET /api/v1/configdefault_model 读取,本端点不再携带。

POST /api/v1/oauth/login

为托管供应商发起 OAuth device-code 登录流程;发起新流程会中止同一供应商进行中的流程。账号已登录时无需用户交互,响应会立即报告 authenticated

参数位置类型说明
providerbodystring托管供应商名称。默认 managed:kimi-code
regionbodystringmainland-cnglobal;覆盖 GET /api/v1/oauth/region 一节描述的区域解析结果,仅对本次流程生效

成功时 data 有两种形态。进行中的流程——{ flow_id, provider, status: "pending", verification_uri, verification_uri_complete, user_code, expires_in, interval, expires_at }:打开 verification_uri_complete(或打开 verification_uri 并输入 user_code),然后每隔 interval 秒轮询 GET /api/v1/oauth/login,直到流程完结或超过 expires_atexpires_in 是以秒表示的同一时限)。已登录的快速路径——{ flow_id, provider, status: "authenticated" }

GET /api/v1/oauth/login

轮询某供应商的登录流程状态。尚未发起过流程时返回 null

参数位置类型说明
providerquerystring托管供应商名称。默认 managed:kimi-code

成功时 datanull 或流程快照:{ flow_id, provider, status, verification_uri, verification_uri_complete, user_code, expires_in, expires_at, interval },其中 statuspending / authenticated / denied / expired / cancelled。流程离开 pending 后,resolved_at 记录其到达终态的时间,error_message 描述失败的流程。

DELETE /api/v1/oauth/login

取消某供应商进行中的登录流程。没有进行中的流程时,该调用为空操作,返回最近一次已知状态。

参数位置类型说明
providerquerystring托管供应商名称。默认 managed:kimi-code

成功时 data{ cancelled, status }:只有确实中止了一个 pending 流程时 cancelled 才为 truestatus 为调用后的流程状态。

POST /api/v1/oauth/logout

登出托管供应商:丢弃已存储的 OAuth 凭据、中止进行中的登录流程,并把托管供应商从配置中移除。OAuth 托管的供应商拒绝手动编辑与删除(见下文 PUT / DELETE /api/v1/providers/{provider_id}),因此要移除它需先登出。

参数位置类型说明
providerbodystring托管供应商名称。默认 managed:kimi-code

成功时 data{ logged_out: true, provider }

GET /api/v1/oauth/usage

托管账号的套餐额度与加油包,实时取自账号服务。上游失败不会让信封失败——它以 kind: "error" 的形式带内返回。

参数位置类型说明
providerquerystring托管供应商名称。默认 managed:kimi-code

成功时 data{ kind: "ok", quota }{ kind: "error", message, status? },其中 status 为上游 HTTP 状态码(如存在)。在 ok 形态中,quota{ usages, extraUsage }usages 按窗口携带 { usedRatio, resetAt? } 条目——limit5hlimit7dmonthTotalmonthCode——其中 usedRatio 为 0–1 浮点数,resetAt 为 RFC3339 重置时间,客户端按实际下发的条目渲染;extraUsage(可空)是按量付费钱包:{ balanceCents, totalCents, monthlyChargeLimitEnabled, monthlyChargeLimitCents, monthlyUsedCents, currency }

GET /api/v1/oauth/userinfo

托管账号的资料,带内 kind: "error" 约定与 GET /api/v1/oauth/usage 相同。

参数位置类型说明
providerquerystring托管供应商名称。默认 managed:kimi-code

成功时 data{ kind: "ok", userInfo }{ kind: "error", message, status? }userInfo 始终携带 userIdnicknamestatusregionuserLeveluserLevelNamedomaindomainName,并可能附加 globalIdbioavatarusernameemailphone{ countryCode, number })、createdTimelastLoginTime

GET /api/v1/oauth/region

解析该客户端所属的 Kimi 区域。结果在本地推导,不经网络探测:优先取环境变量或配置固定的 OAuth host,其次是已配置的 OAuth key,再次是 home 目录中的区域标记文件;默认为 mainland-cn

成功时 data{ region }regionmainland-cn / global 之一。

配置

方法与路径说明
GET /api/v1/config读取全局配置(密钥字段脱敏)
POST /api/v1/config合并式更新配置,并广播 event.config.changed

GET /api/v1/config

返回解析后的全局配置——config.toml 叠加覆盖层后的生效结果。密钥已脱敏:每个供应商只报告 has_api_key,绝不返回存储的密钥。

成功时 data 为配置对象;其字段与 顶层字段 记录的顶层域一一对应:

字段类型说明
providersobject供应商 id → { type, base_url?, default_model?, has_api_key } 的映射
default_providerstring全局默认供应商 id
default_modelstring全局默认模型别名
modelsobject模型别名 → 模型记录的映射
thinkingobjectThinking 模式的默认参数
plan_modebooleanPlan 模式开关
yoloboolean派生值:default_permission_modeyolo 时为 true
default_permission_modestring新会话的默认权限模式
default_plan_modeboolean新会话是否以 Plan 模式启动
permissionobject初始权限规则
hooksarray生命周期钩子
servicesobject内置外部服务配置
merge_all_available_skillsboolean是否合并所有可用目录中的 Agent Skills
extra_skill_dirsarray额外的 Skill 搜索目录
loop_controlobjectAgent 循环控制参数
backgroundobject后台任务运行参数
subagentobjectsubagent 配置
secondary_modelobjectsubagent 的次级模型池
experimentalobject实验开关 id → 是否启用
telemetryboolean是否启用匿名遥测
rawobject原始解析的 config.toml 内容,包含未建模字段

POST /api/v1/config

合并式更新全局配置:请求体中的每个顶层域被深合并进对应域,未出现在请求体中的域保持不动。把 yolo 设为 truedefault_permission_mode: "yolo" 的简写;被拒绝的补丁(值非法或持久化失败)返回 40001 与底层错误信息。

每一次配置变更——经本端点成功更新、在进程外编辑 config.toml,或服务端内部写入(如 OAuth 登录刷新)——都会广播全局 event.config.changed 事件。短时间窗内的多次变更会合并为一个事件,其 changedFields 携带受影响的域名(camelCase 配置域,例如 defaultModel),config 携带当前完整的配置投影(与 GET /api/v1/config 响应同形状)。

请求体是部分配置对象——上述响应域中除 raw 外的任意子集,均为可选:

参数位置类型说明
providersbodyobject供应商 id → 供应商表的映射
default_providerbodystring全局默认供应商 id
default_modelbodystring全局默认模型别名
modelsbodyobject模型别名 → 模型记录的映射
thinkingbodyobjectThinking 模式的默认参数
plan_modebodybooleanPlan 模式开关
yolobodybooleantrue 映射为 default_permission_mode: "yolo"false 被忽略
default_permission_modebodystringmanual / yolo / auto
default_plan_modebodyboolean新会话是否以 Plan 模式启动
permissionbodyobject初始权限规则
hooksbodyarray生命周期钩子
servicesbodyobject内置外部服务配置
merge_all_available_skillsbodyboolean是否合并所有可用目录中的 Agent Skills
extra_skill_dirsbodyarray额外的 Skill 搜索目录
loop_controlbodyobjectAgent 循环控制参数
backgroundbodyobject后台任务运行参数
subagentbodyobjectsubagent 配置
secondary_modelbodyobjectsubagent 的次级模型池
experimentalbodyobject实验开关 id → 是否启用
telemetrybodyboolean是否启用匿名遥测

成功时 data 为完整的更新后配置,形态与 GET /api/v1/config 相同。

模型与供应商

这组端点管理模型配置的两半——config.toml供应商 表与模型别名表——外加一个由服务端代理的 models.dev 目录,用于一次性导入。模型别名 id 就是配置中的别名键:通过供应商管理端点创建的别名形如 provider_id/model(例如 my-provider/kimi-for-coding),而模型别名表中的裸键(如 turbo)原样使用;API 中任何接收 model_id 的地方(包括全局 default_model)指的都是这个别名 id。:{action} 路由上不支持的动作返回 40001

方法与路径说明
GET /api/v1/models列出已配置的模型别名
POST /api/v1/models/{model_id}:set_default设置全局默认模型
GET /api/v1/providers列出供应商
POST /api/v1/providers创建供应商(201)
GET /api/v1/providers/{provider_id}读取供应商(含已存密钥)
PUT /api/v1/providers/{provider_id}整体替换供应商配置
DELETE /api/v1/providers/{provider_id}删除供应商(204)
POST /api/v1/providers/{provider_id}:refresh刷新该供应商的模型元数据
POST /api/v1/providers:{action}集合级动作:refresh / refresh_oauth / import_catalog / import_registry
GET /api/v1/catalog/providers浏览 models.dev 目录(服务端代理)
GET /api/v1/catalog/providers/{catalog_id}读取目录中单个条目

GET /api/v1/models

列出所有供应商下已配置的模型别名。

成功时 data.items{ provider, model, display_name?, max_context_size, capabilities?, support_efforts?, default_effort? } 数组:model 是别名 id(供应商管理的别名为 provider_id/model,否则为裸键),provider 是所属供应商 id,max_context_size 是以 token 计的上下文窗口,capabilities / support_efforts / default_effort 描述能力标志与 Thinking 模式的 effort 支持。

POST /api/v1/models/{model_id}:set_default

把全局 default_model 设为一个已存在的别名。model_id 是配置中的别名键原样——裸键如 POST /api/v1/models/turbo:set_default;当 id 含 / 时需做 URL 编码,如 POST /api/v1/models/my-provider%2Fkimi-for-coding:set_default

参数位置类型说明
model_idpathstring必填。 配置中的模型别名键原样;含 / 时需 URL 编码

成功时 data{ default_model, model }——当前生效的别名及其目录项(形态与 GET /api/v1/models 的单项相同)。

  • 40001:路径中的动作后缀非法或不支持
  • 40413:不存在该 id 的模型别名

GET /api/v1/providers

列出每个已配置供应商及其凭据与模型发现状态,不泄露任何密钥。这也是其他供应商端点引用的供应商条目形态。

成功时 data.items 为如下结构的数组:

字段类型说明
idstring供应商 id
typestring通信协议:kimi / openai / openai_responses / anthropic / google-genai / vertexai
base_urlstringAPI 基础 URL,如已设置
default_modelstring该供应商的默认模型别名,如已设置
has_api_keyboolean是否已存储凭据
statusstring存在 API 密钥或缓存的 OAuth token 时为 connected,否则为 unconfigurederror 在 schema 中保留)
modelsarray该供应商的模型别名 id

POST /api/v1/providers

一次保存创建供应商及其模型别名;响应为 HTTP 201 加标准信封。当全局 default_model 完全未配置时(全新安装),会以新供应商的 default_model(或第一个模型)播种;已有默认值绝不被修改。

参数位置类型说明
idbodystring必填。 供应商 id——字母、数字、-_ 与空格;必须以字母或数字开头
typebodystring必填。 通信协议:kimi / openai / openai_responses / anthropic / google-genai / vertexai
api_keybodystringAPI 密钥,存储于 config.toml
base_urlbodystringAPI 基础 URL;不得包含环境变量占位符(${...}
default_modelbodystring该供应商的默认模型;必须是 models[].model 之一
modelsbodyarray必填。 至少一条,不允许重复的 model 值;条目结构见下文

每个 models[] 条目声明一个别名,其 id 为 id/model

字段类型说明
modelstring必填。 上游模型名
max_context_sizeinteger必填。 以 token 计的上下文窗口,≥ 1
display_namestring显示名
capabilitiesarray能力��志,如 thinkingimage_in
max_output_sizeinteger最大输出 token 数,≥ 1
support_effortsarray支持的 Thinking 模式 effort 档位
adaptive_thinkingboolean自适应 thinking 开关

成功时 data 为创建好的供应商条目(形态与 GET /api/v1/providers 的单项相同)。

  • 40921:已存在该 id 的供应商

GET /api/v1/providers/{provider_id}

读取单个供应商。与列表路由不同,设置了密钥时响应会暴露存储的 api_key,以便本地编辑表单预填——暴露端口时请牢记这一点。

参数位置类型说明
provider_idpathstring必填。 供应商 id

成功时 data 为供应商条目,存有密钥时附带 api_key

  • 40412:供应商不存在

PUT /api/v1/providers/{provider_id}

一次保存整体替换供应商:typebase_url 与模型列表被重写,该供应商的别名按 models 重建——不再列出的别名从 config.toml 中消失,其他供应商的别名不受影响。api_key 是三态的:省略表示保留已存密钥,"" 表示清除,其他值表示替换。除 new_id 重命名迁移外,全局默认指针绝不被修改。

参数位置类型说明
provider_idpathstring必填。 当前供应商 id
new_idbodystring重命名供应商;providers 键、模型别名、default_provider、指向旧别名的 default_model 以及 subagent 次级模型池都会随之迁移。id 规则与 POST /api/v1/providers 相同
typebodystring必填。 通信协议:kimi / openai / openai_responses / anthropic / google-genai / vertexai
api_keybodystring三态,见上文
base_urlbodystringAPI 基础 URL;不得包含环境变量占位符(${...}
default_modelbodystring该供应商的默认模型;必须是 models[].model 之一
modelsbodyarray必填。 至少一条,不允许重复的 model 值;条目结构与 POST /api/v1/providers 相同

成功时 data{ provider },即保存后的供应商条目。

  • 40001:重命名后的别名 id 会与其他供应商的别名冲突
  • 40003:供应商由 OAuth 托管——请改用 POST /api/v1/oauth/logout 登出
  • 40412:供应商不存在
  • 40921new_id 已被占用

DELETE /api/v1/providers/{provider_id}

删除供应商及其全部模型别名;subagent 次级模型池会级联清理。全局 default_provider / default_model 指针保持不动,即使它们指向被删的供应商——那是用户的设置,不由本端点代为回收。

参数位置类型说明
provider_idpathstring必填。 供应商 id

成功时服务应答 204 且无响应体——状态行本身即表示删除成功(见 响应信封)。

  • 40003:供应商由 OAuth 托管——请改用 POST /api/v1/oauth/logout 登出
  • 40412:供应商不存在

POST /api/v1/providers/{provider_id}:refresh

从上游来源重新发现单个供应商的模型元数据,并重写该供应商的别名。模型来源为静态的供应商不经任何网络调用直接报告 unchanged。至少一个供应商的别名发生变化时,服务会广播全局 event.model_catalog.changed 事件。

参数位置类型说明
provider_idpathstring必填。 供应商 id

成功时 data 为刷新报告:changed{ provider_id, provider_name, added, removed }(新增 / 移除的别名数)的数组,unchanged 是无差异的供应商 id 数组,failed{ provider, reason } 的数组。

  • 40001:路径中的动作后缀非法或不支持
  • 40412:供应商不存在

POST /api/v1/providers:refresh

刷新每个供应商的模型元数据。请求体可选且被忽略。

成功时 data 为与 POST /api/v1/providers/{provider_id}:refresh 相同的刷新报告(changed / unchanged / failed)。

POST /api/v1/providers:refresh_oauth

POST /api/v1/providers:refresh 相同的刷新,仅限 OAuth 凭据的供应商。请求体可选且被忽略。

成功时 data 为刷新报告(changed / unchanged / failed)。

POST /api/v1/providers:import_catalog

把一个 models.dev 目录条目导入为已配置供应商;响应为 HTTP 201 加标准信封。通信协议与端点来自目录解析,目录中的每个模型都写为一个别名。导入已存在的 id 等同于刷新——供应商条目及其别名按目录重写,省略 api_key 表示保留已存密�。全局默认指针绝不被修改,仅在完全未配置默认模型时,以第一个导入的模型播种 default_model

参数位置类型说明
catalog_idbodystring必填。 来自 GET /api/v1/catalog/providers 的目录条目 id
idbodystring覆盖目录 id 作为本地供应商 id。id 规则与 POST /api/v1/providers 相同
api_keybodystring导入供应商的 API 密钥
base_urlbodystring覆盖目录解析出的端点;条目的 needs_base_urltrue 时必填

成功时 data{ provider, models_imported }——供应商条目与写入的别名数量。

  • 40001:缺少 catalog_id 或其他请求体校验失败
  • 40003:目标供应商已存在且由 OAuth 托管
  • 40004:条目无法导入(被拒绝、要求 base_url、没有可导入的模型,或其 id 不能用作供应商 id)
  • 40417:不存在该 catalog_id 的目录条目
  • 50004:models.dev 目录不可用

POST /api/v1/providers:import_registry

把一个 models.dev 形态的私有注册表——一个 api.json URL 加可选的 Bearer key——导入为已配置供应商;响应为 HTTP 201 加标准信封。每个列出的供应商都带 source 记录写入,以便定时刷新重新发现。重复导入同一 URL 会移除上游已消失的供应商——URL 是注册表的稳定身份,因此轮换 key 是安全的。全局默认指针遵循与 :import_catalog 相同的规则。

参数位置类型说明
urlbodystring必填。 注册表 api.json 的 URL
api_keybodystring注册表的 Bearer key;省略时复用上一次导入同一 URL 所用的 key

成功时 data{ providers, models_imported }——供应商条目数组与写入的别名总数。

  • 40001:缺少 url 或其他请求体校验失败
  • 40003:某个列出的供应商已存在且由 OAuth 托管
  • 40005:注册表无法获取或解析,或未列出可导入的供应商

GET /api/v1/catalog/providers

浏览 models.dev 目录,由服务端代理,带 10 分钟内存缓存与内置快照兜底。条目保持上游目录顺序。服务无法导入的条目携带 rejected: true 与机器可读的 reject_reasonneeds_base_url: true 的条目在导入时要求提供 base URL。

成功时 data.items{ id, name, wire_type, base_url, guessed, needs_base_url, rejected, reject_reason, env_key, models } 数组:wire_type 是解析出的协议(可空,枚举与供应商 type 相同),base_url 是解析出的端点(可空;needs_base_url 或被拒绝的条目为 null),guessed 标记启发式解析,env_key 是上��约定的 API 密钥环境变量(可空),models{ id, name?, max_context_