这份文档是干什么的?
如果你打开 Swagger 看到一堆英文参数看不懂,看这一份就够了。 这里用中文说明:怎么拿密钥、怎么发请求、每个字段是什么意思、常见报错怎么处理。
技术同学需要完整字段定义时,可再看 Swagger 接口参考。 网站用户(非 API)请看 本站使用说明。
三步上手
- 在 产品站 注册并登录。
-
进入 用户中心 → 开发者 API,点击「生成 API Key」,复制以
synex_开头的密钥(只显示一次,请保存好)。 -
把下面命令里的
你的密钥换成真实 Key,在终端执行(把域名换成你的站点):
curl https://你的域名/chat \
-H "Content-Type: application/json" \
-H "X-API-Key: 你的密钥" \
-d '{"model":"openai/gpt-4o-mini","stream":false,"messages":[{"role":"user","content":"你好,用一句话介绍你自己"}]}'
成功时会返回 JSON,里面包含 AI 的回复文字。每次调用会扣除账户积分。
认证:每次请求都要带密钥
推荐在 HTTP 请求头里加:
X-API-Key: synex_xxxxxxxxxxxxxxxx
也支持把 Key 放在 Authorization 头(效果相同):
Authorization: Bearer synex_xxxxxxxxxxxxxxxx
先搞懂这几个词
| 名词 | 通俗解释 |
|---|---|
model(模型) |
用哪家 AI、哪个版本。例如 openai/gpt-4o-mini 便宜快,openai/gpt-4o 更强。先调 GET /models 看你能用哪些。 |
messages(消息列表) |
你和 AI 的对话记录。每条有 role(角色)和 content(内容)。一般只写 user 即可。 |
role: user |
表示「用户说的话」。 |
role: assistant |
表示「AI 之前的回复」。多轮对话时把历史 assistant 消息也带上。 |
stream |
false:等 AI 全部写完再一次返回(最简单)。true:像打字机一样边生成边返回(适合网页实时显示)。 |
| 积分 | 调用 API 会扣积分,和网页里聊天扣的是同一个钱包。余额不足会返回 402。 |
常用接口一览
| 你想做什么 | 方法 | 路径 | 要不要 Key |
|---|---|---|---|
| 检查服务是否正常 | GET | /health | 否 |
| 查我能用哪些聊天模型 | GET | /models | 是 |
| 和 AI 文字对话 | POST | /chat | 是 |
| 让 AI 看图片并描述 | POST | /vision | 是 |
| 查识图可用模型 | GET | /vision/models | 是 |
| 查生图 / 生视频可用模型 | GET | /studio/models | 是 |
| 文生图 / 图生图 | POST | /studio/image | 是 |
| 文生视频(异步任务) | POST | /video/projects | 是 |
| 查询视频任务进度 | GET | /video/projects/{id} | 是 |
| 查账户与积分 | GET | /auth/me | 是 |
生图、生视频与 SynexAI聊天室共用同一套接口与积分;视频为异步任务,需轮询直到完成。
POST /chat — 文字对话
最常用的接口。发一段用户问题,拿回 AI 回答。
请求体参数
| 字段 | 必填 | 说明 |
|---|---|---|
messages |
是 | 数组。最简单只放一条:[{"role":"user","content":"你好"}] |
model |
否 | 模型 ID,如 openai/gpt-4o-mini。不写则用网关默认模型。 |
stream |
否 | 默认 false。新手建议先用 false,拿到完整 JSON 再解析。 |
max_tokens |
否 | 限制 AI 最多回复多少 tokens。想短答可设 80,想长文可设 2000。参数名仍为 max_tokens。 |
附件(multipart)
与网页聊天室相同,可在 multipart/form-data 请求中附带图片、视频或文档(PDF / Word / Excel / TXT 等,单文件 ≤ 10MB)。模型须支持文档输入(见 GET /studio/models 或模型列表中的 file 能力)。联网搜索与文档附件不可同请求。
示例:单轮问答
{
"model": "openai/gpt-4o-mini",
"stream": false,
"messages": [
{ "role": "user", "content": "用三句话介绍 SynexAI 能做什么" }
]
}
示例:多轮对话(带上下文)
{
"model": "openai/gpt-4o-mini",
"stream": false,
"messages": [
{ "role": "user", "content": "我想写小红书种草文案" },
{ "role": "assistant", "content": "好的,请告诉我产品名称和目标人群。" },
{ "role": "user", "content": "产品是保湿面霜,目标人群是 25 岁左右的女生" }
]
}
返回结果怎么读?
非流式时,回复文字一般在:
data.choices[0].message.content
若开启了兼容模式,也可能直接在顶层 choices 里,和 OpenAI 官方格式类似。
GET /models — 查可用模型
调用聊天前,建议先拉一次模型列表,从返回里选 available: true 的 id 填到 model 字段。
curl https://你的域名/models \
-H "X-API-Key: 你的密钥"
返回里重点看:
data.default— 推荐默认模型 IDdata.models[].id— 模型标识,复制到/chat的modeldata.models[].available—false表示当前积分/权限不可用
POST /vision — 识图
上传一张图片,让 AI 用中文描述或回答你的问题。
方式一:JSON(图片用网址或 Base64)
{
"model": "openai/gpt-4o-mini",
"prompt": "请详细描述这张图片",
"imageUrl": "https://example.com/photo.jpg"
}
prompt 也可写成 question 或 text,意思相同。
方式二:表单上传文件(curl)
curl https://你的域名/vision \
-H "X-API-Key: 你的密钥" \
-F "model=openai/gpt-4o-mini" \
-F "prompt=图里有什么?" \
-F "image=@/path/to/photo.jpg"
表单字段名可用 image、images、file 或 files。
识图前先查模型
curl https://你的域名/vision/models \
-H "X-API-Key: 你的密钥"
GET /studio/models — 查生图 / 生视频模型
聊天室能力(生图、朗读、音乐、视频)的模型列表都在这里,和网页里切换模型是同一数据源。
curl https://你的域名/studio/models \
-H "X-API-Key: 你的密钥"
返回里重点看:
data.models.image— 生图模型列表,取id填到/studio/image的modeldata.models.video— 生视频模型,取id填到videoModeldata.recommended— 各能力推荐模型available: false— 当前积分不足或未充值,暂不可用
/studio/models 报价为准,如 Wan 系列)。8 秒高端按秒模型可能消耗数千积分,请先小参数试跑。
POST /studio/image — 生图(文生图 / 图生图)
使用 multipart/form-data 表单(不是 JSON)。同步返回,一般需等待 30 秒~数分钟。
表单字段
| 字段 | 必填 | 说明 |
|---|---|---|
prompt 或 text |
是 | 画面描述,中文或英文均可。例:「白底电商产品图,柔光,高清」 |
model |
否 | 生图模型 ID,来自 /studio/models 的 models.image[].id |
aspectRatio |
否 | 画面比例,常见 1:1、16:9、9:16、3:2 等(以模型支持为准) |
imageSize |
否 | 清晰度档位,如 1K、2K(部分模型支持,越大越慢、越耗积分) |
images / image |
否 | 参考图文件。上传后为图生图;可传多张(上限因模型而异) |
imageStrength |
否 | 参考图影响强度 0~1,仅图生图时有效 |
示例:纯文生图
curl https://你的域名/studio/image \
-H "X-API-Key: 你的密钥" \
-F "prompt=赛博朋克风格城市夜景,霓虹灯,电影感" \
-F "model=google/gemini-2.5-flash-image" \
-F "aspectRatio=16:9"
示例:图生图(带参考图)
curl https://你的域名/studio/image \
-H "X-API-Key: 你的密钥" \
-F "prompt=保持产品主体,换成圣诞红色氛围背景" \
-F "model=google/gemini-2.5-flash-image" \
-F "images=@/path/to/product.jpg"
返回结果
{
"success": true,
"data": {
"images": ["/studio/canvas-assets/用户ID/xxx.png"],
"caption": "可选的 AI 说明文字",
"model": "实际使用的模型 ID"
},
"meta": { "creditsCharged": 120, "creditsBalance": 880 }
}
images 里是图片地址。下载时在请求头带上同一个 X-API-Key:
curl "https://你的域名/studio/canvas-assets/用户ID/xxx.png" \
-H "X-API-Key: 你的密钥" \
-o result.png
POST /video/projects — 生视频(异步)
视频不能像聊天一样「一次请求立刻返回」。流程是:提交任务 → 轮询状态 → 完成后下载 MP4。 网页里的「生成视频」走的就是这套接口。
模式 mode=ai_full(文生视频 / 图生视频)
根据文字描述(和可选参考图)生成短视频,最常用。
| 字段 | 必填 | 说明 |
|---|---|---|
mode |
是 | 固定填 ai_full |
script / prompt / aiPrompt |
二选一 | 画面描述。例:「镜头缓慢推近,展示护肤品质地,柔焦背景」 |
videoModel 或 model |
否 | 视频模型 ID,来自 /studio/models 的 models.video |
aspectRatio |
否 | 16:9 横屏、9:16 竖屏、1:1 方形(部分模型不支持 1:1) |
durationSec |
否 | 时长(秒),如 5、8。不写则按模型默认 |
videoResolution |
否 | 如 720p、1080p(视模型支持) |
generateAudio |
否 | 1 生成自带音效,0 无声(部分模型不支持开关) |
firstFrameImage |
否 | 首帧参考图文件 → 图生视频 |
endFrameImage |
否 | 尾帧参考图(部分模型支持) |
styleReferenceImage |
否 | 风格参考图 |
示例:提交文生视频任务
curl https://你的域名/video/projects \
-H "X-API-Key: 你的密钥" \
-F "mode=ai_full" \
-F "prompt=一只橘猫在窗台上晒太阳,写实风格,慢镜头" \
-F "videoModel=google/veo-3.1-lite" \
-F "aspectRatio=16:9" \
-F "durationSec=8"
成功返回 HTTP 202,表示任务已排队:
{
"success": true,
"data": {
"project": { "id": "vp_abc123", "status": "queued", ... },
"pollUrl": "/video/projects/vp_abc123"
}
}
轮询任务状态
curl https://你的域名/video/projects/vp_abc123 \
-H "X-API-Key: 你的密钥"
data.project.status 常见值:
queued— 排队中generating_video— 正在生成画面compositing— 合成中completed— 完成,此时outputUrl有 MP4 下载地址failed— 失败,看error字段
建议每 5~10 秒轮询一次,直到 completed 或 failed。高端模型可能需要数分钟。
限流说明:GET /video/projects/{id} 状态查询不计入 POST /chat 的每分钟 30 次限制;仅 POST /video/projects 创建任务受 chat 限流。遇 429 请退避重试。
curl "https://你的域名/studio/projects/vp_abc123/final.mp4?..." \
-H "X-API-Key: 你的密钥" \
-o video.mp4
outputUrl 是带签名的完整路径,直接复制响应里的 URL 即可,不必手拼。
模式 mode=compose(素材合成,进阶)
上传已有视频,自动加 BGM / 配音后输出新 MP4。需额外字段:
sourceVideo— 视频文件(必填)script— 旁白文案(开启配音时)voiceEnabled—1开配音,0关voiceMode—tts智能朗读 或clone声音克隆voiceReference— 克隆模式下的参考音频(3~25 秒)
素材合成 27 积分/次;与 AI 文生视频计费不同。
生图 / 生视频:Python 完整示例
import time
import requests
API_BASE = "https://你的域名"
HEADERS = {"X-API-Key": "synex_你的密钥"}
def generate_image(prompt: str) -> list[str]:
r = requests.post(
f"{API_BASE}/studio/image",
headers=HEADERS,
files={"prompt": (None, prompt), "aspectRatio": (None, "1:1")},
timeout=300,
)
r.raise_for_status()
return r.json()["data"]["images"]
def generate_video(prompt: str, poll_sec: int = 8) -> str:
r = requests.post(
f"{API_BASE}/video/projects",
headers=HEADERS,
data={
"mode": "ai_full",
"prompt": prompt,
"aspectRatio": "16:9",
"durationSec": "5",
},
timeout=60,
)
r.raise_for_status()
project_id = r.json()["data"]["project"]["id"]
while True:
p = requests.get(f"{API_BASE}/video/projects/{project_id}", headers=HEADERS, timeout=30)
p.raise_for_status()
proj = p.json()["data"]["project"]
if proj["status"] == "completed":
return proj["outputUrl"]
if proj["status"] == "failed":
raise RuntimeError(proj.get("error") or "video failed")
time.sleep(poll_sec)
# print(generate_image("极简风咖啡海报"))
# print(generate_video("夕阳下的海边,电影感慢镜头"))
用 Python 调用聊天(复制即用)
import requests
API_BASE = "https://你的域名" # 不要末尾斜杠
API_KEY = "synex_你的密钥"
def chat(user_text: str) -> str:
r = requests.post(
f"{API_BASE}/chat",
headers={
"Content-Type": "application/json",
"X-API-Key": API_KEY,
},
json={
"model": "openai/gpt-4o-mini",
"stream": False,
"messages": [{"role": "user", "content": user_text}],
},
timeout=120,
)
r.raise_for_status()
body = r.json()
# 统一信封格式
data = body.get("data", body)
return data["choices"][0]["message"]["content"]
if __name__ == "__main__":
print(chat("你好"))
用 JavaScript 调用
const API_BASE = "https://你的域名";
const API_KEY = "synex_你的密钥";
async function chat(userText) {
const res = await fetch(`${API_BASE}/chat`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": API_KEY,
},
body: JSON.stringify({
model: "openai/gpt-4o-mini",
stream: false,
messages: [{ role: "user", content: userText }],
}),
});
const body = await res.json();
if (!res.ok) throw new Error(body.error?.message || res.statusText);
const data = body.data ?? body;
return data.choices[0].message.content;
}
chat("你好").then(console.log);
常见错误与处理
| HTTP / 错误码 | 含义 | 怎么办 |
|---|---|---|
401 UNAUTHORIZED |
密钥错误或没带 Key | 检查 X-API-Key 是否完整、是否多了空格;或在用户中心重置 Key |
402 INSUFFICIENT_CREDITS |
积分不够 | 到产品站用户中心充值 |
403 PLAN_FEATURE_LOCKED |
当前账户不能用该功能/模型 | 换 /models 里 available: true 的模型,或充值后重试 |
| 429 | 请求太频繁 | 稍等再试;视频轮询 GET 与聊天 POST 限流分开。批量脚本请分散账号或降低 POST 频率 |
400 VALIDATION_ERROR |
参数格式不对 | 检查 JSON 是否合法、messages 是否为数组 |
计费说明
还有问题?
- 网页里试调:Demo 演示页
- 完整字段列表:Swagger 接口参考
- 管理密钥:产品站 → 用户中心 → 开发者 API