OpenAI 兼容接口 · 对话 / 生图 / 生视频 / 模型与账户查询
AI-123 提供一套与 OpenAI 接口风格兼容的 HTTP API,覆盖对话(多模态图片理解 + SSE 流式)、文生图 / 图生图、文生视频 / 图生视频、模型与账户查询。只需三步即可接入:
sk-xxxx…)。Authorization 头里带上 Bearer sk-xxx。price 为准,成功后结算、失败自动退款,请放心接入。
所有接口都要求通过 API 密钥鉴权。在请求头里携带:
HTTP HeaderAuthorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
密钥说明:
sk- 开头,由 48 位字符组成。所有端点都挂在 /v1 前缀下。以本站主域名为例:
Base URLhttps://www.ai-123.top/v1
下文出现的相对路径(如 /v1/models)都指在该根地址后面拼接。
接口返回体统一为 JSON,但查询类与生成类信封不同,请注意区分:
成功返回 { code: 0, data: … }:
JSON{ "code": 0, "data": { ... } }
成功时直接返回业务数据(无 code 信封),如生视频提交返回:
JSON{ "created": 1750000000000, "task_id": "……", "status": "PROCESSING", "data": [], "cost": 0.42 }
任何错误(参数错误、鉴权失败、余额不足、生成失败等)统一返回:
JSON{ "code": 400, // HTTP 状态码同此值 "message": "错误原因描述" }
POST /v1/images/generations)已统一为 OpenAI 通用格式,其错误返回采用 OpenAI 标准结构 { "error": { "message", "type", "param", "code" } },而非上方 { code, message }。详见「08. 生图」章节。| 状态码 | 含义 |
|---|---|
| 400 | 请求参数错误 / 余额不足 / 触发敏感词 |
| 401 | 缺少或无效的 API 密钥 |
| 403 | 无权限(开放接口未开启 / 账号被禁用) |
| 404 | 资源不存在(如任务 ID 不存在或不属于当前密钥) |
| 429 | 触发限速(免费模型频次受限) |
| 500 | 服务器内部错误 |
| 502 | 生成失败(费用已自动退回) |
| 503 | 系统维护中,开放接口暂不可用 |
返回平台对外开放的模型列表及其计费价格。可选 type 参数按类型过滤(chat / image / video / audio)。
cURLcurl "https://www.ai-123.top/v1/models?type=video" \ -H "Authorization: Bearer sk-xxx"
JSON{ "code": 0, "data": { "object": "list", "data": [ { "id": "Seedance 1.0 Pro", // 调用时使用的 model 值 "object": "model", "created": 1750000000, "owned_by": "渠道品牌", "type": "video", // chat / image / video / audio "price": "0.42" // 计费单价(字符串,可能为小数) } ] } }
model 字段请填写列表里返回的 id(即模型展示名)。返回当前密钥所属账户的余额信息,以及最近 20 条充值 / 消费 / 退款流水。
cURLcurl "https://www.ai-123.top/v1/account" \ -H "Authorization: Bearer sk-xxx"
JSON{ "code": 0, "data": { "email": "user@example.com", "nickname": "示例用户", "balance": 88.6, // 当前余额(元) "currency": "CNY", "is_agent": false, // 是否为代理商 "recent_transactions": [ /* 交易流水 */ ] } }
发起对话,兼容 OpenAI Chat Completions 结构。支持多模态(图片理解)与 SSE 流式输出。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 必填 | 模型名称(模型列表接口返回的 id) |
messages | array | 必填 | 对话消息数组,每条含 role(user/assistant/system)与 content |
temperature | number | 可选 | 采样温度,0 ~ 2,默认按模型设定 |
stream | boolean | 可选 | 是否流式返回(SSE);默认 false |
当模型支持图片理解时,content 可为内容块数组,混合文本与图片:
JSON{ "role": "user", "content": [ { "type": "text", "text": "描述一下这张图" }, { "type": "image_url", "image_url": { "url": "https://example.com/photo.jpg" } } ] }
cURLcurl "https://www.ai-123.top/v1/chat/completions" \ -H "Authorization: Bearer sk-xxx" \ -H "Content-Type: application/json" \ -d '{ "model": "模型名称", "messages": [{"role":"user","content":"你好"}] }'
JSON{ "id": "chatcmpl-xxxx", "object": "chat.completion", "created": 1750000000, "model": "模型名称", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "你好!有什么可以帮你的?" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 12, "completion_tokens": 18 }, "cost": 0.0001 }
设置 "stream": true 后,服务端以 text/event-stream 逐段推送,每段格式:
SSEdata: {"id":"chatcmpl-xxxx","object":"chat.completion.chunk","created":1750000000,"model":"模型名称","choices":[{"index":0,"delta":{"content":"你"},"finish_reason":null}]} data: {"id":"chatcmpl-xxxx",...,"choices":[{"index":0,"delta":{"content":"好"},"finish_reason":null}]} data: {"id":"chatcmpl-xxxx",...,"choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":12,"completion_tokens":18},"cost":0.0001} data: [DONE]
客户端逐行读取,遇到 data: [DONE] 表示结束;最后一条携带 finish_reason: "stop" 与 usage / cost。
文本或参考图生图。同步返回:服务端会等出图完成后一次性返回结果(最长约 8 分钟),无需轮询。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 必填 | 模型名称 |
prompt | string | 必填 | 描述文字(≤4000 字) |
n | number | 可选 | 单批张数,默认 1,上限由模型配置决定(一般 ≤8) |
size | string | 可选 | 画幅尺寸,如 1024x1024 |
resolution | string | 可选 | 清晰度档位(1K/2K/3K/4K),仅后台配置了档位的模型生效 |
image | string | string[] | 可选 | 参考图 URL(图生图用);一次最多传几张由模型后台配置决定(未配置默认 4 张) |
extra | object | 可选 | 扩展参数(一般不用,用于实现一些特殊效果) |
cURLcurl "https://www.ai-123.top/v1/images/generations" \ -H "Authorization: Bearer sk-xxx" \ -H "Content-Type: application/json" \ -d '{ "model": "模型名称", "prompt": "一只戴着宇航员头盔的柯基犬,赛博朋克风格", "n": 1, "size": "1024x1024" }'
JSON{ "model": "模型名称", "prompt": "把这张照片重绘成水彩插画风格", "image": [ "https://example.com/ref1.jpg", "https://example.com/ref2.jpg" ], "n": 1 }
JSON{ "created": 1750000000, "data": [ { "url": "https://cdn.ai-123.top/uploads/xxx.png" }, { "url": "https://cdn.ai-123.top/uploads/yyy.png" } ] }
成功响应与 OpenAI images/generations 完全一致:created 为 Unix 秒级时间戳,data 数组每个元素为 { "url": "..." }。
JSON{ "error": { "message": "生成失败,费用已退回", "type": "api_error", "param": null, "code": null } }
失败响应采用 OpenAI 标准错误结构 { "error": { ... } },type 取值:invalid_request_error(参数错误)/ authentication_error(鉴权失败)/ permission_error(无权限,如接口未开启或账号被禁用)/ not_found_error(模型不存在)/ rate_limit_error(限速)/ api_error(服务端或生成失败)。
文本 / 图 / 音频 / 视频生视频。异步返回:提交后立即返回任务 ID,需用「任务查询」接口轮询拿到成片。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 必填 | 模型名称 |
prompt | string | 必填 | 描述文字(≤4000 字) |
seconds | number | 可选 | 时长(秒),1 ~ 600,实际按模型能力收敛 |
size | string | 可选 | 画面比例,如 16:9 / 9:16 |
image | string | string[] | 可选 | 参考图 URL;一次最多传几张由模型后台配置决定(未配置默认 30 张,超出部分会被忽略) |
audio | string | string[] | 可选 | 参考音频 URL(只有支持参考音频的模型才生效,最多传几张由模型后台配置决定) |
video | string | string[] | 可选 | 参考视频 URL(只有支持参考视频的模型才生效,最多传几张由模型后台配置决定) |
first_frame | string | 可选 | 首帧图 URL。给首尾帧让模型生成中间过渡画面(需模型支持该能力) |
last_frame | string | 可选 | 尾帧图 URL。与 first_frame 搭配,两个至少填一个 |
extra | object | 可选 | 扩展参数(一般不用) |
JSON{ "model": "模型名称", "prompt": "让画面中的角色眨眼并微笑,镜头轻微推近", "image": [ "https://example.com/ref1.jpg", "https://example.com/ref2.jpg" ], "audio": [ "https://example.com/ref.mp3" ], "video": [ "https://example.com/ref.mp4" ], "seconds": 15 }
JSON{ "model": "模型名称", "prompt": "从清晨的城市街景平滑过渡到夜晚的霓虹夜景", "first_frame": "https://example.com/first.jpg", "last_frame": "https://example.com/last.jpg", "seconds": 8 }
JSON{ "created": 1750000000000, "task_id": "……", "status": "PROCESSING", "data": [], "cost": 0.42 }
按任务 ID 查询异步任务(生视频)的状态与结果。生图已同步返回,无需轮询。
cURLcurl "https://www.ai-123.top/v1/tasks/替换为task_id" \ -H "Authorization: Bearer sk-xxx"
JSON{ "code": 0, "data": { "id": "……", "type": "video", "status": "SUCCESS", // PROCESSING / SUCCESS / FAILED "progress": 100, "created": 1750000000000, "finished": 1750000100000, "cost": 0.42, "error": null, "prompt": "原始提示词", "data": [ { "url": "https://cdn.ai-123.top/uploads/xxx.mp4" } ] } }
| 状态 | 含义 |
|---|---|
| PROCESSING | 生成中,请稍后再次轮询 |
| SUCCESS | 成功,结果在 data[].url |
| FAILED | 失败,原因见 error(费用已退回) |
Pythonimport requests BASE = "https://www.ai-123.top/v1" KEY = "sk-xxx" H = {"Authorization": f"Bearer {KEY}"} # 1. 获取模型列表 r = requests.get(f"{BASE}/models", headers=H) print("models:", r.json()) # 2. 生视频(异步) r = requests.post(f"{BASE}/videos/generations", headers=H, json={ "model": "模型名称", "prompt": "镜头缓慢推进,雨夜霓虹街道上行人撑伞走过", "seconds": 15, }) task = r.json()["task_id"] print("task_id:", task) # 3. 轮询任务直到完成 import time while True: res = requests.get(f"{BASE}/tasks/{task}", headers=H).json()["data"] if res["status"] in ("SUCCESS", "FAILED"): print("final:", res) break time.sleep(5)
JavaScriptconst BASE = "https://www.ai-123.top/v1"; const KEY = "sk-xxx"; // 对话(非流式) const res = await fetch(`${BASE}/chat/completions`, { method: "POST", headers: { "Authorization": `Bearer ${KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ model: "模型名称", messages: [{ role: "user", content: "你好" }], }), }); console.log(await res.json());
cURLcurl -N "https://www.ai-123.top/v1/chat/completions" \ -H "Authorization: Bearer sk-xxx" \ -H "Content-Type: application/json" \ -d '{"model":"模型名称","messages":[{"role":"user","content":"你好"}],"stream":true}'
生图正常是同步返回的。仅在等待超过约 8 分钟仍未出图时才会返回 502 超时错误(OpenAI 错误格式 { "error": { ... } }),此时任务仍在后台执行,请稍后重试或联系客服。
生成失败时费用会自动退回账户,无需额外操作。对话接口按 token 实时结算,余额不足会返回 400。
参考素材是否生效取决于所调模型是否支持对应类型;不支持时会安全丢弃而非报错。请先确认模型能力。
登录后进入「开放 API」页面,即可创建、复制、删除 API 密钥。
不必。两个至少填一个就行——只填首帧、只填尾帧、首尾都填都可以。具体效果取决于模型能力。