POST
https://api.yuannengai.com
/
v1
/
videos
curl --request POST \
  --url https://api.yuannengai.com/v1/videos \
  --header 'Authorization: Bearer <token>' \
  -F "prompt=一只小鸭子在月光下奔跑" \
  -F "model=wan2.5-t2v-preview" \
  -F "watermark=true" \
  -F "seconds=5" \
  -F "size=1920*1080"
{
  "code": 200,
  "data": {
    "task_id": "e3bf7f60-218e-4b5b-b81d-ac571af8ce51",
    "task_status": "PENDING"
  }
}
  • 异步处理模式,返回任务 ID 用于后续查询
  • 使用 multipart/form-data 格式提交请求
  • 支持文本生成视频
  • 生成的视频链接需要 URL 解码后使用
curl --request POST \
  --url https://api.yuannengai.com/v1/videos \
  --header 'Authorization: Bearer <token>' \
  -F "prompt=一只小鸭子在月光下奔跑" \
  -F "model=wan2.5-t2v-preview" \
  -F "watermark=true" \
  -F "seconds=5" \
  -F "size=1920*1080"
{
  "code": 200,
  "data": {
    "task_id": "e3bf7f60-218e-4b5b-b81d-ac571af8ce51",
    "task_status": "PENDING"
  }
}

认证方式

Authorization
string
必填
所有接口均需要使用 Bearer Token 进行认证获取 API Key:访问 API Key 管理页面 获取您的 API Key使用时在请求头中添加:
Authorization: Bearer YOUR_API_KEY

请求参数

请求使用 multipart/form-data 格式,而非 JSON 格式。
model
string
必填
视频生成模型名称支持的模型:
  • wan2.5-t2v-preview - Wan2.5 文生视频
  • wan2.6-t2v-preview - Wan2.6 文生视频(更新版本)
prompt
string
必填
视频生成的文本描述建议提供详细、具体的描述以获得更好的生成效果。模型会自动优化和扩展您的提示词。
seconds
string
视频时长(秒)支持的时长:3510默认值:5
size
string
视频分辨率支持的格式:
  • 1920*1080 - 1080P 横屏
  • 1080*1920 - 1080P 竖屏
  • 1280*720 - 720P 横屏
  • 720*1280 - 720P 竖屏
默认值:1280*720
watermark
string
是否添加水印
  • true - 添加水印
  • false - 不添加水印
默认值:false

查询任务状态

提交任务后,使用任务 ID 查询生成状态:
curl 'https://api.yuannengai.com/v1/videos/{task_id}' \
  -H "Authorization: Bearer <token>"

任务状态响应

{
  "code": 200,
  "data": {
    "task_id": "e3bf7f60-218e-4b5b-b81d-ac571af8ce51",
    "task_status": "SUCCEEDED",
    "video_url": "https://dashscope-result-sh.oss-accelerate.aliyuncs.com/...",
    "orig_prompt": "一只小鸭子在月光下奔跑",
    "actual_prompt": "夜景,极端全景,月光照明,冷色调...",
    "submit_time": "2026-01-07 18:18:21.348",
    "end_time": "2026-01-07 18:20:19.404"
  }
}

响应字段说明

