API 直接调用
不用任何客户端,直接拿 curl / Python / Node.js 调。
端点速查
| 协议 | 端点 | 用什么客户端 |
|---|---|---|
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 |
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。
1.4 列出可用模型
curl https://www.miloapi.com/v1/models \
-H "Authorization: Bearer sk-你的key"
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. 模型映射表
某些客户端硬编码了旧模型名,Miloapi 自动映射到当前可用版本:
| 客户端填的 | 实际路由到 | 仅在 |
|---|---|---|
gpt-4 | gpt-5.4 | GPT 池 |
gpt-4o | gpt-5.5 | GPT 池 |
gpt-4-turbo | gpt-5.4 | GPT 池 |
claude-3-5-sonnet | claude-sonnet-4-6 | Claude-MAX 池 |
claude-3-opus | claude-opus-4-7 | Claude-MAX 池 |
claude-3-haiku | claude-sonnet-4-6 | Claude-MAX 池 |
gemini-pro | gemini-3.1-pro-preview | gemini 池 |
gemini-1.5-pro | gemini-3.1-pro-preview | gemini 池 |
gemini-1.5-flash | gemini-2.5-flash | gemini 池 |
dall-e-3 | 不支持 | 改成 gpt-image-2 |
dall-e-2 | 不支持 | 改成 gpt-image-2 |
完整可调模型列表见 API 文档页面。
5. 错误码
| HTTP | 含义 | 处理 |
|---|---|---|
200 | 成功 | — |
401 | Key 无效 / Key 已删 / 分组不对 | 检查 Key,见 FAQ |
403 | 余额不足 / IP 不在白名单 | 充值 / 改白名单 |
404 | 模型不在当前分组 | 换模型或换 Key 的分组 |
429 | 限流 | 等几秒重试,见 FAQ |
500 | 网关内部错误 | 联系客服 |
502 | 上游临时不可用 | 等几秒重试,网关会自动 failover |
每个错误返回都带 error.message 字段,通常能直接看明白原因。
