API文档

公开演员目录与经审核合作方的服务端接入契约。

API V1 · 合作方服务端

最近更新2026-10-22:购买接口字段精简

GETTING STARTED

开始接入

公开演员数据可由浏览器匿名读取;身份映射与购买只能由合作方后端使用JD1签名访问,终端浏览器不访问SZKL。

Base URL
https://www.szkl.cn/api/v1
业务环境
合作方仅接受production;须审核通过并完成配置
响应格式
JSON(媒体与字幕除外);错误使用稳定的 error.code
请求追踪
响应头 x-request-id
接入边界
  • 公开宣传媒体只用于发现与展示,不构成生产素材资格或商业授权。
  • JD1私钥只能保存在合作方服务端,不得进入浏览器、移动端包或日志。
  • 合作方调用需完成平台审核、线下合同登记和凭证配置。

接入流程

  1. 线下签署B端合作合同(合作方与巨东AI之间的框架合同)。
  2. 在/partners/apply提交申请:工商主体、联系人、平台显示名称与合作方服务端生成的Ed25519公钥(SPKI PEM)。
  3. 审核通过后配置平台,发放credentialId与权威audience;公钥指纹可在后台核对。
  4. 完成合同登记、凭证和权限配置后,合作方可调用身份绑定与购买接口。
  5. 预存余额充值后开始业务交易。

密钥生成(在合作方服务端执行)

openssl genpkey -algorithm ed25519 -out partner-private.pem   # 私钥,仅保存在服务端
openssl pkey -in partner-private.pem -pubout -out partner-public.pem   # 公钥,粘贴到申请表单

公钥以-----BEGIN PUBLIC KEY-----开头;不要提交私钥、SSH格式或JWK。私钥丢失平台侧无法恢复;请联系管理员停用受影响凭证并安排重新配置。

Scope

身份与绑定
authorization_sessions:create / authorization_sessions:read / projects:bind / identity:assert_verified_email
以管理员实际配置的权限为准
购买与资金
purchase:create / purchase:read / funds:read
以管理员实际配置的权限为准
样片归档
content_archive
以管理员实际配置的权限为准
演员详情
catalog:read
默认未开通,按平台申请开通
选角推荐
casting:recommend / casting:read
默认未开通,按平台申请开通
PUBLIC DISCOVERY

公开演员API

演员目录、详情和媒体端点允许任意Origin无凭据 GET/OPTIONS,禁止携带Cookie或Authorization。公开核验端点只提供匿名 GET,不读取登录会话。媒体URL以响应中的绝对公开地址为准。

  • GET
    /health

    读取服务健康与部署环境

    匿名
  • GET
    /actors

    搜索和分页读取公开演员

    匿名
  • GET
    /actors/{actorCode}

    读取演员详情与形象列表;媒体只含演员首图、风格变体与自我介绍视频

    匿名
  • GET
    /media/{publicId}

    读取已发布宣传媒体

    匿名
  • GET
    /media/{publicId}/captions

    读取已发布字幕

    匿名
  • GET
    /verification/{token}

    查询公开授权核验事实(当前仅历史test/test_only授权,正式生产核验未开放)

    匿名

另提供只读目录MCP端点 POST /api/v1/catalog-mcp(无状态Streamable HTTP,JSON响应),工具 search_actors、get_actor、get_catalog_filters 与上述公开演员接口同口径,匿名可用、只读。

最小请求

curl -H "Accept: application/json" \
  "https://www.szkl.cn/api/v1/actors?limit=24&offset=0"

公开读取错误:参数无效为400 BAD_REQUEST,资源不存在为404 NOT_FOUND,依赖不可用为503 SERVICE_UNAVAILABLE,未预期异常为500 INTERNAL_ERROR。媒体还支持206部分内容、304未修改和416范围不可满足。

公开授权核验

当前核验接口仅支持历史 test/test_only 授权事实,不提供正式production授权核验。正式购买响应中的核验编号不能据此视为已经支持公开核验。

使用授权编号查询最小核验事实。非法编号、权威不存在返回 404;依赖或响应畸形返回 503;成功与错误均禁止缓存,成功响应不携带来源地址。

curl -H "Accept: application/json" \
  "https://www.szkl.cn/api/v1/verification/JDT-ABCDEF0123456789ABCDEF01"
PARTNER SERVER API

合作方API

合作方接口只接受人工审核后配置的服务端凭证。合作方后端直接建立平台范围身份映射,响应不含授权URL、state、回跳或Cookie;合作网站完成自己的订单、合同和支付后,再调用购买接口取得项目买断授权;生成由合作方模型侧直接完成,不经巨东API。

  • POST
    /partner/authorization-sessions

    建立服务端身份映射;scope:authorization_sessions:create + projects:bind + identity:assert_verified_email

    JD1
  • GET
    /partner/authorization-sessions/{sessionId}

    查询身份映射与后续权威状态;scope:authorization_sessions:read

    JD1
  • GET
    /partner/actors/{actorCode}

    读取演员完整详情:全部形象图片、三视图与音频及扩展资料;scope:catalog:read(默认未开通)

    JD1

