APIM 中转站接入文档
服务地址(Base URL):https://apim.eu.cc/v1
控制台 / 注册地址:https://apim.eu.cc(域名打不开时用备用入口http://154.201.81.122)
协议:OpenAI 兼容(另有 Anthropic、Gemini 协议入口,见协议支持矩阵)
API Key:在控制台自行注册账号后创建,格式sk-...
充值方式:注册后加 QQ 群 917580534,把注册账号发给群主充值(本站无自助在线支付)
本文档中的端点、鉴权方式与报错形态均为 2026-09-25 对https://apim.eu.cc实测结果。
各客户端界面的菜单名称可能随版本变化,认准「Base URL / 接口地址」「API Key / 密钥」「模型 ID」这三类字段即可。
目录
- 1. 三分钟接入速查表
- 2. 协议支持矩阵
- 3. 第一步:注册、充值、创建 API Key
- 4. 第二步:确认你这个 Key 能用哪些模型
- 5. 第三步:连通性验证
- 6. 各客户端接入配置
- 7. 错误码与排障手册
- 8. 兼容性与限制说明
- 9. 安全与合规
- 附录 A:端点实测清单
- 附录 B:配置模板合集
1. 三分钟接入速查表
| 客户端 | 需要填的字段 | 填什么 |
|---|---|---|
| 绝大多数工具(OpenAI 兼容) | Base URL / API Base | https://apim.eu.cc/v1 |
| API Key | sk- 开头的密钥 | |
| Model / 模型 ID | 用 GET /v1/models 查出来的 id,如 gpt-5.6-luna | |
| Claude Code | ANTHROPIC_BASE_URL | https://apim.eu.cc(注意:不带 /v1,详见 6.3) |
ANTHROPIC_AUTH_TOKEN | sk- 开头的密钥 | |
| Codex CLI | base_url(config.toml) | https://apim.eu.cc/v1 |
| Cursor | Override OpenAI Base URL | https://apim.eu.cc/v1 |
| 开通账号 | 注册 + 充值 | 自行注册 → 加 QQ 群 917580534 → 发账号给群主充值(见 第 3 章) |
四条最容易踩的坑(后面每个章节都在重复这四条):
- Base URL 粒度因客户端而异:多数填到
/v1为止,不要把https://apim.eu.cc/v1/chat/completions整条贴进去;而 Claude Code 走的是 Anthropic 协议,只能填到域名。填错粒度必然 404。 - 模型可用范围由 Key 所属「分组」决定,不是全站模型都能调。所以第一次接入务必用
GET /v1/models确认自己有哪些模型。 /v1/messages(Anthropic 协议)需要分组单独放开,默认分组会返回 403。- 充值由群主人工完成,控制台没有自助在线支付入口。没充值时接口会报额度/权限类错误,别当成代码问题排查。
2. 协议支持矩阵
同一个域名下挂了三套协议入口,能不能用取决于你 Key 所属分组的平台类型和权限:
| 协议 | 端点 | 方法 | 实测状态 | 说明 |
|---|---|---|---|---|
| OpenAI | /v1/chat/completions | POST | ✅ 可用 | 主用接口,所有客户端都走这条 |
| OpenAI | /v1/models | GET | ✅ 可用 | 只返回当前 Key 分组可用的模型 |
| OpenAI | /v1/responses | POST | ⚠️ 视分组 | 需分组放开,Codex 类工具可尝试 |
| OpenAI | /v1/embeddings | POST | ⚠️ 视分组 | 路由存在,当前分组上游返回 502 |
| OpenAI | /v1/images/generations | POST | ⚠️ 视分组 | 路由存在,是否可用取决于分组 |
| Anthropic | /v1/messages | POST | ⛔ 需权限 | 当前分组返回 403 This group does not allow /v1/messages dispatch |
| Anthropic | /v1/messages/count_tokens | POST | ⛔ 需权限 | 同上 |
| Gemini | /v1beta/models/{model}:generateContent | POST | ⛔ 需权限 | 非 gemini 平台分组返回 400 API key group platform is not gemini |
| — | /v1/completions | POST | ❌ 不支持 | 旧版补全接口,已移除 |
| — | /v1/audio/* | POST | ❌ 不支持 | 语音接口未开放 |
鉴权方式
三种任选其一,都已实测通过:
Authorization: Bearer sk-xxxxxxxx # 标准 OpenAI 用法,推荐
x-api-key: sk-xxxxxxxx # Anthropic 风格
x-goog-api-key: sk-xxxxxxxx # Gemini 风格未带认证时返回:
{"code":"API_KEY_REQUIRED","message":"API key is required in Authorization header (Bearer scheme), x-api-key header, or x-goog-api-key header"}3. 第一步:注册、充值、创建 API Key
3.1 入口
| 入口 | 地址 | 说明 |
|---|---|---|
| 主入口(推荐) | https://apim.eu.cc | https 加密,API 调用请用这个 |
| 备用入口 | http://154.201.81.122 | 域名被墙/解析失败时用,同一套服务,实测可正常调用 API |
⚠️ 备用入口是http明文,没有 https。用它访问控制台应急没问题,但不要把 API 调用指向它——Authorization: Bearer sk-...会在链路上明文传输,密钥有被中间人截获的风险。API Base URL 始终用https://apim.eu.cc/v1。
3.2 注册账号(自助)
打开入口后会看到站点弹框提示,内容就是下面这份开通说明:
iphttp://154.201.81.122或者https://apim.eu.cc
进入之后自己注册 → 注册好之后进群联系群主发注册账号 → 群主进行充值
模型广场都有对应的模型,按次收费不限 token
QQ 群号:917580534
充值的钱全站的模型都是可以查看的
按提示操作即可:进入站点 → 自行注册账号 → 用账号登录控制台。
3.3 充值:加 QQ 群联系群主
本站没有自助在线支付,余额由群主人工充值:
- 加入 QQ 群 917580534(群名「起个破名想半天 2 群」)。
- 把你的注册账号发给群主,说明要充值的金额。
- 群主充值到账后,余额全站通用,模型广场里所有分组的模型都能查看和调用。
充值前请先确认自己要用哪个分组:不同分组的按次单价不同($0.003 ~ $0.10 / 次,见第 4 章价格表),选错分组会多花钱。
3.4 创建 API Key
- 登录控制台,进入 API 密钥 / Keys 页面 → 新建密钥。
- 创建时如让你选择分组(Group),这一步很关键:分组决定了这个 Key 能用哪些模型、以及允许哪些协议(例如
/v1/messages是否放行)。 - 建议先用默认/标准分组试通,再按需要找群主为特殊协议开权限。
- 复制生成的
sk-密钥。密钥只在创建时完整展示一次,请立即保存到密码管理器。 - 在用量 / 订阅页面确认余额与调用状态——模型是否可用、是否会被限流,都取决于此。
控制台常用页面直达:
| 页面 | 地址 |
|---|---|
| API 密钥管理(新建 / 删除密钥) | https://apim.eu.cc/keys |
| 模型广场(全站模型、渠道分组与计费) | https://apim.eu.cc/model-plaza |
| 订阅 / 套餐 | https://apim.eu.cc/subscriptions |
| 用量明细 | https://apim.eu.cc/key-usage |
⚠️ 不要把密钥写进会提交到 Git 的文件。若怀疑泄露,回到控制台立即删除并重建。
4. 第二步:确认你这个 Key 能用哪些模型
权威做法:直接问接口。 GET /v1/models 返回的就是当前 Key 实际可调用的模型列表(不是全站列表):
curl https://apim.eu.cc/v1/models \
-H "Authorization: Bearer sk-xxxxxxxx"实测某个标准分组的 Key 只返回了 2 个模型(真实响应,已截断):
{
"data": [
{
"id": "gpt-5.6-luna",
"object": "model",
"created": 1780876800,
"owned_by": "openai",
"type": "model",
"display_name": "GPT-5.6 Luna"
},
{ "id": "gpt-6-luna", "object": "model", "display_name": "GPT-6 Luna" }
]
}到处要填的「模型 ID」就是这个 id 字段(gpt-5.6-luna),不是 display_name。
模型广场(https://apim.eu.cc → 模型广场)展示的是全站可售模型,分 11 个渠道分组,全部为 OpenAI 平台 + 按次计费(per_request):按次收费、不限 token,单次请求里输入输出多少 token 都不影响这一笔的价格。下表为 2026-09-25 快照,按单价升序排列。
按次单价(全站分组)
| 分组 | 模型 ID | 按次单价 | 官方参考价(输入 / 输出,$/1M) |
|---|---|---|---|
| 代理专用 glm-5.3-flash | glm-5.3-flash | $0.003 / 次 | $0.15 / $0.50 |
| 代理专用线路 DS(纯血 flash、pro)分流计费 | deepseek-v4-pro-0813、deepseek-v4-pro、deepseek-v4-flash、deepseek-v4-flash-0731、deepseek-v4-flash-vision-exp | $0.004 / 次 | $0.15 / $0.60 |
| 代理专用线路 DS(纯血 flash、pro)计费 | 同上 5 个 | $0.004 / 次 | $0.15 / $0.60 |
| 代理专用 ds exp 计费 | 同上 5 个 | $0.004 / 次 | $0.15 / $0.60 |
| 代理专用线路 glm 计费 | glm-5.2、glm5.2 | $0.005 / 次 | $1.179 / $4.127 |
| 代理专用 deepseek-v4.1 | deepseek-v4.1-flash、deepseek-v4.1-flash-expires-on-0910、deepseek-flash | $0.006 / 次 | $0.15 / $0.60 |
| 代理专用 dp 专用官方渠道 | deepseek-v4-pro、deepseek-v4-flash、deepseek-v4-flash-0731 | $0.008 / 次 | $0.15 / $0.60 |
| 代理专用 gpt(纯血) | gpt-5.6-luna | $0.008 / 次 | ≤272K $0.20/$1.20,>272K $0.40/$1.80 |
| 代理专用 gpt(纯血) | gpt-6-luna | $0.008 / 次 | ≤272K $0.10/$0.50,>272K $0.20/$0.75 |
| 代理专用 kimi-k3 | kimi-k3 | $0.01 / 次 | $2.948 / $14.740 |
| 代理专用 glm5.3x | glm-5.3-flashx | $0.015 / 次 | $0.15 / $0.50 |
| 代理专用 GLM5.3(纯血) | glm-5.3 | $0.016 / 次 | $1.40 / $4.40 |
| 代理专用 gpt(纯血) | gpt-5.6-terra | $0.03 / 次 | ≤272K $2.00/$12.00,>272K $4.00/$18.00 |
| 代理专用 gpt(纯血) | gpt-5.6-sol | $0.10 / 次 | ≤272K $5.00/$30.00,>272K $10.00/$45.00 |
怎么读这张表:
- 实付就是「按次单价」——折扣倍率全站为
1x,「官方参考价」只是上游官方标价,用来对比,不参与你的扣费。 - 最便宜:
glm-5.3-flash$0.003/次;最贵:gpt-5.6-sol$0.10/次。同一个模型可能出现在多个分组里,单价不同(例如deepseek-v4-pro在 $0.004 和 $0.008 两个分组里),创建 Key 时选便宜的那组。 - 按次计费意味着每次请求都扣一次钱,与你发多少字无关:上下文不长的小任务反而单价偏高,长文档/长代码场景才划算。
- 缓存读写、图片输入输出等价格模型广场里也有列出,但同样不参与按次扣费。
上表会随站点调整而变化,以 /v1/models(你 Key 实际可用模型)与模型广场(全站价格)为准。
5. 第三步:连通性验证
建议按顺序跑通这四条,再进客户端配置。
5.1 列表(确认鉴权 OK)
curl https://apim.eu.cc/v1/models -H "Authorization: Bearer sk-xxxxxxxx"5.2 对话补全(确认模型可用)
curl https://apim.eu.cc/v1/chat/completions \
-H "Authorization: Bearer sk-xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-luna",
"messages": [{"role": "user", "content": "只回复两个字:收到"}],
"max_tokens": 32
}'5.3 流式(确认 SSE 正常)
curl -N https://apim.eu.cc/v1/chat/completions \
-H "Authorization: Bearer sk-xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-luna",
"messages": [{"role": "user", "content": "数到五"}],
"stream": true
}'正常会持续输出 data: {...} 行,最后以 data: [DONE] 结束。
5.4 Python / Node SDK
# pip install openai
from openai import OpenAI
client = OpenAI(
api_key="sk-xxxxxxxx",
base_url="https://apim.eu.cc/v1",
)
resp = client.chat.completions.create(
model="gpt-5.6-luna",
messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)
# 流式
for chunk in client.chat.completions.create(
model="gpt-5.6-luna",
messages=[{"role": "user", "content": "数到五"}],
stream=True,
):
print(chunk.choices[0].delta.content or "", end="", flush=True)// npm install openai
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "sk-xxxxxxxx",
baseURL: "https://apim.eu.cc/v1",
});
const resp = await client.chat.completions.create({
model: "gpt-5.6-luna",
messages: [{ role: "user", content: "你好" }],
});
console.log(resp.choices[0].message.content);5.5 验证通过的标准
GET /v1/models返回 200 且列表非空 → 鉴权与分组正常。- 对话接口返回 200 且带
choices[0].message.content→ 可以进客户端了。 - 若返回 403 / 404 / 429 / 502 / 503,对照 第 7 章 定位,不要盲目改配置——这几类错误多数不是客户端配置问题。
6. 各客户端接入配置
所有客户端的「密钥」栏都填sk-xxxxxxxx;下文只强调各自的 Base URL 粒度与模型填写方式。
模型 ID 请填/v1/models返回的原始 id(如gpt-5.6-luna),不要加openai/之类前缀,除非该客户端明确要求。
6.1 ZCode
ZCode 支持 OpenAI Chat Completions 协议的自定义供应商,两种配置方式任选。
方式 A:界面配置(推荐)
设置 → 模型 / 供应商 → 添加自定义供应商:
| 字段 | 填写值 |
|---|---|
| 供应商名称 | 任意,例如 apim |
| 协议 / API 类型 | OpenAI Chat Completions(配置项名 openai-chat-completions) |
| Base URL / 接口地址 | https://apim.eu.cc/v1 |
| API Key | sk-xxxxxxxx |
| 模型 ID | gpt-5.6-luna、gpt-6-luna(按 /v1/models 实测结果逐个添加) |
方式 B:配置文件
配置文件位于 ~/.zcode/v2/provider_config.json。在 providerRules 数组里追加一条(providerId 用任意 UUID,apiKey 换成你自己的):
{
"providerId": "00000000-0000-0000-0000-000000000001",
"providerName": "apim",
"config": {
"group": "standard-personal",
"access": {
"type": "api-key",
"apiKey": "sk-xxxxxxxx"
},
"api": {
"type": "openai-chat-completions",
"baseUrl": "https://apim.eu.cc/v1"
},
"personalModelIds": [
"gpt-5.6-luna",
"gpt-6-luna"
],
"modelOrder": [
"gpt-5.6-luna",
"gpt-6-luna"
]
}
}该文件由 ZCode 管理,手改后如被界面覆盖,请以界面配置为准。
6.2 DSH Desktop
DSH Desktop(io.dsh.desktop)在 设置 → Models 页面管理供应商,支持手写声明自定义路由。
方式 A:界面配置(推荐)
- 打开 设置 → Models。
- 点 「新增」→「添加自定义提供方」(该入口用于声明 pi-ai 目录未内置的路由)。
- 按提示填写:
| 字段 | 填写值 |
|---|---|
| Provider ID | 小写连字符标识,例如 apim |
| 接口地址(Base URL) | https://apim.eu.cc/v1 |
| API 协议 | openai-completions |
| 模型 | 至少填一个,例如 gpt-5.6-luna |
| API 密钥 | sk-xxxxxxxx |
- 创建卡片里的 「获取可用模型」 可以直接查询该端点的模型候选,选中后点 「添加所选」 写入。
- 密钥是只写存储的:写入后界面只显示状态点(绿色=已配置),不再回显明文。
方式 B:配置文件
- 供应商与模型:
~/Library/Application Support/dsh-desktop/harness/settings.yaml - 密钥:同目录
.credentials.yaml(独立存储,配置文件里只保留引用名,不出现明文密钥)
llm-pi-ai:
providers:
apim:
displayName: APIM
apiKeyEnv: APIM_API_KEY # 密钥引用名,明文存在 .credentials.yaml
api: openai-completions
baseURL: https://apim.eu.cc/v1
models:
- id: gpt-5.6-luna
- id: gpt-6-luna需要某个模型支持图片输入时,在该模型下加 input: [ text, image ]。
api、baseURL、非空models三者对自定义路由是必填;缺一个会在保存时被拒绝并点名具体路由与模型。
6.3 Claude Code
Claude Code 走的是 Anthropic 协议(/v1/messages),与本中转站的 OpenAI 协议入口不同,因此这里有前置条件。
前置检查:你的 Key 所属分组必须允许 /v1/messages。实测标准分组会返回:
403 {"error":{"message":"This group does not allow /v1/messages dispatch","type":"permission_error"}}出现这个 403 就说明不能直连,请直接看下面的「方案 B」。
方案 A:分组已放开 /v1/messages 时直连
export ANTHROPIC_BASE_URL="https://apim.eu.cc" # 只到域名,不要带 /v1
export ANTHROPIC_AUTH_TOKEN="sk-xxxxxxxx"
export ANTHROPIC_DEFAULT_SONNET_MODEL="gpt-5.6-luna"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="gpt-6-luna"
export ANTHROPIC_MODEL="gpt-5.6-luna"
claude也可以写进 ~/.claude/settings.json,避免每次 export:
{
"env": {
"ANTHROPIC_BASE_URL": "https://apim.eu.cc",
"ANTHROPIC_AUTH_TOKEN": "sk-xxxxxxxx",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "gpt-5.6-luna",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "gpt-6-luna",
"ANTHROPIC_MODEL": "gpt-5.6-luna"
}
}Base URL 粒度:Claude Code 内部会自己拼接/v1/messages,所以这里填https://apim.eu.cc;填成https://apim.eu.cc/v1会请求到/v1/v1/messages而 404。ANTHROPIC_AUTH_TOKEN会以Authorization: Bearer <值>发出,正好匹配本中转站的鉴权方式。ANTHROPIC_API_KEY走的是x-api-key头,用它会覆盖你的 Pro/Max 订阅登录,两者只用一个。
方案 B:分组未放开 /v1/messages 时,用协议转换层
思路是把 Anthropic 协议转成中转站支持的 OpenAI 协议,常见工具是 claude-code-router:
{
"Providers": [
{
"name": "apim",
"api_base_url": "https://apim.eu.cc/v1/chat/completions",
"api_key": "sk-xxxxxxxx",
"models": ["gpt-5.6-luna", "gpt-6-luna"]
}
],
"Router": {
"default": "apim,gpt-5.6-luna",
"background": "apim,gpt-6-luna",
"think": "apim,gpt-5.6-luna",
"longContext": "apim,gpt-5.6-luna"
}
}(写入 ~/.claude-code-router/config.json,字段名以你所装版本为准。)同理也可用 LiteLLM 之类的网关做 Anthropic ↔ OpenAI 转换。
6.4 Codex CLI
配置文件 ~/.codex/config.toml:
model = "gpt-5.6-luna"
model_provider = "apim"
[model_providers.apim]
name = "APIM"
base_url = "https://apim.eu.cc/v1"
env_key = "APIM_API_KEY"
wire_api = "chat"export APIM_API_KEY="sk-xxxxxxxx"
codexwire_api = "chat"走/v1/chat/completions,最稳。- 本站
/v1/responses路由也存在,如果你的分组放开了,可改wire_api = "responses"试;报错就改回"chat"。 env_key只是环境变量名,明文密钥不要写进config.toml。
6.5 Cursor
Settings → Models → API Keys,填入 OpenAI API Key:sk-xxxxxxxx。- 打开 Override OpenAI Base URL,填
https://apim.eu.cc/v1(填到/v1为止,Cursor 会自己拼/chat/completions)。 - 点 Verify 验证;如失败,对照第 7 章看返回码。
- 在 Models 列表里 Add model,把
/v1/models查到的 id 逐个加入(如gpt-5.6-luna),并把不用的内置模型关闭,避免请求被路由到你没额度的地方。
6.6 Cline / Roo Code / Kilo Code(VS Code 系)
三者配置项基本一致:
| 字段 | 填写值 |
|---|---|
| API Provider | OpenAI Compatible |
| Base URL | https://apim.eu.cc/v1 |
| API Key | sk-xxxxxxxx |
| Model ID | gpt-5.6-luna |
展开 Model Configuration 建议同时设置:Max Output Tokens(如 32768)、Context Window(如 262144)、是否支持图片。Context Window 留空或设得过小会导致长任务提前截断。
6.7 Continue
~/.continue/config.yaml:
models:
- name: APIM gpt-5.6-luna
provider: openai
model: gpt-5.6-luna
apiBase: https://apim.eu.cc/v1
apiKey: sk-xxxxxxxx
contextLength: 262144(旧版 config.json 对应字段为 models[].provider: "openai"、apiBase、apiKey、model。)
6.8 Aider
export OPENAI_API_BASE="https://apim.eu.cc/v1"
export OPENAI_API_KEY="sk-xxxxxxxx"
aider --model openai/gpt-5.6-luna注意 --model 里的 openai/ 只是 Aider 的 provider 前缀,后面的模型名仍用中转站的真实 id。
6.9 OpenCode
~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"apim": {
"npm": "@ai-sdk/openai-compatible",
"name": "APIM",
"options": {
"baseURL": "https://apim.eu.cc/v1",
"apiKey": "sk-xxxxxxxx"
},
"models": {
"gpt-5.6-luna": {},
"gpt-6-luna": {}
}
}
}
}6.10 其他 IDE / 编辑器的支持情况
| 工具 | 是否支持自填中转站 | 说明 |
|---|---|---|
| JetBrains AI Assistant | 部分版本支持 | 在 AI Assistant 设置里选 OpenAI 兼容 / 自定义模型端点,填 https://apim.eu.cc/v1;不同 IDE 版本入口差异较大 |
| VS Code Copilot(BYOK) | 受限 | 只允许特定官方供应商,通常无法指向第三方中转站 |
| Windsurf | 一般不支持 | 不支持自定义 Base URL,只能用它自带的模型 |
| Kiro | 不支持 | 基于 AWS Bedrock 体系,无自定义端点 |
| Trae / Qoder | 视版本 | 若设置中存在「自定义模型 / OpenAI 兼容」入口即可用;没有就只能等官方开放 |
| Zed | 支持 | settings.json 里配置 OpenAI 兼容 provider,api_url 填 https://apim.eu.cc/v1 |
| Neovim / Emacs 系插件 | 多数支持 | 认准能填 base URL 的 OpenAI 兼容插件即可 |
这一类工具的自定义端点支持变化很快,判断标准很简单:设置里能填 Base URL 就能接,能填 https://apim.eu.cc/v1 就对了。
6.11 聊天客户端
| 客户端 | 配置方式 |
|---|---|
| Cherry Studio | 设置 → 模型服务 → 添加提供商 → 类型选 OpenAI → API 地址 https://apim.eu.cc/v1 + 密钥 → 手动添加模型 |
| ChatBox | 设置 → 模型 → API 类型 OpenAI API → API 域名 https://apim.eu.cc(部分版本需要含 /v1,两种都试) |
| LobeChat | 设置 → 语言模型 → OpenAI → 接口代理地址 https://apim.eu.cc/v1 |
| Open WebUI | 设置 → 连接 → OpenAI API:URL https://apim.eu.cc/v1 + 密钥;或环境变量 OPENAI_API_BASE_URL |
| NextChat | 设置 → 自定义接口 https://apim.eu.cc(NextChat 会拼 /v1/chat/completions,按提示填) |
6.12 应用平台与工作流
| 平台 | 说明 |
|---|---|
| Dify | 模型供应商 → OpenAI-API-compatible → API Base URL 填 https://apim.eu.cc/v1 + 密钥 + 模型名 |
| n8n / Coze / FastGPT | 走 OpenAI 兼容节点,Base URL 同上 |
| One API / New API(自建网关) | 渠道类型选 OpenAI,代理地址 https://apim.eu.cc,模型名填真实 id;注意「模型映射」不要引入多余前缀 |
| LiteLLM | model_list[].litellm_params.api_base = "https://apim.eu.cc/v1",model 用 openai/gpt-5.6-luna |
6.13 自研代码接入
任何兼容 OpenAI 的 SDK 都只需改两个参数:
base_url = "https://apim.eu.cc/v1"
api_key = "sk-xxxxxxxx"环境变量约定(多数框架/工具会自动读取):
export OPENAI_BASE_URL="https://apim.eu.cc/v1"
export OPENAI_API_BASE="https://apim.eu.cc/v1" # 部分老框架用这个名字
export OPENAI_API_KEY="sk-xxxxxxxx"注意:不要把密钥硬编码进前端代码或提交到仓库;服务端调用建议从环境变量/密钥管理服务注入。
7. 错误码与排障手册
7.1 错误对照表
| HTTP | 响应体特征 | 含义 | 该怎么办 |
|---|---|---|---|
| 401 | {"code":"API_KEY_REQUIRED",...} | 没带密钥 | 检查 Authorization: Bearer sk-... 是否发送成功 |
| 401 | 密钥无效 | Key 错误/被删 | 控制台重新创建并替换 |
| 403 | "This group does not allow /v1/messages dispatch" | 分组未放行 Anthropic 协议 | 换 OpenAI 协议接入,或用协议转换层(见 6.3 方案 B) |
| 404 | {"code":"model_not_found","message":"Model \"xxx\" is not available for this group"} | 该模型不在你分组内 | 用 GET /v1/models 查自己的可用模型,改成列表里的 id |
| 404 | 404 page not found | 路径写错(多数是 Base URL 粒度错) | 见 7.2 |
| 400 | {"error":{"message":"API key group platform is not gemini",...}} | 分组平台与协议不匹配 | 用 OpenAI 协议的端点,别走 /v1beta |
| 429 | {"error":{"message":"Upstream rate limit exceeded, please retry later","type":"rate_limit_error"}} | 上游限流 | 退避重试;持续出现说明该模型渠道拥挤,换模型或换时段 |
| 502 | {"error":{"message":"Upstream service temporarily unavailable","type":"upstream_error"}} | 上游通道故障 | 等几分钟重试;与你的配置无关 |
| 503 | {"error":{"message":"Service temporarily unavailable","type":"api_error"}} | 中转站/上游临时不可用 | 同上,重试;长时间不恢复联系站长 |
| 504 / 超时 | 无响应体 | 长上下文或上游卡住 | 降低 max_tokens / 缩短上下文后重试 |
重要:429 / 502 / 503是上游通道层面的问题,不是你客户端配置错了。遇到这三类先重试、换模型、错峰,不要反复改配置。
每次响应都带X-Request-Id/X-Client-Request-Id头,向站长反馈时附上这个 id 最有帮助。
7.2 「404 page not found」自查清单
这是接入阶段最高频的错误,几乎全是 URL 拼接问题:
| 客户端类型 | 正确填法 | 错误填法 |
|---|---|---|
| 多数 OpenAI 兼容工具 | https://apim.eu.cc/v1 | https://apim.eu.cc(少 /v1)、.../v1/chat/completions(多路径) |
| Claude Code | https://apim.eu.cc | https://apim.eu.cc/v1(会变成 /v1/v1/messages) |
| 少数工具(NextChat 等) | https://apim.eu.cc | 按工具提示,两种都可试一次 |
规律:客户端自己拼 /chat/completions 的,你填到 /v1;客户端自己拼 /v1/messages 的,你只填域名。
7.3 常见症状速查
| 症状 | 大概率原因 |
|---|---|
| 列表能查,一对话就失败 | 模型名不在你分组内(404 model_not_found)或上游限流(429/502) |
| 客户端「测试连接」通过,但聊天报错 | 测试通常只调 /v1/models,聊天才真正扣模型权限 |
| 流式输出中断 / 卡住 | 上游抖动或中间层缓冲;先试非流式确认接口本身通 |
| 上下文一长就报错 | 客户端 Context Window 设置过大,或模型实际容量更小;调小重试 |
| 工具调用(tools)失效 | 该模型或渠道不支持 function calling,换模型验证 |
| 突然全部 401 | Key 被删/额度耗尽,去控制台看用量与订阅状态 |
| 刚注册就调不通、模型列表为空 | 还没充值。充值需加 QQ 群 917580534 找群主人工处理,控制台没有自助支付 |
8. 兼容性与限制说明
- 计费方式:全站按次计费(
per_request)、不限 token——单次请求扣一次钱,输入输出多少 token 都不额外计费,单价区间 $0.003 ~ $0.10 / 次(明细见第 4 章价格表)。含义是:短请求单价并不低,长上下文才划算;做成循环批量小请求时成本会放大得很快,设计调用策略时请把"每次请求都计费"算进去。另外重试同样计费,客户端自动重试要设上限。 - 不支持的端点:
/v1/completions(旧版补全)、/v1/audio/*(语音)在此部署上不存在,走这些路径会 404。依赖旧接口的老工具需要换新版客户端。 max_tokens与max_completion_tokens:部分新一代模型只接受max_completion_tokens。若报参数错误,换成该字段重试;不确定时干脆不传,让服务端用默认值。- 模型命名:本站模型 id 直接是
gpt-5.6-luna、kimi-k3这类裸名,不使用openai/、anthropic/前缀(Aider、LiteLLM 等要求前缀的工具除外,那是客户端自己的语法)。 - 协议能力取决于分组:
/v1/messages、/v1/responses、/v1beta/*是否可用由分组平台与权限决定,同一站点不同 Key 能力可能完全不同——排障时先确认自己分组的权限,再怀疑配置。 - 网络:站点走 Cloudflare + Caddy。若本机有代理,确保
apim.eu.cc走直连或稳定线路,避免流式被中间层截断。
9. 安全与合规
- 密钥保护:
sk-密钥等价于你的额度。不要贴在群聊/截图/公开仓库里;用环境变量或密钥管理注入,别硬编码。 - 只走 https 调 API:
https://apim.eu.cc/v1是加密入口;备用 IP 入口http://154.201.81.122只有明文 http,用它传Bearer sk-...等于把密钥写在明信片上。IP 仅用于域名不可达时应急访问控制台。 - 泄露处置:一旦泄露,立刻在控制台删除该 Key 并重建(重建成本很低,泄露代价很高)。
- 充值走人工渠道需核实身份:充值是加 QQ 群联系群主人工完成的,只有群主本人会处理充值;任何以"客服""代理""低价代充"名义私聊你索要账号密码或密钥的都不要理会——充值只需要你的注册账号,永远不需要 API Key 或密码。
- 一 Key 一用途:给不同工具/项目分配不同 Key,便于按用量排查与单独吊销。
- 共享限制:站点使用政策明确禁止倒卖、出租、共享账号牟利及自动化批量刷量等行为,请勿触发风控。
- 用途边界:中转站定位为学习与研究用途,输出内容不应直接用于医疗、法律、投资等高风险决策场景。
- 条款优先:本文件是接入技术说明,不替代站点《服务条款》与《使用政策》;两者冲突时以站点条款为准。
附录 A:端点实测清单
测试时间:2026-09-25 | 测试基址:https://apim.eu.cc
| 端点 | 方法 | 无密钥 | 带有效密钥 | 结论 |
|---|---|---|---|---|
/v1/models | GET | 401 | 200 | 可用,返回本分组模型 |
/v1/chat/completions | POST | 401 | 依赖上游 | 路由可用 |
/v1/responses | POST | 401 | 路由存在 | 需分组放开 |
/v1/embeddings | POST | 401 | 502 | 路由存在,当前分组上游拒绝 |
/v1/images/generations | POST | 401 | 路由存在 | 视分组 |
/v1/messages | POST | 401 | 403 | 需分组放行 |
/v1/messages/count_tokens | POST | 401 | 403 | 需分组放行 |
/v1beta/models/{model}:generateContent | POST | 401 | 400 | 需 gemini 平台分组 |
/v1beta/models | GET | 401 | 503 | 当前不可用(需 gemini 平台分组) |
/v1/completions | POST | 404 | — | 不支持 |
/v1/audio/transcriptions | POST | 404 | — | 不支持 |
/v1/definitely-not-real | GET | 404 | — | 对照组,确认 401 代表「路由存在」 |
响应头中带 X-Request-Id、X-Client-Request-Id,反馈问题请附上。
备用入口同样可用(http://154.201.81.122,仅 http):控制台页面返回 200,GET /v1/models 带密钥返回 200 且模型列表与域名入口一致,说明是同一套服务的镜像入口——但只应急用,原因见第 9 章。
附录 B:配置模板合集
环境变量(通用,一次性导出)
export APIM_BASE_URL="https://apim.eu.cc/v1"
export APIM_API_KEY="sk-xxxxxxxx"
# OpenAI 系 SDK
export OPENAI_BASE_URL="$APIM_BASE_URL"
export OPENAI_API_KEY="$APIM_API_KEY"
# Claude Code(注意不带 /v1)
export ANTHROPIC_BASE_URL="https://apim.eu.cc"
export ANTHROPIC_AUTH_TOKEN="$APIM_API_KEY"
export ANTHROPIC_MODEL="gpt-5.6-luna"curl(最小可运行)
curl https://apim.eu.cc/v1/chat/completions \
-H "Authorization: Bearer $APIM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.6-luna","messages":[{"role":"user","content":"hi"}]}'直连自检脚本(Python,无依赖)
import json, urllib.request
BASE, KEY, MODEL = "https://apim.eu.cc/v1", "sk-xxxxxxxx", "gpt-5.6-luna"
def get_models():
req = urllib.request.Request(f"{BASE}/models",
headers={"Authorization": f"Bearer {KEY}"})
return json.load(urllib.request.urlopen(req))["data"]
def chat(model, text):
req = urllib.request.Request(
f"{BASE}/chat/completions",
data=json.dumps({"model": model,
"messages": [{"role": "user", "content": text}]}).encode(),
headers={"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"},
)
return json.load(urllib.request.urlopen(req))
print("可用模型:", [m["id"] for m in get_models()])
print("回复:", chat(MODEL, "只回复两个字:收到")["choices"][0]["message"]["content"])文档版本 2026-09-25。中转站的模型、渠道与权限会不定期调整;出现行为不一致时,以 GET /v1/models 与站点控制台信息为准。