WAN Portal 接口文档 购买 EN

接口文档

两套接口并存: /api/portal/* (工作台,驼峰字段) · /v1/* (OpenAI Videos 风格,下划线字段)

1. 鉴权

把卡密放在请求头,两种写法等价:

X-Wan-Card: WAN-XXXX-XXXX
Authorization: Bearer WAN-XXXX-XXXX

不要写进 URL 或查询参数,会进浏览器历史和访问日志。

2. 计费与班次

按次计费:1 条成片扣 1 次。提交后任务进入候车班,发车后按顺序生成。

3. 额度与班次查询

CARD='WAN-XXXX-XXXX'
HOST='https://wan.wlex-br.com'

curl -sS $HOST/api/portal/me   -H "X-Wan-Card: $CARD"
curl -sS $HOST/api/portal/ride -H "X-Wan-Card: $CARD"
{
  "code": "WAN-****-1234",
  "remaining": 20,
  "kind": "shot",
  "unit": "次",
  "ride": {"boarded": 420, "running": 1854, "accepting": true, "label": "等待发车"}
}

4. 提交任务

curl -sS -X POST $HOST/api/portal/jobs \
  -H "X-Wan-Card: $CARD" -H 'Content-Type: application/json' \
  -d '{
    "id": "3f1c2f2e-0000-4000-8000-000000000001",
    "prompt": "一位巴西女主播在明亮的直播间展示产品,手持镜头,自然光",
    "ratio": "9:16",
    "resolution": "1080P",
    "duration": 15,
    "copies": 1
  }'
字段说明
id必填,UUID,用于幂等
prompt≤ 20000 字
ratio9:16 / 16:9 / 1:1 / adaptive
resolution480P / 720P / 1080P
duration2–15 秒
copies份数,按份数扣次

5. 查询与下载

curl -sS "$HOST/api/portal/jobs?limit=20" -H "X-Wan-Card: $CARD"
curl -sS "$HOST/api/portal/jobs/{id}"     -H "X-Wan-Card: $CARD"
curl -sS "$HOST/api/portal/jobs/{id}/video?dl=1" -H "X-Wan-Card: $CARD" -o out.mp4
curl -sS "$HOST/api/portal/jobs/{id}/poster"   -H "X-Wan-Card: $CARD" -o cover.jpg
curl -sS -X DELETE "$HOST/api/portal/jobs/{id}" -H "X-Wan-Card: $CARD"

任务字段: status(queued/running/succeeded/failed/cancelled) · progress · ahead · wait_detail

6. 素材(参考图)

两步:先上传拿素材 id,再在提交任务时引用。也可以直接走直传(presign → PUT → commit)。

# A. 直接上传(省事)
MID=$(curl -sS -X POST $HOST/api/portal/media \
  -H "X-Wan-Card: $CARD" \
  -F "file=@ref.png" -F "kind=image" -F "token=图1" | jq -r .id)

# B. 直传(批量上传更快)
P=$(curl -sS -X POST $HOST/api/portal/media/presign \
  -H "X-Wan-Card: $CARD" -H 'Content-Type: application/json' \
  -d '{"name":"ref.png","kind":"image","size":123456,"mime":"image/png"}')
KEY=$(echo "$P" | jq -r .key); PUT=$(echo "$P" | jq -r .url)
curl -sS -X PUT "$PUT" --data-binary @ref.png
MID=$(curl -sS -X POST $HOST/api/portal/media/commit \
  -H "X-Wan-Card: $CARD" -H 'Content-Type: application/json' \
  -d "{\"key\":\"$KEY\",\"name\":\"ref.png\",\"kind\":\"image\",\"token\":\"图1\"}" | jq -r .id)

# 提交时引用(role 决定模式)
curl -sS -X POST $HOST/api/portal/jobs -H "X-Wan-Card: $CARD" -H 'Content-Type: application/json' \
  -d '{"id":"","prompt":"图1 的主播在直播间展示产品","ratio":"9:16","resolution":"1080P","duration":15,
       "media":[{"id":"'"$MID"'","kind":"image","token":"图1","role":"ref"}]}'
role含义
ref参考图(自由模式)
first首帧
last尾帧(配合 first 即首尾帧)
edit / extend编辑 / 延长(指向已有视频)

限制:素材总数 ≤ 20;图 10 / 视频 5 / 音频 5;文档(file)与参考网页(link)二选一;单素材 1–15 秒;参考视频与成片合计 ≤ 30 秒;文件 ≤ 64MB。提示词里用「图1」指代素材。

# 不想上传的两类:直接给网址
"media": [
  {"kind": "link",      "name": "https://example.com/page", "role": "ref"},
  {"kind": "image_url", "name": "https://cdn.example.com/a.jpg", "token": "图1", "role": "ref"}
]

素材类型取值: image · image_url · video · audio · file(文档)· link(参考网页)

7. OpenAI 兼容层

curl -sS -X POST $HOST/v1/videos \
  -H "Authorization: Bearer $CARD" -H 'Content-Type: application/json' \
  -d '{"model":"wan-1080p","prompt":"a cat on a roof","seconds":10,"size":"720x1280"}'

curl -sS "$HOST/v1/videos/{id}" -H "Authorization: Bearer $CARD"
curl -sS "$HOST/v1/videos/{id}/content" -H "Authorization: Bearer $CARD" -o out.mp4
curl -sS "$HOST/v1/ride" -H "Authorization: Bearer $CARD"

ComfyUI 里把 base_url 填成 wan.wlex-br.com,API key 填卡密。

对话式出片: POST /v1/chat/completions —— 本站不阻塞等成片,直接返回任务句柄(含排队位置与 poll 地址),请轮询 /v1/videos/{id}。

8. 错误码

HTTP含义
401卡密无效或未登录
403次数不足
409已发车,不能取消
429请求过快,等待后重试
503维护中或班次未开放