{
  "openapi": "3.1.0",
  "info": {"title": "Modoo Village public presence API", "version": "1.0.0", "description": "Read-only live player-session counts and endpoint health. No authentication or game joining required. Fetch server-to-server at most about once per minute. Arbitrary browser-origin CORS is not promised. Cache-Control: no-store. On request/schema failure report unknown, not zero. Record your own successful fetch timestamp."},
  "servers": [{"url": "https://modoovillage.com"}],
  "security": [],
  "paths": {
    "/api/rooms": {"get": {"operationId": "getConnectedPlayers", "summary": "Current player connections across all channels", "description": "Use the top-level total integer. Includes the owner's IP and connected test clients; private analytics exclusions do not affect this count. Multiple tabs/connections may count separately. NPCs are excluded. rooms[].count is per-channel: do not add it to total. This is not a unique-person count.", "responses": {"200": {"description": "Live snapshot; zero is a valid count. online and online_at are not fields of this response.", "headers": {"Cache-Control": {"schema": {"type": "string", "const": "no-store"}}}, "content": {"application/json": {"schema": {"type": "object", "required": ["total", "rooms", "capacity", "maxRooms"], "properties": {"total": {"type": "integer", "minimum": 0}, "rooms": {"type": "array", "items": {"type": "object", "required": ["id", "count", "capacity"], "properties": {"id": {"type": "integer", "minimum": 1}, "count": {"type": "integer", "minimum": 0}, "capacity": {"type": "integer", "minimum": 1}}}}, "capacity": {"type": "integer", "minimum": 1}, "maxRooms": {"type": "integer", "minimum": 1}}}, "example": {"rooms": [{"id": 1, "count": 7, "capacity": 100}], "total": 7, "capacity": 100, "maxRooms": 50}}}}, "default": {"description": "Unavailable or error: treat as unknown, not zero."}}}},
    "/api/health": {"get": {"operationId": "getEndpointHealth", "summary": "Endpoint health", "responses": {"200": {"description": "Health endpoint is responding; this is not an end-to-end gameplay guarantee.", "content": {"application/json": {"schema": {"type": "object", "required": ["ok"], "properties": {"ok": {"type": "boolean", "const": true}}}, "example": {"ok": true}}}}, "default": {"description": "Unavailable or error."}}}}
  }
}
