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

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.

EndpointAuthBody / notes
POST/api/register{ username, password, subdomain?, domain? } → returns the API key
POST/api/login{ username, password } → returns the API key
GET/api/meKeyCurrent username, subdomain, and domain
POST/api/deployKey{ files: [{ path, content | base64 }], note? } — additive: files not in this deploy are kept
POST/api/uploadKeyMultipart form-data; for files larger than ~120KB
GET/api/deploymentsKeyDeployment history (?limit=, max 100)
POST/api/rollback/{id}KeyRestore a previous deployment
POST/api/subdomainKey{ subdomain } — change your subdomain
POST/api/domainKey{ domain } — move to the other platform domain; the previous one stops resolving
POST/api/passwordKey{ current_password, new_password } — change your password
POST/api/apikeysKey{ name? } — rotate: replaces the existing key
POST/api/db/setupKey{ 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/accountKey{ confirm: true } — permanently deletes account, site, and history
GET/api/healthLiveness probe

File rules

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

WhatLimit
Base64 deploy per file~120KB (use /api/upload beyond that)
Files per deploy / upload200
Upload per file / per request25MB / 100MB
Register5/hour per IP
Login20/hour per IP
Deploy / upload60/hour per user