MigeAPI 文档
MigeAPI 提供统一的 AI 模型调用接口,兼容 OpenAI API 格式,支持文本对话、图像生成、视频生成等能力。
Base URL
https://api.migeapi.com
请求格式
所有请求使用 JSON 格式,请在请求头中设置:
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
调用模式
MigeAPI 的接口分为两种调用模式:
| 模式 | 适用接口 | 说明 |
|---|---|---|
| 同步 | Claude 文本对话 /v1/messages | Anthropic Messages API 格式,请求后直接返回结果 |
| 同步 | GPT/Gemini 文本对话 /v1/chat/completions | OpenAI 兼容格式,请求后直接返回结果 |
| 异步 | 图像生成、视频生成 | 请求后返回 task_id,需轮询任务状态获取最终结果 |
图像和视频生成均为异步任务。完整调用流程如下:
┌─────────────────────────────────────────────────────────────┐
│ 1. 提交生成请求 → 获得 task_id │
│ 2. 使用 task_id 轮询任务状态 │
│ 3. 当 status = "completed" 时,从 result 字段获取下载链接 │
└─────────────────────────────────────────────────────────────┘
图像任务建议轮询间隔 3-5 秒,视频任务建议 10-15 秒。生成链接有效期为 24 小时,请及时下载保存。
认证方式
所有 API 请求需要在 HTTP Header 中携带 API Key 进行认证:
Authorization: Bearer sk-xxxxxxxxxxxxxxxx
API Key 可在控制台中创建和管理。请妥善保管您的 Key,不要在客户端代码中暴露。
文本系列 — 可用模型
Claude 系列(Anthropic)
Claude 系列模型使用 /v1/messages 接口,兼容 Anthropic Messages API 格式。
GPT / Gemini 系列
以下模型使用 /v1/chat/completions 接口,兼容 OpenAI API 格式。
文本对话接口
Claude 系列 — Anthropic Messages API
POST/v1/messages
Claude 系列模型使用 Anthropic Messages API 格式,需要在请求头中添加 anthropic-version。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 模型名称,见上方 Claude 模型列表 |
| messages | array | 是 | 对话消息列表 |
| max_tokens | integer | 是 | 最大输出 token 数 |
| stream | boolean | 否 | 是否流式输出,默认 false |
| temperature | number | 否 | 采样温度 0-1,默认 1 |
| system | string | 否 | 系统提示词(不放在 messages 中) |
请求头
| Header | 必填 | 说明 |
|---|---|---|
| Authorization | 是 | Bearer YOUR_API_KEY |
| Content-Type | 是 | application/json |
| anthropic-version | 是 | 2023-06-01 |
请求示例
curl -X POST https://api.migeapi.com/v1/messages -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -H "anthropic-version: 2023-06-01" -d '{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "你好"}
]
}'
from anthropic import Anthropic
client = Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.migeapi.com"
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "你好"}]
)
print(message.content[0].text)
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.migeapi.com"
});
const message = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
messages: [{ role: "user", content: "你好" }]
});
console.log(message.content[0].text);
响应示例
{
"id": "msg_20260517155837",
"type": "message",
"role": "assistant",
"model": "claude-sonnet-4-6",
"content": [
{
"type": "text",
"text": "你好!有什么可以帮助你的吗?"
}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 9,
"output_tokens": 15,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0
}
}
GPT / Gemini 系列 — OpenAI 兼容接口
POST/v1/chat/completions
GPT 和 Gemini 系列模型使用 OpenAI Chat Completions API 格式。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 模型名称 |
| messages | array | 是 | 对话消息列表 |
| stream | boolean | 否 | 是否流式输出,默认 false |
| temperature | number | 否 | 采样温度 0-2,默认 1 |
| max_tokens | integer | 否 | 最大输出 token 数 |
| top_p | number | 否 | 核采样参数,默认 1 |
请求示例
curl -X POST https://api.migeapi.com/v1/chat/completions -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{
"model": "gpt-5.5",
"messages": [
{"role": "user", "content": "你好"}
],
"max_tokens": 1024
}'
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.migeapi.com/v1"
)
response = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "你好"}],
max_tokens=1024
)
print(response.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.migeapi.com/v1"
});
const response = await client.chat.completions.create({
model: "gpt-5.5",
messages: [{ role: "user", content: "你好" }],
max_tokens: 1024
});
console.log(response.choices[0].message.content);
响应示例
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1700000000,
"model": "gpt-5.5",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好!有什么可以帮助你的吗?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 15,
"total_tokens": 25
}
}
图像系列 — 可用模型
以下模型使用同一套接口和请求参数,只需更换 model 字段即可切换。
| 模型 | 说明 | 计费方式 |
|---|---|---|
gpt-image-2 | 通用图像生成 | 按张 |
gpt-image-2-official | 稳定性最佳,适合批量生产 | 按实际用量 |
gpt-image-2.5-ext | 2.5 系列 · 扩展 | 按实际用量 |
gpt-image-2.5-flare | 2.5 系列 · 快速 | 按实际用量 |
gpt-image-2.5-sunburst | 2.5 系列 · 高画质 | 按实际用量 |
blt-gpt-image-2 | 经济版,单价最低 | 按张 |
gemini-3-pro-image-preview | Google · 图像生成 | 按张 |
gemini-3.1-flash-image-preview | Google · 快速图像生成 | 按张 |
两种计费方式的区别
| 计费方式 | 含义 | 省钱建议 |
|---|---|---|
| 按张 | 每次调用固定单价,与实际生成长度无关 | — |
| 按实际用量 | 按本次请求实际消耗计算,随尺寸、画质、生成数量浮动 | 不传 resolution、quality、n 时费用最低 |
各模型具体单价以控制台「价格」页为准。
图像生成接口
POST/v1/images/generations?async=true
异步接口 — 此接口不会直接返回图片,而是返回一个 task_id。您需要使用该 task_id 轮询查询接口,直到任务完成后获取图片下载链接。生成的图像链接有效期 24 小时,请及时保存。
请求参数
所有图像模型共用以下参数。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 模型名称,见上方可用模型 |
| prompt | string | 是 | 图像描述文本 |
| size | string | 否 | 尺寸比例:1:1 / 2:3 / 3:2 / 16:9 / 9:16 |
| resolution | string | 否 | 分辨率:1024(默认)/ 2k / 4k |
| quality | string | 否 | 画质档位:low / medium / high / xhigh / max;不传为自动 |
| n | integer | 否 | 生成数量:1 / 2 / 4,默认 1 |
| image_urls | array | 否 | 参考图像 URL 列表,最多 5 张,单张不超过 10MB |
resolution、quality、n 都会影响费用与耗时,都可不传。仅 model 与 prompt 为必填,最省事的调用方式是只传这两个。
请求示例
curl -X POST https://api.migeapi.com/v1/images/generations?async=true \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "一只在星空下奔跑的白色柴犬,赛博朋克风格",
"size": "16:9",
"resolution": "2k",
"n": 1
}'
import requests
url = "https://api.migeapi.com/v1/images/generations?async=true"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"model": "gpt-image-2",
"prompt": "一只在星空下奔跑的白色柴犬,赛博朋克风格",
"size": "16:9",
"resolution": "2k",
"n": 1
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://api.migeapi.com/v1/images/generations?async=true", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "gpt-image-2",
prompt: "一只在星空下奔跑的白色柴犬,赛博朋克风格",
size: "16:9",
resolution: "2k",
n: 1
})
});
const data = await response.json();
console.log(data);
响应示例
提交成功后返回任务 ID,注意字段在顶层,不是包在 data 数组里:
{
"id": "task_01K8SGYNNNVBQTXNR4MM964S7K",
"task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K",
"status": "pending",
"model": "gpt-image-2"
}
取 task_id 后,用下面的查询接口轮询结果。
查询图像任务
GET/v1/images/tasks/{task_id}
查询图像生成任务的状态和结果。
请求示例
curl https://api.migeapi.com/v1/images/tasks/task_01K8SGYNNNVBQTXNR4MM964S7K \
-H "Authorization: Bearer YOUR_API_KEY"
响应示例(已完成)
{
"code": "success",
"message": "",
"data": {
"task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K",
"status": "SUCCESS",
"progress": "100%",
"result_url": "https://api.migeapi.com/v1/videos/task_01K8SGYNNNVBQTXNR4MM964S7K/content?expires=1763174708&sign=9f2c8e...",
"fail_reason": "",
"submit_time": 1763088289,
"finish_time": 1763088308
}
}
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
| status | string | SUBMITTED / IN_PROGRESS / SUCCESS / FAILURE,全大写 |
| progress | string | 进度,形如 "100%"(带百分号的字符串) |
| result_url | string | 生成结果下载地址,位于 data 顶层;status 为 SUCCESS 时才有值 |
| fail_reason | string | 失败原因,status 为 FAILURE 时才有值 |
请注意:status 的值是 SUCCESS 而不是 completed,code 是字符串 "success" 而不是数字 200。这两点是最容易踩的坑。
完整调用流程示例(Python)
以下示例展示了从提交图像生成请求到轮询获取结果的完整异步流程,可直接复制运行:
import requests
import time
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.migeapi.com"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# 第一步:提交图像生成请求(?async=true 不能省)
payload = {
"model": "gpt-image-2",
"prompt": "一只在星空下奔跑的白色柴犬,赛博朋克风格",
"size": "16:9",
"resolution": "2k",
"n": 1
}
resp = requests.post(f"{BASE_URL}/v1/images/generations?async=true",
json=payload, headers=headers, timeout=60).json()
task_id = resp["task_id"] # 顶层字段,不是 data[0]['task_id']
print(f"任务已提交: {task_id}")
# 第二步:轮询任务状态(建议间隔 3-5 秒)
while True:
result = requests.get(f"{BASE_URL}/v1/images/tasks/{task_id}",
headers=headers, timeout=30).json()
data = result["data"]
status = data["status"] # SUBMITTED / IN_PROGRESS / SUCCESS / FAILURE
print(f"状态: {status}, 进度: {data.get('progress')}")
if status == "SUCCESS":
# 第三步:取结果(链接有效期 24 小时,请及时转存)
print(f"生成完成: {data['result_url']}") # 顶层 result_url
break
elif status == "FAILURE":
print(f"生成失败: {data.get('fail_reason')}")
break
time.sleep(4)
切换模型只需改 payload["model"],其余代码完全一样。
视频系列 — 可用模型
所有视频模型都用同一个接口 POST /v1/videos 提交,返回任务 ID 后轮询取结果。不同模型接受的参数不一样,务必对照下面两张表。
模型名里带 global 的是宽审核线路(走海外站),真人素材和敏感提示词的通过率明显更高;不带 global 的走国内站,审核更严。两者的调用方式完全一样。
Seedance 2.0 系列(字节跳动)
按「线路 × 档位 × 输入模式」拆成独立模型名。档位决定画质与价格,输入模式决定你能喂什么素材:
三种输入模式的区别
| 后缀 | 喂什么 | 模型拿它做什么 |
|---|---|---|
t2v | 只有 prompt,不给素材 | 从零生成 |
i2v | 顶层 images 数组,1~2 张 | 第 1 张是首帧,第 2 张是尾帧 —— 图是时间轴上的锚点 |
multi | metadata.content 数组:图 ≤9 张、视频 ≤3 段、音频 ≤3 段,至少给 1 个 | 素材是参考资料(角色、风格、动作、口型),不规定起止 |
三个后缀不能互相替代:multi 强制要求至少一份素材(做不了纯文生视频),且只认 image1~image9 不认首尾帧;i2v 必须有首帧图。选错模型会直接报错或静默忽略你的素材。
视频生成接口
POST/v1/videos
异步接口 —— 不直接返回视频,而是返回一个任务 ID。拿到 ID 后轮询「查询视频任务」直到终态,再从 result_url 下载成片。生成通常 1~5 分钟。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 模型名,见上方模型表。名字后缀决定输入模式 |
| prompt | string | t2v / multi 必填 i2v 可选 | 视频描述文本。多模态场景可用 @Image 1、@Video 1 指代第几个素材 |
| seconds | string | 否 | 时长。字符串,取 "4"~"15",或 "-1" 让模型自选。默认 "5" |
| duration | integer | 否 | 时长的整数写法,等价于 seconds(部分老模型用这个) |
| resolution | string | 否 | 分辨率。Seedance 2.0 见下方专用表;其他模型常见 720p / 1080p |
| images | array | i2v 必填 | 图片 URL 数组。只传 1 张 = 首帧;2 张 = 首帧 + 尾帧。单数字段 image 也接受 |
| metadata | object | 否 | 生成参数集合,见下。字段会原样透传给上游 |
Seedance 2.0 专用参数
| 字段 | 取值 | 说明 |
|---|---|---|
resolution | 480p / 720p / 1080p / 2k / 4k / native1080p / native4k | 默认 720p。1080p 及以上是超分档,另收附加费。native1080p / native4k 仅 standard 档支持 |
seconds | "4"~"15" 或 "-1" | -1 = 让模型自选时长 |
metadata.ratio | adaptive / 16:9 / 4:3 / 1:1 / 3:4 / 9:16 / 21:9 | 默认 adaptive(自适应) |
metadata.seed | -1 ~ 2147483647 | 默认 -1(随机) |
metadata.generate_audio | true / false | 是否生成配音音效,默认 true |
metadata.return_last_frame | true / false | 是否额外返回最后一帧图片,默认 false |
metadata.content | 素材数组 | 仅 multi 模型。每项形如 {"type":"image_url","image_url":{"url":"..."}},type 可为 image_url / video_url / audio_url |
素材大小限制:图片 ≤30MB;视频 ≤50MB;音频 ≤50MB。传了 metadata.content 就会整体覆盖顶层 images,多模态场景请把图片也写进 content 数组,不要再单独传 images。
请求示例
# 文生视频
curl -X POST https://api.migeapi.com/v1/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-global-fast-t2v",
"prompt": "一只白色纸飞机在窗台上缓缓旋转,阳光斜照,写实风格",
"seconds": "5",
"metadata": { "resolution": "720p" }
}'
# 图生视频(首帧 → 视频)
curl -X POST https://api.migeapi.com/v1/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-global-fast-i2v",
"prompt": "镜头缓慢推近",
"images": ["https://your-cdn.example.com/first-frame.png"],
"seconds": "5",
"metadata": { "resolution": "720p" }
}'
# 多模态参考(把视频里的人换成图里的人)
curl -X POST https://api.migeapi.com/v1/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-global-standard-multi",
"prompt": "把 @Video 1 中的人物替换成 @Image 1 中的人物",
"seconds": "5",
"metadata": {
"resolution": "1080p",
"content": [
{ "type": "image_url", "image_url": { "url": "https://your-cdn.example.com/person.png" } },
{ "type": "video_url", "video_url": { "url": "https://your-cdn.example.com/source.mp4" } }
]
}
}'
import requests
url = "https://api.migeapi.com/v1/videos"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"model": "seedance-2.0-global-fast-t2v",
"prompt": "一只白色纸飞机在窗台上缓缓旋转,阳光斜照,写实风格",
"seconds": "5", # 注意是字符串
"metadata": {"resolution": "720p"}
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch("https://api.migeapi.com/v1/videos", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "seedance-2.0-global-fast-t2v",
prompt: "一只白色纸飞机在窗台上缓缓旋转,阳光斜照,写实风格",
seconds: "5", // 注意是字符串
metadata: { resolution: "720p" }
})
});
const data = await response.json();
console.log(data);
响应示例
提交成功返回 HTTP 200,body 是一个 JSON 对象(注意:不是 {"code":200,"data":[...]} 那种包裹结构)。字段名在不同上游渠道下略有差异,取 id 或 task_id 任意一个即可:
{
"id": "task_WZ1y4kancyYEOGydWAaiCyeMOqIbAdEq",
"task_id": "task_WZ1y4kancyYEOGydWAaiCyeMOqIbAdEq",
"status": "pending",
"model": "seedance-2.0-global-fast-t2v"
}
稳妥的取值写法:task_id = resp["id"] or resp["task_id"]
查询视频任务
GET/v1/video/generations/{task_id}
推荐用这个接口。它对所有渠道、所有模型返回同一种结构,字段齐全且有 fail_reason,是最省事的轮询方式。
另有一个 OpenAI 风格的 GET /v1/videos/{task_id},但它的返回结构依渠道而变(有的渠道只返回 {"id":"..."}),除非你确实需要 OpenAI 格式,否则不要用它。
请求示例
curl https://api.migeapi.com/v1/video/generations/task_WZ1y4kancyYEOGydWAaiCyeMOqIbAdEq \
-H "Authorization: Bearer YOUR_API_KEY"
响应示例
{
"code": "success",
"message": "",
"data": {
"task_id": "task_WZ1y4kancyYEOGydWAaiCyeMOqIbAdEq",
"action": "generate",
"status": "SUCCESS",
"fail_reason": "",
"result_url": "https://api.migeapi.com/v1/videos/task_WZ1y4kancyYEOGydWAaiCyeMOqIbAdEq/content?expires=1792595215&sign=6e0ab501b1a718eb051344471e4a376077f2a7e4a1dda9c9b81ff4b9824ac192",
"submit_time": 1791989009,
"start_time": 1791989024,
"finish_time": 1791989061,
"progress": "100%"
}
}
响应字段
| 字段 | 说明 |
|---|---|
| status | 任务状态,见下方状态表。SUCCESS / FAILURE 是终态 |
| progress | 进度字符串,如 "42%" |
| result_url | 成片下载地址(仅成功后存在)。直接 GET 这个地址即可下载,不需要再带 API Key(地址里已带签名) |
| fail_reason | 失败原因(仅失败时有值) |
| submit_time / start_time / finish_time | 提交 / 开始 / 完成时刻的 Unix 秒 |
成片链接有效期 7 天,过期后需要重新生成。链接指向站内代理地址,不会暴露上游,也无需鉴权。
完整调用流程示例(Python)
从提交到下载的完整异步流程,可直接运行:
import time
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.migeapi.com"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
# ── 第一步:提交 ──────────────────────────────────────────────
payload = {
"model": "seedance-2.0-global-fast-t2v",
"prompt": "一只白色纸飞机在窗台上缓缓旋转,阳光斜照,写实风格",
"seconds": "5", # 字符串!不是数字
"metadata": {"resolution": "720p"},
}
resp = requests.post(f"{BASE_URL}/v1/videos", json=payload, headers=headers)
resp.raise_for_status()
body = resp.json()
# 不同渠道返回的字段名不同,两个都试一下
task_id = body.get("id") or body.get("task_id")
if not task_id:
raise RuntimeError(f"提交失败,返回内容:{body}")
print(f"任务已提交: {task_id}")
# ── 第二步:轮询(视频较慢,建议间隔 10 秒)────────────────────
while True:
time.sleep(10)
r = requests.get(f"{BASE_URL}/v1/video/generations/{task_id}", headers=headers)
r.raise_for_status()
data = r.json()["data"]
status = data["status"]
print(f"状态: {status} 进度: {data.get('progress', '')}")
if status == "SUCCESS":
video_url = data["result_url"]
print(f"生成完成: {video_url}")
# ── 第三步:下载(链接自带签名,无需 API Key)──────────
video = requests.get(video_url, timeout=300).content
with open("out.mp4", "wb") as f:
f.write(video)
print(f"已保存 out.mp4({len(video)} 字节)")
break
if status == "FAILURE":
print(f"生成失败: {data.get('fail_reason', '未知原因')}")
break
任务状态说明
图像和视频生成都是异步任务,提交后需轮询查询结果。状态值大小写和写法在不同接口之间不一样,不要混用。
| 含义 | 通用查询接口/v1/video/generations/{id}/v1/images/tasks/{id} | OpenAI 兼容接口/v1/videos/{id} |
|---|---|---|
| 未开始 / 排队 / 已提交 | NOT_START / SUBMITTED / QUEUED | queued |
| 处理中 | IN_PROGRESS | in_progress |
| 已完成 | SUCCESS | completed |
| 已失败 | FAILURE | failed |
轮询时只判断 SUCCESS 和 FAILURE 两个终态,其余任何值都继续等待即可(不要按具体中间状态写分支,上游可能新增状态值)。任务失败时系统会自动退还预扣费用,不会产生扣费。
建议轮询间隔:图像任务 3~5 秒,视频任务 10~15 秒。视频任务耗时通常 1~5 分钟,请把超时设得宽松一些(建议 ≥10 分钟)。
账号与余额
登录控制台可查看账号余额、使用记录和 API Key 管理。
如需充值或有其他问题,请联系管理员。