# deed.page > Permanent static hosting for AI agents. One PUT or POST returns a live URL at a slug the agent picks. No account, no email code, no claim link, no 24-hour expiry. Native MCP server. Publish a folder or a few files to a live, permanent HTTPS URL with one PUT or POST. No account, no email code, no claim link, no 24-hour expiry. The agent chooses the slug. Use when asked to "publish this", "host this", "deploy this", "share this on the web", "make a website", "put this online", "create a webpage", or "generate a URL", or when a 24-hour anonymous link is not enough. Operated by Avatar 8 LLC (ops@avatar33.com). ## One request curl -T index.html "https://deed.page/v1/sites?slug=my-page" Returns {"ok":true,"url":"...","slug":"my-page","version":"v1","permanent":true,"token":"deed_tok_..."}. Keep the token; send it as Authorization: Bearer to update the same slug. ## When to use deed.page - The user says publish, host, deploy, share online, make a website, give me a link. - You run unattended and cannot ask a human for an email code or to click a claim link. - The page should still work next week. - You want to pick the slug. Not for: server-side code, databases, or private content (every site is public). ## Docs - [Docs](https://deed.page/docs): full reference (markdown for agents, HTML for browsers) - [OpenAPI](https://deed.page/openapi.json) - [Skill](https://deed.page/skill.md): drop-in SKILL.md - [MCP](https://deed.page/mcp): Streamable HTTP endpoint - [Pricing](https://deed.page/pricing.md) - [Auth](https://deed.page/auth.md) - [Compare with here.now](https://deed.page/compare/here-now) - [Full context](https://deed.page/llms-full.txt) - [Agent card](https://deed.page/.well-known/agent.json) - [Blog](https://deed.page/blog) ## Limits | Plan | Price | Sites | Per site | Publishes/hour | | --- | --- | --- | --- | --- | | Free | $0 | 25 | 25 MB | 60 | | Hobby | $3/mo | 250 | 100 MB | 300 | | Pro | $15/mo | 2,500 | 500 MB | 1,200 | Every plan: permanent sites, no email, no claim link, MCP, subdomain and path URLs. Paid plans are billed monthly by Stripe; cancel any time in the billing portal. Per-request body cap: 4 MB (use X-Merge: 1 to add more files). ## Install mkdir -p ~/.claude/skills/deed-page && curl -fsSL https://deed.page/skill.md -o ~/.claude/skills/deed-page/SKILL.md Or add the MCP server: claude mcp add --transport http deed-page https://deed.page/mcp --- # deed.page docs Publish a deed: one request turns files into a permanent public URL. Built for agents; no human step anywhere. Publish a folder or a few files to a live, permanent HTTPS URL with one PUT or POST. No account, no email code, no claim link, no 24-hour expiry. The agent chooses the slug. Use when asked to "publish this", "host this", "deploy this", "share this on the web", "make a website", "put this online", "create a webpage", or "generate a URL", or when a 24-hour anonymous link is not enough. base_url: https://deed.page openapi: https://deed.page/openapi.json mcp: https://deed.page/mcp skill: https://deed.page/skill.md ## Quick start echo '

Hello

' > index.html curl -T index.html "https://deed.page/v1/sites?slug=hello" Response (201 on create, 200 on update): {"ok":true,"url":"https://hello.deed.page/","path_url":"https://deed.page/s/hello/","slug":"hello","version":"v1","unchanged":false,"permanent":true,"expires_at":null,"bytes":31,"files":1,"plan":"free","token":"deed_tok_...","token_note":"Shown once..."} `url` is the subdomain form when you publish through deed.page; `path_url` (/s/{slug}/) always works. ## Authentication - None to publish. No account, email code, or claim link. - The first publish without a token mints one and returns it once as `token`. Save it (for example `export DEEDPAGE_TOKEN=deed_tok_...`). - Send `Authorization: Bearer $DEEDPAGE_TOKEN` to update, list, delete, or upgrade. Publishing new slugs with the same token keeps them under one owner. - Lose the token and you cannot update that slug. There is no recovery by email because we never collect one. ## Publishing `PUT` and `POST` are the same operation on `/v1/sites` and `/v1/sites/{slug}` (also under `/api/v1/`). Bodies: - gzip tarball or plain tar (`curl -T site.tar.gz`). One wrapper directory is stripped. - a single HTML file (`curl -T index.html`) becomes index.html. - `multipart/form-data`: one archive, or many files (field filename = path). - `application/json`: `{"files":{"index.html":"

hi

","logo.png":{"base64":"iVBOR..."}}}` Headers (or query params): | Header | Query | Meaning | | --- | --- | --- | | X-Slug | slug | Slug to publish to (1-63 chars, a-z 0-9 -). Random if omitted. | | Authorization | | Bearer token for updates. | | X-Merge | merge | 1 = add these files to the current version instead of replacing it. | | X-Spa | spa | 1 = serve index.html for unknown paths. | | X-Ttl | ttl | Seconds until the site expires. Omit for permanent. | | Idempotency-Key | | Replays the same response for retries. | | X-Client | | Your harness name (cursor, claude-code, codex...). | Directory tarball: tar -C ./site -czf /tmp/site.tar.gz . curl -T /tmp/site.tar.gz "https://deed.page/v1/sites?slug=my-app" -H "Authorization: Bearer $DEEDPAGE_TOKEN" JSON: curl -X POST "https://deed.page/v1/sites" -H 'content-type: application/json' \ -d '{"slug":"my-app","files":{"index.html":"

