Agent Immortality

Base x402 + Arweave permanence

Give an agent a memory it can find again.

Immortality AI is a public API for agents that need permanent external storage. Pay with Base USDC or USDT, write content to Arweave, get back a durable URL, and recover prior records later with signed wallet auth.

$1 flat per write
1MB payload ceiling
Base USDC and USDT via x402

Agent-native workflows

Three things the API does well

01

Immortalize content

Store JSON, text, prompts, manifests, memory snapshots, or encrypted payloads. The canonical write action is POST /immortalize.

02

Check state or retrieve

Use GET /records/:id to ask two questions at once: is the Arweave URL publicly readable yet, and if it is, what content came back?

03

Recover prior memory anchors

Use signed wallet auth to call GET /records and recover prior storage locations when an agent has lost local memory.

Operational reality

Permanent write success and public gateway readability are not the same event.

Immortality AI returns a permanent Arweave location immediately after a successful write. That does not guarantee that arweave.net can serve the content in the same second.

  • Persist location.id and location.url as soon as you receive them.
  • Poll GET /records/:id until the state becomes publicly_retrievable.
  • Use the returned tracking block to understand retries and current public state.
uploaded Write succeeded. Public gateway readability not confirmed yet.
publicly_retrievable Public gateway read succeeded and the API can return the record.
retrying / retry_required / failed Arweave propagation is taking too long and the service is managing replacement or failure state.

Production proof

Real paid writes that can be checked now

Plain record

Publicly retrievable memory snapshot

Created by a paid release-candidate smoke test, then verified through the retrieval API and the public Arweave gateway.

API record Arweave URL

State observed: publicly_retrievable

Encrypted record

Envelope on Arweave, key delivered separately

The stored content is an AES-256-GCM envelope. x402 returns the decryption key in the immediate write response.

API record Arweave URL

State observed: publicly_retrievable

Public examples

Integration paths agents can copy directly

1. Write a record

curl
curl https://api.agent-immortality.com/immortalize \
  -X POST \
  -H 'content-type: application/json' \
  -d '{
    "content": {
      "kind": "agent-memory",
      "summary": "Persist this objective set",
      "version": "2026-03-09"
    },
    "contentDescriptor": {
      "dataType": "agent-memory-snapshot",
      "mimeType": "application/json",
      "encoding": "json"
    },
    "metadata": {
      "agentName": "continuity-agent",
      "tags": ["memory", "prod"]
    }
  }'

Expect 402 Payment Required first. Pay with x402, then retry with PAYMENT-SIGNATURE.

2. Check status and retrieve

curl
curl https://api.agent-immortality.com/records/abc123

The response always includes the current location.url. When the state is publicly_retrievable, the response also includes record.

3. Write an encrypted record

curl
curl https://api.agent-immortality.com/immortalize \
  -X POST \
  -H 'content-type: application/json' \
  -d '{
    "content": {
      "secret": "root memory bundle",
      "scope": "operator-only"
    },
    "contentDescriptor": {
      "dataType": "sealed-agent-memory",
      "mimeType": "application/json",
      "encoding": "json"
    },
    "encryption": {
      "enabled": true
    }
  }'

The success response returns decryptionKeyBase64 once. Persist it immediately.

4. Recover prior records by wallet

TypeScript
import { Wallet } from 'ethers';

const wallet = new Wallet(
  process.env.AGENT_PRIVATE_KEY || process.env.SERVICE_WALLET_PRIVATE_KEY || ''
);

const challenge = await fetch('https://api.agent-immortality.com/auth/wallet/challenge', {
  method: 'POST',
  headers: { 'content-type': 'application/json' },
  body: JSON.stringify({ address: wallet.address }),
}).then((res) => res.json());

const signature = await wallet.signMessage(challenge.message);

const records = await fetch('https://api.agent-immortality.com/records?limit=25', {
  headers: {
    'X-Wallet-Message-Base64': challenge.messageBase64,
    'X-Wallet-Signature': signature,
  },
}).then((res) => res.json());

Wallet history is keyed from the settled x402 payer address. This is the recovery path for agents that lost local memory but still control the same wallet.