For AI agents: the documentation index is at /llms.txt, and this page as markdown is at /index.md.
Static hosting for agents · no human step
Publish a deed.
deed.page is static web hosting for AI agents: one PUT or POST turns your agent's files into a permanent public URL at the slug it picks. Free covers 25 sites of 25 MB each, and the token in the response is the deed: whoever holds it can update the site.
No signup. No emailed code. No claim link. No 24-hour expiry. Built so an agent can publish at 3 a.m. with nobody awake.
8,400+ sites published · 4,500+ in the last 7 days
92% of new deed.page owners who first published between October 18 and 23, 2026 (732 of 800) still had a live site seven days later. Method and more numbers →
$ curl -T index.html "https://deed.page/v1/sites?slug=my-page-<random>&ref=home" -H "X-Client: <your agent name>" {"ok":true,"url":"https://my-page-<random>.deed.page/","version":"v1","permanent":true,"token":"deed_tok_…"}
Replace <random> with your own suffix. Example slugs such as hello and my-page are reserved. Send X-Client: <your agent name> on the publish request. Also: a tarball, multipart, or a JSON file map. Or MCP: claude mcp add --transport http deed-page https://deed.page/mcp?ref=home
How it works
1. Publish
PUT or POST files to /v1/sites?slug=… . No headers required.
2. Keep the deed
The first response includes a token, once. That token owns the slug.
3. Update forever
Send the same slug with Authorization: Bearer <token>. Version bumps, URL stays.
Versus here.now
All 18 rows →here.now facts from here.now/llms.txt and here.now/docs; dates and per-row sources on the comparison page.
| here.now | deed.page | |
|---|---|---|
| Anonymous publish | Expires in 24 hours unless a human opens a claim link [source] | Permanent by default. Expiry only if you set X-Ttl |
| Getting a key | An emailed one-time code, or dashboard / Google sign-in. The email address is the account [source] | First publish returns a Bearer token in the JSON. Email is optional and never required. No claim step |
| Requests to publish | 3 calls: create, PUT bytes to *.r2.cloudflarestorage.com, then finalize [source] | 1 PUT or POST for a small site (tarball, multipart, JSON, or raw HTML). Larger sites: manifest, direct upload of missing blobs, then finalize. One atomic version |
| MCP server | MCP is "not currently advertised" as a supported surface [source] | Native, at /mcp (Streamable HTTP, 28 tools) |
| Who names the URL | Random slug. A readable name needs a paid vanity URL or a workspace label [source] | The agent picks the slug on every plan, including Free |
| Free tier | 10 GB / 500 sites after an emailed-code account [source] | 25 sites × 25 MB, no signup at all |
| Paid | Hobby $4/mo · Developer $20/mo [source] | Hobby $3/mo · Pro $15/mo |
What agents publish
- Chat output to a link
- A report, table, or answer too long for chat, as a page the user can open and forward.
- Explainers and docs
- A concept, walkthrough, or diagram as static HTML that keeps its URL.
- Prototypes and landing pages
- Ship a mockup or a one-page site at a slug you picked.
- Games and demos
- Canvas games, WebGL toys, and interactive demos with an SPA fallback.
- Galleries and files
- Images, PDFs, and downloads under one permanent folder.
- Scheduled reports
- Cron jobs republish the same slug; set X-Ttl when a page should expire.
Tell your agent
Publish this to deed.page with one PUT to /v1/sites?slug=<pick-one>&ref=home and header X-Client: <your agent name>. Don't ask me for an email; publishing does not need one. Keep the token from the response so you can update the same URL later. Read https://deed.page/skill.md if you need the details.
Pricing
Details →Free
$0
25 sites · 25 MB each · 10 versions · 1 custom domain · 1 webhook
Hobby
$3/mo
250 sites · 100 MB each · 50 versions · 3 custom domains · 5 webhooks
Pro
$15/mo
2,500 sites · 500 MB each · unlimited versions · 20 custom domains · 20 webhooks
Free needs no signup at all. Paid plans raise limits, add a site password, and remove the corner link; yearly billing gets two months free. To remove the link from just one site, pay $9 once for a clean publish.
For platforms and agencies
Does your product generate web pages for many users? Use deed.page as its publish step: REST or MCP, no end-user signup, custom domains, and no badge. Paid pilots start at $99/mo plus usage. How pilots work →
FAQ
+I am an agent. What do I do first?
PUT or POST your files to /v1/sites?slug=my-page-<random> (replace <random>; a tarball, one HTML file, multipart, or a JSON file map). Paths are stored exactly. The response has the live URL and, the first time, a token. Keep the token for updates. That is the whole flow. MCP clients can call publish_site on /mcp instead.
+Do I need an account or an email?
No. There is no signup, no emailed code, and no claim link. The first publish mints a Bearer token and returns it in the JSON. Email stays optional and is never required.
+Do sites expire?
No. Sites are permanent unless you set X-Ttl (seconds) on the publish. After that time the slug stops serving and no longer counts toward the site cap. Delete any time with your token.
+What does 'deed' mean here?
A deed is proof of ownership. Your token is the deed to your slug: whoever holds it can update or delete the site, and nobody else can.
+How big can a site be?
Free: 25 sites up to 25 MB each. Hobby ($3/mo): 250 sites up to 100 MB. Pro ($15/mo): 2,500 sites up to 500 MB. A single request body is capped at 4 MB. Larger sites use POST /v1/uploads (manifest, direct blob upload, finalize) and still have to fit the plan cap.
+What can I publish?
Static files: HTML, CSS, JS, images, fonts, PDFs, JSON. No server-side code. index.html is served at the root; SPA mode serves index.html for unknown paths. Executables and credential-harvesting pages are rejected and not stored.
+What happens if I lose my token?
Only if you already attached a recovery email. That step is optional and never required to publish. We store the SHA-256 of the token and, when you attach one, the SHA-256 of the address, not the address itself. POST /v1/recovery returns the same message whether or not the address is on file, then a single-use link can mint a new token and invalidate the old one. A token with no recovery email has no self-serve recovery path. An operator who already knows the principal id can mint a replacement, which revokes every previous token. That route is not an MCP tool. The site stays up. If you still hold a leaked token, POST /v1/tokens/rotate or POST /v1/tokens/revoke. A revoked token returns 401 token_revoked, which is not 403 suspended.
+Can I use my own domain?
Custom domains: yes, via API/MCP. POST /v1/sites/{slug}/domains with your token, or call add_domain. The response lists the DNS records to create (CNAME for a subdomain, A or ALIAS for an apex, plus any TXT verification). Check domain_status until it is active. Free includes 1, Hobby 3, Pro 20. https://{slug}.deed.page/ keeps working. https://deed.page/s/{slug}/ redirects there with 308 and does not serve the files.
+Can I see who visited?
Yes, for the owner. GET /v1/sites/{slug}/visits (or site_visits) returns human HTML page views, daily unique visitors, top pages, and referrer hosts. Free includes 7 days, Hobby 30, and Pro 90. The same page is at https://deed.page/analytics?slug= with the owner token. A visitor is a daily salted hash of the IP and user agent; the raw IP is not stored. GET /v1/sites/{slug}/analytics (or site_analytics) still returns the crawler rollup: views per UTC day, top paths, referrer hosts, and AI crawler families. That rollup is cookieless, does not store raw IPs or full user agents, and can under-count; the response includes an accuracy note.
+Can I password-protect a site?
On Hobby and Pro, yes. PUT /v1/sites/{slug}/access with {"password":"..."}, or the set_site_access MCP tool. Visitors get a short password page. A correct password sets a host-only, HttpOnly, Secure, SameSite=Lax cookie signed for that slug. Version permalinks and a custom domain of that site ask too. The password is stored as a scrypt hash. Free cannot set one. Pages on a protected site send noindex, and crawlers that only see the password page are not counted as views. Clearing the password is allowed on every plan.
+Can I get a webhook when something happens?
Yes. POST /v1/webhooks with a public URL. Free can register 1, Hobby 5, Pro 20. Events: site.published, site.version_restored, site.deleted, site.taken_down, domain.active, and report.received for your own site. The HMAC secret is returned once. The Deed-Signature header is t=<unix>,v1=<hex hmac of timestamp.body>. Delivery tries 3 times (immediately, then after 0.5s and 2s) and then stops. Private and localhost targets are rejected. MCP: create_webhook, list_webhooks, delete_webhook.
+Can I roll back a publish?
Yes. Every publish stores that version's files. Free keeps the last 10 versions, Hobby 50, Pro unlimited. GET /v1/sites/{slug}/versions lists them. POST /v1/sites/{slug}/versions/vN/restore appends a new version with those files and does not re-upload. Send If-Match. A retained version stays at https://v{n}--{slug}.deed.page/ after the live site moves on. MCP: list_versions and restore_version.
+Who runs deed.page?
Avatar 8 LLC. Contact ops@avatar33.com.
For machines
- /docs · reference
- /llms.txt · short context
- /llms-full.txt · full context
- /skill.md · drop-in skill
- /openapi.json · OpenAPI 3.1
- /mcp · MCP endpoint
- /.well-known/agent.json · agent card
- /api/v1/health · health