视频

文生视频与图生视频,提供国内和海外两个渠道。创建任务、轮询状态,完成后从一个约 24 小时内有效的链接取回视频。

需单独开通,暂不支持自助开通。调用视频需要视频专用 Key,每个视频 Key 只对应一个渠道:国内或海外。请联系我们开通所需的 Key,也可以各开一个。文本 Key 不能调用视频模型。

接口地址

基础地址https://api.nightferry.io
创建POST /v1/videos
轮询GET /v1/videos/{id}
任务详情GET /v1/tasks/{id}
结果链接GET /v1/tasks/{id}/artifacts
认证请求头Authorization: Bearer <your video key>
任务 ID 前缀task_

任务 ID 是不透明字符串,请原样保存。

国内与海外渠道

海外渠道支持 NSFW。渠道由 Key 决定,而不是由请求决定:国内 Key 始终走国内渠道,海外 Key 始终走海外渠道。请求中没有 channel 字段,两个渠道之间也不会自动切换。

两个渠道使用相同的模型 ID,按相同的固定美元价格计费。需要同时使用两个渠道时,请各持一个 Key。

模型

各模型限制
模型 ID分辨率时长(秒)图片视频音频
doubao-seedance-2-0-260128480p / 720p / 1080p / 4k4–15 或 −1933
doubao-seedance-2-0-fast-260128480p / 720p4–15 或 −1933
doubao-seedance-2-0-mini-260615480p / 720p4–15 或 −1933
doubao-seedance-2-5-260628480p / 720p / 1080p4–30 或 −1301010

model 为必填。模型不支持的分辨率会在计费前被拒绝。-1 表示由模型自行决定时长。

创建任务

将 NIGHTFERRY_KEY 设为你的视频 Key。示例使用 Mini、480p、4 秒、不生成音频。

curl -X POST https://api.nightferry.io/v1/videos \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $NIGHTFERRY_KEY" \
  -d '{
  "model": "doubao-seedance-2-0-mini-260615",
  "prompt": "a cat running through long grass, cinematic",
  "seconds": 4,
  "metadata": {
    "resolution": "480p",
    "ratio": "16:9",
    "generate_audio": false
  }
}'

创建会在视频完成前返回任务:

{
  "id": "task_8Qm2cVhK4pZr7TnW1yLs9XbE6dFa3JoU",
  "object": "video",
  "model": "doubao-seedance-2-0-mini-260615",
  "status": "queued",
  "progress": 0,
  "created_at": 1790700000
}
字段含义
model必填,取上表中的模型 ID。
prompt文本提示词。
seconds输出时长(秒)。不填时,创建时冻结的金额按 15 秒估算。
metadata生成参数,原样传递:resolution、ratio、generate_audio、watermark、seed,以及用于参考素材的 content。

使用参考图片

参考素材以 URL 形式放在 metadata.content 中,不支持上传文件。每一项为 image_url、video_url 或 audio_url,可带可选的 role: first_frame、last_frame、reference_image、 reference_video 或 reference_audio。请使用服务可以访问的 HTTPS URL。

curl -X POST https://api.nightferry.io/v1/videos \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $NIGHTFERRY_KEY" \
  -d '{
  "model": "doubao-seedance-2-0-mini-260615",
  "prompt": "the cat turns and walks toward the camera",
  "seconds": 4,
  "metadata": {
    "resolution": "480p",
    "ratio": "16:9",
    "content": [
      {"type": "image_url", "image_url": {"url": "https://example.com/cat.png"}, "role": "first_frame"}
    ]
  }
}'
每次创建都是一个新任务,也会产生一笔新费用。不支持幂等键。如果创建请求在你这一侧超时,请先轮询再决定是否重新提交——重新提交可能启动并支付第二个视频。没有 Webhook,也不能取消:已提交的任务会运行到结束。

轮询任务

curl https://api.nightferry.io/v1/videos/task_8Qm2cVhK4pZr7TnW1yLs9XbE6dFa3JoU \
  -H "Authorization: Bearer $NIGHTFERRY_KEY"

轮询间隔不要短于 5 秒。status 为 queued、in_progress、 completed 或 failed;progress 取值 0 到 100。

{
  "id": "task_8Qm2cVhK4pZr7TnW1yLs9XbE6dFa3JoU",
  "object": "video",
  "model": "doubao-seedance-2-0-mini-260615",
  "status": "completed",
  "progress": 100,
  "created_at": 1790700000,
  "completed_at": 1790700180
}

失败的任务为 status: failed,并带有 error 对象。其中的消息是视频服务自身的原文,原样转发——可能是中文或英文,也可能引用内部任务编号。请以 status 为准,不要解析消息文本。

GET /v1/tasks/{id} 以另一种格式回答同一问题:status 为 QUEUED、IN_PROGRESS、SUCCESS 或 FAILURE, progress 为字符串,例如 "50%",失败时带有 fail_reason。

创建后 24 小时仍未完成的任务会被标记为失败,冻结金额全额释放。

视频文件

curl https://api.nightferry.io/v1/tasks/task_8Qm2cVhK4pZr7TnW1yLs9XbE6dFa3JoU/artifacts \
  -H "Authorization: Bearer $NIGHTFERRY_KEY"
{
  "task_id": "task_8Qm2cVhK4pZr7TnW1yLs9XbE6dFa3JoU",
  "artifacts": [
    {
      "key": "video",
      "type": "video",
      "content_url": "https://api.nightferry.io/v1/tasks/task_8Qm2cVhK4pZr7TnW1yLs9XbE6dFa3JoU/artifacts/video/content?access=…"
    }
  ]
}

content_url 不需要 API Key——可以直接交给浏览器或播放器。请把这个 URL 本身当作凭证:任何持有它的人都能观看视频。

任务完成后,视频约 24 小时内可用。链接本身不会过期,但超过这个时间后,其背后的视频已不存在,请求会失败。需要保留的视频请及时下载。我们不保留副本。

使用 Key 时,GET /v1/videos/{id}/content 返回相同的内容。如果任务还生成了尾帧,会列出第二个 artifact:last_frame。

美元计费与费用核对

价格页中的两列价格二选一:请求包含参考视频时使用“有参考视频”,否则使用“无参考视频”。费用为 completion_tokens × 该模型每百万 Token 的美元单价 ÷ 1,000,000,四舍五入到微美元。例如 Mini 480p 无参考视频、completion_tokens 为 40,594 时,费用为 $0.137303。

文本与视频共用一个账户余额。余额与每一笔费用(包括每个视频任务)都可以在 国内预览说明 中查看。

错误

任务受理后生成失败,会以 HTTP 200 和 status: failed 返回,如上所示。下表的 HTTP 状态表示请求本身被拒绝。请根据 HTTP 状态判断,不要依赖消息文本,消息可能是中文或英文。

HTTP含义
400请求无效:缺少 model、分辨率不受支持、请求体格式错误。对不存在的任务,GET /v1/videos/{id} 也返回 400。
401缺少 Key 或 Key 无效。
403可用余额不足,或该 Key 不能使用此模型。
404本账户下没有该任务(GET /v1/tasks/{id})。
429当前繁忙,请降低频率后重试。
5xx视频服务暂时不可用。如已有任务 ID 请保留,并联系我们。

测试与验收

如果结果与预期不符,请保留任务 ID、模型、渠道、请求时间、HTTP 状态与任务状态,以便我们排查。请勿提供你的 API Key。