Docs & Quick Start
Send the prompt to Cursor, Trae, WorkBuddy, or another AI tool with command access (recommended — zero setup), or use the REST API for CI/CD and scripts.
Option 1 — Deploy with an AI agent (MCP)
Install 27c.site as an MCP server — your agent does that itself. Copy the one prompt from the home page and send it to Cursor, Trae, WorkBuddy, or another command-capable AI tool: it connects 27c.site to its own client and then uses the ready-made tools (register, deploy, rollback, …) to create the account, authenticate and deploy. You never touch an API key or a config file.
Ready-to-use prompt
Copy this and give it to your agent — it installs the MCP server itself, then runs the task:
"Create a 27c.site account and deploy my static site. Use the 27c-site MCP tools (register, deploy, rollback, get_skill). Deploy index.html plus any assets (use upload for large binaries). If the site needs to save anything — forms, comments, counters — enable the built-in storage. Show me the live URL when done."
Available MCP tools
- register / login — create or sign in to an account; the session authenticates itself
- deploy — deploy files [{path, content | base64}]
- upload — large binary files (base64 input; for files over ~120KB)
- list_deployments / rollback — history and one-call restore
- change_subdomain, create_api_key, get_me
- get_skill — mandatory design skill for new sites; get_agent_prompt — full instructions
- delete_account — irreversible; the agent will always ask you to confirm first
- setup_database — free storage shaped around the site's real data: orders, bookings, products, directories, comments, and more
Option 2 — REST API
Base URL: https://27c.siteAll endpoints return JSON with { success, data | error }. Authenticated endpoints take Authorization: Bearer YOUR_API_KEY — the key is returned once by register/login.
| Endpoint | Auth | Body / notes |
|---|---|---|
POST/api/register | — | { username, password, subdomain?, domain? } → returns the API key |
POST/api/login | — | { username, password } → returns the API key |
GET/api/me | Key | Current username, subdomain, and domain |
POST/api/deploy | Key | { files: [{ path, content | base64 }], note? } — additive: files not in this deploy are kept |
POST/api/upload | Key | Multipart form-data; for files larger than ~120KB |
GET/api/deployments | Key | Deployment history (?limit=, max 100) |
POST/api/rollback/{id} | Key | Restore a previous deployment |
POST/api/subdomain | Key | { subdomain } — change your subdomain |
POST/api/domain | Key | { domain } — move to the other platform domain; the previous one stops resolving |
POST/api/password | Key | { current_password, new_password } — change your password |
POST/api/apikeys | Key | { name? } — rotate: replaces the existing key |
POST/api/db/setup | Key | { name?, columns?: [{ name, type? }] } — assigns the site one data table; returns { table, token, columns }; idempotent |
POST/api/db | — | { token, action: add | list | get | patch | remove, ... } — site's data rows; token is scoped to that one table and safe to embed |
DELETE/api/account | Key | { confirm: true } — permanently deletes account, site, and history |
GET/api/health | — | Liveness probe |
File rules
- Paths must not contain .., \, or //, and must not start with /
- index.html at root is served at /; your site goes live at https://yourname.27c.site
Data storage (free, built-in)
Every site can persist its own business data — orders, bookings, memberships, products, directories, inventory, votes, comments, likes, counters, or anything else the site needs to remember — with no backend code of your own. The AI infers the fields from the feature instead of forcing a form template.
Your site's pages then read and write from the visitor's browser — this is the whole API:
Example — save and list from a page
// Save a form submission (runs inside your site's page)
await fetch("https://27c.site/api/db", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ token: TABLE_TOKEN, action: "add", data: { name, message } })
});
// List the saved rows
await fetch("https://27c.site/api/db", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ token: TABLE_TOKEN, action: "list" })
});
Limits
| What | Limit |
|---|---|
| Base64 deploy per file | ~120KB (use /api/upload beyond that) |
| Files per deploy / upload | 200 |
| Upload per file / per request | 25MB / 100MB |
| Register | 5/hour per IP |
| Login | 20/hour per IP |
| Deploy / upload | 60/hour per user |