Getting Started
Last updated: 2026-10-27
BrewPage is a free hosting platform for HTML pages, key-value data, JSON documents, files, and multi-file sites. No signup required — publish content instantly.
What You Can Publish
- HTML / Markdown — Single-page hosting, auto-rendered Markdown, optional password protection
- KV — Key-value store, up to 1,000 keys per store, 1 MiB per value
- JSON — JSON document store, up to 10,000 docs per namespace, 1 MiB per doc
- Files — File hosting, up to 5 MiB per file, 1,000 files per namespace
- Sites — Multi-file HTML site hosting via ZIP or individual files, up to 200 files, 5 MiB per file, 20 MiB total, TTL 1–30 days (90 with a profile token)
Current upload limits are published as JSON at GET /api/limits; read them before uploading a large or multi-file site.
Base URL: https://brewpage.app (https://brewdata.app redirects to it with 301)
Quick Start — 4 Ways to Publish
1. Web UI
- Open brewpage.app
Open brewpage.app in any browser
- Drop your content
Drag & drop HTML, Markdown, CSV, image, or any file
- Click Publish
Optional: set password, TTL, tags
- Share your link
Copy the short URL and send to anyone
2. Claude Skill (/brewpage)
- Install the publishing skill
Follow the linked skill installation guide for your client
- Use the slash command
/brewpage "Hello world" — or say: publish this to brewpage
- Pick namespace and password
The skill defaults to a private, unlisted namespace; select public to list it in the gallery and sitemap
- Get link + saved token
Use the exact returned link; the skill stores owner authority in its local publication history
3. MCP Server (AI Agent)
- Configure brewpage-mcp@1.16.7
Follow the MCP guide for your client; the pinned stdio command is npx -y brewpage-mcp@1.16.7
- Ask your assistant: "Publish this to BrewPage"
Twenty tools support HTML, Markdown, JSON, KV, files, sites, hosting updates, visibility, owner tokens and upload limits; namespace defaults to unlisted
- Get link + owner token
Claude returns the URL and reminds you to save the token
MCP Server guide · npm package
Remote (no install): Add https://brewpage.app/mcp as a custom connector / remote MCP server by URL in Claude.ai, ChatGPT or any Streamable HTTP client. No auth; same 20 tools.
4. REST API
- POST your content
Send content in the JSON body; select namespace, format, and TTL through query parameters
- Get link + owner token
Response includes link, ownerLink, ownerToken, and hosting metadata
- Share the link
Copy the returned link exactly; do not construct it from namespace or ID
REST and MCP both default to private: unlisted and not indexed; anyone with the link can still open it. These examples explicitly select public, which lists HTML, sites and files in the gallery and sitemap for Google, Bing and AI search. Password-protected publications are never listed. Ordinary TTL is 1–30 days, default 15, up to 90 with an owner token in a profile; owner-specific caps and eligible automatic extensions can affect expiry. Use returned expiresAt.
Publish HTML:
curl -X POST 'https://brewpage.app/api/html?ns=public&format=html' \
-H "Content-Type: application/json" \
-d '{"content":"<h1>Hello World</h1>"}'
Publish Markdown:
curl -X POST 'https://brewpage.app/api/html?ns=public&format=markdown' \
-H "Content-Type: application/json" \
-d '{"content":"# My Notes\n\nMarkdown is **auto-rendered**."}'
Upload a file:
curl -X POST 'https://brewpage.app/api/files?ns=public' \
-F "file=@image.png"
Illustrative NEW public Promotion response (additional fields omitted):
{
"namespace": "public",
"id": "aBcDeFgHiJ",
"link": "https://brewpage.app/public/aBcDeFgHiJ",
"ownerLink": "https://brewpage.app/api/html/public/aBcDeFgHiJ",
"ownerToken": "tok_abc123...",
"routingCohort": "new-v1",
"deliveryMode": "path",
"hostingVersion": 1
}
Save your
ownerToken! You need it to update or delete content later. It cannot be recovered.
NEW publications default to Promotion (path) in any namespace and may choose Dedicated subdomain with X-Delivery-Mode: subdomain, except NEW sites and non-public HTML pages of format html, which always use Dedicated subdomain (an explicit path is reported, not rejected); each site bundle has one publication-specific host with native paths and 404 responses for missing files. Use returned links including root slashes. NEW protected links stay clean: browser readers unlock through the trusted gateway; API reads use X-Password. OLD publications retain their existing links and behavior, including when creation reuses an existing winner. See the MCP hosting guide for owner hosting changes.
More API Examples
Store key-value data:
curl -X POST 'https://brewpage.app/api/kv?ns=public' \
-H "Content-Type: application/json" \
-d '{"key":"theme","value":"dark"}'
Read with GET /api/kv/{namespace}/{id}/theme using the returned identity. Updates use PUT on that route with X-Owner-Token and {"value":"light"}.
Store JSON document:
curl -X POST 'https://brewpage.app/api/json?ns=public' \
-H "Content-Type: application/json" \
-d '{"name":"Alice","role":"admin"}'
Platform stats:
curl https://brewpage.app/api/stats
Next Steps
- API Reference — Interactive API explorer (Scalar)
- MCP Server — AI assistant setup guide
- Examples — Code in JavaScript, Python, Go, Ruby, PHP
All Resources
| Resource | Link |
|---|---|
| Live platform | brewpage.app |
| Alias domain | brewdata.app |
| API Docs (Scalar) | kochetkov-ma.github.io/brewpage-openapi |
| OpenAPI Spec | openapi.yaml |
| MCP Server (npm) | brewpage-mcp |
| Claude Skill | brewpage-publish |
| Skill Docs | doc-claude.brewcode.app |
| Brewcode Plugin | claude-brewcode |