卧龙AI · API 文档
获取 API Key →

开放接口

同一套模型、同一份积分。用工作台签发的 Key 调图片 / 视频生成,提交拿任务号,再查任务拿结果。 本页的示例域名就是当前站点,可直接复制。

1. 准备 Key

工作台 →「API 对接」→「+ 创建 API Key」,给它起个名字(比如「连载脚本」),完整 Key 会立刻弹出来。 Key 以 wl_ 开头,只在创建或重置时完整显示一次,服务端只存它的 sha256 指纹,丢了只能重置。

你能做的事结果
创建生成一把新 Key,立刻可用;每账号最多 20 把
停用 / 启用停用立刻生效(调用返回 401),随时可再打开
重置旧 Key 立即失效,同时给你一把新的
删除永久作废,不可恢复

所有接口都用标准 Bearer 头,不要把 Key 写进 query 或前端代码里:

Authorization: Bearer wl_你的key

Key 能做什么:查模型 / 出图 / 出视频 / 出文本 / 查任务 / 查余额。它只能访问自己账号的数据与积分。

2. 端点总表

方法路径作用计费
GET/v1/models可用模型与单价免费
GET/v1/credits积分余额免费
POST/v1/images/generations出图按张扣
POST/v1/videos/generations出视频按秒/按次扣
POST/v1/chat/completions出文本(可流式)按千字扣
GET/v1/tasks/{id}查任务状态与产物免费

3. 查模型与价格

GET /v1/models —— 返回启用中的模型,带单价(视频 credits_per_second、图片 credits_per_image、文本 credits_per_1k_chars)。

curl __BASE__/v1/models -H "Authorization: Bearer wl_你的key"
{
  "ok": true,
  "credits": 16328.43,
  "data": [
    { "id": "seedance-mini-480", "object": "model", "type": "video", "name": "特价渠道 Seedance 2.0 mini 480p", "credits_per_second": 3 },
    { "id": "gpt-image-2", "object": "model", "type": "image", "name": "GPT-image-2", "credits_per_image": 0.3 },
    { "id": "wolong-script", "object": "model", "type": "text", "name": "卧龙剧本", "credits_per_1k_chars": 2 }
  ]
}

4. 出图

POST /v1/images/generations

参数必填说明
prompt是画面描述,最长 500 字
model否模型 id,默认第一个启用模型
n否张数,后台可售集合里的值(通常 1 / 4 / 8)
imageSize否仅可选画质型号接受;以目录中该型号的 1K / 2K / 4K 规格为准
ratio否画面比例,如 4:5 / 1:1 / 16:9
style否风格 id(国漫 / 日漫 / 霓虹 / 水墨 / 厚涂)
wait否1 = 等到出结果再返回(最长 2 分钟)
curl -X POST "__BASE__/v1/images/generations?wait=1" \
  -H "Authorization: Bearer wl_你的key" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"雨夜霓虹下的女主","model":"gpt-image-2","n":4,"ratio":"4:5"}'
{
  "ok": true,
  "task": {
    "id": "task_xxx",
    "status": "succeeded",
    "cost": 1.2,
    "data": [{ "url": "/media/outputs/task_xxx/01.svg", "mime": "image/svg+xml" }]
  },
  "credits": 16327.23
}

Node(18+,原生 fetch)

const BASE = "__BASE__";
const KEY = "wl_你的key";

const r = await fetch(BASE + "/v1/images/generations?wait=1", {
  method: "POST",
  headers: { Authorization: "Bearer " + KEY, "Content-Type": "application/json" },
  body: JSON.stringify({ prompt: "雨夜霓虹下的女主", model: "gpt-image-2", n: 4, ratio: "4:5" })
});
const data = await r.json();
console.log(data.task.status, data.task.cost);
data.task.data.forEach((f) => console.log(BASE + f.url));

Python(requests)

import requests

r = requests.post("__BASE__/v1/images/generations", params={"wait": 1},
                  headers={"Authorization": "Bearer wl_你的key"},
                  json={"prompt": "雨夜霓虹下的女主", "model": "gpt-image-2", "n": 4, "ratio": "4:5"},
                  timeout=180)
task = r.json()["task"]
print(task["status"], task["cost"])
for f in task["data"]:
    print("__BASE__" + f["url"])

5. 出视频

POST /v1/videos/generations —— 默认异步:提交拿任务号,再轮询;加 ?wait=1 同步等(最长 3 分钟)。

参数必填说明
prompt是画面 / 剧情描述
model否模型 id,如 seedance-mini-480 / minimax-h3
duration否必须使用所选型号与画质支持的秒数;Seedance mini 480p 为 4–15 秒,Seedance 2.5 部分型号支持 30 秒
quality否该型号提供的画质档(如 480p、720p、768p、1080p);不同型号互不通用
ratio否必须使用该型号支持的比例;Seedance mini 480p 支持 16:9、9:16、1:1、4:3、3:4
wait否1 = 等到出结果
curl -X POST "__BASE__/v1/videos/generations" \
  -H "Authorization: Bearer wl_你的key" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"天桥上撑伞走过","model":"seedance-mini-480","duration":8,"quality":"480p","ratio":"9:16"}'