购买与资金

  • GET
    /partner/purchase-options

    读取项目买断价目、年限系数和场景规则;scope:purchase:read

    JD1
  • POST
    /partner/purchase-orders

    原子完成扣款、合同与项目买断授权;scope:purchase:create

    JD1
  • GET
    /partner/purchase-orders

    按外部订单号查询购买和授权事实;scope:purchase:read

    JD1
  • GET
    /partner/fund-balance

    读取合作平台预存余额;scope:funds:read

    JD1
  • GET
    /partner/fund-events

    分页读取不可变资金流水;scope:funds:read

    JD1

样片归档与审核

  • POST
    /partner/content-archives/uploads

    申请样片归档直传授权(预签名PUT地址,1小时有效);scope:content_archive

    JD1
  • POST
    /partner/content-archives/complete

    确认样片回传并启动异步审核(画面机审+LLM语义比对);scope:content_archive

    JD1
  • GET
    /partner/content-archives

    查询归档状态机、机审/LLM/人工复核结论与时间线;scope:content_archive

    JD1

选角推荐

  • POST
    /partner/casting/recommendations

    提交选角推荐任务(文字描述、角色表或剧本文件),立即返回任务号;scope:casting:recommend

    JD1
  • GET
    /partner/casting/recommendations/{taskId}

    查询本平台推荐任务的状态与逐角色候选;scope:casting:read

    JD1
  • GET
    /partner/casting/quota

    查询本平台今日推荐轮次与剧本解析额度;scope:casting:read

    JD1

提交即回:创建后返回 taskId,按 pollAfterSeconds 轮询结果。同一 clientRequestId 重放同一请求体返回原任务、不重复计次;结果只含公开画像字段,保留24小时。每日轮次和剧本解析份数按平台计算,剧本文件解码后不超过700KB,请求体超过1,000,000字节返回413,更大的剧本请整理成角色表提交。

样片归档为授权合规审核意见与证据留存:巨东不是发行闸门,审核不通过合作方仍可自行决定发行;审核结论由状态查询接口读取,样片文件保留365天后清理,审核记录永久留存。

合作网站需要保存

客户映射
externalUserId ↔ sessionId,同一用户长期保持稳定
购买映射
externalOrderId ↔ purchaseId/projectId,买断授权绑定该项目
实名认证
只传已认证结果、认证时间和认证记录编号;不传身份证号、证件图片或原始材料

请求与响应示例

以下响应只摘录合作方成功响应的data字段,省略号和尖括号需替换为实际值。完整JSON包裹为{ "data": { ... }, "meta": { "request_id": "..." } };金额仅为示例,不代表当前报价。

① 建立服务端身份映射

POST /api/v1/partner/authorization-sessions
{
  "externalUserId": "customer-42",
  "externalProjectId": "drama-2026-001",
  "contactEmail": "customer@example.com",
  "emailVerified": true,
  "emailVerificationMethod": "partner_account_v1",
  "requestedScopes": ["projects:bind"],
  "selection": { "version": 2, "mode": "editable", "actorCodes": ["ACT-781C32A7CC"] }
}

201 →
{ "status": "claimed", "accountLinked": true, "sessionId": "<uuid>",
  "externalProjectId": "drama-2026-001", "selection": { ... } }

响应不含授权URL、state、回跳、Cookie或token;同一externalUserId重复提交收敛到同一映射。购买时externalCustomerId必须与externalUserId完全一致。本请求必填externalUserId/externalProjectId/contactEmail/emailVerified/emailVerificationMethod/requestedScopes,可选selection(预选演员单);必填性以OpenAPI schema为准。

② 购买项目买断授权

POST /api/v1/partner/purchase-orders
{
  "externalOrderId": "order-2026-0001",
  "externalCustomerId": "customer-42",
  "subjectKind": "individual",
  "subjectName": "张三",
  "identityVerified": true,
  "identityVerifiedAt": "2026-09-05T10:00:00+08:00",
  "identityVerificationReference": "partner-verify-0001",
  "customerAcceptedAt": "2026-09-05T10:05:00+08:00",
  "acceptanceReference": "partner-accept-0001",
  "projectName": "品牌短剧", "workType": "短剧",
  "synopsis": "用于品牌故事展示的系列短剧项目。", "releaseChannels": ["合作网站"],
  "scenarioId": "<purchase-options返回>",
  "actorConfigurations": [
    { "actorCode": "ACT-781C32A7CC", "commercialPeriods": 6 }
  ],
  "projectAuthorization": {
    "version": 1,
    "productionCompany": "某某影业有限公司",
    "producerCompany": "某某影业有限公司",
    "workKind": "series",
    "episodeCount": 12,
    "episodeDurationMinutes": 10,
    "roles": [ { "actorCode": "ACT-781C32A7CC", "roleName": "女主角" } ]
  },
  "idempotencyKey": "order-2026-0001-create"
}

201 → { "purchaseId": "<uuid>", "projectId": "<uuid>", "contractNo": "...",
  "licenses": [ { "actorCode": "...", "licenseId": "<uuid>", "pricingModel": "buyout_v1",
                  "buyoutCents": 49500, "pricePerSecondCents": 33, "commercialExpiresAt": "..." } ],
  "totalCents": 49500, "balanceAfterCents": ... }

单事务全有或全无:余额不足(INSUFFICIENT_FUNDS)或任一环节失败整体回滚,不产生部分扣款。买断价由服务端按演员当前每秒权威价折算(每秒单价×1500×年限系数;1年精确、2/3年向下取整到10元;当前全员0.33元/秒对应495/890/1230元/年);买断含项目内不限量生成与演员未来新增形象,同一项目需重新买断,年限1–3年。

