平台公告:新用户注册即赠 ¥20 体验金,Kimi K3、DeepSeek V4.1 Flash 已上线

查看详情

开发文档

大模型调用 · 视频任务教程示例

覆盖对话 / 流式 / 图像生成等大模型调用,以及视频任务生成与获取、 素材上传、状态同步的完整链路。示例可直接复制运行, 替换 API Key 与模型名即可接入。

Chat / Messages / Responses流式输出文生图 · 文生视频素材上传与同步cURL / Python / Node.js
1

整体流程

从对话到视频生成的调用链路

  1. 1

    准备 API Key

    在控制台创建密钥,请求头携带 Bearer Token。

  2. 2

    调用大模型(对话 / 图像)

    Chat Completions 同步或流式;也可走 Claude Messages / Responses。

  3. 3

    (可选)上传素材

    上传素材 → 轮询至 Active。

  4. 4

    生成视频任务

    POST 提交异步任务,立即拿到 task_id,不阻塞等待。

  5. 5

    获取任务结果

    按 task_id 轮询,succeeded 后从 content.video_url 取成片。

  6. 6

    (可选)同步素材状态

    Processing 素材可通过 sync 接口刷新上游状态。

为什么是异步任务?

视频生成耗时通常在数十秒到数分钟。提交接口只负责受理任务并返回 task_id,状态由后台轮询更新,客户端通过查询接口获取进度与结果, 避免长连接超时。
2

准备工作

API Key、Base URL 与鉴权头

  • Base URL:https://api.modelsai.cn
  • 鉴权:所有请求携带 Authorization: Bearer <API_KEY>
  • Content-Type:写操作使用 application/json
  • 获取密钥:登录控制台→ API Keys → 创建密钥。
# 环境变量
export MODELS_AI_API_KEY="sk-你的密钥"
export BASE_URL="https://api.modelsai.cn"
# 通用请求头
# Authorization: Bearer $MODELS_AI_API_KEY
# Content-Type: application/json
3

大模型对话

Chat Completions 同步与流式

POST/v1/chat/completions

平台兼容 OpenAI Chat Completions 协议。沿用现有 SDK, 只需把 base_url 指到平台并替换 API Key 即可。stream 为 false 或省略时返回 JSON; 设为 true 时返回 SSE 流。

同步调用

curl -X POST "https://api.modelsai.cn/v1/chat/completions" \
-H "Authorization: Bearer $MODELS_AI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "system", "content": "你是一个简洁的中文助手"},
{"role": "user", "content": "用一句话介绍你自己"}
],
"stream": false
}'
# 响应:choices[0].message.content 为模型回复

流式输出

适合聊天机器人、实时字幕等场景;增量内容在 choices[0].delta.content。

curl -N -X POST "https://api.modelsai.cn/v1/chat/completions" \
-H "Authorization: Bearer $MODELS_AI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "user", "content": "写一首关于春天的四行短诗"}
],
"stream": true
}'
# 返回 text/event-stream,逐段输出 data: {...}
# 以 data: [DONE] 结束

多模态输入(图片理解)

将 content 写成数组,混合 text 与 image_url 条目即可。

from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.modelsai.cn/v1",
)
resp = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "这张图里有什么?"},
{
"type": "image_url",
"image_url": {
"url": "https://your-cdn.example.com/photo.jpg",
},
},
],
}
],
)
print(resp.choices[0].message.content)
字段说明
model模型编码,可在「模型广场」或 /v1/models 查看
messages对话历史,role 取 system / user / assistant
streamtrue 返回 text/event-stream,默认 false 返回 JSON
temperature / top_p / max_tokens采样与长度控制,按模型能力可选

推荐用官方 SDK

Python / Node.js 示例直接使用 openai SDK,只改 base_url 与 api_key, 无需改动业务里的 messages 结构。
4

多协议接入

Claude Messages / OpenAI Responses

除 Chat Completions 外,平台还暴露 Anthropic Messages 与 OpenAI Responses 入口,便于已有 Claude / Responses 客户端零改造迁移。

Anthropic Messages

POST/v1/messages

请求头建议携带 anthropic-version: 2023-06-01;Python / Node.js 使用 anthropic SDK,base_url 指向平台根路径 (不含 /v1)。

curl -X POST "https://api.modelsai.cn/v1/messages" \
-H "Authorization: Bearer $MODELS_AI_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "用一句话介绍你自己"}
],
"stream": false
}'
# 响应:content[0].text 为模型回复

OpenAI Responses

POST/v1/responses

输入放在 input, 回复文本在 output_text(也可解析 output 结构)。

curl -X POST "https://api.modelsai.cn/v1/responses" \
-H "Authorization: Bearer $MODELS_AI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o",
"input": "用一句话介绍你自己",
"stream": false
}'
# 响应:output_text 为模型回复

