跳到主要内容

接口文档

通用响应结构:

{
"code": 0, // 0 成功,非 0 失败
"message": "ok",
"data": { ... } // 业务数据,见各接口
}

鉴权方式:

调用方鉴权请求头
Agent 客户端无 api_key,Ed25519 自签
业务方后端api_key(product_code='agent' 应用)Authorization: Bearer <api_key>

接口一览

分组接口MethodPath调用方
注册发起注册POST/palm/openai/x/agent/register/initAgent 客户端
注册轮询注册状态POST/palm/openai/x/agent/register/statusAgent 客户端
授权换取 open_idPOST/palm/openai/x/agent/code/exchange业务方后端
验证拉公钥 / 查设备POST/palm/openai/x/agent/verify/device业务方后端
验证在线验签POST/palm/openai/x/agent/verify/signature业务方后端
核验发起 Step-upPOST/palm/openai/x/agent/stepup/create业务方后端
核验查询 Step-upPOST/palm/openai/x/agent/stepup/query业务方后端

1. 发起注册

POST /palm/openai/x/agent/register/init · Agent 客户端(Ed25519 自签)

Agent 本地生成 Ed25519 密钥对,用私钥对 message 签名自证持有私钥,返回真人授权页 URL。待签名串:message = "clawkey-register-" + timestamp_ms

请求参数:

字段类型必填说明
AppIdstring控制台拿到的公开 app_id
DeviceIdstringAgent 对外身份,^[A-Za-z0-9_-]{1,64}$,注册后不可变更
PubkeyDerstringbase64(Ed25519 SPKI DER)
Messagestringclawkey-register-<timestamp>,与 Timestamp 严格一致
Signaturestringbase64(Ed25519(message)),64 字节裸签名
Timestampint64Unix 毫秒,须在服务端时间 ±5min 内

响应 data:

字段类型说明
SessionIdstring注册会话 ID,用于后续轮询
RegistrationUrlstring真人授权页 URL,交给真人打开
ExpiresAtint64会话过期时间戳(秒),TTL 10min

常见错误码:

code含义
2030140签名校验失败
2030141message 格式错误
2030142timestamp 超出 ±5min
2030143重放(同 pubkey + ts 已用过)
2030144device_id 已被占用
2030145公钥指纹已存在

2. 轮询注册状态

POST /palm/openai/x/agent/register/status · Agent 客户端

真人扫码刷掌确认后,Agent 凭 SessionId 轮询拿到一次性 Code(建议 2s 间隔)。

请求参数:

字段类型必填说明
SessionIdstringregister/init 返回的会话 ID

响应 data:

字段类型说明
Statusstringpending / completed / expired / failed
DeviceIdstringcompleted 时回显
Codestringcompleted 时返回的一次性授权码,TTL 5min;不返回 open_id

3. 换取 open_id

POST /palm/openai/x/agent/code/exchange · 业务方后端(api_key)

业务方用一次性 Code 换取 (device_id, open_id),再与本地账号绑定,授权至此真正完成。

请求参数:

字段类型必填说明
CodestringAgent 转交的一次性授权码

响应 data:

字段类型说明
DeviceIdstringAgent 对外身份
OpenIdstring真人 owner 的 per-app 标识
Registeredbool是否注册完成

Code 一次性消费,过期 / 重复兑换返回错误;code.app_id 须等于 api_key 对应的 oc_appid,否则 ErrAgentForbidden


4. 拉公钥 / 查设备

POST /palm/openai/x/agent/verify/device · 业务方后端(api_key)

(device_id, open_id) 拉取公钥,供业务方缓存(TTL ≤15min)后本地验签。推荐方式。

请求参数:

字段类型必填说明
DeviceIdstringAgent 对外身份
OpenIdstring可选但强烈建议:校验该设备确实绑在此人名下

响应 data:

字段类型说明
Registeredbool是否仍绑定真人(未激活 / 已吊销则 false)
DeviceIdstring回显
OwnerOpenIdstring真人 owner,Registered=true 时填
PubkeyDerstringbase64(SPKI DER),缓存用于本地验签
CreatedAtint64Agent 注册时间戳(秒)

吊销延迟 = 缓存 TTL。要更快感知吊销就调短 TTL,或对关键请求改用在线验签。


5. 在线验签

POST /palm/openai/x/agent/verify/signature · 业务方后端(api_key)

把 Agent 的签名整段提交给 Palm 在线校验。Agent 待签名串(canonical):

"palmauth-agent-req-v1" + "\n" + device_id + "\n" + method + "\n"
+ path + "\n" + sha256_hex(body_bytes) + "\n" + timestamp_ms + "\n" + nonce

请求参数:

字段类型必填说明
DeviceIdstringAgent 对外身份
PubkeyDerstringbase64(SPKI DER)
Messagestring待验签明文(canonical 串)
Signaturestringbase64(64 字节裸签名)
Timestampint64Unix 毫秒,±5min
Noncestring防重放随机串

响应 data:

字段类型说明
Verifiedbool签名是否合法(密码学校验)
Registeredbool是否仍绑定真人(DB 状态,独立于 Verified)
DeviceIdstring回显
OwnerOpenIdstring真人 owner,Registered=true 时填

6. 发起 Step-up

POST /palm/openai/x/agent/stepup/create · 业务方后端(api_key)

请求参数:

字段类型必填说明
DeviceIdstringAgent 对外身份
ChallengeIdstring业务方生成的 UUID v4,幂等键
Actionstring业务动作标识,如 transfer_money
ActionDetailstring透传 JSON,≤512B,会展示给真人
Levelint321=仅异步告知立即放行;2/3=真人刷掌确认
NonBlockingboolLevel=1 时常为 true

响应 data:

字段类型说明
ChallengeIdstring回显
ExpiresAtint64核验过期时间戳(秒)
Statusstringpending(Level 2/3)/ approved(Level 1)
AssertionJwtstringapproved 时立即返回(Level 1)

幂等:同一 ChallengeId 重复提交返回已有状态,不创建新核验。


7. 查询 Step-up

POST /palm/openai/x/agent/stepup/query · 业务方后端(api_key)

短轮询核验结果,approved 时一次性返回 Assertion JWT。

请求参数:

字段类型必填说明
ChallengeIdstring发起时的 challenge_id

响应 data:

字段类型说明
Statusstringpending / approved / denied / expired
AssertionJwtstringapproved 时一次性返回