两套接口并存: /api/portal/* (工作台,驼峰字段) · /v1/* (OpenAI Videos 风格,下划线字段)
把卡密放在请求头,两种写法等价:
X-Wan-Card: WAN-XXXX-XXXX
Authorization: Bearer WAN-XXXX-XXXX
不要写进 URL 或查询参数,会进浏览器历史和访问日志。
按次计费:1 条成片扣 1 次。提交后任务进入候车班,发车后按顺序生成。
/api/portal/merge {"code":"WAN-XXXX-XXXX"}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": "等待发车"}
}
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 字 |
ratio | 9:16 / 16:9 / 1:1 / adaptive |
resolution | 480P / 720P / 1080P |
duration | 2–15 秒 |
copies | 份数,按份数扣次 |
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
两步:先上传拿素材 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(参考网页)
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}。
| HTTP | 含义 |
|---|---|
| 401 | 卡密无效或未登录 |
| 403 | 次数不足 |
| 409 | 已发车,不能取消 |
| 429 | 请求过快,等待后重试 |
| 503 | 维护中或班次未开放 |