提交 → 轮询(Node)

const BASE = "__BASE__";
const KEY = "wl_你的key";
const H = { Authorization: "Bearer " + KEY, "Content-Type": "application/json" };

const created = await (await fetch(BASE + "/v1/videos/generations", {
  method: "POST", headers: H,
  body: JSON.stringify({ prompt: "天桥上撑伞走过", model: "seedance-mini-480", duration: 8, quality: "480p", ratio: "9:16" })
})).json();

let task = created.task;
while (task.status !== "succeeded" && task.status !== "failed") {
  await new Promise((r) => setTimeout(r, 3000));
  task = (await (await fetch(BASE + "/v1/tasks/" + task.id, { headers: H })).json()).task;
  console.log(task.status, task.progress + "%", task.stage || "");
}
console.log(task.data);

6. 查任务 / 余额

curl __BASE__/v1/tasks/task_xxx -H "Authorization: Bearer wl_你的key"
curl __BASE__/v1/credits -H "Authorization: Bearer wl_你的key"

任务状态:queued → running → succeeded / failed / canceled(接口里的 status 已把 done 映射成 succeeded)。失败会自动退积分。

7. 出文本(剧本 / 分镜 / 提示词扩写)

POST /v1/chat/completions —— 和图片、视频共用一把 Key、一份积分,按「提示 + 回复」总字数计费。

参数必填说明
messages否OpenAI 风格消息数组(system / user / assistant),最多 12 条
prompt否也可以直接给一句话,等价于一条 user 消息
system否给 prompt 模式加的系统指令
model否文本模型 id,如 wolong-script
max_chars否这次最多生成多少字
stream否true = SSE 流式
curl -X POST __BASE__/v1/chat/completions \
  -H "Authorization: Bearer wl_你的key" \
  -H "Content-Type: application/json" \
  -d '{"model":"wolong-script","messages":[{"role":"user","content":"雨夜天台,女主回头,写 6 个镜头"}]}'

响应是 OpenAI 兼容结构:choices[0].message.content 是正文,usage 是字数,另外多给 cost / credits。

流式(打字机效果)

加 "stream": true,返回 text/event-stream:每行 data: {...},增量在 choices[0].delta.content,末尾 data: [DONE],最后一条带 usage 与 cost。

curl -N -X POST __BASE__/v1/chat/completions \
  -H "Authorization: Bearer wl_你的key" \
  -H "Content-Type: application/json" \
  -d '{"model":"wolong-script","stream":true,"messages":[{"role":"user","content":"雨夜天台,写 3 个镜头"}]}'

Node 读流

const res = await fetch("__BASE__/v1/chat/completions", {
  method: "POST",
  headers: { Authorization: "Bearer wl_你的key", "Content-Type": "application/json" },
  body: JSON.stringify({ model: "wolong-script", stream: true, prompt: "雨夜天台,写 3 个镜头" })
});
const reader = res.body.getReader();
const dec = new TextDecoder();
let buf = "";
for (;;) {
  const { value, done } = await reader.read();
  if (done) break;
  buf += dec.decode(value, { stream: true });
  let i;
  while ((i = buf.indexOf("\n\n")) >= 0) {
    const line = buf.slice(0, i).trim();
    buf = buf.slice(i + 2);
    if (!line.startsWith("data:")) continue;
    const payload = line.slice(5).trim();
    if (payload === "[DONE]") return;
    const obj = JSON.parse(payload);
    const piece = (obj.choices && obj.choices[0] && obj.choices[0].delta && obj.choices[0].delta.content) || "";
    if (piece) process.stdout.write(piece);
  }
}

中途断开也按已经写出来的字数结算;余额只够多少字就写多少字,不会写超。

8. 当前价格

视频(积分/秒)

读取中…

图片(积分/张)

读取中…

文本(积分/千字)

读取中…

价格由平台实时下发(后台改价立即生效);按提交时的价格结算并立即扣除,失败自动退回。

9. 限流与错误码

限流按 Key 计:普通接口每分钟 120 次;文本(含流式)每分钟 30 次。超了返回 429,退避几秒再试即可。

HTTP含义处理
401Key 缺失、无效、已停用或已重置检查 Authorization: Bearer;重置过就换新 Key
402积分不足看返回里的 need / balance,充值或换便宜模型
400参数不对(时长 / 张数 / 比例不在可售范围等)看 error 文案,或先 GET /v1/models + 价格页确认可售集合
404任务或接口不存在确认任务号属于当前 Key
429调用太快退避重试(见上面的限流说明)
502上游通道报错(文本流式)看 error;后台「系统设置 → 日志」能看到上游返回

失败的任务会按 refundOnFailure 自动退积分,流水在<工作台 → 账号 → 积分明细>里能查到。

卧龙AI · 为创作者而生。文档随价格与接口实时更新。