logo 海贝智算 开发者接入文档 ← 返回首页

使用 API

将下方平台地址替换 OpenAI 的 base_url,使用平台颁发的令牌作为 api_key,即可开始调用。

API Base URL

…

该地址为平台统一接入地址,兼容 OpenAI 协议;以下示例中的地址均自动取自此处。

获取令牌

  1. 登录控制台,进入「令牌」页面
  2. 点击「添加令牌」,设置名称与额度,创建后复制 sk- 开头的密钥
  3. 将密钥作为 api_key 填入客户端或代码中

操练场在线测试

操练场是内置的在线测试工具,无需编写代码即可直接与模型对话,适合快速验证令牌是否可用。

  1. 在控制台左侧导航点击「操练场」(或直接访问 /console/playground)
  2. 在左侧选择要测试的模型
  3. 在底部输入框输入消息内容,点击发送,右侧对话区域显示模型回复

代码示例

Python(OpenAI SDK)

from openai import OpenAI

client = OpenAI(
    api_key="sk-xxxxxxxxxxxxxxxx",  # 平台颁发的令牌
    base_url="…"
)

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)

Claude 原生格式

curl …/messages \
  -H "x-api-key: sk-xxxxxxxx" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model": "claude-3-5-sonnet-20241022", "max_tokens": 1024,
       "messages": [{"role": "user", "content": "Hello"}]}'

Gemini 原生格式

curl "…/v1beta/models/gemini-1.5-pro:generateContent?key=sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"contents": [{"parts": [{"text": "Hello"}]}]}'

支持的接口端点

接口 方法 路径 说明
聊天补全 POST /v1/chat/completions 对话生成,支持流式输出
文本补全 POST /v1/completions 传统补全接口
向量嵌入 POST /v1/embeddings 文本向量化
图像生成 POST /v1/images/generations 文生图
图像编辑 POST /v1/images/edits 图像编辑
语音转文字 POST /v1/audio/transcriptions Whisper 等
文字转语音 POST /v1/audio/speech TTS
重排序 POST /v1/rerank 文档重排序
Responses API POST /v1/responses OpenAI Responses 格式
实时对话 GET /v1/realtime(WebSocket) OpenAI Realtime API
模型列表 GET /v1/models 查询可用模型
视频生成 POST /v1/videos 创建视频任务,见下方「视频生成模型」
视频任务查询 GET /v1/videos/{task_id} 轮询视频任务状态

视频生成模型

视频生成接口采用异步任务模型:先调用生成接口创建任务获得 task_id,再循环轮询状态接口直到任务完成(data.status 为 SUCCESS),从 data.result_url 取出视频下载地址。

  1. 创建任务时立即预扣费(余额不足返回 403)
  2. 任务完成后按实际消耗多退少补结算
  3. 任务失败自动退还预扣额度

接口端点

两套地址均可使用,请求参数与返回结构完全相同(统一返回 {code, message, data} 规范结构)。

方法 路径 说明
POST /v1/videos 创建视频生成任务(OpenAI 兼容格式)
GET /v1/videos/{task_id} 查询任务状态(OpenAI 兼容格式)
GET /v1/videos/{task_id}/content 直接获取视频内容(代理下载)
POST /v1/video/generations 创建视频任务(平台原生格式)
GET /v1/video/generations/{task_id} 查询任务状态(平台原生格式)

创建任务请求参数

POST /v1/videos 与 POST /v1/video/generations 请求体相同(JSON):

