Seedance
豆包 Seedance 系列(doubao-seedance-*)除标准视频协议外,还可以用火山方舟(Ark)原厂路径调用, 请求体与响应体按 Ark 内容生成协议书写:
| 方法 | 路径 | 用途 |
|---|---|---|
POST | /ark/api/v3/contents/generations/tasks | 创建内容生成任务(视频) |
GET | /ark/api/v3/contents/generations/tasks/{task_id} | 查询任务状态与结果 |
DELETE | /ark/api/v3/contents/generations/tasks/{task_id} | 取消未完成的任务并退回预扣(取决于上游是否支持,见下) |
这是平台托管通道:路径是 Ark 自己的,但请求走的是网关标准的异步任务流水线,与 通用异步内容生成任务完全同一条链路,只是换了 Ark 的路径拼写。因此它同样享受 维度计费、任务落库、产物持久化与预扣/结算的全部保障。
创建任务
请求体按 Ark 内容生成协议书写,model 填平台逻辑模型名(如 doubao-seedance-2.0-mini):
curl https://api.modelgo.ai/ark/api/v3/contents/generations/tasks \
-H "Authorization: Bearer $MODELGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<model>",
"content": [
{ "type": "text", "text": "一只霓虹都市里的猫" },
{ "type": "image_url", "image_url": { "url": "https://example.com/first.jpg" }, "role": "first_frame" }
],
"resolution": "720p",
"ratio": "16:9",
"duration": 5
}'content 里除文本外还可以带图片/视频,元素用 role 标明用途;素材组合决定生成模式,生成模式又决定哪些参数合法:
| content 元素 | role | 生成模式 |
|---|---|---|
只有 text | — | 文生视频(t2v) |
image_url | first_frame | 首帧图生视频(i2v) |
image_url | first_frame + last_frame | 首尾帧(flf2v) |
image_url / video_url | reference_image / reference_video | 多模态参考生视频 |
参数与生成模式约束
resolution / ratio / duration 的合法取值随模型而异(例如 Seedance 2.0 的 Fast 与 Mini 不支持 1080p,duration 下限是 4 秒);camera_fixed、generate_audio、return_last_frame、watermark 等 Ark 扩展参数还随生成模式而异。携带当前模型/模式不支持的参数,会在创建时被上游拒绝 (400 provider_invalid)。已知一例:
camera_fixed在首尾帧(同时带first_frame+last_frame)场景不被支持,携带它会被上游拒
(camera_fixed ... must be empty)。首尾帧本身已约束镜头;确需固定镜头请改用文生 / 单首帧等 支持该参数的模式。
因为本通道不锁定上游 family(同一逻辑模型由多家供应商承接),某参数是否被接受还取决于实际 承接的供应商与其模型版本。请以「模型能力说明 + 上述模式约束」为准,不要假定某模式可用的参数在 另一种模式同样可用。
查询任务
curl https://api.modelgo.ai/ark/api/v3/contents/generations/tasks/{task_id} \
-H "Authorization: Bearer $MODELGO_API_KEY"创建与查询返回的就是通用异步内容生成任务那一种 Ark 任务对象——同一条流水线, 响应报文与字段语义(status 取值、content.video_url、error、usage 缺省规则)与那一页完全一致, 此处不再重复。
取消任务
curl -X DELETE https://api.modelgo.ai/ark/api/v3/contents/generations/tasks/{task_id} \
-H "Authorization: Bearer $MODELGO_API_KEY"取消成功后预扣会被退回(void),不产生结算。
但取消不是所有上游都支持。 能否取消取决于承接该任务的供应商是否实现了取消能力,而这条通道 不锁定上游 family,所以同一个逻辑模型的两次调用可能一次能取消、一次不能。两种失败:
| 情况 | 响应 |
|---|---|
| 承接该任务的供应商不支持取消 | 400 / 4003 provider_unsupported,endpoint not supported by provider |
任务已到终态(succeeded / failed) | 409 task_already_terminal,task already finished; nothing to cancel |
取消失败时预扣不会提前退回,会等任务到终态或预扣过期后按正常结算/释放流程处理。所以不要把 「先创建、再取消」当成一种可靠的止损手段。
关键约定
id是网关任务 ID,不是上游任务 ID。 查询、取消都只认这个 ID,请以创建响应里的id为准。- 响应形态是固定的。 无论实际由哪家上游承接,创建与查询都返回同一种 Ark 任务对象,
- 该通道不锁定上游 family。 路径拼写不参与选路:
model对应的逻辑模型路由到谁,就由谁承接。 - 产物内容接口只有 OpenAI 兼容那一条(
GET /v1/videos/{task_id}/content),Ark 路径下没有对应端点; - 该模型是否开放本通道,取决于它在模型目录里声明的
public_protocols是否含
不会因为路由到不同供应商而变形。
Seedance 在平台上由多家供应商共同承接,同一个逻辑模型的两次调用可能落到不同上游,这是正常的。
直接使用响应里的 content.video_url 即可。
content_generation;未声明则返回 4005。可用 GET https://api.modelgo.ai/v1/models 核对。
如果你不需要 Ark 的路径与字段风格,OpenAI 兼容视频流是更标准化的选择。