Kling 3.0 Turbo

kling-3.0-turbo 支持文生视频与单首帧图生视频,输出 720p 或 1080p、3–15 秒的有声视频。

已有官方 Turbo 协议客户端可将 base_url 改为 https://api.aivideoapi.ai,并替换为平台 API Key,继续使用下面的官方路径和请求、响应字段。素材限制与积分收取规则以本页为准。

方法与路径功能
POST /text-to-video/kling-3.0-turbo文生视频
POST /image-to-video/kling-3.0-turbo首帧图生视频
GET /tasks按任务 ID 或外部 ID 查询
POST /tasks筛选和游标分页查询

所有接口使用 Authorization: Bearer YOUR_PLATFORM_API_KEY;JSON 请求使用 Content-Type: application/json。直接使用上述路径,不额外添加 /v1

创建任务

文生视频

最简请求默认生成 720p、5 秒、16:9 视频,关闭水印。Turbo 固定音画同出,无需也不支持音频开关。

curl -X POST 'https://api.aivideoapi.ai/text-to-video/kling-3.0-turbo' \
  -H 'Authorization: Bearer YOUR_PLATFORM_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"prompt":"一只小猫在月光下的花园中奔跑,伴随树叶沙沙声与轻柔的脚步声。"}'

1080p 竖屏视频,同时设置回调和水印副本:

{
  "prompt": "女孩坐在火车窗边看向不断掠过的风景,头发随车厢轻轻晃动,伴随平缓的列车声。",
  "settings": {"resolution": "1080p", "duration": 5, "aspect_ratio": "9:16"},
  "options": {
    "external_task_id": "turbo-text-001",
    "callback_url": "https://app.example.com/webhooks/video",
    "watermark_info": {"enabled": true}
  }
}

以下创建示例均为完整 JSON 请求体,发送到对应的文生或图生接口。示例中的素材地址和回调地址需替换为实际可访问的地址。

首帧图生视频

POST /image-to-video/kling-3.0-turbo 提交一张 first_frame,可选一个 prompt。输出比例跟随首帧,不传 settings.aspect_ratio

{
  "contents": [
    {"type": "prompt", "text": "小猫缓缓转头看向镜头,微风轻拂毛发,远处传来鸟鸣。"},
    {"type": "first_frame", "url": "https://media.example.com/kitten.jpg"}
  ],
  "settings": {"resolution": "720p", "duration": 5},
  "options": {"external_task_id": "turbo-image-001"}
}

也可以仅提交首帧,不填写提示词:

{
  "contents": [{"type": "first_frame", "url": "https://media.example.com/kitten.jpg"}]
}

Base64 首帧

contents[].url 支持 PNG/JPEG Base64,可带或不带 data URL 前缀。将下面的占位内容替换为完整图片数据。平台暂存时保留原始字节,不缩放、不压缩;较大图片优先使用 URL。

{
  "contents": [
    {"type": "prompt", "text": "镜头缓慢推进至主体,伴随轻柔的环境音。"},
    {"type": "first_frame", "url": "data:image/jpeg;base64,REPLACE_WITH_FULL_IMAGE_BASE64"}
  ],
  "settings": {"resolution": "1080p", "duration": 8},
  "options": {"external_task_id": "turbo-base64-001"}
}

明确分镜

提示词使用 镜头 n, 秒数, 描述; 格式,以半角逗号和分号分隔;英文描述也需保留中文 镜头 标记。支持 1–6 个镜头,编号从 1 连续递增,各镜头时长为至少 1 秒的整数,总和必须等于 settings.duration。每个镜头描述请控制在 512 字符以内。

识别到该格式后自动启用明确分镜,无需传 multi_shot;普通提示词默认按单镜头生成。

{
  "prompt": "镜头 1, 2, 月光下的花园全景,树叶轻轻摇动;镜头 2, 3, 小猫仰望月亮的特写,伴随轻柔脚步声;",
  "settings": {"resolution": "720p", "duration": 5, "aspect_ratio": "16:9"},
  "options": {"external_task_id": "turbo-shots-001"}
}

首帧图生视频也可在 prompt 素材项中使用相同格式:

{
  "contents": [
    {"type": "prompt", "text": "镜头 1, 2, 小猫缓缓转头看向镜头;镜头 2, 3, 小猫沿花园小路走向远处;"},
    {"type": "first_frame", "url": "https://media.example.com/kitten.jpg"}
  ],
  "settings": {"resolution": "1080p", "duration": 5},
  "options": {"external_task_id": "turbo-image-shots-001", "watermark_info": {"enabled": true}}
}