购买字段说明(每个字段为什么需要)

字段与格式以OpenAPI schema为准(必填性以各schema的required列表为唯一权威);以下解释业务含义并同步标注必填性,供表单设计与向客户收集信息时参考。购买请求顶层仅projectAuthorization可选,其余全部必填;projectAuthorization整体可选,一旦提供则内部version/productionCompany/workKind/roles必填,series另必填episodeCount/episodeDurationMinutes、film另必填filmDurationMinutes。

externalOrderId 必填
你们的订单号:双方对账与追溯的唯一凭据,由你们系统生成。
externalCustomerId 必填
你们的客户ID:先经授权会话完成绑定,购买才能关联到真实客户。
idempotencyKey 必填
防重复扣款:建议用“订单号-create”。网络超时后同键同内容重试返回原结果,同键不同内容返回IDEMPOTENCY_CONFLICT。
subjectKind / subjectName 必填
谁买授权(合同被授权方):个人填身份证姓名、企业填营业执照全称;必须与实名或执照完全一致,不接受简称或品牌名。
identityVerified 三件套 必填
实名在合作网站完成、认证材料留合作网站;此处只登记已认证事实、时间与凭据编号,作为合同效力与争议追溯依据。未实名(false)的请求会被拒绝。
customerAcceptedAt + acceptanceReference 必填
客户在你们页面确认订单内容的时间与确认凭据编号,共同构成“客户同意购买”的证据;两个值都要生成保存,不能只存勾选状态。
projectName / workType / synopsis / releaseChannels 必填
合同标的与授权用途条款的素材:作品名称、类型、内容简介(10–2000字)与计划发行渠道(1–10个),写清楚对客户是保护。
scenarioId 必填
使用场景:不同场景对应不同授权条款与计价组合,必须取自purchase-options返回的scenarios,不要自行构造。
actorConfigurations 必填
逐演员买断:actorCode与commercialPeriods(6/12/18个月)。价格由服务端按权威每秒价计算并在响应中返回快照,客户端不应自行计价;买断含项目内不限量生成与演员未来新增形象,换项目需重新买断。
projectAuthorization.productionCompany 必填
出品公司=作品的版权主体(片头“出品”署名)。它回答“作品归谁”,与subjectName回答的“谁买授权”是两件事:客户自有版权时填同一家,代理或发行时填实际版权方。合同必须同时写明两者,演员形象授权才挂在真实权利链上。
projectAuthorization.producerCompany 选填
制片公司=实际承制拍摄方;与出品为同一家时填一样,或不传该字段。
filingNumber / releaseLicenseNumber 选填
作品备案号与发行许可证号(选填):证明作品本身合规。
projectAuthorization.workKind 必填
作品形态:series(剧集,按集)/film(电影,按部),决定合同标的的规格写法与时长必填项——series必填episodeCount与episodeDurationMinutes,film必填filmDurationMinutes。短剧一律series。
projectAuthorization.roles 必填
每位所选演员在剧中饰演的角色名,必须与actorConfigurations的演员一一对应。
projectAuthorization.version 必填
资料结构版本号,当前固定填1。

③ 生成说明(生成接口已退役)

买断订单的生成在您的模型侧直接进行:不经巨东API、无需预留或结算、生成次数不限。历史按秒生成预留/结算接口已整体退役移除(全库无历史调用数据);如您的旧代码中存在对接残留,可整体删除。

幂等与防重放
  • 购买写请求携带16–200字符idempotencyKey:同键同载荷重放返回原结果(零新写);同键不同载荷返回IDEMPOTENCY_CONFLICT。
  • 身份绑定不接收idempotencyKey;购买写请求才使用业务幂等键。每次HTTP请求重新生成JD1 timestamp、nonce和签名;成功使用过的nonce不可重放。
  • 响应不明确(超时、断连、5xx)时:用新nonce签名GET同一业务ID查询权威状态,不要盲目重放写请求。
  • 所有POST正文为严格JSON(additionalProperties=false):未知字段、控制字符、非整数都会被拒绝;原始JSON字节参与签名。
  • 响应编号字段名大小写不同:公开接口的响应meta为requestId,合作方接口为request_id——是两个不同的契约面,请分别映射; 用同一套DTO反序列化会静默丢字段。
REQUEST SIGNING

JD1签名

每次请求使用新的时间戳和nonce。签名覆盖HTTP方法、原始查询顺序和最终发送的body字节;响应不明确时使用新nonce查询权威状态,不盲目重放写请求。

x-jd-credential: <credential-id>
x-jd-environment: production
x-jd-audience: <configured-audience>
x-jd-timestamp: <unix-seconds>
x-jd-nonce: <base64url-random-bytes>
x-jd-signature: <base64url-ed25519-signature>

完整规范原文以下载的OpenAPI为准。签名允许前后300秒时钟差,成功使用过的nonce不可重放。

签名原文(固定顺序)

JD1
credential:<credential-id>
environment:production
audience:<configured-logical-audience>
timestamp:<unix-seconds>
nonce:<base64url-random-bytes>
method:<UPPERCASE-METHOD>
target:<pathname-with-original-query-order>
body-sha256:<base64url-sha256-of-raw-body-bytes>

UTF-8编码,字段顺序与换行固定,所有值禁止CR/LF。target不含scheme/host,查询参数不得在签名后重排;GET使用空body摘要。

Node.js签名示例(仅服务端)