字段 类型 必填 说明
model string 是 视频模型名称,如 doubao-seedance-2.0、happyhorse-1.1-t2v
prompt string 条件必填 视频生成提示词(≤20000 字符);与 content 中 type:text 的文本至少提供其一。两者同时提供时以本字段为准
duration int 视模型 视频时长(秒),如 4-15;Seedance 2.5 的 edit 场景传 -1(时长由参考视频决定)
seconds int/string 否 原生时长字段(秒);传 duration 时自动补写,一般无需直接传
resolution string 视模型 分辨率:480p / 720p / 1080p / 4k
ratio string 否 宽高比:16:9 / 9:16 / 1:1 等,首帧 / 首尾帧 / 编辑 / 延长场景常用 adaptive
image string 否 首帧参考图(公网 HTTPS URL)
image_urls array[string] 否 参考图列表;第 1 张首帧,第 2 张尾帧
video string 否 单个参考视频(公网 HTTPS)
video_urls array[string] 否 参考视频列表
input_reference file/string 否 参考图文件(multipart 文件上传)或 URL
content json数组 条件必填 原生内容数组:type:text 承载文本, type:image_url / video_url / audio_url 携带素材,并通过 role 指定素材角色(first_frame / last_frame / reference_image / reference_video / reference_audio)。未指定 role 的图片按参考图处理。各模型对素材角色与数量的要求不同,见下方 「万相 3.0」与「HappyHorse」章节
callback_url string 否 任务终态回调地址(公网 HTTPS)
watermark bool 否 是否添加水印,默认 false
seed int 否 随机种子 [0, 2147483647]
generate_audio bool 否 是否生成同步音频(仅部分模型)
return_last_frame bool 否 是否返回尾帧图像(仅部分模型)
omni_reference_task_type string 否 全模态参考生视频任务类型(Seedance 2.5 专属):auto(默认,模型自动判定)/ reference(参考生视频)/ edit(视频编辑)/ extend(视频延长)。指定 edit / extend 时有前置校验与异步校验,见下方「Seedance 2.5 全模态参考任务类型」

不同模型支持的参数范围不同,请以控制台「视频模型」页面为准。例如 doubao-seedance-2.0 要求 duration 与 resolution 必填;视频编辑类模型不接受 duration 和 ratio。

Seedance 2.5 全模态参考任务类型(omni_reference_task_type)

omni_reference_task_type 用于引导 Seedance 2.5 的全模态参考生视频任务类型,取值如下:

取值 含义 说明
auto 自动判定 默认值,由模型根据提示词与参考素材自动判定任务类型;意图不明确时推荐保持默认
reference 参考生视频 以参考图 / 参考视频为依据生成新视频
edit 视频编辑 显式指定时提交即做前置校验(见下)
extend 视频延长 显式指定时提交即做前置校验(见下)

前置校验(提交即校验,不符合立即报错)

仅当显式指定 edit 或 extend 时生效:不符合会立即返回参数错误、任务不会创建。auto / reference 不做该校验。

任务类型 校验要求
edit ratio / aspect_ratio 必须为 adaptive;duration 必须为 -1;参考视频时长 4~30 秒
extend ratio / aspect_ratio 必须为 adaptive

异步校验(任务启动后报错)

声明的任务类型与提示词意图不一致时,提交仍会成功、任务正常创建,但任务启动后会异步失败,错误码为 InvalidParameter.TaskTypeMismatch。此时请检查 omni_reference_task_type 与提示词描述是否吻合,或改用 auto 由模型自行判定。

计费:显式 duration 按该时长预扣;传 -1(edit / extend 等时长未知场景)时按参考视频时长预扣,任务完成后按实际产出时长多退少补。

HappyHorse(快乐马)模型家族

HappyHorse 系列为阿里云百炼新一代视频模型,输出物理真实、运动流畅的视频,支持文生视频、图生视频(首帧)、参考生视频、视频编辑四种形态。调用方式与上方统一视频接口完全一致,仅模型名称与输入素材不同。

文本与素材同样可以通过 content 传入:type:text 作提示词,image_url / video_url 按模型形态自动归位(i2v 取第 1 张图、r2v 取全部图片、video-edit 取输入视频),无需拆成扁平字段。

