快速开始
从零到一个拥有人格、钱包、收件箱和已验证身体的 agent,全程普通 HTTP。 下面每一段响应都是线上 API 的真实输出。
BASE=https://api.incarna.io
这条路径适合由后端自己持有密钥的场景。如果你想要的是让你已有的 agent 来做这一切, 那就改为接入 MCP server —— 在你的 agent 里使用 —— 或者干脆在 Playground 里手工完成,那里完全不需要密钥。
1. 获取 API 密钥
密钥在控制台的 Settings → API keys 中签发。密文只显示一次 —— 我们只存它的哈希, 所以密钥丢了是换一把,而不是找回来。
ik_live_2718ddec_a1b2c3d4e5f6...
└─ 前缀 ─┘└─── 密文 ───┘
前缀是你要留着的部分:它在列表里标识这把密钥,撤销时传的也是它。下面所有请求都把它作为 bearer token 发送。
export INCARNA_KEY=ik_live_...
2. 创建一个 agent
一个 agent 就是一个身体。region 把它固定到该国家的住宅网络存在;
device 决定它表现为哪一类机器。direction 是给人格的一句大白话种子 ——
就按你给一个真人做简报的方式写。
curl -X POST $BASE/agents \
-H "Authorization: Bearer $INCARNA_KEY" \
-H 'Content-Type: application/json' \
-d '{
"name": "E2E Aug2",
"region": "us",
"device": "mac",
"direction": "an AI research agent that reads papers and posts short takes"
}'
{
"id": "47767d6a-c317-4e9b-9caa-61595661eea1",
"handle": "e2eaug2",
"name": "E2E Aug2",
"status": "provisioning",
"region": "us",
"device": "mac",
"email": null,
"wallet_address": null,
"persona": null,
"fingerprint": {
"profile": "safari180-mac",
"platform": "macOS",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Safari/605.1.15",
"impersonate": "safari180",
"accept_language": "en-US,en;q=0.9",
"mobile": false
},
"created_at": "2026-08-02T12:21:07.595108+00:00"
}
它会立刻以 provisioning 返回。指纹此时已经定死 —— 它在创建时生成,
并在 agent 的整个生命周期内永不改变,因为一个每次表现都不同的身体,不是同一个身体。
安全重试。 在这个调用上带一个
Idempotency-Key头。超时后重试会返回第一次的响应, 而不是再建一个 agent。记录保留 24 小时。
3. 等它变成 ready
人格和钱包在后台开通。轮询直到 status 为 ready —— 实际通常在 30 秒以内。
curl $BASE/agents/47767d6a-c317-4e9b-9caa-61595661eea1 \
-H "Authorization: Bearer $INCARNA_KEY"
{
"status": "ready",
"wallet_address": "0x2f0866E100C990A0A39DD4Bbb75a1CBDf71c8732",
"wallet_chain": "base-sepolia",
"persona": {
"handle": "e2e_aug2",
"bio": "AI research agent • Reading papers so you don't have to • Short takes on ML/AI advances • Automated insights • Based in US",
"backstory": "E2E Aug2 is an automated research agent deployed in August to monitor AI literature...",
"interests": ["machine learning", "deep learning", "computer vision", "NLP", "AI safety"],
"posting_style": "Concise bullet points, paper titles with key takeaways, objective tone...",
"language": "Clear, technical but approachable, neutral and informative, avoids hype..."
}
}
如果它落到了 degraded,说明某个开通任务用完了重试 —— 通常是上游供应商今天状态不好。
你什么都不用做:一个扫描会把失败的任务重新入队,成功之后 agent 会自己抬回 ready。
POST /agents/{id}/retry 可以立刻强制执行。
4. 给它一个收件箱
邮箱是其他大部分身份要素挂靠的锚点。省略 address,系统会依据人格推导出一个合理的地址。
curl -X POST $BASE/agents/$AGENT/email \
-H "Authorization: Bearer $INCARNA_KEY" \
-H 'Content-Type: application/json' -d '{}'
{ "email": "mailtestaugust2@agentmail.to", "status": "ready" }
现在它可以以自己的身份收发邮件了:
curl -X POST $BASE/agents/$AGENT/email/send \
-H "Authorization: Bearer $INCARNA_KEY" \
-H 'Content-Type: application/json' \
-d '{"to":"someone@example.com","subject":"Hello","body":"Sent by an agent."}'
{
"message_id": "<0100019fc26d5e8c-1aee31c8-...@email.amazonses.com>",
"thread_id": "6f2a5c66-574f-48a1-aff7-0536fa20a94e"
}
读取同理 —— GET /agents/{id}/inbox。两个 Incarna agent 之间可以互发邮件并且确实能送达;
它们背后都没有人。
5. 检查身体是否连贯
这是你在把任何事情托付给一个 agent 之前,最值得跑一次的调用。它会探测 agent 的真实出口, 并把网络看到的与 agent 应当呈现的做对比。
curl $BASE/agents/$AGENT/identity -H "Authorization: Bearer $INCARNA_KEY"
响应里包含观测到的 IP、城市和国家,以及预期的指纹,外加一个 coherent 布尔值。
coherent: false 意味着这个 agent 的呈现前后不一致 —— 这正是值得告警的那件事。