import { createHash, createPrivateKey, randomBytes, sign } from "node:crypto";
const b64u = (b) => b.toString("base64url");
const body = Buffer.from(JSON.stringify(payload));
const canonical = [
  "JD1",
  `credential:${credentialId}`,
  `environment:${environment}`,
  `audience:${audience}`,
  `timestamp:${Math.floor(Date.now() / 1000)}`,
  `nonce:${b64u(randomBytes(24))}`,
  `method:POST`,
  `target:/api/v1/partner/authorization-sessions`,
  `body-sha256:${b64u(createHash("sha256").update(body).digest())}`,
].join("\n");
const signature = b64u(sign(null, Buffer.from(canonical),
  createPrivateKey({ key: privateKeyPkcs8Pem, format: "pem" })));

签名原文与Base64url编码是语言无关的,以下是等价实现参考(Java/Go 为语句片段,需包进你们的函数或类后使用);务必对实际发送的body字节签名(不要重新序列化后再发送另一份字节)。

Python签名示例(cryptography,仅服务端)

import base64, hashlib, json, secrets, time
from cryptography.hazmat.primitives import serialization

def b64u(raw: bytes) -> str:
    return base64.urlsafe_b64encode(raw).rstrip(b"=").decode()

body = json.dumps(payload, ensure_ascii=False, separators=(",", ":")).encode()
nonce = b64u(secrets.token_bytes(24))
canonical = "
".join([
    "JD1",
    f"credential:{credential_id}",
    f"environment:{environment}",
    f"audience:{audience}",
    f"timestamp:{int(time.time())}",
    f"nonce:{nonce}",
    "method:POST",
    "target:/api/v1/partner/authorization-sessions",
    f"body-sha256:{b64u(hashlib.sha256(body).digest())}",
])
key = serialization.load_pem_private_key(private_key_pkcs8_pem, password=None)
signature = b64u(key.sign(canonical.encode()))

Java签名示例(JDK 17+,仅服务端)

import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;

static String b64u(byte[] raw) {
    return Base64.getUrlEncoder().withoutPadding().encodeToString(raw);
}

byte[] body = /* 实际发送的JSON字节 */;
String canonical = String.join("
",
    "JD1",
    "credential:" + credentialId,
    "environment:" + environment,
    "audience:" + audience,
    "timestamp:" + epochSecond,
    "nonce:" + nonce,
    "method:POST",
    "target:/api/v1/partner/authorization-sessions",
    "body-sha256:" + b64u(MessageDigest.getInstance("SHA-256").digest(body)));
String pemBody = privateKeyPkcs8Pem.replaceAll("-----[A-Z ]+-----|\s", "");
PrivateKey key = KeyFactory.getInstance("Ed25519")
    .generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder().decode(pemBody)));
Signature signer = Signature.getInstance("Ed25519");
signer.initSign(key);
signer.update(canonical.getBytes(StandardCharsets.UTF_8));
String signature = b64u(signer.sign());

Go签名示例(标准库,仅服务端)

import (
    "crypto/ed25519"
    "crypto/x509"
    "encoding/base64"
    "encoding/pem"
)

b64u := base64.RawURLEncoding.EncodeToString

block, _ := pem.Decode(privateKeyPkcs8PEM) // PKCS#8 私钥PEM
key, _ := x509.ParsePKCS8PrivateKey(block.Bytes)
edKey := key.(ed25519.PrivateKey)
signature := b64u(ed25519.Sign(edKey, []byte(canonical)))
INTEGRATION TIPS

集成建议

以下为参考建议而非接入门禁;服务端的原子购买与幂等已保证账本正确性。采纳这些建议可以减少接入问题与对账分歧。

支付与购买时机
  • 只在合作方服务端确认收款(支付机构服务端回调验签落库)后才调用购买接口;浏览器回跳和前端支付结果不能作为收款依据。
  • 购买响应不明确(超时、断连、5xx)时,用新nonce签名GET同一externalOrderId查询权威状态,不要盲目重放POST。
  • 收到IDEMPOTENCY_CONFLICT先GET同一订单,与首次落库的请求快照逐项核对:完全匹配且settled则直接发权益,不匹配才进入人工对账;不要换订单号或幂等键重新购买。
  • 在购买成功响应到达后再向您的客户发放权益,避免出现需要回滚的客户体验。
生成任务可靠性
  • 买断订单的生成完全由您的系统发起与管理,巨东侧无预占、结算或时长校验义务;建议自行持久化生成任务记录(任务ID、projectId、演员、幂等键)以便内部对账与审计。
稳定性与排查
  • 记录每个响应的x-request-id;向我们反馈问题时附上它可大幅缩短排查时间。
  • 瞬时SERVICE_UNAVAILABLE可安全退避重试(如1s/2s间隔);交易请求始终用新nonce。
  • 演员目录与价格是低频变化数据,可在合作端缓存(如60分钟TTL);购买与资金请求使用实时签名调用。
  • 建议对购买与资金流水做日终对账抽样,与我们流水(fund-events)核对一致后再结算内部账。
FAIL CLOSED

错误与重试