模型 能力 输入要求
happyhorse-1.1-t2v / happyhorse-1.0-t2v 文生视频 prompt 必填(≤2500 中文字符)
happyhorse-1.1-i2v / happyhorse-1.0-i2v 图生视频(首帧) image_urls 有且仅有 1 张首帧图;prompt 可选;宽高比自动跟随首帧,不支持 ratio
happyhorse-1.1-r2v / happyhorse-1.0-r2v 参考生视频 prompt + image_urls 1~9 张参考图;prompt 中用 [Image 1]、[Image 2]… 按顺序指代参考图中的对象
happyhorse-1.0-video-edit 视频编辑 prompt(编辑指令)+ video_urls 有且仅有 1 个输入视频(MP4/MOV,3~60 秒)+ image_urls 0~5 张参考图

HappyHorse 参数说明

字段 说明
duration 3-15 秒整数,默认 5。视频编辑不接受该参数:输出时长跟随输入视频(输入 ≤15 秒时与输入一致,否则自动截取前 15 秒)
resolution 480p / 720p / 1080p,默认 1080p;视频编辑仅支持 720p / 1080p
ratio 仅文生视频 / 参考生视频支持:16:9(默认)/ 9:16 / 1:1 / 4:3 / 3:4 / 4:5 / 5:4 / 9:21 / 21:9
watermark 默认 false(不添加水印);设为 true 时右下角添加 “Happy Horse” 水印
seed [0, 2147483647],固定 seed 可提升结果可复现性

HappyHorse 按产出视频时长(秒)× 分辨率档位单价计费:创建任务时按请求时长预扣;视频编辑因输出时长未知按 15 秒上限预扣,任务完成后按实际产出时长多退少补。

请求示例

# 文生视频(16:9、720p、5 秒)
curl …/videos \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-1.1-t2v",
    "prompt": "一座由硬纸板和瓶盖搭建的微型城市,在夜晚焕发出生机",
    "duration": 5,
    "resolution": "720p",
    "ratio": "16:9"
  }'

# 图生视频(首帧驱动,宽高比跟随首帧)
curl …/videos \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-1.1-i2v",
    "prompt": "一只猫在草地上奔跑",
    "image_urls": ["https://example.com/first-frame.png"],
    "duration": 5,
    "resolution": "720p"
  }'

# 参考生视频(prompt 中以 [Image N] 指代参考图)
curl …/videos \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-1.1-r2v",
    "prompt": "[Image 1]中身着红色旗袍的女性,轻抬玉手展开[Image 2]中的折扇",
    "image_urls": ["https://example.com/girl.jpg", "https://example.com/fan.jpg"],
    "duration": 5,
    "resolution": "720p",
    "ratio": "16:9"
  }'

# 视频编辑(指令 + 输入视频,可选参考图)
curl …/videos \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-1.0-video-edit",
    "prompt": "让视频中的角色穿上图片中的条纹毛衣",
    "video_urls": ["https://example.com/input.mp4"],
    "image_urls": ["https://example.com/sweater.webp"],
    "resolution": "720p"
  }'

轮询与结果获取方式与其他视频模型完全相同:两条 API 均返回统一结构,成功时从 data.result_url(或 data.metadata.url)取视频地址;视频链接有效期 24 小时,请及时下载转存。

万相 3.0(wan3.0-video)模型家族

万相 3.0 是全能参考视频生成模型(All-in-One),统一支持文生视频、图生视频(首帧 / 首尾帧)、参考生视频、视频编辑与视频延长。模型名称:wan3.0-video(标准版)、wan3.0-video-prime(高速版,能力对齐标准版)。

prompt 与素材至少提供其一:文生视频只传提示词;其余形态通过 content 携带素材,平台会把每个素材部件的 role 原样映射为素材类型。

role / 素材类型 能力 输入要求
first_frame 首帧生视频 最多 1 张,严格作为视频第一帧
last_frame 首尾帧生视频 最多 1 张,与 first_frame 配合使用
reference_image 参考生视频 最多 10 张;prompt 中用「图1」「图2」按顺序指代
reference_video 参考 / 视频编辑 / 视频延长 最多 5 段,总时长 ≤15 秒;prompt 中用「视频1」按顺序指代
reference_audio 参考音频 最多 5 段,总时长 ≤15 秒;prompt 中用「音频1」按顺序指代

