接入地址与鉴权
所有调用都发往网关地址 https://api.lyrouter.com,用同一个 LYRouter API Key 鉴权。OpenAI SDK 的 Base URL 填 https://api.lyrouter.com/v1,Anthropic SDK 填根地址 https://api.lyrouter.com;密钥放在 Authorization: Bearer <API Key> 或 x-api-key 请求头中。请求体的 model 写系统模型 ID、@vmodel/<名称> 或 lyrouter/auto,省略时使用工作空间的默认模型。
地址
| 协议 | SDK Base URL | 请求路径 |
|---|---|---|
| Chat Completions | https://api.lyrouter.com/v1 | /v1/chat/completions |
| Responses | https://api.lyrouter.com/v1 | /v1/responses |
| Anthropic Messages | https://api.lyrouter.com | /v1/messages |
- SDK 只填 Base URL:OpenAI SDK 会在
/v1后拼接/chat/completions、/responses、/models等路径,Anthropic SDK 会在根地址后拼接/v1/messages。cURL 和自己发 HTTP 请求时写完整 URL,例如https://api.lyrouter.com/v1/chat/completions。 - 不要重复
/v1:Anthropic SDK 的 Base URL 写成https://api.lyrouter.com/v1时,实际请求/v1/v1/messages,返回 404。OpenAI SDK 的 Base URL 写到/v1/chat/completions也会拼出错误路径。 - 版本前缀:除
/v1外,网关也接受不带版本前缀(如/chat/completions)或其他版本号前缀(如部分智谱客户端使用的/v4/chat/completions)的同名路径,按同一接口处理。新接入的应用请统一使用/v1。 - 控制台地址不是网关地址:浏览器中打开的控制台页面(
/ai_gateway/...)不能用作 Base URL。自部署时,把本页的https://api.lyrouter.com换成你的网关地址。
鉴权
在当前工作空间的 API 密钥 页面创建 API Key,见创建工作空间与 API Key。网关按 API Key 识别工作空间,并在调用上游时换成平台或 BYOK 的服务商凭证;你的 API Key 不会转发给上游。服务商的 API Key 和控制台登录会话都不能用来调用网关。
| 请求头 | 写法 | 适用 |
|---|---|---|
Authorization |
Bearer <API Key>,Bearer 区分大小写,后面有一个空格 |
所有接口;OpenAI SDK 的 api_key / apiKey、Anthropic SDK 的 auth_token / authToken 使用这种写法 |
x-api-key |
直接写 <API Key>,不加前缀 |
所有接口;Anthropic SDK 的 api_key / apiKey 使用这种写法 |
- 只读一个:同时带两个请求头时,网关只读
Authorization。Authorization格式错误时直接返回 401,不会改读x-api-key。 - 只放在请求头:不要把密钥写进 URL 查询参数或请求体。
- 生效时间:新建、停用或修改 Key 后几秒内同步到网关。
API Key 自身的限制
创建或编辑 Key 时可以设置以下限制,触发后网关在调用上游前拒绝请求:
| 设置(API 密钥编辑页) | 触发后的响应 | 说明 |
|---|---|---|
| 「基本信息」中的「到期时间」 | 403 api key expired |
到期后过一段时间改为 401 invalid api key;新建 Key 替换 |
| 「预算限额」中的「费用预算(元)」「Token 预算(百万 Token)」 | 429 rate limit exceeded on apikey <指标>/<窗口> |
「每月」每月 1 日重置,「总计」不重置,见预算、配额与限流 |
| 「访问控制」中的「启用 IP 白名单」 | 403 your IP address is not allowed |
网关按请求到达时的出口 IP 判断;白名单为空或含无效条目时返回 403 ip access control misconfigured |
此外,Key 还受工作空间的安全围栏策略约束(模型策略、配额、客户端访问控制),见安全围栏与语义审计。各报错的处理见401 / 403:鉴权与权限和429:限流与配额。
OpenAI SDK
Chat Completions、Responses、Models、Embeddings 等 OpenAI 兼容接口共用同一个客户端,Base URL 写到 /v1:
curl https://api.lyrouter.com/v1/chat/completions \
-H "Authorization: Bearer $LYROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MODEL_ID",
"messages": [{"role": "user", "content": "用一句话介绍你自己"}]
}'
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["LYROUTER_API_KEY"],
base_url="https://api.lyrouter.com/v1",
)
completion = client.chat.completions.create(
model="MODEL_ID",
messages=[{"role": "user", "content": "用一句话介绍你自己"}],
)
print(completion.choices[0].message.content)
# 同一个客户端调用 Responses
response = client.responses.create(model="MODEL_ID", input="用一句话介绍你自己")
print(response.output_text)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.LYROUTER_API_KEY,
baseURL: "https://api.lyrouter.com/v1",
});
const completion = await client.chat.completions.create({
model: "MODEL_ID",
messages: [{ role: "user", content: "用一句话介绍你自己" }],
});
console.log(completion.choices[0].message.content);
// 同一个客户端调用 Responses
const response = await client.responses.create({ model: "MODEL_ID", input: "用一句话介绍你自己" });
console.log(response.output_text);
MODEL_ID 换成模型广场中复制的模型 ID,LYROUTER_API_KEY 环境变量的设置见完成第一次模型调用。Responses 要求模型和服务它的通道支持 Responses 接口,见Responses。Python 示例中的 client.responses 需要 openai Python SDK 1.66 或更高版本,旧版本会报 AttributeError: 'OpenAI' object has no attribute 'responses'。
Anthropic SDK
Anthropic SDK 的 Base URL 写根地址,不带 /v1。/v1/messages 不要求模型来自 Anthropic,任何对话模型都可以通过它调用:
curl https://api.lyrouter.com/v1/messages \
-H "x-api-key: $LYROUTER_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "MODEL_ID",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "用一句话介绍你自己"}]
}'
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["LYROUTER_API_KEY"],
base_url="https://api.lyrouter.com",
)
message = client.messages.create(
model="MODEL_ID",
max_tokens=1024,
messages=[{"role": "user", "content": "用一句话介绍你自己"}],
)
print(message.content[0].text)
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.LYROUTER_API_KEY,
baseURL: "https://api.lyrouter.com",
});
const message = await client.messages.create({
model: "MODEL_ID",
max_tokens: 1024,
messages: [{ role: "user", content: "用一句话介绍你自己" }],
});
console.log(message.content[0].text);
请求、响应和流式事件的细节见Anthropic Messages。
只改环境变量接入已有代码
两种 SDK 都会读取环境变量。已有代码没有显式传入地址和密钥时,设置下表中的变量即可改走网关:
| SDK | 地址变量 | 密钥变量 |
|---|---|---|
| OpenAI(Python / Node.js) | OPENAI_BASE_URL=https://api.lyrouter.com/v1 |
OPENAI_API_KEY=<LYRouter API Key> |
| Anthropic(Python / Node.js) | ANTHROPIC_BASE_URL=https://api.lyrouter.com |
ANTHROPIC_API_KEY=<LYRouter API Key>(以 x-api-key 发送)或 ANTHROPIC_AUTH_TOKEN=<LYRouter API Key>(以 Authorization: Bearer 发送) |
代码中的模型名也要换成 LYRouter 的模型 ID。Claude Code、Codex 等编程工具的配置见工具兼容性与接入总览。
model 字段
| 写法 | 含义 | 可用接口 |
|---|---|---|
系统模型 ID,如 deepseek/deepseek-v4-flash |
调用这个模型,网关按通道选择与路由策略选择服务商通道 | 所有带 model 的接口 |
@vmodel/<名称>(旧写法 @preset/<名称> 等价) |
调用已启用的虚拟模型,按其主模型、备用模型和参数执行 | Chat Completions、Anthropic Messages、Responses;模型列表全部是向量或重排模型时也可用于创建向量和文档重排 |
lyrouter/auto |
按任务难度在已开通的模型中挑选,见Auto 智能路由 | Chat Completions、Anthropic Messages、Responses |
省略,或写成 ""、null |
使用工作空间在 智能路由 中设置的默认模型 | 带 model 的接口 |
- 模型 ID 区分大小写,必须与模型广场或
GET /v1/models返回的id逐字一致,命名规则见模型命名与查询。 - 省略
model且工作空间没有默认模型时,返回 400you must provide a model parameter(error.code为missing_model);model不是字符串时返回 400invalid type for 'model': expected a string(invalid_model)。 - 虚拟模型和
lyrouter/auto用在图像、视频、语音接口上时,返回 403Model is not available in the model plaza,这些接口请写具体的模型 ID。
全部端点
所有端点使用同一个 Base URL 和同一套鉴权:
| 方法 | 路径 | 用途 | 文档 |
|---|---|---|---|
| POST | /v1/chat/completions |
对话生成(OpenAI Chat Completions 格式) | Chat Completions |
| POST | /v1/responses |
对话生成(OpenAI Responses 格式) | Responses |
| POST | /v1/messages |
对话生成(Anthropic Messages 格式) | Anthropic Messages |
| GET | /v1/models |
列出这个 API Key 可调用的模型 | 列出模型 |
| POST | /v1/embeddings、/v1/rerank |
文本向量、重排序 | 创建向量、文档重排 |
| POST | /v1/images/generations、/v1/images/edits |
图像生成、编辑 | 多模态能力 |
| POST | /v1/videos、/v1/videos/regenerations、/v1/videos/context |
提交视频任务 | 异步任务 |
| GET、DELETE | /v1/videos/{id}、/v1/videos/{id}/content |
查询任务、下载产物、取消任务 | 异步任务 |
全部接口按能力分组的说明见API 文档,网关自定义的请求头和响应头见网关扩展请求头与响应头。
地址与鉴权类错误
OpenAI 兼容接口的错误体为 {"error": {"message": "...", "type": "...", "code": "..."}},code 只在部分错误上出现。/v1/messages 上的错误会转换为 Anthropic 格式 {"type": "error", "error": {"type": "authentication_error", "message": "..."}},message 原文不变,没有 code。
| 状态码 | 报错原文 | 原因与处理 |
|---|---|---|
| 404 | {"error_msg":"404 Route Not Found"} |
路径或方法不存在:Base URL 重复了 /v1、路径末尾多了 /、拼错端点,或用 GET 调用了只接受 POST 的接口。按上文「地址」核对完整 URL。这个响应不是标准错误体,也不会转换为 Anthropic 格式 |
| 401 | missing credentials |
没有带 API Key,或 Authorization 写成了 Bearer (带空格)而后面没有密钥。加上 Authorization: Bearer <API Key> 或 x-api-key |
| 401 | invalid authorization scheme, expected 'Bearer' |
Authorization 不是 Bearer <API Key> 格式,例如写成小写的 bearer、只写密钥,或只写 Bearer 而后面没有空格 |
| 401 | invalid api key |
Key 复制不完整或带了空白字符,或已删除、停用、过期;新建的 Key 需要几秒同步 |
| 401 | api key verification unavailable |
平台暂时无法校验密钥,稍后重试 |
| 400 | unsupported content-type: application/x-www-form-urlencoded, only application/json is supported |
JSON 请求的 Content-Type 不是 application/json。cURL 用 -d 发送却没写 -H "Content-Type: application/json" 时就是这种情况。OpenAI 兼容接口上这个响应是一行纯文本,不是 JSON,但响应头目前仍是 Content-Type: application/json,解析前先判断正文是否为 JSON |
| 402 | subscription expired; renew to continue |
账户订阅已到期,续费后恢复,见模型不可用 |
| 403 | api key expired、your IP address is not allowed、ip access control misconfigured |
见上文「API Key 自身的限制」 |
| 403 | Model is not available in the model plaza |
工作空间没有开通该模型,或在图像、视频、语音接口上用了虚拟模型或 lyrouter/auto,见模型不可用 |
响应中不包含请求 ID。提交问题时,记录调用时间、端点、模型、API Key 名称和报错原文;能在 日志分析 中找到这次请求时,再附上日志详情顶部的 Request ID。401 请求无法归属到 Key,不会出现在日志中。全部错误码见错误码与请求标识。
常见问题
OpenAI SDK 的 Base URL 少写了 /v1,为什么也能调通?
答: 网关同时接受不带版本前缀的路径,https://api.lyrouter.com/chat/completions 与 /v1/chat/completions 等效。其他工具和 SDK 未必这样拼接路径,请统一写成 https://api.lyrouter.com/v1。
同一个 API Key 能同时给 OpenAI 和 Anthropic 客户端使用吗?
答: 可以。Key 属于工作空间,与协议无关;两种客户端调用同一个模型 ID 时,费用、配额和日志都记在这个 Key 下。日志的「API 路径」列可以区分请求来自哪个接口。
请求被路由到了哪个服务商,从响应里能看出来吗?
答: 响应中没有服务商信息,model 字段也是上游返回的值。在 日志分析 中打开这次请求,「模型(实际)」和「服务商」显示最终命中的模型和通道,见查看实际路由。