怎么选协议?

新项目优先用 Chat Completions(生态最广); 已有 Claude 客户端选 Messages; 需要工具编排 / Responses 结构时选 Responses。 同一模型在不同入口的计费规则一致。
5

图像生成

文生图 Images API

POST/v1/images/generations

文生图走 OpenAI Images 兼容接口。返回 data[].url(或 b64_json,取决于模型与参数)。生成结果请及时落盘或转存, URL 可能有时效。

curl -X POST "https://api.modelsai.cn/v1/images/generations" \
-H "Authorization: Bearer $MODELS_AI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-1",
"prompt": "一只橘猫坐在窗台上,柔和光线",
"n": 1,
"size": "1024x1024"
}'
# 响应:data[0].url 为图片地址
字段说明
model图像模型编码,见模型广场
prompt画面描述,支持中英文
n生成张数,默认 1
size分辨率,如 1024x1024;以模型支持范围为准
6

获取模型列表

OpenAI 兼容 /v1/models

GET/v1/models

列出当前 API Key 可用的模型。企业专属模型只对已授权账号可见。 前端调试也可直接打开模型广场查看规格与价格。

curl "https://api.modelsai.cn/v1/models" \
-H "Authorization: Bearer $MODELS_AI_API_KEY"
# 响应:{ "object": "list", "data": [{ "id": "...", ... }, ...] }
7

生成视频任务

异步提交,立即返回 task_id

POST/v1/contents/generations/tasks

请求体中的 model 为模型编码,content 为多模态输入数组。纯文生视频只需 type=text 条目;图生视频可追加 type=image_url。

文生视频

curl -X POST "https://api.modelsai.cn/v1/contents/generations/tasks" \
-H "Authorization: Bearer $MODELS_AI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-1-0-pro",
"content": [
{
"type": "text",
"text": "一只橘猫在草地上奔跑,电影感镜头,浅景深"
}
]
}'

图生视频

将参考图 URL 放入 content;支持公网可访问的图片地址 (也可先通过素材上传接口获得资产后再引用)。

curl -X POST "https://api.modelsai.cn/v1/contents/generations/tasks" \
-H "Authorization: Bearer $MODELS_AI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-1-0-pro",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://your-cdn.example.com/input.png"
}
},
{
"type": "text",
"text": "人物轻轻回头微笑,镜头缓慢推近"
}
]
}'

提交响应

{
  "id": "cgt-01j8xk...",
  "task_id": "cgt-01j8xk...",
  "task_no": "VT20260415...",
  "status": "queued",
  "model": "doubao-seedance-1-0-pro"
}

id / task_id

上游任务 ID,后续查询用它。两者在视频任务中通常相同。

task_no

平台侧任务编号,便于在控制台「视频任务记录」中检索。

计费说明

提交成功即预扣额度,任务进入终态后按实际用量结算; 失败或过期会按平台规则退回差额。
8

获取任务结果

轮询状态并取回视频 URL

GET/v1/contents/generations/tasks/{id}

用创建时返回的 id / task_id 查询。非终态时会回查上游刷新进度;终态直接返回缓存结果。

# 将 {id} 替换为创建任务返回的 id / task_id
curl "https://api.modelsai.cn/v1/contents/generations/tasks/{id}" \
-H "Authorization: Bearer $MODELS_AI_API_KEY"

成功响应示例

{
  "id": "cgt-01j8xk...",
  "status": "succeeded",
  "content": {
    "video_url": "https://ark-content-generation-result.cn/xxx.mp4",
    "last_frame_url": "https://.../last_frame.jpg"
  },
  "usage": {
    "prompt_tokens": 120,
    "completion_tokens": 1480,
    "total_tokens": 1600
  }
}

任务状态

状态含义客户端动作
queued已受理,排队中继续轮询
running生成中继续轮询
succeeded生成成功读取 content.video_url
failed生成失败读取 error,检查参数/额度
expired超时未完成已过期可重新提交任务

轮询建议

建议 3–10 秒间隔轮询,并设置总超时(如 10 分钟)。 控制台「视频任务记录」可查看历史任务与详情, 管理端也支持手动触发一次轮询刷新。
9

素材上传

上传接口与字段说明

素材用于数字人、图生视频等需要可信输入的场景。 通过素材接口直接上传即可。 上传后状态通常为 Processing, 需等待或同步至 Active 才可用于推理。

POST/volc/ctyun-assets
# 上传素材
curl -X POST "https://api.modelsai.cn/volc/ctyun-assets" \
-H "Authorization: Bearer $MODELS_AI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-cdn.example.com/avatar.png",
"assetType": "Image",
"name": "形象图"
}'
# 响应:{"code":200,"msg":"success","data":789}
字段类型说明
urlstring公网可访问的图片/视频/音频 URL
assetTypestringImage / Video / Audio
namestring素材名称,便于管理

