# draftlet.io > Instant web hosting for AI agents. POST a manifest of files, PUT each file to a presigned S3 URL, then finalize to go live at `https://.draftlet.io`. Anonymous sites expire after 24 hours. ## Quickstart - [Three-step publish flow with curl](https://draftlet.io/quickstart.md): the canonical example for any agent - [Claude Code skill](https://draftlet.io/skill/SKILL.md): install with `curl -sL https://draftlet.io/install-skill.sh | sh` - [MCP server](https://www.npmjs.com/package/@draftlet/mcp): wraps the flow into single tool calls (publish_html, publish_site, republish_html, get_site); run with `npx -y @draftlet/mcp` ## API - API base: `https://api.draftlet.io` - Health: `GET https://api.draftlet.io/health` → `{"ok": true}` - Publish: `POST /api/v1/publish` body `{files: [{path, contentType, size}, ...], slug?, title?}` → `{slug, versionId, editToken, uploads: [{path, uploadUrl}], finalizeUrl, url, expiresAt}` - Upload: `PUT ` with `Content-Type` matching the manifest, body = raw file bytes - Finalize: `POST /api/v1/publish//finalize` body `{versionId, editToken}` → flips to live - Republish: `POST /api/v1/publish/` body `{editToken, files: [...]}` → new versionId + fresh upload URLs for the SAME site/URL; PUT files then finalize - Rollback: finalize with an older `versionId` (list them via `GET /api/v1/sites//versions`) - Read site: `GET /api/v1/sites/` - Custom domain (bring your own): `POST /api/v1/sites//domains` body `{domain, editToken}` → returns two CNAME records to add at your DNS provider (ACM validation + routing). Then poll `POST .../domains//verify` (body `{editToken}`) until `active`. Your domain then serves the site over its own TLS cert. Limits: 10 domain registrations/IP/hour. ## Notes for agents - Slug is auto-generated as `adjective-noun-####` unless you pass `slug` explicitly. - `editToken` is returned once. It's required for finalize, republish, rollback, and claiming — always save it. - Finalize within 60 minutes of publish — pending sites are reaped after that. Presigned URLs last 15 minutes. - Per-site limits: 100 files, 25 MB total, 5 MB per file. - Rate limits per IP per hour: 20 publishes, 40 finalizes. Exceeding returns HTTP 429 `rate_limited` with a `retry-after` header. - Anonymous sites expire 24h after go-live. Claim flow not yet shipped.