{
  "service": "aft.page",
  "openapi": "https://api.aft.page/openapi.json",
  "llms": "https://api.aft.page/llms.txt",
  "mcp": "https://mcp.aft.page/mcp",
  "changelog": "GET /v1/changelog · GET /v1/changelog.md · GET /v1/changelog.rss",
  "status": "https://status.aft.page/",
  "deploy": "POST /v1/deploy (multipart files, or text/html body)",
  "redeploy": "PATCH /v1/deploy?slug= (editToken or session owner/editor)",
  "claim": "POST /v1/claim/start, POST /v1/claim/session, GET /v1/claim/verify",
  "auth": "POST /v1/auth/start, GET /v1/auth/verify, GET /v1/auth/google, GET /v1/auth/google/callback, GET /v1/auth/cli, GET /v1/auth/cli/complete, POST /v1/auth/cli/exchange, POST /v1/auth/logout, GET /v1/me",
  "waitlist": "POST /v1/waitlist",
  "cli": "POST /v1/cli/event, POST /v1/cli/preflight",
  "code": "POST /v1/code/generate (session; prompt or template → HTML)",
  "run": "POST /v1/repo/check, POST /v1/repo/deploy (detect → plan → static | static_build | next | container). GET /v1/jobs/{id}, GET /v1/jobs/{id}/events, POST /v1/jobs/{id}/stop",
  "sharing": "PATCH /v1/sites/{slug}, POST /v1/sites/{slug}/rename, POST /v1/sites/{slug}/access, POST/GET/DELETE /v1/sites/{slug}/invites, PATCH|DELETE /v1/sites/{slug}/members/{id}, GET /v1/invites/accept",
  "inventory": "GET /v1/me, GET /v1/me/sites?page=&limit=, GET /v1/me/domains?status=&slug=, GET /v1/sites/{slug}/deploys, GET /v1/sites/{slug}/files, GET /v1/sites/{slug}/logs, POST /v1/sites/{slug}/rollback",
  "capabilities": "GET|POST /v1/sites/{slug}/capabilities",
  "secrets": "GET /v1/sites/{slug}/secrets, PUT|DELETE /v1/sites/{slug}/secrets/{name}, POST /v1/sites/{slug}/rerun",
  "domains": "GET|POST /v1/sites/{slug}/domains, POST /v1/sites/{slug}/domains/access, POST|DELETE /v1/sites/{slug}/domains/{hostname}",
  "connector": "POST /v1/sites/{slug}/connector/tokens, GET /v1/connector/poll, POST /v1/connector/result/{id}, POST /v1/sites/{slug}/connector/invoke",
  "serve": "https://{slug}.aft.page or GET /s/{slug}/"
}