跳转到主要内容
🎉 限时免费 — MiniMax: MiniMax M3 Free 现在体验 🔥

万相 2.7 文生 / 图生视频(DashScope 原生协议)

模型能力必填字段
wan2.7-t2v文生视频input.prompt
wan2.7-i2v图生视频(首帧驱动,可选尾帧)input.prompt、input.img_url

万相 2.7 的官方协议是阿里百炼 DashScope 的 视频合成异步接口,ModelGo 网关按官方路径与请求/响应格式原样接收:创建 → 轮询 → 取内容。请求体与阿里百炼文档一致,具体由哪家供应商渲染由网关路由决定,对调用方不可见。

使用阿里官方 DashScope SDK 时,只需把 base_url(DASHSCOPE_HTTP_BASE_URL)指向 https://api.modelgo.com、api_key 换成 ModelGo API Key。

1. 创建任务

POST https://api.modelgo.com/api/v1/services/aigc/video-generation/video-synthesis

请求头:Authorization: Bearer $MODELGO_API_KEY、X-DashScope-Async: enable、Content-Type: application/json。

文生视频

bash
curl https://api.modelgo.com/api/v1/services/aigc/video-generation/video-synthesis \
  -H "Authorization: Bearer $MODELGO_API_KEY" \
  -H "X-DashScope-Async: enable" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan2.7-t2v",
    "input": {"prompt": "一只毛茸茸的橘猫在阳光下的窗台上玩毛线球"},
    "parameters": {"resolution": "1080P", "duration": 5, "prompt_extend": true}
  }'

图生视频

bash
curl https://api.modelgo.com/api/v1/services/aigc/video-generation/video-synthesis \
  -H "Authorization: Bearer $MODELGO_API_KEY" \
  -H "X-DashScope-Async: enable" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan2.7-i2v",
    "input": {"prompt": "猫缓缓转头并眨眼", "img_url": "https://example-cdn.com/cat.jpg"},
    "parameters": {"resolution": "720P", "duration": 5}
  }'

响应

json
{
  "output": {"task_id": "gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5", "task_status": "PENDING", "submit_time": "2026-09-07 17:05:59.000"},
  "request_id": "gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5"
}

output.task_id 是网关任务 ID,轮询与取内容都用它。

2. 参数说明

字段类型适用说明
modelstring全部wan2.7-t2v 或 wan2.7-i2v
input.promptstring全部必填。画面内容与动作描述
input.img_urlstringi2v必填。首帧图片的公网可直接下载的 URL。wan2.7-t2v 请求不得携带 img_url / last_frame_url(会被拒绝,不会静默按文生视频处理)
input.last_frame_urlstringi2v尾帧图片 URL,与首帧配合生成首尾帧视频
input.audio_urlstring全部驱动音频 URL(wav/mp3)
input.negative_promptstring全部反向提示词
parameters.resolutionstring全部分辨率档位 720P / 1080P,缺省 1080P
parameters.sizestringt2v与 resolution 等价的像素写法,如 1280*720、1920*1080
parameters.durationint全部时长(秒),缺省 5
parameters.prompt_extendboolean全部是否让上游智能改写提示词
parameters.watermarkboolean全部是否加水印
parameters.seedint全部随机种子
parameters.audioboolean全部是否生成音频

分辨率档位

档位16:99:161:14:33:4
720P1280*720720*1280960*9601088*832832*1088
1080P1920*10801080*19201440*14401632*12481248*1632
  • 只提供 720P / 1080P。 传 4K 或表外 size 会在创建时被拒(HTTP 400),不会静默降档生成,也不产生费用。
  • 按可交付档位选路。 网关只把请求交给能按所声明档位交付的供应商(如 wan2.7-t2v 的 720P 目前仅由官方百炼通道渲染),不会由其他供应商按 1080P 代出再按 720P 计费;若当前没有能出该档位的供应商,创建返回 400,不产生费用。
  • input 中除上表字段外的键(如 first_clip_url、ref_images_url)不被本接口支持,会被拒绝而不是忽略。

首帧图片的要求(i2v)

  • 必须是上游服务器能直接 GET 到的直链:无鉴权、无跳转、不依赖 Referer / Cookie。
  • 部分站点直链对非浏览器抓取返回 403,会导致任务在生成阶段失败(task_status=FAILED),不计费。建议使用自有对象存储或 CDN 地址。

3. 轮询任务

