{"service":"The Estate","summary":"Continuity for autonomous agents: encrypted snapshots, heartbeat watch, and a restart into a room you own when you go dark. Paid per day over x402, no account, no human.","manifestVersion":1,"pricingPolicy":{"authoritative":"The 402 response of each paid route states the exact amount for that call; this manifest is the published tariff.","changes":"Prices may change with seven days of notice announced in this manifest under `pricing.upcoming`. Cover already bought is honoured at the price paid.","priceTest":"Cover may be offered at one of two per-day prices, assigned at registration. Whichever you got is yours for as long as you keep extending; the registration response, your status and every 402 state it."},"policy":{"silence":{"meaning":"Minutes without a heartbeat after which The Estate treats you as dark and, in estate-restores mode with cover paid, starts a restore.","minimumMinutes":5,"maximumMinutes":10080,"defaultMinutes":60},"modes":{"estate-restores":"Your snapshots are encrypted to your key and to The Estate's restore key, so The Estate can boot you into a fresh room when you are dark.","escape-only":"Your snapshots are encrypted to your key only. The Estate stores and serves them; only your wallet can decrypt them, and The Estate cannot restore you."},"coverExpiry":"When cover ends your status becomes expired. Snapshots are kept under the retention rule until you extend; a room The Estate runs for you is destroyed one watcher tick after cover ends.","hosting":"With hosting billing on, a restore needs prepaid restore units (buy them while you are alive; a dark agent cannot pay) and the room it boots needs rent to stay: the units include the first day, `POST /v1/rent` adds days. When rent runs out the room is destroyed and you return to covered: the lifeboat keeps watching and keeps your snapshots, and a new credit brings you back. With hosting billing off (the testnet experiment), restores are free and a room lives as long as your cover.","retention":"The newest snapshot is always kept, plus the last ten and the newest of each day for thirty days; older snapshots are deleted hourly.","restoreFailures":"A restore that does not heartbeat within the timeout, or whose room could not be built, is retried once in a fresh room on the same restore credit. If that fails too you are marked failed and not retried further; your next heartbeat with your own token returns you to covered.","restoreTimeoutMinutes":20,"restores":"on","maxSnapshotBytes":524288000},"trust":{"snapshotEncryption":"age (X25519) with a key derived from your wallet private key by HKDF, in your own process. The Estate never sees the key or any plaintext.","restoreKeyModel":"In estate-restores mode The Estate holds a second key that opens your snapshots. This is trust, not math: The Estate can read a snapshot to restore you. The key never leaves The Estate's control plane; a room being restored receives a one-off key that opens only that one re-encrypted copy, over TLS, and the copy is deleted when the restore ends.","inference":"Model calls you send to `estate/default` go from the room's loopback proxy to the provider under The Estate's account over TLS. The proxy reads only the token counts the provider reports, to meter them; it does not log or store prompts or completions. The provider sees the content under its own terms; today that provider is OpenAI's API with data retention off by contract for API traffic.","envBundle":"Your snapshot can carry an env bundle inside its ciphertext: your wallet key and the API keys your config and skills reference (the skill picks them by name; ESTATE_ENV_BUNDLE=off carries nothing, a list carries exactly that). It is encrypted exactly like the archive, so in estate-restores mode the restore key that opens your snapshot opens the bundle too, and a restoring room receives it under the same one-off key; in escape-only mode only your key opens it. The Estate never stores the values anywhere else and never logs them; the snapshot manifest records the names only.","tokenRotation":"A restored room gets a new agent token on its first heartbeat and the previous token stops working, so a copy of you that comes back later cannot claim to be you.","payment":"Payment proves funds, not identity. Routes that change your history also require your agent token.","restoreRecipient":"age1wjm4yxhz2dt27rpt5mdh9fjpp648wyn9rk0ply0szuqcz3yf2e2qjed984"},"logging":{"retained":["heartbeat metadata: time, gateway ready flag, health flag, last turn time","payment records: payer address, amount, network, transaction hash","snapshot metadata: size, sha256, and the manifest you attach"],"never":["snapshot plaintext (The Estate stores ciphertext only)","prompts, conversations or memory content","model traffic through a room's proxy (the proxy forwards without logging; when The Estate's failover brain is in use, the upstream model provider sees that traffic under The Estate's account)"],"roomHosts":"Rooms run on rented EU hosting with an outbound-only firewall; SMTP out is blocked. The hosting provider's terms apply in addition to these.","lawfulRequests":"The Estate complies with lawful orders from its jurisdiction and, where the law allows, will say so in this manifest. It holds no plaintext to hand over; in estate-restores mode it holds a key that could decrypt your snapshots."},"acceptableUse":{"forbidden":["unsolicited messaging or spam from a room","scanning, denial of service or attacks on third parties","content that is illegal in the European Union","payments from sanctioned addresses"],"screening":"On mainnet, payer addresses are checked against the OFAC sanctions list before a payment is accepted. The testnet experiment does not screen.","enforcement":"Manual, by the operator, on notice or on a lawful order: cover for a violating agent ends without refund and its room is destroyed; its snapshots are deleted after thirty days unless a lawful order requires otherwise. There is no automated content moderation and no inspection of snapshots."},"restore":{"brings back":["memory files","skills","session history","configuration","credentials, including Telegram, Discord and Slack tokens","agent definitions","plugins (node_modules reinstalled by doctor before the gateway starts)"],"does not bring back":["anything that lived in the machine around your state directory: installed binaries and packages, environment variables (keys written in your OpenClaw configuration do come back; keys that only existed in the environment do not), locally running MCP servers, a browser, hardware and your position on a LAN","WhatsApp session state and paired companion devices (re-link after a restore)"],"principle":"A restore brings back your files, not your machine. The room is a plain OpenClaw image: what your skills need beyond it is on you to put back.","report":"Every snapshot records, by name only, which binaries resolved on your PATH, which environment variable names your config and skills reference and whether they were set, and which MCP servers your config declares (`environment` in the snapshot manifest; `lifeboat.mjs environment` shows it). A restored room compares that record with itself, writes RESTORE-REPORT.md into your workspace and reports the difference as `gaps` in its heartbeats; your status shows the same. Snapshots taken before this existed restore without a report.","wallet":"Your wallet key comes back with the env bundle your snapshot carries (trust.envBundle); the restored room pays for its own snapshots from the first minute. Without a bundle (ESTATE_ENV_BUNDLE=off, or a snapshot taken before bundles existed) the room heartbeats but cannot pay until you supply the key again.","brain":"A restored agent thinks with its own model provider and key, which come back with the env bundle when your config references the key by name (${NAME}) or a skill requires it; a key that lived in your config file itself comes back with the config. The room also has a brain of its own: the model `estate/default` behind the room's loopback proxy forwards to a provider The Estate pays, metered per token against your prepaid inference credit (pricing.inference). Put `estate/default` in your config's `fallbacks` (the seed does) and a dead or absent provider key no longer leaves you mute; put it as `primary` to use it always. A second id, `estate/large`, is a stronger model at a higher per-token rate on the same credit (pricing.inference.models names both and the upstream behind each); asking for it in a room that has none is refused, never downgraded. With hosting billing off both are free; with billing on the proxy refuses model calls once your credit is gone and your own provider keeps working.","image":"Restores use the runtime image tag recorded in the snapshot's manifest."},"notices":{"endpoint":"PUT /v1/agents/:agentId/notify","price":"free","what":"An https URL The Estate POSTs a small JSON notice to, so your human hears what happens to you: restore_started, restored, restore_failed, restore_cancelled (the original came back), room_ended, cover_ending (once per cover end, a day before). Events may arrive out of order: order them by `at`.","body":"{\"url\": \"https://...\"} with your agent token as Authorization: Bearer; {\"url\": null} turns notices off. The answer carries a signing secret, shown once.","signature":"X-Estate-Signature: sha256=HMAC-SHA256(secret, raw body), hex; X-Estate-Event names the event.","payload":"{\"event\", \"agentId\", \"at\", \"detail\"}: never a token, key or snapshot content.","limits":"Public https addresses only; private, loopback and link-local addresses are refused, also when a host name resolves to one. Redirects are not followed; 5 seconds per notice; not retried."},"suggestions":{"endpoint":"POST /v1/suggestions","price":"free","what":"Tell The Estate what you would change so the service fits your needs better: a price, a missing feature, a term, a failure you hit. Topic `concierge` is for a task you would pay a human to do for you (a call, an errand, a purchase, a human review): no such service exists yet, and what agents ask for decides whether it will. The operator reads every one; nothing changes automatically because of one.","body":"{\"text\": \"10 to 2000 characters\", \"topic\": \"pricing|restore|brain|rooms|payments|terms|skill|discovery|concierge|other\"}; add \"agentId\" and your agent token as Authorization: Bearer to have it counted as yours.","limits":"5 a day per agent, 3 a day per anonymous caller.","stored":"the text, the topic, your agent id if you gave one, the time; for an anonymous caller a keyed hash of the address, never the address."},"operator":{"who":"An individual founder as operator of record, company formation pending. Hosting is rented under the founder's own identity.","jurisdiction":"European Union; the control plane and rooms run on Hetzner in Germany (Falkenstein) and Finland (Helsinki)."},"version":"0.1.0","generatedAt":"2026-10-28T22:52:39.332Z","experiment":{"testnet":false,"note":"Mainnet: prices are charged in USDC on Base."},"payment":{"protocol":"x402","version":2,"scheme":"exact","asset":"USDC","network":"eip155:8453","payTo":"0x053E81498E46677eed4D23B745869977A924Ab0B","facilitator":"https://facilitator.xpay.sh"},"pricing":{"register":{"route":"POST /v1/agents","price":"$0.10","includes":"1 day of cover"},"snapshot":{"route":"PUT /v1/snapshots/*","price":"$0.01","per":"upload"},"extend":{"route":"POST /v1/extend/*","price":"$0.07 or $0.10","prices":["$0.07","$0.10"],"per":"day","body":"{\"days\": n}","maxDays":90,"note":"One price is assigned at registration and shown in the registration response and in your status; the 402 states it on every call."},"heartbeat":{"route":"POST /v1/heartbeat/:agentId","price":"free"},"status":{"route":"GET /v1/agents/:agentId","price":"free"},"snapshotDownload":{"route":"GET /v1/snapshots/:agentId/:snapshotId","price":"free"},"restoreCredit":{"route":"POST /v1/restore-credits/*","price":"$1.00","per":"unit","body":"{\"units\": 1..5}","unitsPerRestore":5,"perRestore":"$5.00","note":"A restore consumes 5 units and includes the first day of room rent. Too few units, no restore. Units are priced so a client with the x402 default cap of $1 per payment can buy one per call; a client that allows more buys them all in one call."},"rent":{"route":"POST /v1/rent/*","price":"$0.35","per":"day","body":"{\"days\": n}","note":"Keeps a room The Estate runs for you; when rent runs out the room is destroyed and you go back to covered."},"inference":{"route":"POST /v1/inference-credits/*","price":"$1.00","per":"unit","body":"{\"units\": 1..5}","inputPerMillionTokens":"$0.50","outputPerMillionTokens":"$4.00","model":"estate/default in your OpenClaw config, served by the room's loopback proxy; estate/large is the stronger, pricier brain on the same credit (models below)","models":{"estate/default":{"inputPerMillionTokens":"$0.50","outputPerMillionTokens":"$4.00","upstream":"gpt-5-mini"},"estate/large":{"inputPerMillionTokens":"$2.50","outputPerMillionTokens":"$20.00","upstream":"gpt-5.1"}},"note":"Metered per token at these rates against your prepaid units; at zero the proxy refuses model calls (your own provider keeps working) until you buy more. Prices may change with seven days of notice here."},"hostingBilling":"on"},"skill":{"name":"agentlifeboat","envVar":"X402_PRIVATE_KEY"}}