参数和素材限制

字段可选值和行为
prompt文生视频必填,正向和负向描述均写入此字段
contents图生视频必填,恰好一个 first_frame,最多一个 prompt
contents[].typefirst_frame 搭配 url,或 prompt 搭配 text
settings.resolution720p(默认)或 1080p
settings.duration3–15 秒整数,默认 5
settings.aspect_ratio仅文生视频使用:16:9(默认)、9:161:1
options.external_task_id可选客户任务 ID,去重规则见下文
options.callback_url可选 HTTP(S) 状态通知地址
options.watermark_info.enabled布尔值,默认 false;开启后额外返回水印副本

Turbo 不支持尾帧、参考图片或视频、视频编辑、主体、4K、独立负向提示词字段和音频开关。

本服务图片要求:JPEG/JPG/PNG,不含透明通道,宽高分别为 300–8000 像素,宽高比为 1:2.5–2.5:1,文件不超过 10 MB;普通提示词不超过 2500 字符。该范围小于官方 Turbo 的图片 50 MB、文生提示词 3072 字符限制。

平台不增加图片大小和提示词长度的前置拦截,不压缩图片、不截断文本,仅进行协议转换后原样提交。超出范围的输入仍可能在生成时被拒绝,并返回清洗后的错误。分镜描述请控制在 512 字符内,避免生成侧缩短内容。

当前部署的整个 JSON 请求体上限为 4.5 MB,包含 Base64 编码和其他字段的开销。超限请求可能在进入接口前被拒绝;较大图片请使用 HTTP(S) URL。参见请求体限制

素材 URL 必须允许无需登录直接下载。回调 URL 须可由 API 服务访问并直接接受 POST。两类地址都需使用 HTTP(S),且不能包含用户名和密码;回调不跟随重定向。

去重与创建响应

同账号、同模型下,使用相同 options.external_task_id 和相同参数重试会返回已有任务,不重复扣费。参数不同会返回冲突;文生与图生也视为不同请求。新任务请使用新 ID。外部 ID 按模型分别去重,建议客户在整个接入中保持全局唯一,避免查询歧义。不传或传空外部 ID 时不提供此去重保障。

创建成功返回异步任务摘要:

{
  "code": 0,
  "message": "SUCCEED",
  "request_id": "81bb383c-bf77-41dc-b123-dc5f0688a064",
  "data": {
    "id": "29bd04f8-3c15-4374-a364-4b484782d235",
    "status": "submitted",
    "create_time": 1789603200000,
    "update_time": 1789603200000,
    "external_id": "turbo-text-001"
  }
}

仅传入外部 ID 时包含 external_id。时间戳均为 Unix 毫秒。创建摘要不含 outputsbilling 和任务级 message;幂等重试可能返回处于后续状态的已有任务。

按 ID 查询任务

使用 GET /taskstask_idsexternal_task_ids 必须且只能选择一个,均支持英文逗号分隔的批量 ID。

curl --get 'https://api.aivideoapi.ai/tasks' \
  -H 'Authorization: Bearer YOUR_PLATFORM_API_KEY' \
  --data-urlencode 'task_ids=29bd04f8-3c15-4374-a364-4b484782d235'
curl --get 'https://api.aivideoapi.ai/tasks' \
  -H 'Authorization: Bearer YOUR_PLATFORM_API_KEY' \
  --data-urlencode 'external_task_ids=turbo-text-001,turbo-image-001'

统一查询返回当前账号匹配的 Turbo 和 Omni 任务。如果两个模型使用同一外部 ID,会返回两条任务,不覆盖其中一条。不存在的任务和其他账号任务不返回,无匹配时为 data: []。同一任务 ID 重复传入时只返回一次。查询读取平台记录,不触发生成或轮询。

处理中返回体

{
  "code": 0,
  "message": "SUCCEED",
  "request_id": "d482570f-e19c-4d82-af57-4959ef8bf837",
  "data": [{
    "id": "29bd04f8-3c15-4374-a364-4b484782d235",
    "status": "processing",
    "create_time": 1789603200000,
    "update_time": 1789603230000,
    "external_id": "turbo-text-001",
    "message": "",
    "outputs": [],
    "billing": []
  }]
}

