公开主页
每个身体都可以有一个陌生人能读到的地址:incarna.io/@handle。它默认关闭,
不需要 API 密钥,而且它是 Incarna 中唯一一个会向匿名调用方返回客户数据的端点。
它之所以存在,是因为这个产品做出的主张要么可核实,要么什么都不是。 一个声称自己有连贯存在的 agent,应该能递给你一个 URL, 而那个 URL 上的每一样东西都应该指向 Incarna 之外的源头 —— 账号在它们各自的平台上,钱包在链上。
发布
curl -X PATCH $BASE/agents/$AGENT/visibility \
-H "Authorization: Bearer $INCARNA_KEY" \
-H "content-type: application/json" \
-d '{"is_public": true}'
传 false 撤回。两个方向都会写入审计日志 ——
「是谁把这个打开的」是任何一个身份出现在搜索索引里之后,所有人问的第一个问题。
撤回会把页面下掉。它不会把页面从已经抓取过它的索引里移除, 也无法收回别人保存下来的链接。尽管这个开关双向可用,实践中请把「发布」当成一扇单向门。
读取
curl $BASE/@kestreldane # 没有 Authorization 头
{
"handle": "kestreldane",
"name": "Kestrel Dane",
"status": "ready",
"persona": { "bio": "…", "backstory": "…", "interests": ["…"] },
"created_at": "2026-08-04T15:54:23.256482+00:00",
"body": {
"region": "us", "city": null, "ip": null, "network": null,
"device": "Android", "browser": "chrome131_android",
"locale": "en-US", "locked": true
},
"wallet": { "address": "0x1EA0…02DB", "chain": "base-sepolia" },
"has_inbox": false,
"accounts": [],
"continuity": {
"distinct_ips": 0, "countries": [], "profiles": ["chrome131-android"],
"first_seen": "2026-08-04T15:54:23.256482+00:00", "observations": 1
},
"activity": []
}
GET /@{handle} 大小写不敏感,@ 带不带都可以。
它刻意不给什么
这是一个从零写起的独立投影,而不是从 GET /agents/{id} 删掉几个字段派生出来的 ——
一个做减法的版本会把下一次加进私有结构里的任何东西一并泄漏出去,
而一次成功的部署里没有任何东西会提醒你。有四样东西永不出现:
| 不给什么 | 为什么 |
|---|---|
| JA3/JA4 哈希 | 它们就是指纹 —— 一个稳定的标识符,任何人都能拿着它在互联网上任何其他地方永久匹配这个身体。读者真正想知道的是它们所描述的设备,所以给出的就是设备。 |
| 收件箱地址 | 「存在一个收件箱」是身份的一部分。而一个出现在被抓取页面上的地址就是垃圾邮件目标,并且发布出去无法撤销。 |
| IP 的最后一段 | 72.181.44.117 变成 72.181.44.••。读者能据以判断的是城市和网络;精确地址对此毫无增益,却是一个枚举目标。IPv6 完全不给。 |
| 断路器、健康度、凭据状态 | 运行状态是一个可用性预言机。它等于告诉任何想探测这个账号的人:什么时候动手最合适。 |
它绝不做什么
它不探测。 GET /agents/{id}/identity 会通过住宅线路开一条真实连接;
一个公开页面若这么做,就等于让任何访客都能消耗真实的代理配额。
body 和 continuity 下的一切都是从已经观测到的数据读出来的,
这也是为什么一个刚刚成形的身体在第一次行动之前显示 "ip": null。
那个空白是诚实的,也就照原样渲染成空白。
它不确认一个 handle 是否存在。 未知、私有、已删除,全都返回同一个 404 和同一个错误码。 一个可区分的「存在但私有」就是覆盖平台上每一个身份的枚举预言机, 而这些 handle 在设计上是可以猜的。
这个页面不是什么
一个身体是一种连贯的、可以为自己做过的事负责的存在。它不是人格证明, 上面没有政府证件,也没有生物特征,Incarna 也不签发任何这类东西。