{"openapi":"3.0.3","info":{"title":"api-base","description":"","license":{"name":""},"version":"0.1.0"},"paths":{"/api/auth/account":{"delete":{"tags":["authentication"],"summary":"Delete user account","description":"Permanently deletes the authenticated user's account and all associated data.\n\n# Arguments\n* `state` - Application state containing database\n* `claims` - JWT claims extracted from Authorization header\n\n# Returns\n* `MessageResponse` - Confirmation of account deletion\n\n# Example\n```bash\ncurl -X DELETE http://localhost:8080/api/auth/account \\\n-H \"Authorization: Bearer <your_token>\"\n```","operationId":"delete_account","responses":{"200":{"description":"Account deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"401":{"description":"Unauthorized"},"404":{"description":"User not found"}},"security":[{"BearerAuth":[]}]}},"/api/auth/forgot-password":{"post":{"tags":["authentication"],"summary":"Request password reset","description":"Initiates password reset process by sending reset link to user's email.\n\n# Arguments\n* `state` - Application state containing email service\n* `req` - Forgot password request with email\n\n# Returns\n* `MessageResponse` - Confirmation of reset email sent\n\n# Example\n```bash\ncurl -X POST http://localhost:8080/api/auth/forgot-password \\\n-H \"Content-Type: application/json\" \\\n-d '{\"email\":\"user@example.com\"}'\n```","operationId":"forgot_password","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Password reset email sent (if email exists)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"500":{"description":"Internal server error"}}}},"/api/auth/login":{"post":{"tags":["authentication"],"summary":"User login","description":"Authenticates user with email and password, returns JWT tokens.\n\n# Arguments\n* `state` - Application state containing database and services\n* `req` - Login request with email and password\n\n# Returns\n* `AuthResponse` - Contains JWT tokens and user information\n\n# Example\n```bash\ncurl -X POST http://localhost:8080/api/auth/login \\\n-H \"Content-Type: application/json\" \\\n-d '{\"email\":\"user@example.com\",\"password\":\"securepassword123\"}'\n```","operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"User authenticated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"401":{"description":"Invalid credentials"},"403":{"description":"User account is blocked"},"500":{"description":"Internal server error"}}}},"/api/auth/logout":{"post":{"tags":["authentication"],"summary":"User logout","description":"Invalidates the current user session and clears the JWT token.\n\n# Arguments\n* `state` - Application state containing database\n* `claims` - JWT claims extracted from Authorization header\n\n# Returns\n* `MessageResponse` - Confirmation of successful logout\n\n# Example\n```bash\ncurl -X POST http://localhost:8080/api/auth/logout \\\n-H \"Authorization: Bearer <your_token>\"\n```","operationId":"logout","responses":{"200":{"description":"Logged out successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"401":{"description":"Unauthorized"}},"security":[{"BearerAuth":[]}]}},"/api/auth/me":{"get":{"tags":["authentication"],"summary":"Get current user information","description":"Returns the authenticated user's profile information.\n\n# Arguments\n* `claims` - JWT claims extracted from Authorization header\n* `state` - Application state containing database\n\n# Returns\n* `UserInfo` - Current user's profile information\n\n# Example\n```bash\ncurl -X GET http://localhost:8080/api/auth/me \\\n-H \"Authorization: Bearer <your_token>\"\n```","operationId":"get_current_user","responses":{"200":{"description":"User information retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfo"}}}},"401":{"description":"Unauthorized"},"404":{"description":"User not found"}},"security":[{"BearerAuth":[]}]}},"/api/auth/oauth/google":{"get":{"tags":["authentication"],"summary":"User logout","description":"Initiates Google OAuth flow by redirecting user to Google's consent screen.\n\n# Arguments\n* `state` - Application state containing OAuth configuration\n* `params` - Optional query parameters including redirect_url\n\n# Returns\n* `Response` - Redirect to Google OAuth URL\n\n# Example\n```bash\ncurl -X GET \"http://localhost:8080/api/auth/oauth/google?redirect_url=http://localhost:3000/callback\"\n```","operationId":"google_oauth_start","parameters":[{"name":"redirect_url","in":"query","description":"URL to redirect to after OAuth","required":false,"schema":{"type":"string","nullable":true}}],"responses":{"302":{"description":"Redirect to Google OAuth"},"500":{"description":"OAuth not configured"}}}},"/api/auth/oauth/google/callback":{"get":{"tags":["authentication"],"summary":"Handle Google OAuth callback","description":"Processes OAuth callback from Google, creates or updates user account.\n\n# Arguments\n* `state` - Application state containing OAuth configuration\n* `params` - OAuth callback parameters (code, state, state_id)\n\n# Returns\n* `AuthResponse` - Contains JWT tokens and user information\n\n# Example\n```bash\ncurl -X GET \"http://localhost:8080/api/auth/oauth/google/callback?code=xxx&state=xxx&state_id=xxx\"\n```","operationId":"google_oauth_callback","parameters":[{"name":"code","in":"query","description":"OAuth authorization code","required":true,"schema":{"type":"string"}},{"name":"state","in":"query","description":"OAuth state parameter","required":true,"schema":{"type":"string"}},{"name":"state_id","in":"query","description":"OAuth state ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OAuth authentication successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"500":{"description":"OAuth exchange failed"}}}},"/api/auth/refresh":{"post":{"tags":["authentication"],"summary":"Refresh JWT token","description":"Generates a new JWT access token using a valid refresh token.\n\n# Arguments\n* `state` - Application state containing auth service\n* `req` - Refresh token request\n\n# Returns\n* `AuthResponse` - New JWT tokens and user information\n\n# Example\n```bash\ncurl -X POST http://localhost:8080/api/auth/refresh \\\n-H \"Content-Type: application/json\" \\\n-d '{\"refresh_token\":\"6fa459ea-ee8d-33f4-a685-4486d5e98c3a\"}'\n```","operationId":"refresh_token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenRequest"}}},"required":true},"responses":{"200":{"description":"Token refreshed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"401":{"description":"Invalid or expired refresh token"}}}},"/api/auth/register":{"post":{"tags":["authentication"],"summary":"Register new user account","description":"Creates a new user account with email and password.\nA verification email will be sent to the provided email address.\n\n# Arguments\n* `state` - Application state containing database and services\n* `req` - Registration request with email, username, and password\n\n# Returns\n* `AuthResponse` - Contains JWT tokens and user information\n\n# Example\n```bash\ncurl -X POST http://localhost:8080/api/auth/register \\\n-H \"Content-Type: application/json\" \\\n-d '{\"email\":\"user@example.com\",\"username\":\"johndoe\",\"password\":\"securepassword123\"}'\n```","operationId":"register","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"200":{"description":"User registered successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"400":{"description":"Invalid input or email already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"500":{"description":"Internal server error"}}}},"/api/auth/resend-verification":{"post":{"tags":["authentication"],"summary":"Resend verification email","description":"Sends a new verification email to the user's email address.\n\n# Arguments\n* `state` - Application state containing email service\n* `req` - Resend verification request with email\n\n# Returns\n* `MessageResponse` - Confirmation of email sent\n\n# Example\n```bash\ncurl -X POST http://localhost:8080/api/auth/resend-verification \\\n-H \"Content-Type: application/json\" \\\n-d '{\"email\":\"user@example.com\"}'\n```","operationId":"resend_verification","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Verification email sent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"404":{"description":"User not found"}}}},"/api/auth/reset-password":{"post":{"tags":["authentication"],"summary":"Reset password with token","description":"Resets user's password using the token received in email.\n\n# Arguments\n* `state` - Application state containing database\n* `req` - Reset password request with token and new password\n\n# Returns\n* `MessageResponse` - Confirmation of password reset\n\n# Example\n```bash\ncurl -X POST http://localhost:8080/api/auth/reset-password \\\n-H \"Content-Type: application/json\" \\\n-d '{\"token\":\"550e8400-e29b-41d4-a716-446655440000\",\"new_password\":\"newsecurepassword123\"}'\n```","operationId":"reset_password","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Password reset successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"400":{"description":"Invalid or expired reset token"}}}},"/api/auth/verify-email":{"post":{"tags":["authentication"],"summary":"Verify email address","description":"Verifies user's email address using the token sent during registration.\n\n# Arguments\n* `state` - Application state containing database\n* `req` - Email verification request with token\n\n# Returns\n* `MessageResponse` - Confirmation of email verification\n\n# Example\n```bash\ncurl -X POST http://localhost:8080/api/auth/verify-email \\\n-H \"Content-Type: application/json\" \\\n-d '{\"token\":\"550e8400-e29b-41d4-a716-446655440000\"}'\n```","operationId":"verify_email","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEmailRequest"}}},"required":true},"responses":{"200":{"description":"Email verified successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"400":{"description":"Invalid or expired verification token"}}}},"/api/posts":{"get":{"tags":["content"],"summary":"Get blog posts list","description":"Returns paginated list of blog posts with filtering and search capabilities.\n\n# Arguments\n* `state` - Application state containing database\n* `params` - Query parameters for filtering and pagination\n\n# Returns\n* `PostListResponse` - Paginated posts with SEO metadata\n\n# Example\n```bash\ncurl -X GET \"http://localhost:8080/api/posts?page=1&limit=20&language=en\"\n```\n获取文章列表（公开端点 - 只返回已发布文章）","operationId":"get_posts","parameters":[{"name":"page","in":"query","description":"Page number","required":false,"schema":{"type":"integer","format":"int64","nullable":true,"minimum":0}},{"name":"limit","in":"query","description":"Items per page","required":false,"schema":{"type":"integer","format":"int64","nullable":true,"minimum":0}},{"name":"language","in":"query","description":"Language code","required":false,"schema":{"type":"string","nullable":true}},{"name":"status","in":"query","description":"Post status filter","required":false,"schema":{"type":"string","nullable":true}},{"name":"tag","in":"query","description":"Tag filter","required":false,"schema":{"type":"string","nullable":true}},{"name":"search","in":"query","description":"Search query","required":false,"schema":{"type":"string","nullable":true}},{"name":"sort_by","in":"query","description":"Sort field","required":false,"schema":{"type":"string","nullable":true}},{"name":"sort_order","in":"query","description":"Sort order (asc/desc)","required":false,"schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":"Posts retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostListResponse"}}}},"400":{"description":"Invalid query parameters"}}},"post":{"tags":["content"],"summary":"Create new blog post","description":"Creates a new blog post with the provided content and metadata.\n\n# Arguments\n* `state` - Application state containing database\n* `claims` - JWT claims from Authorization header\n* `req` - Post creation request with content and metadata\n\n# Returns\n* `PostData` - Created post data\n\n# Example\n```bash\ncurl -X POST http://localhost:8080/api/posts \\\n-H \"Authorization: Bearer <your_token>\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\"title\":\"My Post\",\"slug\":\"my-post\",\"content\":\"Post content\",\"language\":\"en\"}'\n```\n创建文章（需要认证）","operationId":"create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePostRequestBody"}}},"required":true},"responses":{"200":{"description":"Post created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/super.blog.PostData"}}}},"400":{"description":"Invalid request data"},"401":{"description":"Unauthorized"}},"security":[{"BearerAuth":[]}]}},"/api/posts/{id}":{"put":{"tags":["content"],"summary":"Update blog post","description":"Updates an existing blog post with new content or metadata.\n\n# Arguments\n* `state` - Application state containing database\n* `claims` - JWT claims from Authorization header\n* `params` - URL parameters including post ID\n* `req` - Post update request with fields to update\n\n# Returns\n* `PostData` - Updated post data\n\n# Example\n```bash\ncurl -X PUT http://localhost:8080/api/posts/550e8400-e29b-41d4-a716-446655440000 \\\n-H \"Authorization: Bearer <your_token>\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\"title\":\"Updated Title\"}'\n```\n更新文章（需要认证）","operationId":"update_post","parameters":[{"name":"id","in":"path","description":"Post ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePostRequestBody"}}},"required":true},"responses":{"200":{"description":"Post updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/super.blog.PostData"}}}},"400":{"description":"Invalid request data"},"401":{"description":"Unauthorized"},"404":{"description":"Post not found"}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["content"],"summary":"Delete blog post","description":"Permanently deletes a blog post and all associated data.\n\n# Arguments\n* `state` - Application state containing database\n* `claims` - JWT claims from Authorization header\n* `params` - URL parameters including post ID\n\n# Returns\n* JSON confirmation of deletion\n\n# Example\n```bash\ncurl -X DELETE http://localhost:8080/api/posts/550e8400-e29b-41d4-a716-446655440000 \\\n-H \"Authorization: Bearer <your_token>\"\n```\n删除文章（需要认证）","operationId":"delete_post","parameters":[{"name":"id","in":"path","description":"Post ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Post deleted successfully","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized"},"404":{"description":"Post not found"}},"security":[{"BearerAuth":[]}]}},"/api/posts/{id}/translations":{"post":{"tags":["content"],"summary":"Add post translation","description":"Adds a new language version to an existing post.\n\n# Arguments\n* `state` - Application state containing database\n* `claims` - JWT claims from Authorization header\n* `params` - URL parameters including post ID\n* `req` - Translation request with language and content\n\n# Returns\n* `PostData` - Created translation post data\n\n# Example\n```bash\ncurl -X POST http://localhost:8080/api/posts/550e8400-e29b-41d4-a716-446655440000/translations \\\n-H \"Authorization: Bearer <your_token>\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\"language\":\"zh\",\"title\":\"中文标题\",\"slug\":\"chinese-slug\",\"content\":\"中文内容\"}'\n```\n添加新语言版本（需要认证）","operationId":"add_translation","parameters":[{"name":"id","in":"path","description":"Post ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddTranslationRequestBody"}}},"required":true},"responses":{"200":{"description":"Translation added successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/super.blog.PostData"}}}},"400":{"description":"Invalid request data"},"401":{"description":"Unauthorized"}},"security":[{"BearerAuth":[]}]}},"/api/posts/{slug}":{"get":{"tags":["content"],"summary":"Get blog post by slug","description":"Returns a single blog post with its full content and metadata.\n\n# Arguments\n* `state` - Application state containing database\n* `params` - URL parameters including post slug\n* `query_params` - Query parameters for language selection\n\n# Returns\n* `PostData` - Full post data with content\n\n# Example\n```bash\ncurl -X GET \"http://localhost:8080/api/posts/my-first-post?lang=en\"\n```\n根据 slug 获取文章（公开端点）","operationId":"get_post_by_slug","parameters":[{"name":"slug","in":"path","description":"Post slug","required":true,"schema":{"type":"string"}},{"name":"lang","in":"query","description":"Language code","required":false,"schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":"Post retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/super.blog.PostData"}}}},"404":{"description":"Post not found"}}}},"/api/posts/{slug}/translations":{"get":{"tags":["content"],"summary":"Get post translations","description":"Returns all language versions available for a given post.\n\n# Arguments\n* `state` - Application state containing database\n* `params` - URL parameters including post slug\n* `query_params` - Query parameters for language selection\n\n# Returns\n* `Vec<PostTranslationInfo>` - List of available translations\n\n# Example\n```bash\ncurl -X GET \"http://localhost:8080/api/posts/my-post/translations?lang=en\"\n```\n获取文章的所有语言版本（公开端点）","operationId":"get_post_translations","parameters":[{"name":"slug","in":"path","description":"Post slug","required":true,"schema":{"type":"string"}},{"name":"lang","in":"query","description":"Language code","required":false,"schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":"Translations retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/super.blog.PostTranslationInfo"}}}}},"404":{"description":"Post not found"}}}},"/api/public/content/languages":{"get":{"tags":["content"],"summary":"获取启用的语言列表（公开端点）","description":"返回系统中所有启用的语言，无需认证\n\n# Returns\n* `Vec<Language>` - 启用的语言列表","operationId":"get_enabled_languages","responses":{"200":{"description":"Languages retrieved successfully"},"500":{"description":"Internal server error"}}}},"/api/system/init-status":{"get":{"tags":["system"],"summary":"检查系统初始化状态","operationId":"check_init_status","responses":{"200":{"description":"System initialization status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitStatusResponse"}}}},"500":{"description":"Internal server error"}}}},"/api/system/initialize":{"post":{"tags":["system"],"summary":"初始化系统，创建第一个管理员用户","operationId":"initialize_system","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitializeRequest"}}},"required":true},"responses":{"200":{"description":"System initialized successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitializeResponse"}}}},"400":{"description":"Invalid request data"},"409":{"description":"System already initialized"}}}},"/api/tags":{"get":{"tags":["content"],"summary":"Get tags list","description":"Returns list of available tags for filtering posts.\n\n# Arguments\n* `state` - Application state containing database\n* `params` - Query parameters for language filtering\n\n# Returns\n* `Vec<TagData>` - List of available tags\n\n# Example\n```bash\ncurl -X GET \"http://localhost:8080/api/tags?language=en\"\n```\n获取标签列表（公开端点）","operationId":"get_tags","parameters":[{"name":"language","in":"query","description":"Language code filter","required":false,"schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":"Tags retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/super.blog.TagData"}}}}},"500":{"description":"Internal server error"}}},"post":{"tags":["content"],"summary":"Create new tag","description":"Creates a new tag for categorizing posts.\n\n# Arguments\n* `state` - Application state containing database\n* `claims` - JWT claims from Authorization header\n* `req` - Tag creation request\n\n# Returns\n* `TagData` - Created tag data\n\n# Example\n```bash\ncurl -X POST http://localhost:8080/api/tags \\\n-H \"Authorization: Bearer <your_token>\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\"name\":\"Technology\",\"slug\":\"technology\",\"language\":\"en\"}'\n```\n创建标签（需要认证）","operationId":"create_tag","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTagRequestBody"}}},"required":true},"responses":{"200":{"description":"Tag created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/super.blog.TagData"}}}},"400":{"description":"Invalid request data"},"401":{"description":"Unauthorized"}},"security":[{"BearerAuth":[]}]}},"/api/tags/{id}":{"put":{"tags":["content"],"summary":"更新标签（需要认证）","description":"# Arguments\n* `state` - Application state containing database\n* `claims` - JWT claims for authentication\n* `params` - Tag ID from URL path\n* `req` - Update tag request with new data\n\n# Returns\n* `TagData` - Updated tag data\n\n# Example\n```bash\ncurl -X PUT http://localhost:8080/api/tags/123 \\\n-H \"Authorization: Bearer <your_token>\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\"name\":\"Tech Update\",\"slug\":\"tech-update\"}'\n```","operationId":"update_tag","parameters":[{"name":"id","in":"path","description":"Tag ID","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTagRequestBody"}}},"required":true},"responses":{"200":{"description":"Tag updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/super.blog.TagData"}}}},"400":{"description":"Invalid request data"},"401":{"description":"Unauthorized"},"404":{"description":"Tag not found"}},"security":[{"BearerAuth":[]}]},"delete":{"tags":["content"],"summary":"删除标签（需要认证）","description":"# Arguments\n* `state` - Application state containing database\n* `claims` - JWT claims for authentication\n* `params` - Tag ID from URL path\n\n# Returns\n* `serde_json::Value` - Success confirmation\n\n# Example\n```bash\ncurl -X DELETE http://localhost:8080/api/tags/123 \\\n-H \"Authorization: Bearer <your_token>\"\n```","operationId":"delete_tag","parameters":[{"name":"id","in":"path","description":"Tag ID","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"200":{"description":"Tag deleted successfully"},"401":{"description":"Unauthorized"},"404":{"description":"Tag not found"}},"security":[{"BearerAuth":[]}]}},"/ping":{"get":{"tags":["health"],"summary":"简单的 ping 端点","operationId":"ping","responses":{"200":{"description":"Ping response"}}}}},"tags":[{"name":"health","description":"Health check endpoints"},{"name":"authentication","description":"User authentication and authorization"},{"name":"billing","description":"Payment and credit management"},{"name":"billing_public","description":"Public billing endpoints"},{"name":"billing_packages","description":"Credit package management"},{"name":"billing_user","description":"User billing and credits"},{"name":"billing_checkout","description":"Payment checkout processing"},{"name":"billing_admin","description":"Administrator billing management"},{"name":"billing_webhooks","description":"Payment webhook handlers"},{"name":"billing_health","description":"Billing module health checks"},{"name":"ai","description":"AI services integration"},{"name":"content","description":"Blog and content management"},{"name":"system","description":"System initialization and management"},{"name":"media_health","description":"Media module health checks"},{"name":"media_upload","description":"File upload and management"},{"name":"iam_health","description":"IAM module health checks"},{"name":"affproject_health","description":"Affproject module health checks"},{"name":"ecommerce_health","description":"Ecommerce module health checks"},{"name":"Admin - Feature Costs","description":"Feature cost configuration (admin)"},{"name":"media_download","description":"File download and serving"},{"name":"media_processing","description":"Media processing and transcoding"}]}