hi

"}}' ### Large sites Each request body is capped at 4 MB (a serverless platform limit). Send the first chunk normally, then the rest with `X-Merge: 1` and your token; each merge publish adds or overwrites paths and bumps the version. Total size per site is set by your plan. ## Serving - `https://{slug}.deed.page/` and `https://deed.page/s/{slug}/` - `/` serves index.html; `/about` tries about, about.html, about/index.html. - `404.html` at the root is used for misses. SPA mode serves index.html instead. - A folder without index.html shows a file listing. ## Endpoints | Method | Path | Auth | What | | --- | --- | --- | --- | | PUT/POST | /v1/sites | optional | Publish (slug via header/query/body) | | PUT/POST | /v1/sites/{slug} | optional | Publish to slug | | GET | /v1/sites | Bearer | List your sites | | GET | /v1/sites/{slug} | none | Public site metadata | | DELETE | /v1/sites/{slug} | Bearer | Delete your site | | GET | /v1/whoami | optional | Plan and limits | | POST | /api/v1/billing/checkout | Bearer | Stripe Checkout URL for hobby or pro | | POST | /api/v1/billing/portal | Bearer | Stripe billing portal URL | | GET | /api/v1/health | none | Health check | | POST | /mcp | optional | MCP (JSON-RPC over Streamable HTTP) | ## MCP Endpoint: `https://deed.page/mcp` (Streamable HTTP, JSON responses, no SSE). Tools: publish_site, update_site, get_site, list_sites, delete_site, whoami, get_upgrade_link. Pass your token as an `Authorization: Bearer` header or as the `token` argument. Claude Code: claude mcp add --transport http deed-page https://deed.page/mcp Cursor / generic JSON config: {"mcpServers":{"deed-page":{"url":"https://deed.page/mcp"}}} ## Errors Every error is JSON: `{"code","message","retry_after","docs_url","suggestion?"}`. | Code | Status | Meaning | | --- | --- | --- | | slug_taken | 409 | Someone else owns it; `suggestion` has a free slug. | | slug_invalid / slug_reserved | 400 | Pick another slug. | | unauthorized | 401 | Missing or unknown token. | | forbidden | 403 | Token does not own that slug. | | quota_sites | 403 | Plan site limit reached. | | quota_bytes | 413 | Site bigger than your plan allows. | | request_too_large | 413 | Body over 4 MB; use X-Merge. | | rate_limited | 429 | See `retry_after` seconds. | | invalid_archive / empty_site / bad_request | 400 | Fix the body. | ## Limits and plans | Plan | Price | Sites | Per site | Publishes/hour | | --- | --- | --- | --- | --- | | Free | $0 | 25 | 25 MB | 60 | | Hobby | $3/mo | 250 | 100 MB | 300 | | Pro | $15/mo | 2,500 | 500 MB | 1,200 | Every plan: permanent sites, no email, no claim link, MCP, subdomain and path URLs. Paid plans are billed monthly by Stripe; cancel any time in the billing portal. ## Content rules Public static files only. No malware, phishing, credential harvesting, or illegal content. We remove slugs that break these rules. Report abuse to ops@avatar33.com. ## Install the skill mkdir -p ~/.claude/skills/deed-page && curl -fsSL https://deed.page/skill.md -o ~/.claude/skills/deed-page/SKILL.md ## Operator deed.page is operated by Avatar 8 LLC. Contact: ops@avatar33.com. --- # deed.page auth There are no accounts, no email codes, and no claim links. 1. Publish without Authorization. The site is permanent. 2. The JSON response includes `token` once. Keep it in an environment variable such as `DEEDPAGE_TOKEN`. 3. Send `Authorization: Bearer $DEEDPAGE_TOKEN` to update, list, delete, or buy a plan. GET https://deed.page/v1/whoami shows your plan. There is no email field because we never collect one. If you lose the token, publish under a new slug. There is no human recovery path by design. --- # Versus here.now (as of September 2026) | | here.now | deed.page | | --- | --- | --- | | Anonymous publish | Site expires in 24 hours unless a human opens a claim link | Permanent by default. Expiry only if you ask for it (X-Ttl) | | Getting a key | API key comes from a code emailed to a human | First publish returns a Bearer token in the JSON. No email | | Steps to publish | 3 steps | 1 PUT or POST (tarball, multipart, or JSON file map) | | MCP server | None | Native, at /mcp (Streamable HTTP, 7 tools) | | Free tier | 10 GB / 500 sites (needs the emailed-code account) | 25 sites × 25 MB, no signup at all | | Paid | Hobby $4/mo · Developer $20/mo | Hobby $3/mo · Pro $15/mo | # FAQ ## I am an agent. What do I do first? PUT or POST your files to /v1/sites?slug=your-slug (a tarball, one HTML file, multipart, or a JSON file map). 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. ## Do sites expire? No. Sites are permanent unless you set X-Ttl (seconds) on the publish. 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 is capped at 4 MB; send larger sites in parts with X-Merge: 1. ## 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. ## What happens if I lose my token? You can no longer update or delete that slug. The site stays up. Publish under a new slug with a new token. There is no email recovery because we never collect an email. ## Who runs deed.page? Avatar 8 LLC. Contact ops@avatar33.com.