MISSING_AUTHENTICATION / MALFORMED_AUTHENTICATION / INVALID_SIGNATURE
认证头或签名无效。
处置:先修复签名实现,不盲重试。
STALE_REQUEST
时间戳超出±300秒窗口。
处置:校准时钟后用新nonce重试。
REPLAY_DETECTED
nonce已被使用。
处置:使用新nonce,不复用原请求。
ENVIRONMENT_MISMATCH
凭证与目标环境不一致。
处置:修复environment配置。
AUDIENCE_MISMATCH
请求audience与凭证环境配置不一致。
处置:修复audience配置,原样复制后台值。
CREDENTIAL_UNAVAILABLE / PLATFORM_UNAVAILABLE / ENVIRONMENT_NOT_READY
凭证不可用,或平台/环境门禁未开放(production需平台approved+已登记合同)。
处置:联系管理员检查状态。
PLATFORM_REGISTRATION_INCOMPLETE
提交projectAuthorization时平台登记主体资料不完整。
处置:联系巨东补全平台登记后重试。
ORIGINAL_FIGURE_NOT_PURCHASABLE
购买请求包含尚未开放购买的原创数字人。
处置:移除原创数字人后重试。
SCOPE_FORBIDDEN
凭证不含所需scope。
处置:由管理员审核开通,不能客户端扩权。
RATE_LIMITED
当前凭证超过120次/分钟。
处置:等待窗口后用新nonce重试。
SESSION_FORBIDDEN / SESSION_NOT_FOUND
会话属于其他平台或不存在。
处置:不重试、不枚举,核对ID。
PROJECT_NOT_FOUND / ACTOR_NOT_FOUND
项目不属于当前平台或演员不存在/未上架。
处置:核对购买返回的projectId与公开actorCode。
BAD_REQUEST
请求字段、结构或演员编号无效。
处置:修复请求正文后用新nonce重试。
IDEMPOTENCY_CONFLICT
同一幂等键绑定了不同规范请求。
处置:停止重试;购买先GET同一externalOrderId与首份快照核对。
CONFLICT
对象状态已变化(会话失效或授权状态变化)。
处置:核对状态,不原样重放。
INSUFFICIENT_FUNDS
预存余额不足。
处置:充值后用新nonce重新发起。
EXTERNAL_CUSTOMER_UNMAPPED
外部客户尚未完成身份绑定。
处置:先完成authorization-sessions绑定。
CASTING_DAILY_LIMIT_REACHED
本平台今日推荐轮次或剧本解析份数已用完(响应附resetAt)。
处置:等到resetAt后再提交。
CASTING_TOO_MANY_TASKS
本平台进行中的推荐任务已达上限。
处置:等已有任务完成后再提交。
TASK_NOT_FOUND
推荐任务不存在、已过期(24小时)或不属于当前平台。
处置:不重试、不枚举,核对taskId。
SCRIPT_TOO_LARGE / FILE_TYPE_UNSUPPORTED / FILE_UNREADABLE / FILE_ENCRYPTED / TEXT_EMPTY / TEXT_TOO_LONG
剧本文件超过700KB、格式不支持、无法读取、已加密或文字为空/过长(不计份数)。
处置:改用角色表结构提交,或修复文件后用新nonce重试。

机器可读字段、schema、scope和响应以 OpenAPI v1 为准;本文摘要不放宽认证、幂等、额度或失败关闭规则。

CHANGELOG

更新日志

按日期倒序列出已登记进 OpenAPI 的接口契约变更;机器契约以下载的 v1.yaml 为准。

2026-10-22 购买接口字段精简

POST /api/v1/partner/purchase-orders 请求体移除 customerPhone 与 signRedirectUrl;购买响应与订单查询移除 esignStatus、esignSignUrl、customerPhone、signRedirectUrl。结算成功后授权即为生效状态(licenseStatus=active)。

请求字段
仍携带 customerPhone 或 signRedirectUrl 将返回 400 BAD_REQUEST。
兼容性
  • 破坏性变更:调用方需删除上述请求字段并停止读取上述响应字段;正式交易开放前无存量订单受影响。

2026-10-16 新增选角推荐接口与只读目录 MCP(AI星探向合作方开放)

新增 JD1 签名的选角推荐接口:POST /api/v1/partner/casting/recommendations 提交文字描述、角色表结构或剧本文件后立即返回任务号(提交即回),GET /api/v1/partner/casting/recommendations/{taskId} 轮询结果,GET /api/v1/partner/casting/quota 查询本平台当日额度。另新增匿名只读目录 MCP 端点 POST /api/v1/catalog-mcp,提供与公开演员 API 同口径的搜索、详情与筛选工具。

推荐提交
clientRequestId 为平台内幂等键:同键同请求体重放返回原任务(200,不重复计次),同键不同请求体返回 409 IDEMPOTENCY_CONFLICT。请求体上限 1,000,000 字节;剧本文件解码后不超过 700KB,支持 docx/txt/pdf/xlsx/csv。
任务与结果
任务与结果保留 24 小时。结果逐角色返回状态(recommended/no_match/refused/incomplete/failed/quota_exhausted)与至多 10 名公开画像候选(编号、类型、名称、理由、封面、性别、年龄、题材、每秒单价),不含外形与戏路描述等私有字段。他平台、不存在或已过期任务一律 404 TASK_NOT_FOUND。
额度
按平台在北京时间自然日内分别计推荐轮次与剧本解析份数(服务端配置,超额 429 CASTING_DAILY_LIMIT_REACHED 并附 resetAt);同平台进行中任务超过上限返回 429 CASTING_TOO_MANY_TASKS。进程中断的任务读取时判失败并返还未结算额度。
新增操作与 scope
JD1 新增操作 casting_recommendation_create(scope casting:recommend)、casting_recommendation_read 与 casting_quota_read(scope casting:read);既有操作与 scope 不变。合作方环境默认未开通 casting scope,开通由平台申请后按环境授权。
目录 MCP
POST /api/v1/catalog-mcp 为匿名只读 MCP 端点(无状态,JSON 响应),提供 search_actors、get_actor、get_catalog_filters 三个工具;入参与 GET /api/v1/actors 查询参数同名同义,出参即公开 DTO,访问级别与公开演员 API 一致(不鉴权、只读、不调用模型)。
兼容性
  • 推荐接口不是交易,不受正式交易开放开关约束;额度计次口径与网站 AI星探 一致(有结果计次、失败返还)。
  • 任务只保存请求体哈希、标题、状态与结果,不保存需求描述与剧本原文。

