接口说明
创建和轮询接口均不支持免费试用:必须提供创建该任务时使用的有效本项目 API Key。服务端固定使用 doubao-seedance-2-0-260128,调用方无需也不能指定 model。创建后只需使用返回的 task_id 调用同一个查询接口;服务端自动完成 Redis 排队、上游提交、callback 回写与轮询兜底。可选 callback_url 必须是公开 HTTPS 地址;设置后本响应仅一次返回 callback_secret。终态投递 JSON 并带 X-Seedance-Task-Id、X-Seedance-Timestamp、X-Seedance-Signature: sha256=<HMAC-SHA256 原始请求体>;接收端须在 10 秒内返回 2xx,失败最多重试三次。
调用示例
创建文生视频任务
curl -X POST "https://coze-js-api.devtool.uk/volcengine/contents/generations/tasks" \
-H "Content-Type: application/json" \
-d '{
"api_key": "uk_live_xxx",
"content": [
{
"type": "text",
"text": "一只猫在雨夜的霓虹街道上缓慢行走,镜头轻微跟随,氛围电影感。"
}
],
"generate_audio": true,
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"watermark": false
}'
创建带首帧参考图的视频任务
curl -X POST "https://coze-js-api.devtool.uk/volcengine/contents/generations/tasks" \
-H "Content-Type: application/json" \
-d '{
"api_key": "uk_live_xxx",
"content": [
{
"type": "text",
"text": "让画面中的人物自然向前行走,保持首帧构图和服装风格。"
},
{
"type": "image_url",
"image_url": { "url": "https://example.com/first-frame.png" },
"role": "first_frame"
}
],
"resolution": "720p",
"ratio": "16:9",
"duration": 5
}'
使用唯一 task_id 查询进度或结果
curl -X POST "https://coze-js-api.devtool.uk/volcengine/contents/generations/tasks/query" \
-H "Content-Type: application/json" \
-d '{
"job_id": "<job_id>",
"api_key": "uk_live_xxx"
}'
返回示例
{
"code": 200,
"msg": "视频生成任务已进入队列",
"data": {
"task_id": "task_xxx",
"status": "queued"
}
}
用户 Callback 接入规范
创建请求传入 callback_url 后,创建响应只会返回一次 callback_secret。终态回调仅在成功或失败时投递;查询接口仍可作为可靠兜底。
服务端投递方式
| 方法 | POST |
| Content-Type | application/json |
| 成功标准 | 接收端在 10 秒内返回任意 2xx。响应体可为空;网络错误、超时或非 2xx 最多重试 3 次。 |
X-Seedance-Task-Id | 创建响应中的唯一 task_id。 |
|---|
X-Seedance-Timestamp | ISO 8601 投递时间。 |
|---|
X-Seedance-Signature | sha256=<hex>;使用 callback_secret 对原始 JSON 请求 body 计算 HMAC-SHA256。 |
终态事件:成功示例
{
"event": "seedance.task.completed",
"task_id": "task_xxx",
"status": "succeeded",
"result": {
"content": {
"video_url": "https://example.com/generated-video.mp4"
}
},
"error": null,
"settlement": {
"status": "settled",
"credits": 200,
"actualCredits": 43
},
"completed_at": "2026-07-23T04:00:00.000Z"
}
终态事件:失败示例
{
"event": "seedance.task.completed",
"task_id": "task_xxx",
"status": "failed",
"result": null,
"error": "上游任务失败:素材不可访问",
"settlement": {
"status": "settled",
"credits": 200,
"actualCredits": null
},
"completed_at": "2026-07-23T04:00:00.000Z"
}
Node.js 验签与接收示例
import crypto from 'node:crypto';
import express from 'express';
const app = express();
app.use(express.raw({ type: 'application/json' }));
app.post('/seedance/callback', (req, res) => {
const expected = 'sha256=' + crypto.createHmac('sha256', process.env.SEEDANCE_CALLBACK_SECRET).update(req.body).digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.get('X-Seedance-Signature') || ''))) return res.sendStatus(401);
const event = JSON.parse(req.body.toString('utf8'));
// 按 event.task_id 幂等保存终态结果
return res.status(200).json({ received: true }); // 任意 2xx 均视为投递成功
});