{
  "name": "TTMM API",
  "version": "3.0.0",
  "endpoints": {
    "POST   /auth/challenge": "Request a WebAuthn challenge",
    "POST   /auth/register": "Register passkey (new user)",
    "POST   /auth/login": "Authenticate with passkey, receive JWT cookie",
    "GET    /auth/session": "Validate current JWT session",
    "POST   /auth/logout": "Clear session cookie",
    "GET    /room/:code/blockchain": "Full chain (?from=N)",
    "GET    /room/:code/block/:ref": "Single block (index or hash)",
    "GET    /room/:code/members": "Member list from PERSON_ADDED blocks",
    "GET    /room/:code/stats": "Room statistics",
    "POST   /room/:code/block": "Submit one block",
    "POST   /room/:code/blocks": "Bulk submit (initial chain upload)",
    "WS     /room/:code": "Real-time sync (?lastIndex=N)",
    "DELETE /room/:code": "Delete room",
    "GET    /user/:id": "User plan + counters (KV)",
    "PATCH  /user/:id/plan": "Upgrade / downgrade plan  { plan: \"pro\" }",
    "PATCH  /user/:id/status": "Account status  { status: \"suspended\" }",
    "GET    /packs": "Block pack catalog (from settings:packs KV)",
    "POST   /packs/coupon/validate": "Validate coupon  { userId, code, packId? }",
    "POST   /packs/:id/purchase": "Purchase a pack (stub)  { userId, couponCode? }",
    "POST   /admin/init": "Seed all KV settings (X-Admin-Key required)",
    "GET    /admin/config/plans": "Read live plans config from KV (X-Admin-Key required)",
    "PUT    /admin/config/plans": "Write plans config — body: { plans: { free?, pro?, team? } } (X-Admin-Key required)",
    "GET    /admin/config/packs": "Read live packs catalog from KV (X-Admin-Key required)",
    "PUT    /admin/config/packs": "Write packs catalog — body: { packs: [...] } (X-Admin-Key required)",
    "GET    /admin/config/block-policy": "Read live block policy from KV (X-Admin-Key required)",
    "PUT    /admin/config/block-policy": "Write block policy — body: partial policy fields (X-Admin-Key required)",
    "GET    /admin/config/fx-rates": "Read cached FX rates from KV — { base, fetchedAt, source, rates } (X-Admin-Key required)",
    "PUT    /admin/config/fx-rates": "Manually overwrite FX rates — body: { rates: { INR: 83.4, ... } } (X-Admin-Key required)",
    "POST   /admin/fx-rates/refresh": "Trigger on-demand FX rate fetch from live APIs (X-Admin-Key required)",
    "GET    /health": "Worker health check"
  }
}