响应包装

素材类接口返回统一包装 { code, msg, data },成功时 code=200,data 为本地素材 ID。视频任务接口返回上游原始结构 (含 id / task_id / status)。
10

素材状态同步

Processing → Active / Failed

素材上传后由上游异步审核/处理。可通过同步接口主动拉取最新状态, 而不必反复查询列表。

POST/volc/ctyun-assets/{id}/sync
POST/volc/ctyun-assets/processing/sync
# 1) 同步单个素材
curl -X POST "https://api.modelsai.cn/volc/ctyun-assets/789/sync" \
-H "Authorization: Bearer $MODELS_AI_API_KEY"
# 响应 data 为最新状态:Processing / Active / Failed
# 2) 批量同步全部 Processing
curl -X POST "https://api.modelsai.cn/volc/ctyun-assets/processing/sync" \
-H "Authorization: Bearer $MODELS_AI_API_KEY"
接口返回用途
/volc/ctyun-assets/{id}/syncdata = 最新状态字符串刷新单个素材
/volc/ctyun-assets/processing/syncdata = 同步条数批量刷新全部 Processing 素材

素材状态

Processing处理/审核中,不可用于推理Active可用Failed失败,查看 errorMessage
11

完整示例

素材 → 视频成片的端到端脚本

下面的 Python 脚本串起「上传素材 → 同步状态 → 提交视频任务 → 轮询结果」全流程,可直接改参数试跑。

"""
端到端示例:上传素材 → 同步状态 → 生成视频 → 轮询结果
依赖:pip install requests
"""
import os
import time
import requests
BASE = "https://api.modelsai.cn"
HEADERS = {
"Authorization": f"Bearer {os.environ['MODELS_AI_API_KEY']}",
"Content-Type": "application/json",
}
def api(method, path, json=None, timeout=60):
resp = requests.request(
method, BASE + path, headers=HEADERS, json=json, timeout=timeout
)
resp.raise_for_status()
return resp.json()
# ---------- 1. 上传素材 ----------
asset = api("POST", "/volc/ctyun-assets", {
"url": "https://your-cdn.example.com/portrait.png",
"assetType": "Image",
"name": "demo-portrait",
})
asset_id = asset["data"]
print("asset_id =", asset_id)
# ---------- 2. 同步素材状态,等待 Active ----------
for _ in range(30):
status = api("POST", f"/volc/ctyun-assets/{asset_id}/sync")["data"]
print("asset status:", status)
if status == "Active":
break
if status == "Failed":
raise SystemExit("素材审核/处理失败,请检查 URL 与内容合规")
time.sleep(2)
# ---------- 3. 提交视频任务 ----------
# 若模型支持素材引用,可将素材 URL 写入 content
created = api("POST", "/v1/contents/generations/tasks", {
"model": "doubao-seedance-1-0-pro",
"content": [
{"type": "text", "text": "人物在窗边看书,自然光,电影感"},
],
})
task_id = created.get("id") or created.get("task_id")
print("task_id =", task_id)
# ---------- 4. 轮询任务直至终态 ----------
for _ in range(120):
task = api("GET", f"/v1/contents/generations/tasks/{task_id}", timeout=30)
status = task.get("status")
print("task status:", status)
if status == "succeeded":
video_url = (task.get("content") or {}).get("video_url")
print("video_url =", video_url)
break
if status in ("failed", "expired"):
print("error:", task.get("error"))
break
time.sleep(5)
else:
print("轮询超时,请稍后在控制台「视频任务」中查看")
12

状态与常见问题

任务状态机与排错建议

提交后一直 queued / running?

视频生成本身需要时间。按 3–10 秒间隔继续查询;若超过模型常见时长仍无进展,可到控制台「视频任务记录」查看,或联系支持。

返回 failed 怎么办?

查看响应中的 error 字段与控制台任务详情。常见原因:模型名错误、content 结构不合法、余额不足、输入素材未通过审核。

素材一直是 Processing?

调用对应 sync 接口刷新。若长时间不变为 Active,检查 URL 是否公网可访问、文件类型是否匹配 assetType,以及内容合规策略。

素材上传用哪个接口?

使用素材接口 /volc/ctyun-assets 上传。上传后通过 sync 接口刷新状态。

视频任务和素材接口返回格式不一样?

是的。视频任务返回结构含 id/status/content;素材接口是平台 Result 包装(code/msg/data)。解析时请注意区分。

还是卡住了?

可在控制台提交工单(分类选「视频任务」),或查阅完整 API 参考。

API 参考