task_id
string
任务唯一标识符
task_status
string
任务状态:PENDING(等待中)、RUNNING(处理中)、SUCCEEDED(成功)、FAILED(失败)
video_url
string
生成的视频 URL(需要 URL 解码
orig_prompt
string
原始提示词
actual_prompt
string
模型优化后的实际提示词
submit_time
string
任务提交时间
end_time
string
任务完成时间

完整示例

Python 完整流程

import requests
import time
from urllib.parse import unquote

API_KEY = "your-api-key"
BASE_URL = "https://api.yuannengai.com"

def create_video(prompt, model="wan2.5-t2v-preview", seconds="5", size="1920*1080"):
    """提交视频生成任务"""
    url = f"{BASE_URL}/v1/videos"
    
    data = {
        "prompt": prompt,
        "model": model,
        "seconds": seconds,
        "size": size,
        "watermark": "false"
    }
    
    headers = {"Authorization": f"Bearer {API_KEY}"}
    
    response = requests.post(url, data=data, headers=headers)
    result = response.json()
    
    if result.get("code") == 200:
        return result["data"]["task_id"]
    else:
        raise Exception(f"创建任务失败: {result}")

def get_task_status(task_id):
    """查询任务状态"""
    url = f"{BASE_URL}/v1/videos/{task_id}"
    headers = {"Authorization": f"Bearer {API_KEY}"}
    
    response = requests.get(url, headers=headers)
    return response.json()

def wait_for_video(task_id, timeout=300, interval=10):
    """等待视频生成完成"""
    start_time = time.time()
    
    while time.time() - start_time < timeout:
        result = get_task_status(task_id)
        data = result.get("data", {})
        status = data.get("task_status")
        
        print(f"任务状态: {status}")
        
        if status == "SUCCEEDED":
            # URL 解码获取最终视频链接
            video_url = unquote(data["video_url"])
            return video_url
        elif status == "FAILED":
            raise Exception(f"视频生成失败: {data}")
        
        time.sleep(interval)
    
    raise TimeoutError("视频生成超时")

# 使用示例
if __name__ == "__main__":
    # 1. 提交任务
    task_id = create_video(
        prompt="一只可爱的小猫在花园里追蝴蝶,阳光明媚",
        seconds="5",
        size="1920*1080"
    )
    print(f"任务已提交,ID: {task_id}")
    
    # 2. 等待完成并获取视频
    try:
        video_url = wait_for_video(task_id)
        print(f"视频生成完成: {video_url}")
        
        # 3. 下载视频
        response = requests.get(video_url)
        with open("output.mp4", "wb") as f:
            f.write(response.content)
        print("视频已保存到 output.mp4")
        
    except Exception as e:
        print(f"错误: {e}")

JavaScript 完整流程

const API_KEY = 'your-api-key'
const BASE_URL = 'https://api.yuannengai.com'

async function createVideo(prompt, model = 'wan2.5-t2v-preview', seconds = '5', size = '1920*1080') {
  const formData = new FormData()
  formData.append('prompt', prompt)
  formData.append('model', model)
  formData.append('seconds', seconds)
  formData.append('size', size)
  formData.append('watermark', 'false')

  const response = await fetch(`${BASE_URL}/v1/videos`, {
    method: 'POST',
    headers: { Authorization: `Bearer ${API_KEY}` },
    body: formData,
  })

  const result = await response.json()
  if (result.code === 200) {
    return result.data.task_id
  }
  throw new Error(`创建任务失败: ${JSON.stringify(result)}`)
}

async function getTaskStatus(taskId) {
  const response = await fetch(`${BASE_URL}/v1/videos/${taskId}`, {
    headers: { Authorization: `Bearer ${API_KEY}` },
  })
  return response.json()
}

async function waitForVideo(taskId, timeout = 300000, interval = 10000) {
  const startTime = Date.now()

  while (Date.now() - startTime < timeout) {
    const result = await getTaskStatus(taskId)
    const status = result.data?.task_status

    console.log(`任务状态: ${status}`)

    if (status === 'SUCCEEDED') {
      // URL 解码获取最终视频链接
      return decodeURIComponent(result.data.video_url)
    } else if (status === 'FAILED') {
      throw new Error(`视频生成失败: ${JSON.stringify(result.data)}`)
    }

    await new Promise((resolve) => setTimeout(resolve, interval))
  }

  throw new Error('视频生成超时')
}

// 使用示例
async function main() {
  try {
    const taskId = await createVideo('一只可爱的小猫在花园里追蝴蝶')
    console.log(`任务已提交,ID: ${taskId}`)

    const videoUrl = await waitForVideo(taskId)
    console.log(`视频生成完成: ${videoUrl}`)
  } catch (error) {
    console.error('错误:', error)
  }
}

main()

注意事项

重要提示:
  1. 请求格式:必须使用 multipart/form-data 格式,不是 JSON
  2. URL 解码:返回的 video_url 包含 URL 编码字符,需要解码后才能正常访问
    • Python: from urllib.parse import unquote; url = unquote(video_url)
    • JavaScript: url = decodeURIComponent(videoUrl)
  3. 视频有效期:生成的视频链接有时效性,请及时下载保存
  4. 提示词优化:模型会自动优化您的提示词(actual_prompt),生成更详细的场景描述