Kling 3.0 Motion Control
让一张图片中的角色复现一段 3~30 秒视频的动作,支持 720p 或 1080p,并可选择背景取自视频还是图片;按图片朝向时结果最长 10 秒,按视频朝向时最长 30 秒。
- 异步:创建调用返回任务 ID,任务成功后即可获得视频。
- 两个输入都必填:一张角色图片和一段 3 到 30 秒的动作视频。图片中的角色会做出视频中的动作。
character_orientation决定角色朝向跟随谁,也决定结果最长多久:image(默认)最长 10 秒,video最长 30 秒。- 没有
duration字段:结果与动作视频一样长,上限取决于所选朝向。 - 按成片秒数计费,以创建时预留的金额为基础结算,分 720p 和 1080p。失败的任务不收费。
截至撰写时,两个 Kling 动作控制模型都不在线上的 GET /v1/media/models 列表中。模型不在该列表期间,为它创建任务会返回 503 processing_unavailable,且不会扣费。接入前请先查看该列表。
在调试窗口里打开本模型,填入你的 BeatAPI API 密钥即可创建任务。调用是真实的,费用从你自己的余额中扣除。
模型 ID
两个模型共用此端点和相同的输入。下表数值直接取自网关契约;只有 Kling 3.0 Motion Control 接受 background_source。
接口与鉴权
POST https://api.beatapi.io/v1/videos/tasks
Authorization
string
必需
你的 BeatAPI API 密钥,以 Bearer <BEATAPI_API_KEY> 形式发送。在控制台创建密钥。密钥只能保存在你的服务端,不要放进浏览器或移动端应用。
请求体使用 JSON,并设置 Content-Type: application/json。Idempotency-Key 为可选:每个逻辑请求发送一个唯一值(最长 255 个字符),仅在重试完全相同的请求体时复用。24 小时内,用相同的键和请求体重试会再次返回第一次的响应,并带上 Idempotent-Replayed: true;相同的键搭配不同的请求体则返回 409 idempotency_conflict。非 2xx 的响应不会被保存,因此 400 或 402 之后的重试会重新执行。
请求流程
等待任务完成
调用 GET /v1/tasks/{task_id},两次调用之间等待 data.poll_after_seconds 秒(图片 5 秒,视频 8 秒),直到 status 为 succeeded 或 failed。也可以为 task.succeeded 和 task.failed 注册 Webhook;仍需保留轮询作为兜底,因为因处理超时而终止的任务不会发送事件。
输入模式
请求参数
model
string
必需
要运行的模型。
取值:kling-3-motion-control
取值有误时
- 缺失:
"model" is required - 向此端点发送了图片模型:
"model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint
prompt
string
可选
关于角色或场景的可选文字提示。动作本身来自视频。
长度:≤ 2500 个字符
- 长度按字符计算(一个中日韩文字算一个字符)。接受空字符串。
取值有误时
- 超出长度上限:
"prompt" has an unsupported length
images
string[]
必需
角色图片:恰好一个链接。它就是做出动作的角色。
数量:1–1
每一项都必须是公网 https:// 链接。本地文件请先上传(POST /v1/files),再传入返回的 data.url。
- 发送包含一个公开 HTTPS 链接的列表;本地文件可用
POST /v1/files上传,并在此处使用返回的data.url。 - 创建任务时不检查图片的大小、格式和尺寸。
取值有误时
- 缺失:
"images" is required - 空列表:
"images" requires at least 1 item - 超过一个链接:
"images" accepts at most 1 items - 不是 https:// 链接:
"images[0]" must be a public HTTPS URL
reference_videos
string[]
必需
动作视频:恰好一个链接。images 中的角色会复现这段视频里的动作。
数量:1–1
每一项都必须是公网 https:// 链接。本地文件请先上传(POST /v1/files),再传入返回的 data.url。
- 长度必须为 3 到 30 秒(见输入素材限制)。结果与该视频一样长,上限由
character_orientation决定。 - 在主机允许的情况下,网关会在创建任务前通过字节范围请求从文件头读取时长。
- 本地文件可用
POST /v1/files上传(视频最大 100 MB),并在此处使用返回的data.url。
按实际生成的视频秒数计费,因此请把片段裁剪到只含所需动作。使用 character_orientation: "image" 时,结果最长 10 秒。
取值有误时
- 缺失:
"reference_videos" is required - 空列表:
"reference_videos" requires at least 1 item - 超过一个链接:
"reference_videos" accepts at most 1 items - 不是 https:// 链接:
"reference_videos[0]" must be a public HTTPS URL - 短于 3 秒或长于 30 秒:
reference_videos[0] is 2 seconds long; this model takes reference video of 3 to 30 seconds. - 主机返回错误或空文件:
reference_videos[0] could not be downloaded: the URL returned HTTP 404.
resolution
string
可选默认值: 720p
输出分辨率,同时也是价格档位:1080p 每秒的价格高于 720p。
可选值:720p, 1080p
默认值:720p
- 仅限小写。省略时使用
720p。
取值有误时
- 取值不在列表中(例如
480p、4k或1080P):"resolution" must be one of: [720p 1080p]
character_orientation
string
可选默认值: image
角色朝向是跟随角色图片(image)还是动作视频(video)。
可选值:image, video
默认值:image
- 它同时决定结果的最长时长:
image最长 10 秒,video最长 30 秒(见“朝向如何决定时长”)。 - 省略时使用
image,因此超过 10 秒的动作视频需要显式指定video。 - 它决定创建任务时在余额上预留的金额:即该朝向允许的最长结果(见计费)。
取值有误时
- 取值不在列表中:
"character_orientation" must be one of: [image video]
background_source
string
可选默认值: input_video
结果的背景来源:input_video 保留动作视频的背景,input_image 保留角色图片的背景。
可选值:input_video, input_image
默认值:input_video
- 省略时使用
input_video。 - 只有 Kling 3.0 Motion Control 接受此字段。
取值有误时
- 取值不在列表中:
"background_source" must be one of: [input_video input_image]
网关还会在创建任务之前检查以下组合:
- 必须恰好传入 1 张角色图片和 1 段已上传的 3–30 秒动作视频;
character_orientation: image时,输出最长 10 秒。
输入素材限制
网关会在创建任务之前读取每一项输入,超出这些限制的输入会被拒绝,并返回点名该输入的 400 bad_request。不扣费。
- 创建任务时只检查动作视频的时长限制:3 到 30 秒,按文件头测得,容差 0.1 秒。报错信息按位置指明输入,位置与字段报错一样从 0 开始计数:
reference_videos[0] is 45 seconds long; this model takes reference video of 3 to 30 seconds. - 无法读取时长的片段(主机不允许字节范围请求,或文件不是 MP4 或 MOV)在这一步不会被拒绝,也不会被测量。只有主机返回错误或空文件时,创建调用才会被拒绝,例如
reference_videos[0] could not be downloaded: the URL returned HTTP 404. image适用于不超过 10 秒的片段。动作视频超过 10 秒时,请发送character_orientation: "video"。- 创建任务时不检查图片的大小、格式和尺寸。
- 有本地文件?用
POST /v1/files上传(png、jpg、jpeg 或 webp 图片最大 50 MB;mp4 或 mov 视频最大 100 MB),再传入返回的data.url。
朝向如何决定时长
没有 duration 字段。结果与动作视频一样长,character_orientation 为其设定上限。
- 任务结束时,按所生成视频的上报用量结算,通常是按其时长乘以每秒标价;与预留金额的差额会退还。如果没有上报用量,则按预留金额收费。见计费。
此模型不接受的字段
发送下列任一字段会在扣费之前被拒绝,而不是被忽略:
duration、aspect_ratio、generate_audio、seed、task_type、output_format、reference_images、reference_audios、quality、sound、watermark,以及其他视频模型的任何字段 →field "duration" is not supported by model kling-3-motion-control(其中是你发送的字段名)。- API 完全不认识的字段 →
unknown field: <name>。
请求示例
动作迁移
请把视频链接换成你自己的 3 到 30 秒的 MP4 或 MOV(没有公开的示例视频)。未指定 character_orientation,因此使用 image,结果最长 10 秒。
1080p,朝向跟随视频
适用于超过 10 秒的片段:video 允许结果最长 30 秒。请把视频链接换成你自己的片段。结果越长,创建任务时在余额上预留的金额越多。
保留角色图片的背景
结果保留角色图片的背景,而不是动作视频中的背景。请把视频链接换成你自己的片段。
响应
创建任务(201)
任务对象。任务成功之前 output 为 null。标注“运行中”的字段会在任务结束后消失。
任务完成
GET /v1/tasks/{task_id} 返回 HTTP 200 和 status: "succeeded",结果在 data.output 中。
输出字段
任务失败
失败的任务在 GET /v1/tasks/{task_id} 上仍然是 HTTP 200:失败信息在响应体里。预扣金额会全额退回,因此不会扣费。
完整示例
创建任务,按服务端给出的轮询提示等待,然后打印结果链接。请在环境变量中设置 BEATAPI_API_KEY 并安装 requests。
计费
- 这些价格在模型上架后生效;在此之前,创建请求会被拒绝,且不收费。
- 按成片秒数计费,单价取决于
resolution。character_orientation和提示词不影响单价。下表按 8 秒结果标价。 - 结果与动作视频一样长,因此创建任务时最终价格尚不确定。网关会按该分辨率的单价,预留该朝向允许的最长结果:
image为 10 秒,video为 30 秒。image约为 1.40(1080p),video约为 4.20(1080p)。余额必须覆盖该金额,否则创建调用会返回402 insufficient_credits。 - 任务结束时,按所生成视频的上报用量结算,通常是按其时长乘以每秒标价,预留金额的剩余部分会退还。如果没有上报用量,则按预留金额收费。
usage.credits_charged和usage.credits_settled显示实际扣费。此模型的usage.billable_duration_seconds报告的是创建时预留的秒数(10 或 30),而不是成片的长度;实际支付的金额请看 credits 字段。 - 失败的任务(包括提交后被内容审核拒绝的任务)全额退款。在任务创建之前就被拒绝的请求不收费。
当前牌价,与价格页一致。享有协商折扣的账户实付更低;任务的 data.usage 始终显示实际扣费金额。
常见错误
HTTP 错误速查
任务生成之前的错误会以非 2xx 响应返回,不扣费。请根据 error.code 或 error.retryable 判断处理方式;message 会指出问题所在。完整列表和重试策略见错误码。
两个模型的区别
身份验证
Send your API key as Authorization: Bearer <BEATAPI_API_KEY>.
请求头
请求体使用 JSON,并设置 Content-Type: application/json。Idempotency-Key 为可选:每个逻辑请求发送一个唯一值(最长 255 个字符),仅在重试完全相同的请求体时复用。24 小时内,用相同的键和请求体重试会再次返回第一次的响应,并带上 Idempotent-Replayed: true;相同的键搭配不同的请求体则返回 409 idempotency_conflict。非 2xx 的响应不会被保存,因此 400 或 402 之后的重试会重新执行。
请求
角色图片:恰好一个链接。它就是做出动作的角色。
数量:1–1
每一项都必须是公网 https:// 链接。本地文件请先上传(POST /v1/files),再传入返回的 data.url。
- 发送包含一个公开 HTTPS 链接的列表;本地文件可用
POST /v1/files上传,并在此处使用返回的data.url。 - 创建任务时不检查图片的大小、格式和尺寸。
取值有误时
- 缺失:
"images" is required - 空列表:
"images" requires at least 1 item - 超过一个链接:
"images" accepts at most 1 items - 不是 https:// 链接:
"images[0]" must be a public HTTPS URL
要运行的模型。
取值:kling-3-motion-control
取值有误时
- 缺失:
"model" is required - 向此端点发送了图片模型:
"model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint
动作视频:恰好一个链接。images 中的角色会复现这段视频里的动作。
数量:1–1
每一项都必须是公网 https:// 链接。本地文件请先上传(POST /v1/files),再传入返回的 data.url。
- 长度必须为 3 到 30 秒(见输入素材限制)。结果与该视频一样长,上限由
character_orientation决定。 - 在主机允许的情况下,网关会在创建任务前通过字节范围请求从文件头读取时长。
- 本地文件可用
POST /v1/files上传(视频最大 100 MB),并在此处使用返回的data.url。
说明:按实际生成的视频秒数计费,因此请把片段裁剪到只含所需动作。使用 character_orientation: "image" 时,结果最长 10 秒。
取值有误时
- 缺失:
"reference_videos" is required - 空列表:
"reference_videos" requires at least 1 item - 超过一个链接:
"reference_videos" accepts at most 1 items - 不是 https:// 链接:
"reference_videos[0]" must be a public HTTPS URL - 短于 3 秒或长于 30 秒:
reference_videos[0] is 2 seconds long; this model takes reference video of 3 to 30 seconds. - 主机返回错误或空文件:
reference_videos[0] could not be downloaded: the URL returned HTTP 404.
结果的背景来源:input_video 保留动作视频的背景,input_image 保留角色图片的背景。
可选值:input_video, input_image
默认值:input_video
- 省略时使用
input_video。 - 只有 Kling 3.0 Motion Control 接受此字段。
取值有误时
- 取值不在列表中:
"background_source" must be one of: [input_video input_image]
角色朝向是跟随角色图片(image)还是动作视频(video)。
可选值:image, video
默认值:image
- 它同时决定结果的最长时长:
image最长 10 秒,video最长 30 秒(见“朝向如何决定时长”)。 - 省略时使用
image,因此超过 10 秒的动作视频需要显式指定video。 - 它决定创建任务时在余额上预留的金额:即该朝向允许的最长结果(见计费)。
取值有误时
- 取值不在列表中:
"character_orientation" must be one of: [image video]
关于角色或场景的可选文字提示。动作本身来自视频。
长度:≤ 2500 个字符
- 长度按字符计算(一个中日韩文字算一个字符)。接受空字符串。
取值有误时
- 超出长度上限:
"prompt" has an unsupported length
输出分辨率,同时也是价格档位:1080p 每秒的价格高于 720p。
可选值:720p, 1080p
默认值:720p
- 仅限小写。省略时使用
720p。
取值有误时
- 取值不在列表中(例如
480p、4k或1080P):"resolution" must be one of: [720p 1080p]
响应
任务对象。任务成功之前 output 为 null。标注“运行中”的字段会在任务结束后消失。