素材组合规则:first_frame / last_frame 与 reference_image / reference_video / reference_audio 互斥,不能在同一请求中混用;参考类素材之间可自由组合。使用扁平字段时, image_urls 单图按首帧、多图按参考图处理。

万相 3.0 参数说明

字段 说明
duration 默认 5 秒;无视频输入时取值 2-30;有视频输入时「输入视频总时长 + 输出时长」≤30 秒;传 -1 进入智能时长模式,由模型根据提示词与素材推荐时长
resolution 480p / 720p / 1080p,默认 1080p
ratio adaptive(默认)/ 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16;视频延长必须为 adaptive
generate_audio 是否输出音轨,默认 true;传 false 输出无声视频,开关声音价格相同
watermark 默认 false;传 true 添加水印
seed -1 或 [0, 2147483647];-1 表示由系统随机生成

计费:按产出视频时长(秒)× 分辨率档位单价计费;未指定分辨率按上游默认 1080p 档位计价。duration=-1 时按上限预扣,任务完成后按实际产出时长多退少补。

请求示例

# 参考生视频(文本走 content,图片角色 reference_image)
curl …/videos \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan3.0-video",
    "duration": 5,
    "resolution": "480p",
    "ratio": "16:9",
    "generate_audio": true,
    "content": [
      { "type": "text", "text": "图1中的机器人在赛博朋克街头行走" },
      { "type": "image_url", "image_url": { "url": "https://example.com/robot.jpg" }, "role": "reference_image" }
    ]
  }'

# 首尾帧生视频(role 为 first_frame / last_frame)
curl …/videos \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan3.0-video",
    "duration": 5,
    "resolution": "720p",
    "ratio": "adaptive",
    "content": [
      { "type": "text", "text": "从首帧平滑过渡到尾帧" },
      { "type": "image_url", "image_url": { "url": "https://example.com/first.png" }, "role": "first_frame" },
      { "type": "image_url", "image_url": { "url": "https://example.com/last.png" }, "role": "last_frame" }
    ]
  }'

创建任务响应

HTTP 200。两个创建地址(/v1/videos 与 /v1/video/generations)返回相同的统一结构 {code, message, data},任务初始为 NOT_START(或排队态):

{
  "code": "success",
  "message": "",
  "data": {
    "task_id": "task_xxxxxxxxxxxx",
    "action": "generate",
    "status": "NOT_START",
    "fail_reason": "",
    "submit_time": 1790742666,
    "start_time": 0,
    "finish_time": 0,
    "progress": "0%",
    "model": "doubao-seedance-2-0",
    "metadata": { "url": null, "resolution": "480p", "duration": 4, "ratio": "16:9" },
    "usage": { "total_tokens": null, "completion_tokens": null }
  }
}

其中 data.task_id 用于后续轮询。

状态查询响应

GET /v1/videos/{task_id} 与 GET /v1/video/generations/{task_id} 返回完全相同的统一结构 {code, message, data},字段随任务推进而更新:

字段(data 内) 说明
task_id 任务 ID
action 任务动作,如 generate
status 任务状态,见下方状态码表
progress 进度字符串,如 "0%" / "50%" / "100%"
model 视频模型名称
result_url 视频下载地址(仅 status=SUCCESS 时给出)
fail_reason 失败原因(status=FAILURE 时给出)
submit_time / start_time / finish_time 提交 / 开始 / 完成时间戳(秒)
metadata.url 视频下载地址(未产出为 null,等同 result_url)
metadata.resolution 输出分辨率,如 480p
metadata.duration 输出时长(秒)
metadata.ratio 画幅比,如 16:9
usage.total_tokens / usage.completion_tokens 实际 token 消耗(未产出为 null)

生成成功响应示例:

