H3 Nexus 视频算力网络
API 参考

接口一览

全部对外端点。Stage 与节点信息属于内部实现,对外 API 永不暴露。

01鉴权与约定

Base URL: https://api.456.com.cn
Authorization: Bearer <API_KEY>
Content-Type: application/json
  • 金额一律以微元(1 元 = 1e6)给整数,另给展示串;展示串不要参与运算
  • 时间为 ISO 8601 UTC。
  • 写操作支持 Idempotency-Key 头,同键返回同一任务、不重复计费。
  • 速率限制超出时返回 429 并带 Retry-After

02端点

方法路径说明备注
POST/v1/videos创建视频任务返回 202,绝不等生成
GET/v1/videos列出任务(游标分页)
GET/v1/videos/{id}查询任务
GET/v1/videos/{id}/content下载成片succeeded 后可用
POST/v1/videos/{id}/cancel取消任务已取消的不计费
DELETE/v1/videos/{id}删除任务记录
POST/v1/files上传素材类型白名单 + 大小上限,24 小时后删除
POST/v1/prompt/optimize优化提示词按次计费;失败不计费
GET/v1/credits余额与近期流水
GET/v1/api-keys列出 API Key只返回掩码
POST/v1/api-keys创建 API Key明文只在此返回一次
DELETE/v1/api-keys/{id}吊销 API Key

创建任务的请求体

字段类型默认说明
promptstring 1–7000必填提示词。reference_to_video 里可以用 @图片1 / @视频1 / @音频1 指名某一句针对哪件素材,平台会把它翻成模型认的 <Picture 1> / <Video 1> / <Audio j>引用了没传的素材会被 400 拒(不静默忽略)
negative_promptstring ≤2000负向提示词
modetext_to_video · image_to_video · reference_to_videotext_to_video后两者需先传素材
input_imagefile_ id起始帧。image_to_video 时与 end_image 至少给一个。会被拉伸到画幅(不保比例)
end_imagefile_ id结束帧,成片收敛到这一帧。按比例居中裁切。只对 image_to_video 有效
referencesfile_ id[]reference_to_video 时必填。顺序有意义:提示词里的 @图片1 就是按同类素材在这个数组里的先后编号的。每类上限来自模型:9 张图 / 3 段视频 / 3 段音频,视频与音频各自累计 ≤15 秒。是图是视频是音频由平台按 content_type 判,请求里不用声明
referencefile_ id已废弃,等价于 references: [它]。与 references 同时给会被拒
durationnumber 5–155成片秒数,计费依据。帧数落在模型的 17k+5 栅格上(24fps),实际成片会略长于请求值(6s → 158 帧 ≈ 6.58s),多出的部分不计费。两端贴着模型训练区间:5s = 124 帧、15s = 362 帧
resolution768p · 2k768p2k 尚未实现
aspect_ratioauto · 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:916:9画布依次为 1344×768 · 768×1344 · 768×768 · 1024×768 · 768×1024 · 1536×672。auto = 按第一件素材的比例挑最接近的一个(建任务时就解析成具体值,任务记录里存的是解析后的结果)
accelerationauto · offauto已由 service_tier 接管,只在 draft 档有意义
service_tierdraft · standard · pro · dedicatedstandarddraft 加速档,与标准档同价(画质有折损);pro/dedicated 开对冲
audiobooleantrue
seedinteger复现同一结果。n>1 时第 i 条自动用 seed + i(否则几条片子一模一样),实际用的种子在任务返回的 seed
n1 · 2 · 41这一次出几条片。语义是「建 N 个独立任务」:各自排队、各自计费、各自可取消。n=1 返回单个任务对象(契约不变);n>1 返回一个 object: "list" 的信封,且可能比请求的少(撞上并发上限时只返回真正建成的那几条)
webhook_urluri终态回调,见 Webhook
metadataobject原样回显

任务返回

