API 直接调用
不用任何客户端,直接拿 curl / Python / Node.js 调。
💡 想在网页里点点鼠标就能聊?用 智能工作台 —— 零代码,带 Prompt 库 / 模型预设 / Skills / 本地记忆,网页里直接聊 + 生图 + 跑视频。
端点速查
| 协议 | 端点 | 用什么客户端 |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | OpenAI SDK / Cursor / Cherry / Open WebUI / Codex |
POST /v1/messages | Anthropic Messages | Anthropic SDK / Claude Code / Claude Desktop |
POST /v1/images/generations | OpenAI Images | 生图客户端 |
POST /v1/images/edits | OpenAI Images Edit | 图生图客户端 |
POST /v1/embeddings | OpenAI Embeddings | 向量数据库 |
POST /v1/responses | OpenAI Responses | 新版 Codex CLI |
GET /v1/models | 列出可用模型 | 各客户端的「检查」按钮 |
POST /v1beta/models/{model}:generateContent | Google Gemini Native | Gemini CLI / Gemini SDK |
💡 Gemini 分组三协议互通:同一把 Gemini Key 既可以用
/v1beta(Google 原生)、也可以用/v1/chat/completions(OpenAI 兼容)、还可以用/v1/messages(Anthropic 兼容)。model字段统一写 Gemini 模型 ID(如gemini-2.5-pro/gemini-3-pro-preview),网关自动桥接到 Code Assist。详见 §1.6 和 §5。
1. curl
1.1 OpenAI 兼容协议(对话)
curl https://www.miloapi.com/v1/chat/completions \
-H "Authorization: Bearer sk-你的key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"messages": [{"role": "user", "content": "你好"}]
}'
1.2 Anthropic 原生协议(对话)
curl https://www.miloapi.com/v1/messages \
-H "x-api-key: sk-你的claude-max-key" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-4-7",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "你好"}]
}'
1.3 生图
curl https://www.miloapi.com/v1/images/generations \
-H "Authorization: Bearer sk-你的gpt-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "一只橙色的猫坐在窗台上,水彩风格",
"n": 1,
"size": "1024x1024"
}'
⚠️ 生图只接受
gpt-image-1/gpt-image-2这种型号,不接受dall-e-2/dall-e-3(OpenAI 已于 2026-05-12 下线)。
各模型支持的尺寸 / 参数
| 模型 | 尺寸 | quality | background | output_format | n |
|---|---|---|---|---|---|
gpt-image-1 | 1K (1024×1024, 1536×1024, 1024×1536) + 2K (2048×2048/1152/...) | auto/low/medium/high | auto/opaque/transparent | png/jpeg/webp | 1-10 |
gpt-image-2 | 上述 + 4K(3840×2160 / 2160×3840) | auto/low/medium/high | auto/opaque/transparent | png/jpeg/webp | 1-10 |
像素预算限制:
- gpt-image-1 上限约 4M 像素,4K 尺寸会返回
400 Invalid size: exceeds the current pixel budget - gpt-image-2 上限约 8M 像素,4096×4096(16.7M)也会被拒;只能用 16:9 / 9:16 的 4K
- 要稳出 4K → 选 gpt-image-2 +
3840x2160或2160x3840
1.4 图片生成 n>1 批量
公开 OpenAI 文档说 /v1/images/generations 的 n 参数支持 1-10。直接对接 chatgpt.com 上游不支持(它走 Codex image_generation 工具,schema 里没有 n,返回 400 Unknown parameter: 'tools[0].n')。
Miloapi 网关补齐了这一能力: 当请求 n>1 且 stream=false 时,后端会:
- 内部串行发起 N 次
n=1请求 - 每个 slot 独立走 failover(失败可自动换账号)
- 每张图独立计费(失败的不收费)
- 聚合成标准 OpenAI 响应返回
curl https://www.miloapi.com/v1/images/generations \
-H "Authorization: Bearer sk-你的gpt-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "一只橙色的猫",
"n": 8,
"size": "1024x1024",
"stream": false
}'
响应:
{
"created": 1779431690,
"data": [
{ "b64_json": "..." },
{ "b64_json": "..." },
...
],
"size": "1024x1024",
"delivered_count": 8,
"usage": { "total_tokens": ..., "input_tokens": ..., "output_tokens": ... }
}
约束:
- 仅
stream=false模式生效(stream=true+ n>1 仍走单图路径) - 总时长 ≈ 单图时长 × N(串行,非并行)
- 部分失败仍返回 200 + 已成功的张数 +
delivered_count字段 - 全部失败时返回第一个 slot 的真实错误(400/502 透传)
/v1/images/edits(图生图)暂不支持 n>1 fan-out,客户端自行循环
1.5 列出可用模型
curl https://www.miloapi.com/v1/models \
-H "Authorization: Bearer sk-你的key"
1.6 Gemini 原生协议(对话)
curl "https://www.miloapi.com/v1beta/models/gemini-2.5-pro:generateContent" \
-H "x-goog-api-key: sk-你的gemini-key" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"parts": [{"text": "你好"}]}]
}'
⚠️ Gemini 原生路径用
/v1beta(不是/v1),鉴权用x-goog-api-key(不是Authorization)。如果你想用 OpenAI 或 Anthropic SDK 调 Gemini,不要走这条路,直接看 §6。
2. Python
2.1 OpenAI SDK
from openai import OpenAI
client = OpenAI(
base_url="https://www.miloapi.com/v1",
api_key="sk-你的key",
)
resp = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)
2.2 Anthropic SDK
from anthropic import Anthropic
client = Anthropic(
base_url="https://www.miloapi.com",
api_key="sk-你的claude-max-key",
)
resp = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
messages=[{"role": "user", "content": "你好"}],
)
print(resp.content[0].text)
2.3 流式响应
from openai import OpenAI
client = OpenAI(base_url="https://www.miloapi.com/v1", api_key="sk-你的key")
stream = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "讲个笑话"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
2.4 生图
from openai import OpenAI
import base64
client = OpenAI(base_url="https://www.miloapi.com/v1", api_key="sk-你的gpt-key")
resp = client.images.generate(
model="gpt-image-2",
prompt="a cute cat in watercolor style",
n=1,
size="1024x1024",
)
# 保存 base64 图片到文件
b64 = resp.data[0].b64_json
with open("cat.png", "wb") as f:
f.write(base64.b64decode(b64))
3. Node.js
3.1 OpenAI SDK
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://www.miloapi.com/v1",
apiKey: "sk-你的key",
});
const resp = await client.chat.completions.create({
model: "gpt-5.5",
messages: [{ role: "user", content: "你好" }],
});
console.log(resp.choices[0].message.content);
3.2 Anthropic SDK
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://www.miloapi.com",
apiKey: "sk-你的claude-max-key",
});
const msg = await client.messages.create({
model: "claude-opus-4-7",
max_tokens: 1024,
messages: [{ role: "user", content: "你好" }],
});
console.log(msg.content[0].text);
3.3 流式响应
const stream = await client.chat.completions.create({
model: "gpt-5.5",
messages: [{ role: "user", content: "讲个笑话" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || "");
}
4. 可调模型
请填写当前可用的真实模型名(如 gpt-5.5 / claude-opus-4-7 / gemini-3.1-pro-preview),不要用 gpt-4 / claude-3-opus / dall-e-3 这类老名字 —— 它们已下线,调用会直接 4xx 报错。
完整模型清单、当前价格、各模型支持的端点,登录后查看 侧栏 → 可用渠道,或在线参考 API 文档页面。生图请用 gpt-image-2(dall-e-2 / dall-e-3 已停止接入)。
5. Gemini Key 的三种调法
Miloapi 网关给 Gemini 分组的 Key 内置了协议桥接——同一把 Key 可以走 3 种协议入口。给习惯 OpenAI 或 Anthropic SDK 的开发者多一个无成本接入路径。
| 协议 | 适用场景 | base_url | 鉴权 |
|---|---|---|---|
/v1beta (Google 原生) | Gemini SDK / Gemini CLI / google-genai 库 | https://www.miloapi.com/v1beta | x-goog-api-key |
/v1/chat/completions (OpenAI 兼容) | OpenAI SDK / LangChain / Cline / Cursor / Continue / Open WebUI | https://www.miloapi.com/v1 | Authorization: Bearer |
/v1/messages (Anthropic 兼容) | Anthropic SDK / Claude Code(不常用) | https://www.miloapi.com | x-api-key |
model 字段统一写 Gemini 模型 ID,比如:
gemini-2.5-pro、gemini-2.5-flash、gemini-2.5-flash-image-previewgemini-3-pro-preview、gemini-3-flash-previewgemini-3.1-pro-preview、gemini-3.1-flash-image-preview、gemini-3.1-flash-lite-preview
5.1 用 OpenAI SDK 调 Gemini(推荐给 OpenAI 阵营的用户)
from openai import OpenAI
client = OpenAI(
base_url="https://www.miloapi.com/v1",
api_key="sk-你的gemini-key",
)
resp = client.chat.completions.create(
model="gemini-2.5-pro", # 或 gemini-3-pro-preview / gemini-3.1-pro-preview
messages=[{"role": "user", "content": "用三句话解释 OAuth"}],
)
print(resp.choices[0].message.content)
curl 等价:
curl https://www.miloapi.com/v1/chat/completions \
-H "Authorization: Bearer sk-你的gemini-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.5-pro",
"messages": [{"role": "user", "content": "你好"}],
"stream": true
}'
5.2 用 Anthropic SDK 调 Gemini
from anthropic import Anthropic
client = Anthropic(
base_url="https://www.miloapi.com",
api_key="sk-你的gemini-key",
)
msg = client.messages.create(
model="gemini-2.5-pro",
max_tokens=1024,
messages=[{"role": "user", "content": "用三句话解释 OAuth"}],
)
print(msg.content[0].text)
5.3 用 Gemini SDK / Gemini CLI 原生协议
export GEMINI_API_KEY="sk-你的gemini-key"
export GEMINI_BASE_URL="https://www.miloapi.com/v1beta"
gemini -p "用三句话解释 OAuth"
Gemini CLI 完整教程见 Gemini CLI 客户端。
三个协议的响应格式各不相同(OpenAI Chat chunks / Anthropic SSE / Gemini SSE),SDK 会自动解析——你不需要管底层格式。
6. 错误码
| HTTP | 含义 | 处理 |
|---|---|---|
200 | 成功 | — |
400 | 参数错误(尺寸超 budget、不支持的字段等) | 看 error.message,改请求 |
401 | Key 无效 / Key 已删 / 分组不对 | 检查 Key,见 FAQ |
403 | 余额不足 / IP 不在白名单 | 充值 / 改白名单 |
404 | 模型不在当前分组 | 换模型或换 Key 的分组 |
413 | 请求体超过 256MB | 减小 body(图生图小图) |
429 | 限流 | 等几秒重试,见 FAQ |
500 | 网关内部错误 | 联系客服 |
502 | 上游临时不可用(failover 用尽后) | 等几秒重试 |
503 | 当前分组无可用账号 | 换分组或换 Key |
每个错误返回都带 error.message 字段,通常能直接看明白原因。
Failover 行为
网关内部对每次请求会自动尝试多个上游账号,失败时切换:
| 上游错误 | 是否换账号 |
|---|---|
| HTTP 4xx(除 408/429) | ❌ 不换 — 用户输入问题,换账号也没用 |
| HTTP 408 / 429 | ✅ 换 — 当前账号超时/限流 |
| HTTP 5xx | ✅ 换 |
| HTTP/2 RST_STREAM(INTERNAL_ERROR 等) | ✅ 换 |
| TCP reset / 中途 EOF | ✅ 换 |
SSE type:"error" + server_error / rate_limit | ✅ 换 |
SSE type:"error" + moderation_blocked / invalid_request_error | ❌ 不换 |
默认最多切 10 次。所以你看到一个 5xx 通常意味着全部账号都失败了,不是单个账号的暂时性问题。
