# 可灵主体与音色
> 创建、查询、复用与删除可灵主体和音色,含平台资源 ID、费用及结果未知处理。
先创建可复用的主体或音色,等创建任务成功后取得 `kr_...` 资源 ID,再在[可灵视频](native-kling.md)中引用。创建任务 ID、资源 ID、提示词内的引用名称分别有不同用途,不能互换。
## 接口与鉴权
Base URL:`https://platform.sgt.site/kling`
所有请求使用企业内的虚拟密钥:`Authorization: Bearer YOUR_VIRTUAL_KEY`。创建和删除还需 `Content-Type: application/json`。该密钥当前须有 `kling-3.0-omni` 的使用权限;创建前还需有相应的主体或音色创建价格及足够预算。请求体不传 `model`。
| 方法 | 相对于 Base URL 的路径 | 用途与返回 |
| --- | --- | --- |
| POST | `/v1/general/advanced-custom-elements` | 创建主体,返回平台创建任务 ID |
| GET | `/v1/general/advanced-custom-elements/{id}` | 按创建任务 ID 或自定义任务 ID 查询,成功后返回 `element_id` |
| GET | `/v1/general/advanced-custom-elements` | 当前调用主体可见的主体创建任务列表 |
| GET | `/v1/general/advanced-presets-elements` | 官方预置主体目录,返回可引用的平台主体 ID |
| POST | `/v1/general/delete-advanced-elements` | 删除自建主体,返回独立的删除任务 ID |
| POST | `/v1/general/custom-voices` | 创建音色,返回平台创建任务 ID |
| GET | `/v1/general/custom-voices/{id}` | 按创建任务 ID 或自定义任务 ID 查询,成功后返回 `voice_id` |
| GET | `/v1/general/custom-voices` | 当前调用主体可见的音色创建任务列表 |
| GET | `/v1/general/presets-voices` | 官方预置音色目录,返回可引用的平台音色 ID |
| POST | `/v1/general/delete-voices` | 删除自建音色,返回独立的删除任务 ID |
查询与复用仍会校验当前权限。资源属于创建它的用户及企业;知道另一个用户的 ID 不代表可以查看、引用或删除。调用方只能使用本接口返回的 `kr_...` ID,不能填写供应商账号里的原始资源 ID。
## 创建主体
`POST /v1/general/advanced-custom-elements` 支持以多张图片或一段视频创建主体,两种输入不能同时提供。一次调用创建一个主体。
| 字段 | 类型 | 必填条件与说明 |
| --- | --- | --- |
| `element_name` | string | 必填,非空,最多 20 个字符 |
| `element_description` | string | 必填,非空,最多 100 个字符 |
| `reference_type` | string | 必填,`image_refer` 或 `video_refer` |
| `element_image_list` | object | `image_refer` 必填;此时不传 `element_video_list` |
| `element_image_list.frontal_image` | string | 正面参考图,HTTP(S) URL 或图片 Base64 |
| `element_image_list.refer_images` | object[] | 1–3 张其他角度或细节参考图,每项为 `{"image_url":"..."}` |
| `element_video_list` | object | `video_refer` 必填;此时不传 `element_image_list` |
| `element_video_list.refer_videos` | object[] | 恰好一项 `{"video_url":"https://..."}` |
| `element_voice_id` | string | 可选,绑定一个当前主体可见的 `kr_...` 音色 ID;不传则不指定已有音色 |
| `tag_list` | object[] | 可选,每项为 `{"tag_id":"o_102"}`;允许值见下表 |
| `callback_url` | string | 可选,任务结果回调地址,必须通过平台的回调目标校验;回调使用平台任务 ID |
| `external_task_id` | string | 可选,最多 255 字节;当前用户及企业的可灵任务中须唯一,可用于查询,不能作为重复提交的幂等保证 |
不接受未知字段或顶层字段值 `null`。图片可使用可访问 URL、原始 Base64 或 `data:image/png;base64,...` / `data:image/jpeg;base64,...`。素材 URL 不能包含用户名或密码。
| 标签 | 含义 | 标签 | 含义 |
| --- | --- | --- | --- |
| `o_101` | 热梗 | `o_102` | 人物 |
| `o_103` | 动物 | `o_104` | 道具 |
| `o_105` | 服饰 | `o_106` | 场景 |
| `o_107` | 特效 | `o_108` | 其他 |
下面创建一个由正面图和侧面图定义的主体。示例中的素材 URL 需替换为你有权使用且模型可以访问的文件。
```bash
curl -X POST 'https://platform.sgt.site/kling/v1/general/advanced-custom-elements' \
-H 'Authorization: Bearer YOUR_VIRTUAL_KEY' \
-H 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"element_name": "演示人物",
"element_description": "穿蓝色衬衫的成年人,保持面部和服装一致",
"reference_type": "image_refer",
"element_image_list": {
"frontal_image": "https://media.example.com/person-front.jpg",
"refer_images": [{"image_url": "https://media.example.com/person-side.jpg"}]
},
"tag_list": [{"tag_id": "o_102"}],
"external_task_id": "demo-person-create-001"
}
JSON
```
受理响应示例:
```json
{
"code": 0,
"message": "",
"request_id": "req_example",
"data": {
"task_id": "task_example_create",
"task_status": "submitted",
"task_info": {"external_task_id": "demo-person-create-001"},
"created_at": 1792022400000,
"updated_at": 1792022400000
}
}
```
这表示创建已受理,尚不能用 `task_example_create` 生成视频。按下文查询,取得成功结果里的 `element_id`。
从视频创建主体的完整示例:
```bash
curl -X POST 'https://platform.sgt.site/kling/v1/general/advanced-custom-elements' \
-H 'Authorization: Bearer YOUR_VIRTUAL_KEY' \
-H 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"element_name": "演示视频人物",
"element_description": "保留参考视频人物的脸部、服饰和动作特征",
"reference_type": "video_refer",
"element_video_list": {
"refer_videos": [{"video_url": "https://media.example.com/person-reference.mp4"}]
}
}
JSON
```
官方素材要求:图片为 JPEG/PNG,单张不超过 10 MB,宽高均至少 300 px,比例在 1:2.5 至 2.5:1;其他参考图应与正面图有差异。视频为 MP4/MOV,3–8 秒、1080p、16:9 或 9:16,最多 200 MB,目前用于写实人形主体。有声视频含人声时,模型可能创建并绑定音色。远程文件的格式、尺寸、时长和内容由模型进一步检查。视频创建的主体用于支持此类主体的 Omni 模型,不能假定所有视频模型都支持。参见[可灵官方主体说明](https://klingai.com/document-api/api/video/3-0-omni/elements)。
## 创建音色
`POST /v1/general/custom-voices` 从一份音频或视频素材创建可复用音色。
| 字段 | 类型 | 必填条件与说明 |
| --- | --- | --- |
| `voice_name` | string | 必填,非空,最多 20 个字符 |
| `voice_url` | string | 必填,模型可访问的 HTTP(S) 音频或视频 URL |
| `callback_url` | string | 可选,规则与创建主体相同 |
| `external_task_id` | string | 可选,规则与创建主体相同 |
```bash
curl -X POST 'https://platform.sgt.site/kling/v1/general/custom-voices' \
-H 'Authorization: Bearer YOUR_VIRTUAL_KEY' \
-H 'Content-Type: application/json' \
--data-binary '{"voice_name":"演示人声","voice_url":"https://media.example.com/voice-sample.wav","external_task_id":"demo-voice-create-001"}'
```
受理响应与创建主体相同。查询路径改为 `/v1/general/custom-voices/{task_id}`,成功结果位于 `data.task_result.voices[]`:
```bash
curl 'https://platform.sgt.site/kling/v1/general/custom-voices/task_example_voice' \
-H 'Authorization: Bearer YOUR_VIRTUAL_KEY'
```
```json
{
"code": 0,
"message": "",
"request_id": "req_example",
"data": {
"task_id": "task_example_voice",
"task_status": "succeed",
"task_info": {"external_task_id": "demo-voice-create-001"},
"created_at": 1792022400000,
"updated_at": 1792022460000,
"task_result": {
"voices": [{"voice_id": "kr_example_voice", "voice_name": "演示人声", "owned_by": "platform"}]
}
}
}
```
官方支持 MP3/WAV/MP4/MOV,素材须只有一种清晰人声、无杂音,时长 5–30 秒。使用你有权使用的声音素材。当前入口通过 `voice_url` 创建;`video_id` 所需的历史 V2.6 有声视频、数字人或对口型来源不在本页模型范围内,提交该字段会在发送前返回 400。参见[可灵官方音色说明](https://klingai.com/document-api/api/video/3-0-omni/voice-customization)。
## 查询创建结果
```bash
curl 'https://platform.sgt.site/kling/v1/general/advanced-custom-elements/task_example_create' \
-H 'Authorization: Bearer YOUR_VIRTUAL_KEY'
```
也可将路径末尾替换为自己提交的 `external_task_id`;其中的特殊字符需要 URL 编码。`kr_...` 是资源 ID,不能放在这个任务查询位置。
主体创建成功示例:
```json
{
"code": 0,
"message": "",
"request_id": "req_example",
"data": {
"task_id": "task_example_create",
"task_status": "succeed",
"task_info": {"external_task_id": "demo-person-create-001"},
"created_at": 1792022400000,
"updated_at": 1792022460000,
"task_result": {
"elements": [{
"element_id": "kr_example_element",
"element_name": "演示人物",
"element_description": "穿蓝色衬衫的成年人,保持面部和服装一致",
"reference_type": "image_refer",
"owned_by": "platform"
}]
}
}
}
```
| 字段 | 含义与处理 |
| --- | --- |
| `code` | 0 表示本次 API 请求成功;任务是否完成还需看 `task_status` |
| `request_id` | 本次 HTTP 请求的关联 ID,用于排查 |
| `data.task_id` | 平台任务 ID,用于后续查询 |
| `data.task_status` | `submitted` 已提交、`processing` 处理中、`succeed` 成功、`failed` 失败 |
| `data.task_status_msg` / `data.diagnostic` | 失败时可用的说明和诊断;不是生成素材 |
| `data.reconciliation_required` | 出现 `true` 表示仍需核对受理或账务证据;不要据此重复提交创建 |
| `data.created_at` / `data.updated_at` | Unix 毫秒时间戳 |
| `data.task_result.elements[].element_id` | 成功后的平台主体 ID,字符串 `kr_...` |
| `data.task_result.voices[].voice_id` | 成功后的平台音色 ID,字符串 `kr_...` |
| `element_voice_info` | 主体关联音色,存在时其中 `voice_id` 也为平台资源 ID |
| `owned_by` | `platform` 为当前调用主体的自建资源,`kling` 为官方预置资源 |
| 资源项 `status` | 删除后为 `deleted`,删除待确认时为 `deletion_pending`;此时不能用于新生成 |
`submitted`、`processing` 时不保证有 `task_result`。成功素材的描述、试听地址等附加字段按实际结果返回。平台只返回可见资源信息,不返回供应商账号信息或将供应商扣费字段作为调用方账单。
创建任务列表使用 `pageNum`、`pageSize`,默认 1 和 30,均须为 1–1000 的整数。列表按创建时间倒序,`data` 是任务数组;无可见任务时为 `[]`,没有 `total` 或游标字段。列表不包含删除控制任务。
```bash
curl 'https://platform.sgt.site/kling/v1/general/advanced-custom-elements?pageNum=1&pageSize=30' \
-H 'Authorization: Bearer YOUR_VIRTUAL_KEY'
```
## 引用资源生成视频
将主体查询结果里的 `element_id` 放入视频请求的 `contents[].element_id`。同一项的 `id` 是本次提示词引用名称,例如 `person_1`,不是资源 ID。
```bash
curl -X POST 'https://platform.sgt.site/kling/omni-video/kling-3.0-omni' \
-H 'Authorization: Bearer YOUR_VIRTUAL_KEY' \
-H 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"contents": [
{"type": "prompt", "text": "让 @person_1 面向镜头微笑并挥手"},
{"type": "element", "id": "person_1", "element_id": "kr_example_element"}
],
"settings": {"resolution": "720p", "duration": 5, "aspect_ratio": "16:9", "audio": "off", "multi_shot": false}
}
JSON
```
需要指定音色时,先在创建主体请求的 `element_voice_id` 中绑定 `kr_...` 音色,再按视频模型的有声生成规则引用该主体。当前视频请求不接受独立的 `contents.type=voice`。具体视频请求和计费见[可灵视频](native-kling.md)。
复用会使用该资源原来的服务身份;一份请求的多个资源必须能够在同一服务身份下使用。资源所属服务不可用、权限收回或服务身份改变时会拒绝调用,不会把资源 ID 交给另一个账号尝试。仍在生成或受理结果未知的引用会阻止删除,直至对应任务可以安全释放引用。
## 官方预置资源
```bash
curl 'https://platform.sgt.site/kling/v1/general/advanced-presets-elements?pageNum=1&pageSize=30' \
-H 'Authorization: Bearer YOUR_VIRTUAL_KEY'
```
音色目录改用 `/v1/general/presets-voices`。参数与创建任务列表相同。返回 `{"code":0,"message":"","request_id":"...","data":[...]}`;每项含 `task_status:"succeed"` 和 `task_result.elements[]` 或 `task_result.voices[]`,只包含官方预置资源。
取结果中的 `element_id` 或 `voice_id` 进行引用;目录项的 `task_id` 是目录标识,不是可轮询的创建任务。预置资源也会映射为当前调用主体可见的 `kr_...` ID。官方资源无法通过自定义资源删除接口删除。没有匹配项时 `data` 为 `[]`。
## 删除资源
删除主体与删除音色都使用 POST。请求只接受一个对应的资源 ID 字段。
```bash
curl -X POST 'https://platform.sgt.site/kling/v1/general/delete-advanced-elements' \
-H 'Authorization: Bearer YOUR_VIRTUAL_KEY' \
-H 'Content-Type: application/json' \
--data-binary '{"element_id":"kr_example_element"}'
curl -X POST 'https://platform.sgt.site/kling/v1/general/delete-voices' \
-H 'Authorization: Bearer YOUR_VIRTUAL_KEY' \
-H 'Content-Type: application/json' \
--data-binary '{"voice_id":"kr_example_voice"}'
```
成功受理示例:
```json
{"code":0,"message":"","request_id":"req_example","data":{"task_id":"task_example_delete","task_status":"submitted"}}
```
这是独立的删除任务 ID。主体删除仍通过 `/v1/general/advanced-custom-elements/task_example_delete` 查询,音色删除通过 `/v1/general/custom-voices/task_example_delete` 查询;返回 `data.resource_id` 指明被删资源。只有 `task_status=succeed` 才确认删除成功;`failed` 表示删除失败,可以重新检查资源状态。删除不退还已经完成的创建或视频生成费用。
资源仍被任务使用、已经删除或删除结果待确认时返回 409。发送后发生超时、断连、5xx 或无法确认的响应时,平台保留删除任务和资源锁,返回 503、平台 `task_id`、`resource_id` 及 `reconciliation_required:true`。此时查询同一删除任务,不要反复提交删除;未知结果不能当成已删除,也不能立即恢复为可引用资源。
## 费用与异常处理
创建主体和创建音色各有独立的“每次成功创建”价格,与视频时长价格分开。发送前按本次有效价格预留一次费用;只有成功结果包含一个可信资源 ID 时才确认一次创建。已确认失败释放该次创建预留。视频生成另外按视频模型价格计费。查询、目录和删除没有资源创建费用。
平台按受理时的价格快照结算;创建后再改价不会改变已有任务的创建费用。缺少资源动作价格时会在发送前拒绝创建。受理结果未知、成功响应缺资源 ID 或证据矛盾时保留任务与资金,等待核对;不会自动重新 POST,也不会以查询超时为由自动释放。保存 `request_id` 和平台 `task_id` 便于核查。
| HTTP 状态 | 常见原因 | 调用方处理 |
| --- | --- | --- |
| 400 | 字段类型/素材组合错误、未知字段、回调地址不允许、当前不支持的 `video_id` | 按字段表修正;不要原样重试 |
| 401 | 未提供或无效的虚拟密钥 | 检查 Bearer 鉴权 |
| 403 | 非企业调用主体、模型权限不足、资源不属于当前主体或原服务身份不可用 | 确认当前授权和资源来源 |
| 404 | 不可见的任务/资源,或试图删除官方预置资源 | 检查 ID 类型与所属主体 |
| 409 | 自定义任务 ID 冲突,或资源正在使用、已删除、删除待确认 | 查询已有任务/资源,避免重复提交 |
| 502 / 503 | 上游或本地持久化异常,可能需要核对 | 优先保存关联 ID;有未知结果标记时查询原任务并核对 |
控制接口错误示例:`{"code":409,"message":"resource is referenced, deleted or awaiting deletion confirmation","request_id":"req_example"}`。创建期间还可能返回[原生错误](native-errors.md)中的任务诊断;HTTP 非 2xx 不一定意味着上游没有受理。