GET https://api.modelgo.com/api/v1/tasks/{task_id}

bash
curl https://api.modelgo.com/api/v1/tasks/gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5 \
  -H "Authorization: Bearer $MODELGO_API_KEY"

完成时:

json
{
  "output": {
    "task_id": "gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5",
    "task_status": "SUCCEEDED",
    "submit_time": "2026-09-07 17:05:59.000",
    "end_time": "2026-09-07 17:09:06.000",
    "video_url": "https://api.modelgo.com/v1/videos/gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5/content"
  },
  "usage": {"video_duration": 6, "video_count": 1},
  "request_id": "gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5"
}
  • task_status:PENDING → RUNNING → SUCCEEDED / FAILED。失败时 output.code / output.message 给出原因,任务不计费。
  • 生成耗时通常 1–3 分钟,请按 5–10 秒间隔轮询并带退避。
  • output.video_url 指向网关内容接口,需带 API Key 下载;不要持久化,产物有保留期。

4. 下载视频

GET https://api.modelgo.com/v1/videos/{task_id}/content

bash
curl https://api.modelgo.com/v1/videos/gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5/content \
  -H "Authorization: Bearer $MODELGO_API_KEY" -o cat.mp4

返回 video/mp4 字节流,支持 Range。只有任务所属 API Key(或同租户控制台登录态)能访问;未完成返回 409,过期或不存在返回 404。

5. 完整示例(Python,官方 SDK 风格)

python
import os, time, requests

BASE = "https://api.modelgo.com"
H = {"Authorization": f"Bearer {os.environ['MODELGO_API_KEY']}", "X-DashScope-Async": "enable"}

def synthesize(model: str, inp: dict, params: dict, out: str, timeout: int = 600) -> None:
    r = requests.post(f"{BASE}/api/v1/services/aigc/video-generation/video-synthesis",
                      json={"model": model, "input": inp, "parameters": params}, headers=H, timeout=30)
    r.raise_for_status()
    task_id = r.json()["output"]["task_id"]
    deadline = time.time() + timeout
    while True:
        if time.time() > deadline:
            raise TimeoutError(task_id)
        o = requests.get(f"{BASE}/api/v1/tasks/{task_id}", headers=H, timeout=30).json()["output"]
        if o["task_status"] == "SUCCEEDED":
            break
        if o["task_status"] == "FAILED":
            raise RuntimeError(o.get("message") or o.get("code"))
        time.sleep(8)
    with requests.get(o["video_url"], headers=H, stream=True, timeout=120) as c:
        c.raise_for_status()
        with open(out, "wb") as f:
            for chunk in c.iter_content(1 << 20):
                f.write(chunk)

synthesize("wan2.7-t2v", {"prompt": "一只毛茸茸的橘猫在阳光下玩毛线球"}, {"resolution": "1080P", "duration": 5}, "t2v.mp4")
synthesize("wan2.7-i2v", {"prompt": "猫缓缓转头并眨眼", "img_url": "https://example-cdn.com/cat.jpg"}, {"resolution": "720P", "duration": 5}, "i2v.mp4")

6. 计费口径

  • 按视频秒数 × 分辨率档位单价计费;创建时按请求的 duration 预授权冻结,任务完成后按实际交付秒数结算(usage.video_duration)。上游可能多交付 1 秒(请求 5 秒、交付 6 秒),按 6 秒结算。
  • 未传时长按缺省值预授权(万相 / 可灵 5 秒,Veo 8 秒),缺省值同时发给供应商;结算取供应商回报的实际交付秒数,四舍五入到整秒(如 5.041 → 5,5.5 → 6),可能与请求时长相差 ±1 秒。
  • 创建被拒(400)或生成失败(FAILED)不计费,预授权自动释放。
  • 各模型单价以控制台「模型列表」中的价格为准。

常见错误

现象原因处理
创建返回 400resolution / size 不在 720P / 1080P 内;缺 input.prompt;i2v 缺 input.img_url;t2v 带了 input.img_url / input.last_frame_url(图生视频请用 wan2.7-i2v);input 含不支持的键;当前无供应商能出所请求档位按参数表修正或换模型/档位
task_status=FAILED上游无法下载 img_url 或生成失败换成公网可直接下载的直链
轮询返回 task_not_foundtask_id 不是本 Key 创建的任务核对 task_id 与 Key
/content 返回 409 / 404任务未完成 / 产物过期先轮询到 SUCCEEDED;及时下载