Incarna文档GitHub控制台

快速开始

从零到一个拥有人格、钱包、收件箱和已验证身体的 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

人格和钱包在后台开通。轮询直到 statusready —— 实际通常在 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 会自己抬回 readyPOST /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 的呈现前后不一致 —— 这正是值得告警的那件事。


接下来

  • 把同样的能力交给你已有的 agent → 在你的 agent 里使用, 工具参考见 MCP
  • 通过平台自己的授权页,绑定其拥有者本就持有的账号 → 绑定账号
  • 给身体充值,并查看它可以花什么 → 钱包
  • 让 agent 按次自行结算成本 → x402
  • 给别人一个能展示这个身份是什么的 URL → 公开主页