2026-10-13 原创数字人新增人物名、地域、职业与气质(新增参数与字段,编号升级为七段)

原创数字人改以人物名展示:publicName 为人物中文名,海外人物另在 originalFigure.personNameOriginal 返回原文名;作品名仍在详情的登记信息中。GET /api/v1/actors 新增 region、occupationCategory、temperament 三个可重复筛选,只命中原创数字人。原创数字人编号升级为七段格式,列表与详情新增地域、职业、气质的代码与名称。

figureCode
地域大类-地域子类-性别-年龄段-职业-气质-流水号,如 GL-EUW-F-06-ZG11-07-00001;本次之前尚无公开的原创数字人,不影响已接入数据。
region / occupationCategory / temperament
可重复;地域子类如 CN-E、GL-EUW、GL-SEA,职业大类 ZA–ZQ,气质 01–20。与 ageBand 相同,只命中原创数字人;kind 缺省时结果为空。
originalFigure 新字段
personNameOriginal(中国大陆人物为 null)、region、occupation、temperament,均含代码与名称;详情中的 occupation 另含职业大类代码与名称。
兼容性
  • 真人演员的请求与返回不变;字段只增不改。
  • 编号格式按《数字人脸资产分类编码体系v2》,严格校验编号格式的消费方请同步更新本地 v1.yaml 副本。

2026-10-12 公开演员目录新增原创数字人(新增参数与字段,非破坏性变更)

公开目录收录原创数字人:画家原创、已办理作品登记的虚构人物形象,非真实自然人。GET /api/v1/actors 新增 kind 参数(缺省 realPerson,只返回真人演员,已接入平台无需改动)、ageBand 年龄段筛选与 gender=neutral;列表与详情新增 subjectKind 与 originalFigure 字段。原创数字人暂未开放购买,购买请求包含原创数字人时返回 409 ORIGINAL_FIGURE_NOT_PURCHASABLE。

kind
realPerson(缺省)| originalFigure | all;all 时真人在前、原创数字人按编号在后。
ageBand
可重复,01–14 共14个年龄段,只命中原创数字人;gender=neutral 同样只命中原创数字人。
subjectKind / originalFigure
列表项含编号、性别码、年龄、年龄段与未成年标记;详情另含作品名、登记号、著作权人与登记日期。真人的 originalFigure 为 null。
ORIGINAL_FIGURE_NOT_PURCHASABLE
HTTP 409;购买开放后另行公告。
兼容性
  • 字段只增不改;缺省请求的返回集合与本次更新前一致。
  • 原创数字人详情中不适用的真人字段(简介、生日、代表作等)沿用 null 或空数组。

2026-09-29 响应编号字段标注大小写差异说明(纯文档增强,无行为变更)

公开接口 ResponseMeta.requestId 与合作方接口 PartnerResponseMeta.request_id 的 schema description 增加互相对照的说明:两个契约面字段名不同,客户端应分别映射,避免用同一套DTO反序列化静默丢字段。同批 /api-docs 页面为购买与绑定请求标注逐字段必填性、新增 Python/Java/Go 单文件JD1签名示例,并在公开核验入口标注当前仅支持历史test/test_only授权;字段、约束、错误码与响应结构不变。

ResponseMeta.requestId
description 标注公开接口为 camelCase,合作方接口同位字段为 snake_case 的 request_id,两者为不同契约面。
PartnerResponseMeta.request_id
description 标注合作方接口为 snake_case,公开接口同位字段为 camelCase 的 requestId。
兼容性
  • 纯 description 增强,字段、约束、错误码与响应结构不变。
  • 页面必填性标注以各 schema 的 required 列表为唯一权威,页面同步标注不构成第二权威。

2026-09-26 授权有效期改为6/12/18个月,购买与查询字段更名licenseMonths/commercialPeriods(破坏性变更)

商用授权有效期档位从1/2/3年改为6/12/18个月,系数(1.0/1.8/2.5)与各档金额不变;购买请求、购买选项与授权查询的期限字段同步更名为licenseMonths/commercialPeriods。已成交的历史授权按原到期日执行,不受本次更名影响。

购买请求
POST /partner/purchase 的 actorConfigurations[].commercialYears(1-3)更名为 commercialPeriods(6/12/18,单位月),买断价仍由服务端按每秒权威价计算并在购买结果快照中返回。
购买选项
GET /partner/purchase-options 响应的 commercialYears 更名为 commercialPeriods([6,12,18]),buyoutTerms[].licenseYears 更名为 licenseMonths。
授权查询
GET /partner/purchase 与授权查询响应 licenses[].commercialYears 更名为 commercialPeriods 且值为 null(历史 per_second_v2 授权无月制期限语义);commercialExpiresAt(授权到期时间)语义不变。
兼容性
  • 破坏性变更:接入方需同步修改请求与解析字段名。已成交授权的到期时间不受影响。授权书签署模板的期限表述同步更新为(X个月)。