{
  "id": "vid_...",
  "object": "video.task",
  "status": "succeeded",
  "progress": 1,
  "mode": "text_to_video",
  "resolution": "768p",
  "duration": 5,
  "created_at": "...", "started_at": "...", "completed_at": "...",
  "accelerated": true,
  "output": {
    "video_uri": "...", "width": 1344, "height": 768,
    "duration": 5, "has_audio": true, "watermarked": true,
    "expires_at": "..."
  },
  "usage": { "billed_seconds": 5, "amount_micro": 500000, "amount": "0.50", "currency": "CNY" }
}
几个容易被忽略、但决定你怎么处理结果的字段
字段说明
accelerated这次实际有没有走加速通道。请求里的acceleration: auto 只是意愿,没有合格算力时会降级 —— 两者耗时与画面都不同,要看这个字段才知道拿到的是哪一种
output.watermarked这份成片实际带不带可见水印,不是恒为 true 的常量
output.expires_at下载地址的过期时间,每次查询现签,请勿缓存该 URL
fail_reason / fail_detail前者是可编程判断的分类,后者是给人看的具体说明
awaiting_capacity
任务在等可用算力时会多出这个字段(含 sinceseconds)。它和 status 要一起看rendering + 有该字段 = 仍在排队; 没有 = 真的在跑。它不会告诉你是哪一段。 排队超 30 分钟仍无人认领 → failed不计费

03素材

POST /v1/files 以 multipart 上传,purposeinput_image(起始帧)、end_image(结束帧) 或 reference(参考素材)。返回含 expires_at过期后字节会被真正删除,此后再以该文件创建任务将被拒绝。

reference 收三类:(png/jpeg/webp)、视频(mp4/mov)、音频(mp3/wav/m4a/flac)。 上传时平台会从容器头里读出时长(视频、音频)与像素尺寸(图、视频)—— 前者是计费与 15 秒累计闸的依据, 后者给 aspect_ratio: "auto" 用。音频读不出时长会被 400 拒:15 秒时长限制以该元数据为唯一依据, 接受无法解析时长的文件将使该限制失效。

⚠️ 参考视频会被模型截断到成片帧数:出 5 秒片时, 一段 15 秒的参考视频只有前 5.17 秒进得去(帧数还要向下对齐到 17k+5 栅格)。 这不是平台的选择,是模型本身的行为(ComfyUI 节点里的硬截断,没有开关)。但计费按你上传的时长算 —— 字节我们全都收下、存下、要传给编码器, 成本在上传那一刻就发生了。想让整段素材都生效,把 duration调到不小于素材时长。

03b提示词优化

POST /v1/prompt/optimize,请求体 { "prompt": "…" }, 返回优化后的 prompt(可直接填进创建任务请求)。按次计费,单价见 GET /v1/pricing prompt_opt_micro(默认 ¥0.05/次)。

三条与钱有关的行为:余额不足返回 402 且不扣费; 优化服务出错返回 502 且不扣费只有成功返回时才扣一笔,在流水里记作 prompt_optimize。 这一笔不挂在任何任务上 —— 你可以优化完不发任务。

04余额

GET /v1/credits 返回余额与近期流水。权威余额是流水求和;返回中的余额快照仅供对账参考,并发写入下可能不是最新值。

05API Key

列表只返回掩码。创建时明文只出现一次,平台仅存哈希 —— 丢了只能吊销重建。

06任务状态机

状态含义计费
queued已受理,等待派发冻结额度
rendering扩散生成中冻结额度
encoding转码与封装中冻结额度
succeeded完成,可下载计费,见 usage
failed失败不计费
cancelled已取消不计费

07错误结构

{
  "error": {
    "type": "invalid_request_error",
    "code": "task_not_cancellable",
    "message": "…",
    "param": "duration",
    "request_id": "req_..."
  }
}

反馈问题时请附上 request_id。各状态码的含义见错误码