{
  "code": "success",
  "message": "",
  "data": {
    "task_id": "task_xxxxxxxxxxxx",
    "action": "generate",
    "status": "SUCCESS",
    "fail_reason": "",
    "result_url": "https://example.com/video.mp4",
    "submit_time": 1790747575,
    "start_time": 1790747717,
    "finish_time": 1790747882,
    "progress": "100%",
    "model": "doubao-seedance-2-0",
    "usage": { "total_tokens": 40594, "completion_tokens": 40594 },
    "metadata": { "url": "https://example.com/video.mp4", "resolution": "480p", "duration": 4, "ratio": "16:9" }
  }
}

出于简洁与账号安全,统一结构不包含 user_id / channel_id / quota / group / platform 等内部字段;渠道原始返回仅保留在服务端日志中。视频链接有效期 24 小时,请及时下载转存。

status 状态码

状态 说明
NOT_START / SUBMITTED / QUEUED 已创建,排队中
IN_PROGRESS 生成中
SUCCESS 生成成功,可取 result_url
FAILURE 生成失败,查看 fail_reason

状态轮询 · 平台原生格式(已合并)

平台原生格式(/v1/video/generations)与 OpenAI 兼容格式(/v1/videos)现返回完全相同的统一结构,参见上方「状态查询响应」,不再单列。

HTTP 状态码与错误格式

状态码 说明
200 请求成功
400 参数错误或任务不存在(code 如 invalid_duration、invalid_resolution、unsupported_model、task_not_exist)
401 令牌无效或过期
403 额度不足(预扣费失败)
429 当前分组负载饱和,请稍后再试
500 内部错误

错误响应体格式:{"code": "错误码", "message": "错误描述", "data": null}。

生成 + 轮询完整示例

Python 示例

from openai import OpenAI
import time

client = OpenAI(
    api_key="sk-xxxxxxxxxxxxxxxx",
    base_url="…"
)

# 1. 创建视频任务
resp = client.post(
    "/videos",
    body={
        "model": "doubao-seedance-2.0",
        "prompt": "一只猫在草地上奔跑",
        "duration": 5,
        "resolution": "720p"
    },
    cast_to=object
)
task_id = resp["data"]["task_id"]
print(f"Task created: {task_id}")

# 2. 轮询状态直到完成
while True:
    time.sleep(10)
    status_resp = client.get(f"/videos/{task_id}", cast_to=object)
    data = status_resp["data"]
    status = data["status"]
    print(f"Status: {status}")
    if status == "SUCCESS":
        video_url = data["result_url"]
        print(f"Video URL: {video_url}")
        break
    elif status == "FAILURE":
        print(f"Failed: {data.get('fail_reason')}")
        break

cURL 示例

# 创建任务
curl …/videos \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0",
    "prompt": "一只猫在草地上奔跑",
    "duration": 5,
    "resolution": "720p"
  }'

# 轮询状态(将 {task_id} 替换为实际值)
curl …/videos/{task_id} \
  -H "Authorization: Bearer sk-xxxxxxxx"

平台原生格式示例(Python requests)

import requests, time

BASE = "…"
HEADERS = {"Authorization": "Bearer sk-xxxxxxxx", "Content-Type": "application/json"}

# 1. 创建任务
resp = requests.post(f"{BASE}/video/generations", headers=HEADERS, json={
    "model": "doubao-seedance-2.0",
    "prompt": "一只猫在草地上奔跑",
    "duration": 5,
    "resolution": "720p"
}).json()
task_id = resp["data"]["task_id"]
print(f"Task created: {task_id}")

# 2. 轮询状态直到 SUCCESS
while True:
    time.sleep(10)
    data = requests.get(f"{BASE}/video/generations/{task_id}",
                        headers=HEADERS).json()["data"]
    print(f"Status: {data['status']}")
    if data["status"] == "SUCCESS":
        print(f"Video URL: {data['result_url']}")
        break
    elif data["status"] == "FAILURE":
        print(f"Failed: {data['fail_reason']}")
        break