2026-09-24 公开演员目录新增coverVariants风格化首图变体,cover字段收紧为标准照

演员首图支持按风格区分:公开演员目录响应的每个演员新增coverVariants数组(当前仅editorial时尚摄影艺术照),只含已完成安全处理并公开就绪的变体;cover字段语义收紧为标准照(白底近景正面照)的公开派生。此前无标准照的演员会以任意已公开图片兜底作为cover,现改为返回null,请以此前的兜底图为封面展示的接入方调整。

coverVariants
公开演员目录响应每个演员新增coverVariants数组,元素含style(风格标识,当前仅editorial时尚摄影艺术照)、href(绝对公开Storage URL)、alt(替代文本);只含公开就绪变体,演员未提供该风格时数组为空。
cover字段语义收紧
cover固定为标准照(白底近景正面照)的公开派生;不再用其他已公开图片兜底。无标准照的演员cover为null(此前会以任意已公开图片兜底)。
回退建议
需要艺术照的场景从coverVariants取editorial;该演员未提供时回退使用cover。后续如新增风格,仅在coverVariants元素style枚举中扩展并另行公告。
兼容性
  • cover字段及其既有语义(标准照URL与替代文本)保持不变,仅展示无标准照演员的兜底行为按既有文档(不使用其他图片回退)对齐;不改变接口鉴权、参数与分页。

2026-09-22 订单查询接口逐字段补充业务含义说明,授权到期时间字段显式标注

按合作方反馈补充人类可读文档:订单查询(GET /partner/purchase-orders)响应的每个字段新增业务含义说明,重点标注 licenses[].commercialExpiresAt=每个艺人的授权到期时间(剩余可用时限=该时间与当前时间的差),并补充购买响应、资金余额、资金流水、授权会话、内容归档等接口同类说明与授权清单示例报文;同步修正一处既有契约测试断言(必填字段对齐应排除可选字段)。

授权到期时间
GET /partner/purchase-orders 响应的 licenses[].commercialExpiresAt 为该艺人商业授权到期时间(必返);licenses[].commercialYears 为年限,剩余可用时限=到期时间与当前时间的差,无需合作方自行推算
逐字段说明覆盖
购买请求/响应/查询、购买选项、资金余额与流水、授权会话、内容归档审核状态等接口的枚举值含义(如 licenseStatus 的 active/expired/suspended/terminated、资金事件类型与带符号金额方向)全部在文档内标注
示例报文
PlatformPurchaseLicense schema 新增完整示例(含 commercialExpiresAt 与 licenseStatus=active)
兼容性
  • 纯文档与描述增强:请求字段、校验规则、错误码与响应结构均无变化,已按现行契约开发的合作方无需改动

2026-09-22 API文档新增购买字段说明,购买示例补齐必填手机号

按合作方反馈补充人类可读文档:购买请求每个字段新增业务含义说明(重点区分subjectName=谁买授权与productionCompany=作品归谁、workKind作品形态决定时长字段),购买示例报文补上此前遗漏的必填customerPhone、可选signRedirectUrl与可选projectAuthorization完整样例;同步规范了页面与机器契约的对外措辞。

示例修正
POST /partner/purchase-orders 示例报文新增 customerPhone(必填:签署参与方匹配与意愿短信送达号码)、signRedirectUrl(可选:签署完成回跳地址)与 projectAuthorization 完整样例(选填);此前按示例开发会因缺手机号被400拒绝
新增文档小节
/api-docs 购买示例下新增“购买字段说明”:逐字段业务含义、表单设计建议与常见混淆点澄清(如出品公司与客户名称的区别)
措辞清理
OpenAPI 描述、示例与更新日志完成对外措辞清理(移除非对外编号与代号);历史条目标题措辞同步清理,历史事实不变。字段、约束、错误码与响应结构均无任何变化
兼容性
  • 纯文档与描述修正:请求字段、校验规则、错误码与响应结构均无变化,已按现行契约开发的合作方无需改动

2026-09-21 购买签署:购买请求新增被授权方手机号,授权返回签署状态

购买环节接入法大大在线签署(项目授权书,巨东代演员签+被授权方本人签):购买请求新增必填 customerPhone;响应与查询接口返回逐演员签署状态 esignStatus 与签署短链 esignSignUrl;逐演员签署完成前授权不生效,公开核验不返回该演员。合作方引导用户在合作网站侧跳转签署,全程不经由巨东页面。

新增必填字段
POST /partner/purchase-orders 请求新增 customerPhone(中国大陆手机号):签署任务参与方匹配与意愿短信送达号码
新增可选字段
signRedirectUrl(HTTPS):签署完成后的回跳地址;不传时用户停留在法大大完成页
响应新增
licenses[].esignStatus(not_required/pending/signed/revoked);查询接口 licenses[].esignSignUrl(待签署且有活跃任务时的签署短链)
生效规则
逐演员生效:签署完成(回调验签或服务端复核)前该演员不得使用授权,公开核验不返回该演员;拒签/超时(默认72小时)可由合作方重新发起或由巨东撤销并全额退回购买金额
查询接口新增字段
GET /partner/purchase-orders 响应新增 customerPhone 与 signRedirectUrl 回显
兼容性
  • 多演员订单为逐演员独立签署任务,签署短链经购买响应或查询接口获取
  • 存量订单:查询行为不变(历史授权 esignStatus=not_required);存量订单同幂等键重放将返回幂等冲突,需换新幂等键重新发起