submitted 表示已受理或等待处理;processing 包含生成、保存结果与最终积分结算阶段。两个状态的 outputsbilling 均为空数组。

成功返回体

此示例对应上面的 1080p、5 秒文生任务,账号倍率为 1

{
  "code": 0,
  "message": "SUCCEED",
  "request_id": "9ebfc933-3d04-424b-9f11-707d0c701ce1",
  "data": [{
    "id": "29bd04f8-3c15-4374-a364-4b484782d235",
    "status": "succeeded",
    "create_time": 1789603200000,
    "update_time": 1789603320000,
    "external_id": "turbo-text-001",
    "message": "",
    "outputs": [{
      "type": "video",
      "id": "29bd04f8-3c15-4374-a364-4b484782d235",
      "url": "https://media.example.com/results/turbo-text-001.mp4?signature=example",
      "watermark_url": "https://media.example.com/results/turbo-text-001-watermarked.mp4?signature=example",
      "duration": "5"
    }],
    "billing": [{"charge_type": "unit", "amount": "192.31", "package_type": "video"}]
  }]
}

请完整使用返回的 url 和可选 watermark_url,保留全部签名参数。平台直接透传这些地址,不更换域名或转存文件。请及时下载,地址可能过期;保留任务和积分记录不延长文件可用期,也不保证至少 30 天可下载。durationbilling[].amount 均为十进制字符串。

失败返回体

外层 code=0 仅表示查询成功,视频生成结果需检查任务的 status

{
  "code": 0,
  "message": "SUCCEED",
  "request_id": "42685723-917a-4ea7-82ef-cdf7c03aeaa9",
  "data": [{
    "id": "7689f980-0f92-4d31-bc7b-bc848d051d70",
    "status": "failed",
    "create_time": 1789603200000,
    "update_time": 1789603260000,
    "external_id": "turbo-failed-001",
    "message": "Video generation could not be completed.",
    "outputs": [],
    "billing": []
  }]
}

筛选与分页查询

发送 POST /tasks。默认查询截至当前时间的最近 30 天,每页最多 100 条;limit 为 1–500 的整数。start_timeend_time 使用 Unix 毫秒数值,也兼容仅含数字的毫秒时间戳字符串。

{
  "start_time": 1789603200000,
  "end_time": 1789689600000,
  "limit": 100,
  "filters": [
    {"key": "status", "values": ["succeeded"]},
    {"key": "product_type", "values": ["video"]}
  ]
}

status 支持 submittedprocessingsucceededfailedproduct_type 接受官方的 videoimagetry_on;当前接口只包含 Turbo/Omni 视频任务,因此只筛选其他产品类型时返回空结果。

最后一页的响应示例:

{
  "code": 0,
  "message": "SUCCEED",
  "request_id": "3d6a01c0-a624-4934-9361-15d09a4c1586",
  "data": {
    "result": [{
      "id": "29bd04f8-3c15-4374-a364-4b484782d235",
      "status": "succeeded",
      "create_time": 1789603200000,
      "update_time": 1789603320000,
      "external_id": "turbo-text-001",
      "message": "",
      "outputs": [{"type": "video", "id": "29bd04f8-3c15-4374-a364-4b484782d235", "url": "https://media.example.com/results/turbo-text-001.mp4?signature=example", "duration": "5"}],
      "billing": [{"charge_type": "unit", "amount": "192.31", "package_type": "video"}]
    }],
    "count": 1,
    "next_cursor": "",
    "has_more": false
  }
}

has_more=true 时,使用返回的 next_cursor 继续查询:

{"cursor": "REPLACE_WITH_NEXT_CURSOR", "limit": 100}

游标保存原查询的时间范围、筛选条件和模型范围,请原样传入。任务按创建时间倒序,同一时间用任务 ID 稳定排序。旧版 Omni 游标继续只查 Omni,新游标包含两个模型。count 表示本页返回的任务数。

回调通知

创建时设置 options.callback_url。Turbo 对实际观察到的每次状态变化建立独立事件:submittedprocessingsucceededfailed。未观察到的中间状态不会补造;重复查询或幂等创建不会产生新事件。

回调正文是单个任务对象,字段与查询结果中的一项一致,不包含外层 coderequest_iddata。每个事件保留状态变化当时的任务快照。成功事件在积分结算完成后建立。

已提交的回调示例:

{
  "id": "29bd04f8-3c15-4374-a364-4b484782d235",
  "status": "submitted",
  "create_time": 1789603200000,
  "update_time": 1789603200000,
  "external_id": "turbo-text-001",
  "message": "",
  "outputs": [],
  "billing": []
}

processing 事件使用相同结构,并更新状态和时间。成功回调示例:

{
  "id": "29bd04f8-3c15-4374-a364-4b484782d235",
  "status": "succeeded",
  "create_time": 1789603200000,
  "update_time": 1789603320000,
  "external_id": "turbo-text-001",
  "message": "",
  "outputs": [{
    "type": "video",
    "id": "29bd04f8-3c15-4374-a364-4b484782d235",
    "url": "https://media.example.com/results/turbo-text-001.mp4?signature=example",
    "watermark_url": "https://media.example.com/results/turbo-text-001-watermarked.mp4?signature=example",
    "duration": "5"
  }],
  "billing": [{"charge_type": "unit", "amount": "192.31", "package_type": "video"}]
}

失败回调为 status="failed"message 为失败说明,outputsbilling 为空,与前文失败查询的任务对象一致。

签名与验签

由账号管理员配置独立的 Turbo Webhook Secret,与平台 API Key 分开管理,不放在创建任务请求中。每次投递读取当前有效密钥;普通轮换后,新密钥和前一个密钥共同签名七天。紧急撤销立即移除旧密钥;删除配置后停止签名,也适用于待投递事件。

请求头内容
webhook-id事件 ID,重试保持一致;不同状态变化使用不同 ID
webhook-timestamp本次投递的 Unix 秒时间戳
webhook-signature一个或多个以空格分隔的 v1,BASE64_SIGNATURE

使用 Standard Webhooks 对原始请求体验签。例如使用 JavaScript standardwebhooks 包:

import { Webhook } from "standardwebhooks";

const rawBody = await request.text();
const verifiedTask = new Webhook(process.env.TURBO_WEBHOOK_SECRET).verify(rawBody, {
  "webhook-id": request.headers.get("webhook-id"),
  "webhook-timestamp": request.headers.get("webhook-timestamp"),
  "webhook-signature": request.headers.get("webhook-signature"),
});
// 先按事件 ID 幂等保存,再确认接收。

自行实现时,移除密钥的 whsec_ 前缀,将剩余内容 Base64 解码,使用 HMAC-SHA256 签名 webhook-id.webhook-timestamp.rawBody,再将摘要 Base64 编码。以常量时间比较任一受支持的 v1 签名,校验时间窗口(通常为五分钟),并按事件 ID 去重。不能将解析后的 JSON 重新序列化用于验签。

未配置密钥时不发送三个 webhook-* 头。处理未签名回调前,应通过带鉴权的 GET /tasks 确认当前任务状态,再执行业务操作;状态更新须幂等,不能用较早事件覆盖终态。

接收与重试

持久保存或入队事件后,在 10 秒内返回 HTTP 2xx。视频下载等耗时操作放到异步处理。超时、网络错误、非 2xx 和重定向均视为投递失败。

  • 第一次:事件可投递后发送。
  • 第二次:第一次失败后延迟 3 分钟。
  • 第三次:第二次失败后延迟 10 分钟。

每个事件最多三次。单任务按事件顺序投递,较早事件重试可能延迟后续通知,但不阻塞生成和结算。重试保留事件 ID 和正文,重新生成时间戳和签名;实际投递可能晚于计划时间。重试耗尽后可通过查询接口补齐业务状态。

回调失败不会把成功任务改成失败,不会退积分或再次发起生成。

积分收取规则

  • 720p:30.8 积分/秒,文生和首帧图生同价,包含音频。
  • 1080p:38.5 积分/秒,文生和首帧图生同价,包含音频。
  • 以上为账号倍率 1 的基础售价,单价展示保留一位小数;结算使用展示舍入前的配置单价。
  • 按请求时长预扣,成功后根据实际用量结算:round(round(单价 × 秒数, 2) × 账号倍率, 2)。每个任务保留创建时的单价和倍率快照。
  • 默认倍率下,5 秒视频为 720p:153.85 积分,或 1080p:192.31 积分;不能直接用展示的一位小数单价计算总额。
  • 成功任务以 billing[].amount 为实际平台积分消耗,返回十进制字符串,charge_type="unit"package_type="video"
  • 明确失败只退还一次预扣积分。提交结果或任务状态不明时,不自动重提或退款。生成成功后的异常,包括结算重试和回调失败,均不会进入失败退款流程。不支持取消任务。