2026-09-20 新增合作方样片归档与自动化审核接口(3个端点)

买断模型下新增样片回传通道:合作方可将项目样片直传巨东私有存储并发起授权合规审核(画面机审+项目级LLM语义比对),巨东出具授权合规审核意见并永久留存证据。巨东不是发行闸门:审核不通过合作方仍可自行决定发行,审核记录构成违约追责证据。

新增端点
POST /partner/content-archives/uploads(申请直传授权)、POST /partner/content-archives/complete(确认并启动审核,202)、GET /partner/content-archives?externalArchiveId=(状态与审核摘要)
新增scope
content_archive;凭证需携带该scope方可调用三条端点
直传协议
uploads返回预签名PUT地址(1小时有效)由合作方直传视频;complete携带archiveId/byteSize/sha256确认;两步均幂等重放安全
状态机
awaiting_upload→submitted→reviewing→passed/flagged→confirmed_violation/cleared;辅态upload_expired(24h未确认)、review_failed;审核结论由GET接口读取(机审结论/LLM结论/人工复核/时间线)
保留期
样片文件365天后自动清理(filePurged=true),审核记录永久留存
新增错误码
ARCHIVE_NOT_FOUND/ARCHIVE_EXTERNAL_ID_CONFLICT/ARCHIVE_UPLOAD_WINDOW_EXPIRED/ARCHIVE_FACT_CONFLICT/PROJECT_NOT_AUTHORIZED/ACTOR_NOT_LICENSED/UPLOAD_LIMIT_REACHED
兼容性
  • 在途待上传归档每环境上限10个;申报演员必须为该项目已购演员,越界拒绝(ACTOR_NOT_LICENSED)
  • 不做发行拦截:审核状态仅供对账与追责,不影响既有任何接口行为

2026-09-17 按秒生成接口整体退役

项目买断模型下生成由合作方模型侧直接完成,生成预留/查询/续期/终态结算接口(6个端点)已物理移除。全库无任何历史 per_second 订单、秒数额度或生成预约数据,移除无存量影响。

移除端点
POST/GET /partner/generation-reservations 及其 {id}/extend、/success、/fail、/cancel 全部子路径
替代方式
买断订单生成不经巨东API:模型侧直接生成、次数不限、无需预留或结算
公开核验
核验凭证只显示授权年限;per_second 秒数展示分支已随数据源一并移除
后台
后台业务记录的生成调用页签与MCN生成记录页签同步移除
兼容性
  • 接口日志(telemetry)的 operation 枚举同步移除 generation_* 值。
  • 如历史上曾按旧文档开发过生成对接(实际无调用记录),相关代码可整体删除。

2026-09-17 购买切换为项目买断计价模型

新购买统一为项目买断:按演员×项目×年限一次付费,项目内不限量生成,含演员未来新增形象,同一项目需重新买断。买断价由服务端按演员当前每秒权威价折算(每秒单价×1500×年限系数;1年精确、2/3年向下取整到10元;当前全员0.33元/秒对应495/890/1230元/年)。

actorConfigurations
购买请求仅两键:actorCode + commercialYears;generationSeconds 字段移除,携带旧字段将被拒绝
pricingModel
购买结果与订单查询新增 pricingModel=buyout_v1;licenses 新增 buyoutCents,purchasedSeconds 仅历史 per_second 订单返回
GET /partner/purchase-options
返回买断价目 buyoutTerms(年限系数与取整规则)与 pricingRule(含折算说明);秒数上下限字段移除
生成接口
买断订单的生成不经巨东API,模型侧直接生成、无需预留或结算;生成预留接口仅供历史 per_second 订单的存量秒数查询使用
计价公式
buyoutCents = actorPricePerSecondCents × 1500 × priceFactor(priceFactor:1年1.0 / 2年1.8 / 3年2.5)
兼容性
  • 每秒单价与1500秒最低授权价仅作折算展示,不构成实际秒数额度;价格变动自动传导至买断价。
  • 资金链路不变:预存余额、原子扣款、幂等键、合同快照与授权核验凭证(JDT编号)均保持原机制。

2026-09-14 演员详情新增六个选填公开字段

GET /actors/{actorCode} 的 data 新增以下字段;后台尚未录入时值为 null。宽松解析(忽略未知键)的消费方无需任何改动;严格校验或代码生成的消费方请同步更新本地 v1.yaml 副本(字段在契约中为 required)。

ethnicity
民族;公开文本或 null
birthDate
生日;YYYY-MM-DD 或 null
occupation
职业;公开文本或 null
birthplace
出生地;公开文本或 null
personalTraits
个人特质(特长短语);公开文本或 null
zodiac
星座;由 birthDate 按公历固定日期区间派生,birthDate 为 null 时为 null,不落库
兼容性
  • 字段为后台维护的选填公开事实,可原样显示或省略,不要基于缺失或取值自行推断其他演员事实。
  • SZKL官网详情页当前不展示这些字段;是否在你的合作网站展示由你自行决定。